Commit Graph

13 Commits

Author SHA1 Message Date
yinwm
88014ecaff feat: US-013 - Add FilesystemTool tests
Added comprehensive test coverage for FilesystemTool (ReadFileTool, WriteFileTool, ListDirTool) with 10 test cases:
- TestFilesystemTool_ReadFile_Success: Verifies file content goes to ForLLM
- TestFilesystemTool_ReadFile_NotFound: Verifies error handling for missing files
- TestFilesystemTool_ReadFile_MissingPath: Verifies missing parameter handling
- TestFilesystemTool_WriteFile_Success: Verifies SilentResult behavior
- TestFilesystemTool_WriteFile_CreateDir: Verifies automatic directory creation
- TestFilesystemTool_WriteFile_MissingPath: Verifies missing path parameter handling
- TestFilesystemTool_WriteFile_MissingContent: Verifies missing content parameter handling
- TestFilesystemTool_ListDir_Success: Verifies directory listing functionality
- TestFilesystemTool_ListDir_NotFound: Verifies error handling for invalid paths
- TestFilesystemTool_ListDir_DefaultPath: Verifies default to current directory

FilesystemTool implementation already conforms to ToolResult specification:
- ReadFile/ListDir return NewToolResult (ForLLM only, ForUser empty)
- WriteFile returns SilentResult (Silent=true, ForUser empty)
- Errors return ErrorResult with IsError=true

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:53:00 +08:00
yinwm
e7e3f95ebe feat: US-012 - Add ShellTool tests
Added comprehensive test coverage for ShellTool (ExecTool) with 9 test cases:
- TestShellTool_Success: Verifies successful command execution
- TestShellTool_Failure: Verifies failed command execution with IsError flag
- TestShellTool_Timeout: Verifies command timeout handling
- TestShellTool_WorkingDir: Verifies custom working directory support
- TestShellTool_DangerousCommand: Verifies safety guard blocks dangerous commands
- TestShellTool_MissingCommand: Verifies error handling for missing command
- TestShellTool_StderrCapture: Verifies stderr is captured and included
- TestShellTool_OutputTruncation: Verifies long output is truncated
- TestShellTool_RestrictToWorkspace: Verifies workspace restriction

ShellTool implementation already conforms to ToolResult specification:
- Success returns ForUser = command output
- Failure returns IsError = true
- ForLLM contains full output and exit code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:52:16 +08:00
yinwm
2989c391e3 feat: US-011 - Add MessageTool tests
- Added comprehensive test suite for MessageTool (message_test.go)
- 10 test cases covering all acceptance criteria:
  - Success returns SilentResult with proper ForLLM status
  - ForUser is empty (user receives message directly)
  - Failure returns ErrorResult with IsError=true
  - Custom channel/chat_id parameter handling
  - Error scenarios (missing content, no target, not configured)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:50:53 +08:00
yinwm
4c4c10c915 feat: US-008 - Inject callback into async tools in AgentLoop
- Update ToolRegistry.ExecuteWithContext to accept asyncCallback parameter
- Check if tool implements AsyncTool and set callback if provided
- Define asyncCallback in AgentLoop.runLLMIteration
- Callback uses bus.PublishOutbound to send async results to user
- Update Execute method to pass nil for backward compatibility
- Add debug logging for async callback injection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:42:24 +08:00
yinwm
56ac18ab70 feat: US-006 - Add AsyncCallback type and AsyncTool interface
- Define AsyncCallback function type for async tool completion notification
- Define AsyncTool interface with SetCallback method
- Add comprehensive godoc comments with usage examples
- This enables tools like SpawnTool to notify completion asynchronously

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:35:41 +08:00
yinwm
ca781d4b37 feat: US-002 - Modify Tool interface to return *ToolResult
- Update all Tool implementations to return *ToolResult instead of (string, error)
- ShellTool: returns UserResult for command output, ErrorResult for failures
- SpawnTool: returns NewToolResult on success, ErrorResult on failure
- WebTool: returns ToolResult with ForUser=content, ForLLM=summary
- EditTool: returns SilentResult for silent edits, ErrorResult on failure
- FilesystemTool: returns SilentResult/NewToolResult for operations, ErrorResult on failure
- Temporarily disable cronTool in main.go (will be re-enabled in US-016)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:28:56 +08:00
yinwm
c704990cec refactor(tools): remove duplicate truncate functions and add docs
- Remove duplicate truncate/truncateString functions from loop.go and cron.go
- Use utils.Truncate consistently across codebase
- Add Workspace Layout section to README
- Document cron/scheduled tasks functionality

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:31:41 +08:00
yinwm
4bc9e2d768 fix(cron): add one-time reminders and fix data paths to workspace
- Add at_seconds parameter for one-time reminders (e.g., "remind me in 10 minutes")
- Update every_seconds description to emphasize recurring-only usage
- Route cron delivery: deliver=true sends directly, deliver=false uses agent
- Fix cron data path from ~/.picoclaw/cron to workspace/cron
- Fix sessions path from workspace/../sessions to workspace/sessions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:31:41 +08:00
yinwm
6d4d2bc61e feat: add cron tool integration with agent
- Add adhocore/gronx dependency for cron expression parsing
- Fix CronService race conditions and add cron expression support
- Add CronTool with add/list/remove/enable/disable actions
- Add ContextualTool interface for tools needing channel/chatID context
- Add ProcessDirectWithChannel to AgentLoop for cron job execution
- Register CronTool in gateway and wire up onJob handler
- Fix slice bounds panic in addJob for short messages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:28:46 +08:00
yinwm
21d60f63fc Add memory system, dynamic tool loading, and fix logging issues
- Add MemoryStore for persistent long-term and daily notes
- Add dynamic tool summary generation in system prompt
- Fix YAML frontmatter parsing for nanobot skill format
- Add GetSummaries() method to ToolRegistry
- Fix DebugCF logging to use structured metadata
- Improve web_search and shell tool descriptions
2026-02-11 00:14:33 +08:00
yinwm
10442732b4 Add memory system, debug mode, and tools 2026-02-11 00:14:23 +08:00
yinwm
be2ed5d759 Add logging to agent loop and tool execution 2026-02-11 00:11:39 +08:00
lxowalle
e17693b17c * First commit 2026-02-09 19:20:19 +08:00