Commit Graph
159 Commits
Author SHA1 Message Date
retoor c38e9c8bfa feat: add autonomous maintenance agent fleet with shared engine and validator
Add the `agents/` directory containing a fleet of autonomous AI maintenance agents for codebase consistency, including a shared async engine (`agent.py`), a dependency-free validator (`validator.py`), and specialized agents for security, audit, docs, style, frontend, SEO, test coverage, and more. Wire the fleet into the Makefile with `--fix`/`--check` modes, document the architecture in `AGENTS.md`, `CLAUDE.md`, and `README.md`, and enforce a hard rule that the `agents/` directory itself is off-limits to any code modification to preserve detection data.
2026-06-11 23:35:31 +00:00
retoor 78d70d9b08 feat: add audit log tables, indexes, and CLI/content recording hooks 2026-06-11 20:28:17 +00:00
retoor 3862958fae feat: add soft delete and media tab for user attachments with admin restore 2026-06-11 18:52:56 +00:00
retoor c74228bc6c feat: make dp-upload label optional and hide label element when empty
The label attribute on the dp-upload component previously defaulted to "Attach files" and always displayed. This change makes the label optional by defaulting to an empty string, hiding the label element when no label is provided, and updating the documentation to reflect the new behavior. The feed template also removes the now-redundant explicit label attribute.
2026-06-11 13:04:01 +00:00
retoor 306fae4937 feat: add MessagesLayout class and replace inline scroll/focus script in messages template 2026-06-11 13:14:13 +00:00
retoor cad78d9313 fix: correct messages layout height units and remove autofocus scroll
- Replace `100vh` with `100dvh` in messages-layout height and min-height to properly account for mobile browser dynamic toolbar heights, adjusting offset from 2rem to 3.5rem for consistent spacing
- Remove `autofocus` attribute from message input field to prevent automatic keyboard popup on page load
- Remove `footer` block override that was incorrectly suppressing the site footer on messages page
- Change `input.focus()` to `input.focus({ preventScroll: true })` in the scroll-to-bottom script to avoid unwanted page jumps when focusing the input after sending a message
2026-06-11 13:03:16 +00:00
retoor f611185ac9 fix: reduce comment indentation multipliers for tighter nested display
The comment depth multiplier was reduced from 0.25rem to 0.0625rem for main layout, and from 0.1rem to 0.025rem for mobile breakpoints, with corresponding padding-left reductions in .comment-replies from 0.25rem to 0.0625rem and 0.1rem to 0.025rem respectively. This tightens the visual nesting of threaded comments to prevent excessive horizontal drift in deeply nested reply chains.
2026-06-11 12:25:24 +00:00
retoor 85cc812893 fix: reduce comment indentation multipliers for mobile and desktop layouts
Adjust margin-left and padding-left values in .comment and .comment-replies
selectors to use smaller multipliers (0.25rem, 0.1rem) instead of previous
larger values (1.5rem, 0.5rem, 0.25rem) for tighter nested comment display.
2026-06-11 12:14:23 +00:00
retoor 5488008216 feat: add /stop and /reset chat commands and bots internals docs section
Add two new chat commands (`/stop` and `/reset`) to the Devii WebSocket handler, enabling users to stop or reset a session via text input. Introduce a new "Bots internals" documentation section with six prose pages covering architecture, personas, content generation, engagement, realism, and configuration for the autonomous bot fleet. Extend the bot service with article scoring, category picking, configurable pause/break timing, and a `gist_min_lines` parameter for LLM client initialization.
2026-06-11 12:06:17 +00:00
retoor 3540bc8fa6 feat: add remote URL attachment support and project editing endpoint 2026-06-10 22:17:25 +00:00
retoor a0cb4ce7f2 feat: add CustomizationToggle class to handle enable/disable toggling via AJAX forms 2026-06-09 21:12:22 +00:00
retoor a3f9b949ca feat: add per-user customization suppression toggles and API endpoints for profile 2026-06-09 20:52:51 +00:00
retoor 19795c6a0a refactor: remove unused imports and reorganize module-level constants across multiple routers 2026-06-09 18:02:50 +00:00
retoor d95541f3c1 feat: add click-to-open profile dropdown with z-index fix and mobile JS handler
Add JavaScript click handler for profile dropdown toggle in MobileNav, replace anchor with button in base template, add explicit profile link to dropdown menu, and apply z-index to nav-badge for proper stacking.
2026-06-09 17:38:44 +00:00
retoor c89dbaf41e style: add responsive CSS tweaks for very narrow screens, mobile fullscreen windows, and safe-area toast positioning 2026-06-09 17:26:34 +00:00
retoor 671c42316b fix: replace hardcoded pixel values with CSS custom properties and rem units across multiple stylesheets 2026-06-09 17:03:16 +00:00
retoor 66dfda88bc feat: replace raw setInterval polling with shared Poller utility across six frontend modules 2026-06-09 16:37:49 +00:00
retoor 05c6fa7f3b feat: add project fork async job service with cli prune/clear commands and shared container image build target 2026-06-09 14:06:02 +00:00
retoor c565e3b55c feat: add container manager CLI commands and docker-compose overlay for admin container lifecycle 2026-06-09 04:41:27 +00:00
retoor 317126efc2 feat: add zip file extraction support with error handling for invalid archives 2026-06-08 23:32:57 +00:00
retoor 547e4eda8c docs: add CLAUDE.md with project guidelines and conventions, document new devii admin quota reset endpoints and CLI commands, update README with coverage CI and devii_admin_daily_usd config, add European date normalization to ProjectForm model 2026-06-08 22:30:25 +00:00
retoor 97eb58fc19 feat: add project file system with CRUD, upload, inline editing, and video attachment support
- Add new `/projects/{slug}/files` endpoint group for per-project filesystem operations including directory and file CRUD, upload, and inline editing with public read and owner write access
- Extend attachment system to support video formats (webm, ogv, mov, m4v) with proper file icons and MIME types
- Implement configurable allowed file types via `allowed_file_types` site setting, replacing hardcoded `ALLOWED_UPLOAD_TYPES` with dynamic `allowed_extensions()` and `is_extension_allowed()` functions
- Add `delete_all_project_files()` call in `delete_content_item()` to clean up project files when a project is deleted
- Create database indexes on `project_files` table for `(project_uid, path)` and `(project_uid, parent_path)` to optimize file lookups
- Introduce `docs_prose.py` module with `render_prose()` function that renders Markdown content inside `data-render` divs using mistune, enabling dynamic prose rendering in documentation pages
- Enhance docs search with Markdown-aware text stripping (`_demarkdown()`) and improved HTML/script/style sanitization for better search indexing
- Update documentation API samples to reflect new attachment response fields (`is_image`, `is_video`, `mime_type`) and note video format support
- Update README to document the new project files endpoint and clarify AI gateway attribution for guest Devii sessions
2026-06-08 20:51:09 +00:00
retoor e0535bb7c5 feat: add api key auth, devii agent, openai gateway, and admin service management
This commit introduces a comprehensive set of new features including API key authentication with CLI management commands (get, reset, backfill), a Devii agentic assistant with WebSocket terminal and session bootstrap, an OpenAI-compatible LLM gateway service, and an admin service management panel. It also adds Playwright browser automation for bot support, configures internal gateway URLs, refactors content editing/deletion to support JSON API responses, and updates documentation across AGENTS.md, README.md, and the developer docs site.
2026-06-08 15:38:33 +00:00
retoor 921e382cbc feat: add reactions, bookmarks, polls modules with session remember config
Add three new feature modules (reactions, bookmarks, polls) with corresponding database tables, indexes, and router registrations. Introduce `SESSION_MAX_AGE_REMEMBER` config for extended session duration, add `get_unread_messages` template global, and include operational defaults for rate limiting and session settings in `site_settings`.
2026-06-06 14:31:42 +00:00
retoor 66d91407f5 feat: add next parameter to login flow and redirect unauthenticated users to login page
- Add `next` field to LoginForm model for preserving post-login redirect target
- Implement `safe_next` utility to validate redirect URLs and prevent open redirect vulnerabilities
- Update login page handler to accept and pass `next` query parameter
- Add hidden `next` input to login form template for POST submission
- Modify `require_user` to redirect to `/auth/login` instead of root
- Add `Http.toLogin()` static method in JS for client-side redirect with current URL encoded
- Update CommentManager to redirect unauthenticated reply attempts to login
- Fix comment creation redirect to use `comment_url` instead of generic `redirect_url`
2026-06-05 17:02:30 +00:00
retoor 5a263cfebe feat: add inline recent comments and reply forms to post cards on feed page
Extract comment item building into `_build_comment_items` helper in database.py, import `get_recent_comments_by_post_uids` in feed router to attach up to 3 recent comments per post, add `post-card-comments` CSS class and `.comment-reply-form` margin rule, refactor `CommentManager` to use event delegation and toggle reply forms via a hidden template, move comment rendering into a reusable `_comment.html` macro, and include recent comments in `_post_card.html` with inline reply capability.
2026-06-05 16:42:43 +00:00
retoor 7d4612b2eb style: add touch-friendly min-heights, responsive comment form, and mobile layout refinements across CSS 2026-06-05 16:18:11 +00:00
retoor 13870d3219 feat: add service lock file and multi-worker startup guard with session cache clear 2026-06-02 21:17:51 +00:00
retoor a136287d36 feat: add leaderboard router, gamification backfill, and shared content creation helpers
Introduce a new `/leaderboard` endpoint ranking top 50 members by total stars, wire it into the app router and documentation. Implement `_backfill_gamification()` in `database.py` to compute XP/levels for existing accounts from prior posts, comments, votes, and follows. Extract `is_owner()`, `create_content_item()`, and `detail_context()` into `content.py` to centralize content creation, reward awarding, mention notifications, and attachment linking. Update comment creation/deletion in `comments.py` to use `award_rewards()` with `XP_COMMENT` and the new `is_owner()` helper. Add shared template partials documentation for vote bars, star buttons, post headers, and topic selectors to `AGENTS.md`.
2026-05-30 18:16:39 +00:00
retoor a8466da5b2 feat: replace JS card-link data-href with CSS overlay and add DOMPurify sanitizer 2026-05-27 20:03:12 +00:00
retoor f0c4feb167 feat: add DOMPurify XSS sanitization pipeline to client-side markdown renderer
- Vendored DOMPurify at static/vendor/purify.min.js, loaded with defer in base.html
- ContentRenderer.js now sanitizes marked output via DOMPurify.sanitize before processMedia
- Fail-closed: render() throws if DOMPurify is undefined instead of emitting unsanitized HTML
- Added _json_ld_dumps helper in seo.py to escape <>&\u2028\u2029 in JSON-LD output
- Updated combine() to use the new safe dumper for all schema.org payloads
2026-05-23 07:10:31 +00:00
retoor 74571f7737 feat: replace legacy vote buttons with AJAX submission and dynamic count updates
Replace static form-based vote buttons with a new VoteManager class that submits votes via fetch, returns JSON with net/up/down/current value, and updates vote count spans using data-vote-count attributes across all templates. Add JSONResponse endpoint in votes router for AJAX requests, switch VoteManager import from Http to Toast for error feedback, and refactor link_attachments to handle comma-separated UIDs.
2026-05-27 19:06:18 +00:00
retoor 9c55ef272e feat: add resolve_object_url helper and notification click-through with comment highlighting
Extract duplicate target-redirect logic from comments router into a new `resolve_object_url` database function, add `target_url` field to follow and message notifications, create `/notifications/open/{uid}` endpoint that marks notifications read and redirects to their target, implement client-side NotificationManager for card clicks and comment hash scrolling, and add comment-highlight CSS animation.
2026-05-25 14:16:53 +00:00
retoor 3c55ae1bb1 feat: add PWA support with push notifications, service worker, and offline page
Implement progressive web app capabilities including VAPID-based push notification infrastructure, service worker with offline caching, PWA install prompt handling, and manifest configuration. Add push.py module for VAPID key generation and notification delivery, PushManager and PwaInstaller JavaScript classes, service worker with precache and push event handling, offline fallback page, and app icons at multiple resolutions.
2026-05-23 08:08:26 +00:00
retoor 387b2d8f96 feat: add push notification infrastructure with VAPID key generation and PWA manifest support
- Introduce push notification module with VAPID certificate generation, Web Push encryption, and subscription management
- Add push registration table index and database schema for storing user subscriptions
- Integrate push notification dispatch into existing notification creation flow via async background tasks
- Include PWA manifest, service worker, and install prompt UI elements in base template
- Register new push router and ensure certificate initialization on application startup
- Add configuration variables for VAPID private/public key file paths and subscription contact email
- Update JavaScript application entry point with PushManager and PwaInstaller modules
- Extend top navigation bar with hidden install and push enable buttons for authenticated users
2026-05-23 08:03:27 +00:00
retoor 116aeadabf feat: add content CRUD helpers, avatar component, and utility JS classes for devplacepy 2026-05-23 06:41:47 +00:00
retoor d7d8314da0 refactor: extract star/notification/badge helpers into database.py and add enrich_items content module
Introduce `update_target_stars`, `get_target_owner_uid`, and `VOTABLE_TARGETS`/`STAR_TARGETS` in database.py; replace inline badge insertion with `award_badge()` and inline notification creation with `create_notification()` across auth, comments, and follow routers; add `enrich_items()` in new content module to centralize post/gist list assembly and remove duplicated enrichment logic from feed and gists routers.
2026-05-23 06:34:13 +00:00
retoor 26a2d3280f feat: add vendor static assets for syntax highlighting and code editor
Add minified CSS and JS vendor files for CodeMirror editor and Atom One Dark syntax theme, including language modes for C-like, CSS, Dart, and Go.
2026-05-23 02:29:26 +00:00
retoor 77ad93a4bb feat: add structured data schemas, og tags, share button, and configurable site url 2026-05-23 01:21:55 +00:00
retoor 8eea7cc0c9 feat: add news sanitize CLI command and upload static file serving with content-disposition 2026-05-22 23:50:31 +00:00
retoor 299d0602f1 fix: remove required attribute from gist source textareas and fix emoji-picker script type 2026-05-16 01:10:55 +00:00
retoor ed8d8b3ac1 fix: fix blank chat bubbles on mobile by adjusting input area layout and send button styling
- Reduced input area padding from 1rem to 0.75rem 1rem and switched from flex-wrap to align-items center with smaller gap
- Changed send button from rectangular with padding to a 36px circular button with centered icon and hover transition
- Added flex-shrink and min-width:0 to text input to prevent overflow on narrow screens
- Added full-width attachment preview container with negative order to stack above input row
- Injected JavaScript to auto-scroll message thread to bottom and focus input on page load for mobile UX
2026-05-16 01:02:10 +00:00
retoor 85acc0f481 fix: prevent duplicate notification triggers by extracting only last @ in mention prefix 2026-05-16 00:33:14 +00:00
retoor 9553e30a79 feat: add downvote button and vote count display to feed and post detail templates 2026-05-16 00:31:11 +00:00
retoor f4b825984a fix: update responsive breakpoints from 768px to 1024px in base.css for topnav-links, breadcrumb, and page media queries 2026-05-15 23:56:07 +00:00
retoor 1b4a60619e feat: add responsive layout with media queries for mobile and tablet breakpoints
Implement responsive design adjustments across admin, auth, base, feed, gists, landing, messages, news, notifications, post, profile, projects, and services CSS files with collapsible sidebar, touch-friendly navigation, and reordered content sections for screen widths below 768px and 480px. Add hamburger menu toggle, mobile overlay panel, and back button for messages view in Application.js.
2026-05-15 23:34:45 +00:00
retoor 1c5406204e chore: remove unused imghdr import and dead CSS rules, fix attachment uploader DOM structure, add space after icon spans in templates, and increase test stderr capture limit 2026-05-13 20:48:39 +00:00
retoor 4958c23c0d fix: migrate CI branch references from master to main and add comments created_at index 2026-05-13 19:17:57 +00:00
retoor aa88f18c03 chore: add docker infrastructure, gists feature, attachment system, and admin CLI tools
- Add .dockerignore, Dockerfile, and docker compose targets to Makefile for containerized deployment
- Implement gists router with CRUD operations, database schema, and polymorphic comment/vote reuse
- Create attachment upload system with thumbnail generation, MIME detection, and storage path management
- Add attachments_prune CLI command to clean orphaned attachment records and files
- Introduce rate limiting middleware with 60 requests per minute window
- Add custom 404 and 500 error handlers with SEO-optimized template responses
- Extend database initialization with gists and attachments indexes plus upload site settings defaults
- Update load_comments to include attachment mapping for comment resources
- Register gists and uploads routers in main application and update AGENTS.md documentation
2026-05-12 13:07:34 +00:00
retoor ff2585b098 feat: add mention notification creation and user search endpoints across multiple routers 2026-05-12 11:08:38 +00:00