Files
timmy-tower/artifacts
Alexander Whitestone 65693b1569 feat: publish job completions as Nostr kind:1 events (#13)
On job completion, Timmy generates a privacy-safe 1-3 sentence summary
(via Haiku) and broadcasts it as a signed Nostr kind:1 note.

- New `nostr-publish.ts` utility: signs event with Timmy's nsec,
  publishes to Hermes strfry (HTTP inject) and optionally to an
  external relay (wss://relay.damus.io) via NIP-01 WebSocket.
  Failed publishes are non-blocking (warn + continue).
- `AgentService.generateJobSummary()`: Haiku call producing a public-safe
  summary and category slug; falls back to canned text in stub mode.
- `runWorkInBackground` fires the broadcast fire-and-forget after the
  job DB row is committed; persists the event ID on `jobs.nostr_event_id`.
- Tags: `["t","timmy-tower"]`, job category, link to alexanderwhitestone.com.
- Tower Log includes nostrEventId + njump.me link in the completion log entry.
- DB schema: `nostr_event_id` on `jobs`, `job_id` on `timmy_nostr_events`.
- Migration: `0009_nostr_job_completions.sql`.

Fixes #13

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:26:39 -04:00
..
2026-03-13 23:21:55 +00:00