summaryrefslogtreecommitdiff
path: root/internal/store
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-23 06:50:43 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-23 06:50:43 +0000
commitb0688c8819da1b7fcb4a97b6ec1fa58050e4841e (patch)
treec62b4ea3e5cdb56225c39ad930dd3e5584053827 /internal/store
parentef7a45361996b7a49226a0b088e2599f2801d017 (diff)
feat: complete Agent Context API Phase 2 & 3 (Write/Create/Management)
- Implement write operations (complete, uncomplete, update due date, update task) - Implement create operations (create task, add shopping item) - Add Trusted Agents management UI in Settings with revocation support - Fix SQLite timestamp scanning bug for completed tasks - Add comprehensive unit tests for all new agent endpoints - Update worklog and feature documentation
Diffstat (limited to 'internal/store')
-rw-r--r--internal/store/sqlite.go29
1 files changed, 25 insertions, 4 deletions
diff --git a/internal/store/sqlite.go b/internal/store/sqlite.go
index f4651bb..3879395 100644
--- a/internal/store/sqlite.go
+++ b/internal/store/sqlite.go
@@ -1222,8 +1222,8 @@ func (s *Store) SaveCompletedTask(source, sourceID, title string, dueDate *time.
}
_, err := s.db.Exec(`
INSERT OR REPLACE INTO completed_tasks (source, source_id, title, due_date, completed_at)
- VALUES (?, ?, ?, ?, datetime('now', 'localtime'))
- `, source, sourceID, title, dueDateStr)
+ VALUES (?, ?, ?, ?, ?)
+ `, source, sourceID, title, dueDateStr, time.Now())
return err
}
@@ -1244,9 +1244,9 @@ func (s *Store) GetCompletedTasks(limit int) ([]models.CompletedTask, error) {
for rows.Next() {
var task models.CompletedTask
var dueDate sql.NullString
- var completedAt time.Time
+ var completedAtStr string
- if err := rows.Scan(&task.ID, &task.Source, &task.SourceID, &task.Title, &dueDate, &completedAt); err != nil {
+ if err := rows.Scan(&task.ID, &task.Source, &task.SourceID, &task.Title, &dueDate, &completedAtStr); err != nil {
return nil, err
}
@@ -1255,6 +1255,27 @@ func (s *Store) GetCompletedTasks(limit int) ([]models.CompletedTask, error) {
task.DueDate = &t
}
}
+
+ // Try different formats for completedAt
+ formats := []string{
+ "2006-01-02 15:04:05.999999999-07:00",
+ "2006-01-02 15:04:05",
+ time.RFC3339,
+ }
+ var completedAt time.Time
+ var parseErr error
+ for _, f := range formats {
+ if t, err := time.Parse(f, completedAtStr); err == nil {
+ completedAt = t
+ parseErr = nil
+ break
+ } else {
+ parseErr = err
+ }
+ }
+ if parseErr != nil {
+ log.Printf("Warning: failed to parse completed_at %q: %v", completedAtStr, parseErr)
+ }
task.CompletedAt = completedAt
tasks = append(tasks, task)