feat: AutoZero 通用 Agent 框架(从 AutoGo 五阶段拆分完成)
llm(三协议 Provider)/ session(JSONL 持久化)/ tools(Registry、围栏、 builtin、computer)/ cdp(browser)/ skills / mcp / agent(循环、两级压缩、 编排、审批门控)+ 底座 jsonl/textx/execx/diag/scratch/spill/imagecache。 产品装配代码(config 桥接、schedule 工具、memory/plan/retro/prompt) 留在 AutoGo,宿主接入方式见 MIGRATION.md。
This commit is contained in:
commit
d5dac5a6fc
140 files changed
+26497
No files matched your search
@@ -0,0 +1,52 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// TestJobMarkerRoundtrip:任务会话标记的写入与读取。
|
||||
func TestJobMarkerRoundtrip(t *testing.T) {
|
||||
t.Setenv("HOME", t.TempDir())
|
||||
at := time.Date(2026, 9, 30, 9, 0, 0, 0, time.Local)
|
||||
if err := SaveJobMarkerAt("sess-1", "cron-喝水提醒", "喝水提醒", at); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
m, ok := LoadJobMarker("sess-1")
|
||||
if !ok {
|
||||
t.Fatal("标记写入后读不到")
|
||||
}
|
||||
if m.JobID != "cron-喝水提醒" || m.JobName != "喝水提醒" || !m.At.Equal(at) {
|
||||
t.Fatalf("标记内容不符: %+v", m)
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(Dir(), "sess-1.job.json")); err != nil {
|
||||
t.Fatalf("sidecar 文件不存在: %v", err)
|
||||
}
|
||||
|
||||
// 未标记的会话读不到;Remove 后同样读不到。
|
||||
if _, ok := LoadJobMarker("sess-other"); ok {
|
||||
t.Fatal("未标记会话不该有标记")
|
||||
}
|
||||
if err := RemoveJobMarker("sess-1"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, ok := LoadJobMarker("sess-1"); ok {
|
||||
t.Fatal("Remove 后仍能读到标记")
|
||||
}
|
||||
// Remove 幂等(不存在不报错)。
|
||||
if err := RemoveJobMarker("sess-1"); err != nil {
|
||||
t.Fatalf("重复 Remove 报错: %v", err)
|
||||
}
|
||||
// 空参数不写文件。
|
||||
if err := SaveJobMarker("", "j", "n"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := SaveJobMarker("sess-2", "", "n"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, ok := LoadJobMarker("sess-2"); ok {
|
||||
t.Fatal("空 jobID 不该写出标记")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user