feat(brain): seed MEMORY.md files only

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-02 03:51:47 +00:00
parent f71066197d
commit 547a481d7b
2 changed files with 24 additions and 19 deletions

View file

@ -54,10 +54,14 @@ func (s *PrepSubsystem) cmdBrainSeedMemory(options core.Options) core.Result {
//
// ))
func (s *PrepSubsystem) cmdBrainIngest(options core.Options) core.Result {
return s.cmdBrainSeedMemoryLike(options, "brain ingest", "agentic.cmdBrainIngest")
return s.cmdBrainSeedMemoryLikeMode(options, "brain ingest", "agentic.cmdBrainIngest", false)
}
func (s *PrepSubsystem) cmdBrainSeedMemoryLike(options core.Options, commandName string, errorLabel string) core.Result {
return s.cmdBrainSeedMemoryLikeMode(options, commandName, errorLabel, true)
}
func (s *PrepSubsystem) cmdBrainSeedMemoryLikeMode(options core.Options, commandName string, errorLabel string, memoryFilesOnly bool) core.Result {
input := BrainSeedMemoryInput{
WorkspaceID: parseIntString(optionStringValue(options, "workspace", "workspace_id", "workspace-id", "_arg")),
AgentID: optionStringValue(options, "agent", "agent_id", "agent-id"),
@ -75,7 +79,7 @@ func (s *PrepSubsystem) cmdBrainSeedMemoryLike(options core.Options, commandName
input.Path = brainSeedMemoryDefaultPath
}
result := s.brainSeedMemory(s.commandContext(), input)
result := s.brainSeedMemory(s.commandContext(), input, memoryFilesOnly)
if !result.OK {
err := commandResultError(errorLabel, result)
core.Print(nil, "error: %v", err)
@ -102,13 +106,13 @@ func (s *PrepSubsystem) cmdBrainSeedMemoryLike(options core.Options, commandName
return core.Result{Value: output, OK: true}
}
func (s *PrepSubsystem) brainSeedMemory(ctx context.Context, input BrainSeedMemoryInput) core.Result {
func (s *PrepSubsystem) brainSeedMemory(ctx context.Context, input BrainSeedMemoryInput, memoryFilesOnly bool) core.Result {
if s.brainKey == "" {
return core.Result{Value: core.E("agentic.brainSeedMemory", "no brain API key configured", nil), OK: false}
}
scanPath := brainSeedMemoryScanPath(input.Path)
files := brainSeedMemoryFiles(scanPath)
files := brainSeedMemoryFiles(scanPath, memoryFilesOnly)
output := BrainSeedMemoryOutput{
Success: true,
WorkspaceID: input.WorkspaceID,
@ -188,7 +192,7 @@ func brainSeedMemoryExpandHome(path string) string {
return path
}
func brainSeedMemoryFiles(scanPath string) []string {
func brainSeedMemoryFiles(scanPath string, memoryFilesOnly bool) []string {
if scanPath == "" {
return nil
}
@ -211,7 +215,7 @@ func brainSeedMemoryFiles(scanPath string) []string {
walk = func(dir string) {
if fs.IsFile(dir) {
if core.PathBase(dir) == "MEMORY.md" {
if brainSeedMemoryFile(dir, memoryFilesOnly) {
add(dir)
}
return
@ -237,14 +241,14 @@ func brainSeedMemoryFiles(scanPath string) []string {
walk(next)
continue
}
if brainSeedMemoryFile(next) {
if brainSeedMemoryFile(next, memoryFilesOnly) {
add(next)
}
}
}
if fs.IsFile(scanPath) {
if brainSeedMemoryFile(scanPath) {
if brainSeedMemoryFile(scanPath, memoryFilesOnly) {
add(scanPath)
}
sort.Strings(files)
@ -254,7 +258,7 @@ func brainSeedMemoryFiles(scanPath string) []string {
if brainSeedMemoryHasGlobMeta(scanPath) {
for _, path := range core.PathGlob(scanPath) {
if fs.IsFile(path) {
if brainSeedMemoryFile(path) {
if brainSeedMemoryFile(path, memoryFilesOnly) {
add(path)
}
continue
@ -272,8 +276,11 @@ func brainSeedMemoryHasGlobMeta(path string) bool {
return core.Contains(path, "*") || core.Contains(path, "?") || core.Contains(path, "[")
}
func brainSeedMemoryFile(path string) bool {
return core.PathBase(path) == "MEMORY.md" || core.Lower(core.PathExt(path)) == ".md"
func brainSeedMemoryFile(path string, memoryFilesOnly bool) bool {
if memoryFilesOnly {
return core.PathBase(path) == "MEMORY.md"
}
return core.Lower(core.PathExt(path)) == ".md"
}
func brainSeedMemorySections(content string) []brainSeedMemorySection {

View file

@ -50,12 +50,12 @@ func TestBrainSeedMemory_CmdBrainSeedMemory_Good(t *testing.T) {
require.True(t, result.OK)
output, ok := result.Value.(BrainSeedMemoryOutput)
require.True(t, ok)
assert.Equal(t, 2, output.Files)
assert.Equal(t, 3, output.Imported)
assert.Equal(t, 1, output.Files)
assert.Equal(t, 2, output.Imported)
assert.Equal(t, 0, output.Skipped)
assert.Equal(t, false, output.DryRun)
assert.Equal(t, projectsDir, output.Path)
require.Len(t, bodies, 3)
require.Len(t, bodies, 2)
assert.Equal(t, float64(42), bodies[0]["workspace_id"])
assert.Equal(t, "virgil", bodies[0]["agent_id"])
@ -66,8 +66,6 @@ func TestBrainSeedMemory_CmdBrainSeedMemory_Good(t *testing.T) {
assert.Equal(t, "decision", bodies[1]["type"])
assert.Equal(t, []any{"memory-import"}, bodies[1]["tags"])
assert.Equal(t, "convention", bodies[2]["type"])
assert.Equal(t, []any{"notes", "memory-import"}, bodies[2]["tags"])
}
func TestBrainSeedMemory_CmdBrainSeedMemory_Good_GlobPath(t *testing.T) {
@ -158,7 +156,7 @@ func TestBrainSeedMemory_CmdBrainIngest_Good(t *testing.T) {
assert.Equal(t, "architecture", bodies[0]["type"])
}
func TestBrainSeedMemory_CmdBrainSeedMemory_Good_DirectMarkdownFile(t *testing.T) {
func TestBrainSeedMemory_CmdBrainIngest_Good_DirectMarkdownFile(t *testing.T) {
home := t.TempDir()
t.Setenv("CORE_HOME", home)
@ -183,7 +181,7 @@ func TestBrainSeedMemory_CmdBrainSeedMemory_Good_DirectMarkdownFile(t *testing.T
brainKey: "brain-key",
}
result := subsystem.cmdBrainSeedMemory(core.NewOptions(
result := subsystem.cmdBrainIngest(core.NewOptions(
core.Option{Key: "workspace", Value: "42"},
core.Option{Key: "path", Value: memoryFile},
))
@ -259,7 +257,7 @@ func TestBrainSeedMemory_CmdBrainSeedMemory_Ugly_PartialImportFailure(t *testing
WorkspaceID: 42,
AgentID: "virgil",
Path: memoryDir,
})
}, true)
require.True(t, result.OK)
output, ok := result.Value.(BrainSeedMemoryOutput)