124 Commits

Author SHA1 Message Date
gilesb
151d33cb72 Add explicit View button to activities list 2026-01-07 21:54:59 +00:00
gilesb
069010660d Show input content as thumbnails in activity/asset detail
- Display actual images/videos for inputs (not just hash links)
- Video auto-plays if detected, falls back to image
- Consistent display on both activity and asset detail pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:52:52 +00:00
gilesb
0602195ed0 Add activity detail page with full content display
- Activities list now links to detail page
- Activity detail shows:
  - Video/image content inline (from L1)
  - Download button
  - Actor, description, origin
  - Full provenance (effect link, inputs, infrastructure)
  - ActivityPub URLs
- Updated activities table to show actor column

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:43:02 +00:00
gilesb
edc216c81f Store and display full provenance including effect_url
- record-run now stores effect_url, effects_commit, infrastructure in provenance
- Asset detail uses stored effect_url (with fallback for older records)
- Shows effects commit hash under effect button
- Shows infrastructure info (software/hardware) if available

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:29:40 +00:00
gilesb
c4b861c553 Enhance L2 asset detail with content display and provenance
- Add L1_PUBLIC_URL and EFFECTS_REPO_URL config
- Display images/videos directly from L1 cache
- Show provenance section for rendered outputs:
  - Effect name with link to source code
  - Input content hashes (linked)
  - L1 run ID (linked)
  - Render timestamp
- Download button for content

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:26:14 +00:00
gilesb
a0cdf31c36 Add asset detail and user detail UI pages
- /ui/asset/{name}: Shows full asset info (owner, hash, origin, tags, description, ActivityPub URL)
- /ui/user/{username}: Shows user profile with their published assets and activity stats
- Updated users list to link to user detail pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:18:52 +00:00
gilesb
231cd1653f Update UI to use Tailwind CSS with dark theme
- Replace custom CSS with Tailwind CSS via CDN
- Dark theme matching L1 server styling
- Responsive layouts for all pages
- Updated: home, login/register, registry, activities, users pages
- Modern form styling and table layouts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 20:44:19 +00:00
gilesb
4155427f03 feat: multi-actor ActivityPub support
Each registered user now has their own ActivityPub actor:
- Generate RSA keys per user on registration
- Webfinger resolves any registered user (@user@domain)
- Actor endpoints work for any registered user
- Each user has their own outbox (filtered activities)
- Activities signed with the publishing user's keys
- Objects attributed to the asset owner

Removed:
- ARTDAG_USER config (no longer single-actor)
- L1_SERVER config (comes with each request)

Added:
- /ui/users page listing all registered users
- user_exists() helper function

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 19:54:11 +00:00
gilesb
58a125de1a feat: L1 server URL sent with publish request (many-to-many support)
- Add l1_server field to RecordRunRequest
- L2 fetches run data from the specified L1 URL instead of hardcoded config
- Store l1_server in provenance and metadata
- Remove ARTDAG_L1 config requirement from L2
- Update docker-stack.yml comments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 19:40:53 +00:00
gilesb
8159627651 fix: use env_file for all server config
- Move ARTDAG_DOMAIN, ARTDAG_USER, ARTDAG_L1, JWT_SECRET to .env
- Update docker-stack.yml L1 config to use env_file
- Add .env.example with all required variables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 19:31:02 +00:00
gilesb
0edea7b91b feat: add publish-cache and update asset endpoints
- Add POST /registry/publish-cache for publishing cache items with metadata
- Requires origin (self or external URL) for publishing
- Add PATCH /registry/{name} for updating existing assets
- Update activities now created when assets are modified
- Ownership check ensures only asset owner can update
- Origin info included in ActivityPub objects (generator/source)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 19:04:52 +00:00
gilesb
9a0e77a852 feat: require auth for registry endpoints and track asset ownership
- Add authentication to /registry endpoint
- Add authentication to /registry/record-run endpoint
- Extract register logic to _register_asset_impl helper
- Store owner username in registered assets
- Use authenticated user for ActivityPub actor ID in activities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 17:25:59 +00:00
giles
d4ae129b3a deploy 2026-01-07 17:16:05 +00:00
gilesb
95e2bb9a39 fix: use bcrypt directly instead of passlib 2026-01-07 16:00:22 +00:00
gilesb
290cb9cadc fix: disable bcrypt truncate error 2026-01-07 15:53:46 +00:00
gilesb
bfb94764e6 fix: truncate password to 72 bytes for bcrypt 2026-01-07 15:45:50 +00:00
giles
bee3f0372b Merge branch 'main' of https://git.rose-ash.com/art-dag/activity-pub 2026-01-07 15:42:17 +00:00
giles
51c86878af feat: add JWT secret via env_file, gitignore .env 2026-01-07 15:41:59 +00:00
gilesb
d83510f24b feat: add HTMX web UI with login/register forms
- Home page showing README and stats
- Login/register forms with HTMX
- Registry and activities pages
- Cookie-based auth for web UI
- JWT secret from Docker secrets (/run/secrets/jwt_secret)
- Updated README with secret generation instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 15:37:35 +00:00
gilesb
a2190801e8 feat: add user registration and JWT authentication
- POST /auth/register - create account
- POST /auth/login - get JWT token
- GET /auth/me - get current user
- POST /auth/verify - verify token (for L1)
- Password hashing with bcrypt
- 30-day JWT tokens

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 14:43:14 +00:00
gilesb
dec5266554 feat: RSA key management for ActivityPub signing
- keys.py: Generate/load RSA-2048 keypairs, sign activities
- setup_keys.py: CLI to generate keys
- Real RsaSignature2017 signing (falls back to placeholder if no keys)
- Public key included in actor profile
- Private keys gitignored

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 13:51:58 +00:00
giles
acaf3a0ffa refactor: standalone docker-compose for L2 activitypub stack 2026-01-07 13:39:19 +00:00
gilesb
be23488204 feat: Docker support for L2 server
- Dockerfile for L2 ActivityPub server
- docker-compose.yml for standalone L2
- docker-stack.yml for full swarm deployment (L1+L2+Redis)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 12:04:58 +00:00
gilesb
da55bda1a5 feat: L2 ActivityPub server
- Registry for owned assets
- ActivityPub endpoints (webfinger, actor, inbox, outbox)
- Create activities with signatures
- Record L1 runs as owned assets with provenance
- Federation support (followers, inbox)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 11:32:43 +00:00