Skip to content
Open
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
20 changes: 20 additions & 0 deletions adk/middlewares/plantask/backend_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,23 @@ func (b *inMemoryBackend) Delete(ctx context.Context, req *DeleteRequest) error
delete(b.files, req.FilePath)
return nil
}

type baseNameLsBackend struct {
*inMemoryBackend
}

func newBaseNameLsBackend() *baseNameLsBackend {
return &baseNameLsBackend{inMemoryBackend: newInMemoryBackend()}
}

func (b *baseNameLsBackend) LsInfo(ctx context.Context, req *LsInfoRequest) ([]FileInfo, error) {
infos, err := b.inMemoryBackend.LsInfo(ctx, req)
if err != nil {
return nil, err
}

for i := range infos {
infos[i].Path = filepath.Base(infos[i].Path)
}
return infos, nil
}
8 changes: 6 additions & 2 deletions adk/middlewares/plantask/task_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,15 @@ func (t *taskCreateTool) InvokableRun(ctx context.Context, argumentsInJSON strin
for _, file := range files {
fileName := filepath.Base(file.Path)
if fileName == highWatermarkFileName {
filePath := file.Path
if !filepath.IsAbs(filePath) {
filePath = filepath.Join(t.BaseDir, filePath)
}
content, readErr := t.Backend.Read(ctx, &ReadRequest{
FilePath: file.Path,
FilePath: filePath,
})
if readErr != nil {
return "", fmt.Errorf("%s read highwatermark file %s failed, err: %w", TaskCreateToolName, file.Path, readErr)
return "", fmt.Errorf("%s read highwatermark file %s failed, err: %w", TaskCreateToolName, filePath, readErr)
}
if content.Content != "" {
var val int64
Expand Down
25 changes: 25 additions & 0 deletions adk/middlewares/plantask/task_create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,28 @@ func TestTaskCreateToolWithMetadata(t *testing.T) {
assert.Equal(t, "value1", taskData.Metadata["key1"])
assert.Equal(t, "value2", taskData.Metadata["key2"])
}

func TestTaskCreateToolWithBaseNameLsInfo(t *testing.T) {
ctx := context.Background()
backend := newBaseNameLsBackend()
baseDir := "/tmp/tasks"
lock := &sync.Mutex{}

err := backend.Write(ctx, &WriteRequest{FilePath: filepath.Join(baseDir, highWatermarkFileName), Content: "1"})
assert.NoError(t, err)

tool := newTaskCreateTool(backend, baseDir, lock)

result, err := tool.InvokableRun(ctx, `{"subject": "Second Task", "description": "Second description"}`)
assert.NoError(t, err)
assert.Equal(t, `{"result":"Task #2 created successfully: Second Task"}`, result)

content, err := backend.Read(ctx, &ReadRequest{FilePath: filepath.Join(baseDir, "2.json")})
assert.NoError(t, err)

var taskData task
err = sonic.UnmarshalString(content.Content, &taskData)
assert.NoError(t, err)
assert.Equal(t, "2", taskData.ID)
assert.Equal(t, "Second Task", taskData.Subject)
}
10 changes: 7 additions & 3 deletions adk/middlewares/plantask/task_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,21 @@ func listTasks(ctx context.Context, backend Backend, baseDir string) ([]*task, e
continue
}

filePath := file.Path
if !filepath.IsAbs(filePath) {
filePath = filepath.Join(baseDir, filePath)
}
content, err := backend.Read(ctx, &ReadRequest{
FilePath: file.Path,
FilePath: filePath,
})
if err != nil {
return nil, fmt.Errorf("%s read task file %s failed, err: %w", TaskListToolName, file.Path, err)
return nil, fmt.Errorf("%s read task file %s failed, err: %w", TaskListToolName, filePath, err)
}

taskData := &task{}
err = sonic.UnmarshalString(content.Content, taskData)
if err != nil {
return nil, fmt.Errorf("%s parse task file %s failed, err: %w", TaskListToolName, file.Path, err)
return nil, fmt.Errorf("%s parse task file %s failed, err: %w", TaskListToolName, filePath, err)
}

tasks = append(tasks, taskData)
Expand Down
22 changes: 22 additions & 0 deletions adk/middlewares/plantask/task_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,25 @@ func TestTaskListTool(t *testing.T) {
assert.Contains(t, result, "#2 ["+taskStatusInProgress+"] Task 2")
assert.Contains(t, result, "[owner: agent1]")
}

func TestTaskListToolWithBaseNameLsInfo(t *testing.T) {
ctx := context.Background()
backend := newBaseNameLsBackend()
baseDir := "/tmp/tasks"
lock := &sync.Mutex{}

task1 := &task{ID: "1", Subject: "Task 1", Status: taskStatusPending}
task1JSON, _ := sonic.MarshalString(task1)
_ = backend.Write(ctx, &WriteRequest{FilePath: filepath.Join(baseDir, "1.json"), Content: task1JSON})

task2 := &task{ID: "2", Subject: "Task 2", Status: taskStatusCompleted}
task2JSON, _ := sonic.MarshalString(task2)
_ = backend.Write(ctx, &WriteRequest{FilePath: filepath.Join(baseDir, "2.json"), Content: task2JSON})

tool := newTaskListTool(backend, baseDir, lock)

result, err := tool.InvokableRun(ctx, `{}`)
assert.NoError(t, err)
assert.Contains(t, result, "#1 ["+taskStatusPending+"] Task 1")
assert.Contains(t, result, "#2 ["+taskStatusCompleted+"] Task 2")
}