diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-03-16 20:43:28 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-03-16 20:43:28 +0000 |
| commit | 7f920ca63af5329c19a0e5a879c649c594beea35 (patch) | |
| tree | 803150e7c895d3232bad35c729aad647aaa54348 /internal/executor | |
| parent | 072652f617653dce74368cedb42b88189e5014fb (diff) | |
feat: add web push notifications and file drop
Web Push:
- WebPushNotifier with VAPID auth; urgency mapped to event type
(BLOCKED=urgent, FAILED=high, COMPLETED=low)
- Auto-generates VAPID keys on first serve, persists to config file
- push_subscriptions table in SQLite (upsert by endpoint)
- GET /api/push/vapid-key, POST/DELETE /api/push/subscribe endpoints
- Service worker (sw.js) handles push events and notification clicks
- Notification bell button in web UI; subscribes on click
File Drop:
- GET /api/drops, GET /api/drops/{filename}, POST /api/drops
- Persistent ~/.claudomator/drops/ directory
- CLAUDOMATOR_DROP_DIR env var passed to agent subprocesses
- Drops tab (📁) in web UI with file listing and download links
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/executor')
| -rw-r--r-- | internal/executor/claude.go | 2 | ||||
| -rw-r--r-- | internal/executor/gemini.go | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/internal/executor/claude.go b/internal/executor/claude.go index df81f76..6346aa8 100644 --- a/internal/executor/claude.go +++ b/internal/executor/claude.go @@ -25,6 +25,7 @@ type ClaudeRunner struct { Logger *slog.Logger LogDir string // base directory for execution logs APIURL string // base URL of the Claudomator API, passed to subprocesses + DropsDir string // path to the drops directory, passed to subprocesses } // BlockedError is returned by Run when the agent wrote a question file and exited. @@ -419,6 +420,7 @@ func (r *ClaudeRunner) execOnce(ctx context.Context, args []string, workingDir, "CLAUDOMATOR_PROJECT_DIR="+projectDir, "CLAUDOMATOR_QUESTION_FILE="+filepath.Join(e.ArtifactDir, "question.json"), "CLAUDOMATOR_SUMMARY_FILE="+filepath.Join(e.ArtifactDir, "summary.txt"), + "CLAUDOMATOR_DROP_DIR="+r.DropsDir, ) // Put the subprocess in its own process group so we can SIGKILL the entire // group (MCP servers, bash children, etc.) on cancellation. diff --git a/internal/executor/gemini.go b/internal/executor/gemini.go index a13321b..b1a245c 100644 --- a/internal/executor/gemini.go +++ b/internal/executor/gemini.go @@ -21,6 +21,7 @@ type GeminiRunner struct { Logger *slog.Logger LogDir string // base directory for execution logs APIURL string // base URL of the Claudomator API, passed to subprocesses + DropsDir string // path to the drops directory, passed to subprocesses } // ExecLogDir returns the log directory for the given execution ID. |
