Commit Graph
286 Commits
Author SHA1 Message Date
pastilhasandClaude Opus 4.6 8737681464 prefetch models and access policy at app load
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 21:43:29 +00:00
pastilhasandClaude Opus 4.6 188e91920a add /settings/ai route with role-aware model management
Two-tier model policy: system policy (admin, allowedModels) controls
member access, per-user hiddenModels controls personal visibility.
All model selectors now use useUserVisibleModels. Moved providers
and model visibility out of system settings, AI models out of profile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 21:36:58 +00:00
pastilhasandClaude Opus 4.6 d5fd3f58b1 add claude code model selection (opus, sonnet, haiku)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:58:31 +00:00
pastilhasandClaude Opus 4.6 c972553f22 surface pi process errors to web ui
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:47:32 +00:00
pastilhasandClaude Opus 4.6 25e8aaaea6 fix pi cwd resolution and super admin home dir for all pi endpoints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:31:35 +00:00
pastilhasandClaude Opus 4.6 4c2e40a46b install yt-dlp via pip instead of apt for latest version
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:13:51 +00:00
pastilhasandClaude Opus 4.6 d5245e5418 read vnc password and port from user home instead of env vars
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:59:59 +00:00
pastilhasandClaude Opus 4.6 79668e436b remove stale homeRoot state from file viewer and dashboard creation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:42:30 +00:00
pastilhasandClaude Opus 4.6 eeb3155cff add useServerEnvironment hook with document title prefix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:36:05 +00:00
pastilhasandClaude Opus 4.6 6897e4e861 separate onboarding seed for super admin vs regular users
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:26:42 +00:00
pastilhasandClaude Opus 4.6 d33c7653d4 fix list item text color in light mode for projects and dashboards
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:11:08 +00:00
pastilhasandClaude Opus 4.6 d62280176a remove HomeDirSelector, use HOME_DIR for super admin file browser root
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:05:29 +00:00
pastilhas ebebac0114 better startup scripts 2026-03-04 18:11:33 +00:00
pastilhas ba36629cdc better startup scripts 2026-03-04 18:05:50 +00:00
pastilhas 98a6a69477 group select chats 2026-03-04 15:51:55 +00:00
pastilhas 3249378984 revert: use chmod 770 instead of 775 for user directories
770 (rwxrwx---) is more secure - only owner and group can access, excluding 'others'.

The service user can still access because it's added to the user's group via:
  usermod -aG shellUsername serviceUser

The real fix was wrapping chmodSync in try/catch in email-db.ts so it doesn't
crash when trying to chmod files owned by other users.
2026-03-04 02:59:56 +00:00
pastilhas e43f738a52 fix: update provision-existing-users.sh to use chmod 775 (was 770)
Consistency fix with src/servers/api/users/provision.ts which was updated to use:
- chmod 775 (rwxrwxr-x) instead of 770 (rwxrwx---)
- Recursive chmod to fix all subdirectories

This allows the service user (in the user's group) to read/write files
for background jobs like email sync.

Also added helpful comment explaining the permission choice.
2026-03-04 02:59:06 +00:00
pastilhas cd1bce5a8a fix: resolve email database permission errors for multi-user setups
Issues:
1. User directories created with chmod 770 (too restrictive)
   - Prevents service user from reading/writing even though in group
   - Changed to chmod 775 (recursive) to allow group access

2. openEmailDb tries to chmod file it may not own
   - If file owned by different user (e.g., andrepadez), chmod fails
   - Wrapped chmodSync in try/catch to gracefully skip

Changes:
- src/servers/api/users/provision.ts:
  * Changed chmod 770 → 775 (owner/group rwx, others rx)
  * Applied recursively to all subdirectories
  * Added chmod after seeding files to ensure consistency

- src/servers/api/email/email-db.ts:
  * Wrapped chmodSync in try/catch
  * Logs silently skip if file not owned by current process
  * Database still works even if chmod fails

Fixes /email endpoint 500 errors for users with email data.
2026-03-04 02:56:35 +00:00
pastilhas 698c1ff297 feat: disable auto-suspend in setup.sh for server environments
- Mask sleep.target, suspend.target, hibernate.target, hybrid-sleep.target
- Configure systemd-logind to:
  - Ignore lid switch events
  - Ignore power key presses
  - Disable idle action
  - Set runtime directory size
- Restart systemd-logind to apply changes

Servers running Officer shouldn't go to sleep when idle.
This prevents unexpected suspends during setup or normal operation.
2026-03-04 02:45:33 +00:00
pastilhas e521d8214f fix: configure npm prefix to /usr/local for system-wide package access
- Set npm prefix to /usr/local (system location) instead of user-specific ~/.npm-global
- Ensures all users can access installed npm packages
- Fixes issue where packages installed to one user's home directory
- All npm global packages now available system-wide to all users

This ensures that after running setup.sh:
- pi, claude, and other tools are at /usr/local/bin/
- Accessible to all users (pastilhas, andrepadez, etc.)
- New users automatically get access too
2026-03-04 02:38:18 +00:00
pastilhas a8976ad8fb improvement: use explicit system npm path to avoid nvm conflicts
- When installing global npm packages, explicitly use /usr/bin/npm
- Falls back to $(which npm) if system npm not found
- Ensures packages go to system location, not nvm location
- Works around nvm PATH interference during setup
2026-03-04 02:16:07 +00:00
pastilhas b1af3ede47 fix: add missing fail() function in setup-pty-sidecar.sh
- Added RED color constant
- Added fail() function definition
- Fixes 'fail: command not found' error during setup
2026-03-04 02:15:49 +00:00
pastilhas c9560c27c7 fix: remove duplicate else block in npm packages section
Fixes syntax error: 'syntax error near unexpected token else'
The npm global packages section had a duplicate else block.
2026-03-04 02:15:03 +00:00
pastilhas db6d4fe30f refactor: make Node.js installation automatic in setup.sh
- setup.sh now automatically installs Node 22 via NodeSource if not found
- No more separate manual Node installation step required
- Simplified to single command: bash scripts/setup.sh
- Works for apt/pacman/brew systems
- Updated SETUP_GUIDE.md with simplified instructions
- Better logging during Node installation process

Users can now simply run:
  bash scripts/setup.sh

And everything (including Node 22) will be installed automatically.
2026-03-04 02:13:49 +00:00
pastilhas ebd8778007 fix: refactor setup scripts for system-wide Node.js (no nvm)
BREAKING: Officer now uses system Node.js via NodeSource instead of nvm.

Changes:
- Removed nvm sourcing from setup.sh
- Updated Node installation to use NodeSource repository
- All npm global packages installed system-wide with sudo
- Updated PTY sidecar setup to use /usr/bin/node (system node)
- Added Pi validation (test --list-models)
- System packages now available to all users automatically

Benefits:
- Multi-user friendly: all users get same Node version
- No per-user environment setup needed
- Simpler troubleshooting (one node version)
- Services use consistent node binary
- Prevents snap node incompatibility issues

Fixes:
- 'node not found' for secondary users
- systemd services finding correct node
- Pi installation consistency across users

New Files:
- SETUP_GUIDE.md: Comprehensive installation guide
- SETUP_ANALYSIS.md: Technical analysis of previous issues

Migration:
- Remove nvm if installed (optional)
- Run: curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
- Run: sudo apt-get install -y nodejs
- Run: bash scripts/setup.sh
2026-03-04 02:09:47 +00:00
pastilhas ef13f96d36 fix(pi): add snap node compatibility diagnostics and documentation
- Added detailed error logging to detect snap node compatibility issues
- When Pi process exits with code 1, log helpful diagnostic info including node path
- Add hint to check for snap node and reinstall via apt/nvm
- Create SNAP_NODE_COMPATIBILITY.md with full troubleshooting guide
- Document root cause: snap node has file descriptor incompatibility with Bun.spawn stdin pipes
- Provide clear installation instructions for NodeSource and nvm alternatives
2026-03-04 01:45:36 +00:00
pastilhasandClaude Opus 4.6 72d1341cbc telegram integration: add disconnect/connect toggle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:03:37 +00:00
pastilhasandClaude Opus 4.6 40a9768cb3 claude-code streaming chat, desktop remote viewer, new-automation route, tiktok task v4, misc fixes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 0068244356 claude-code as channel model, container trust/permissions fixes, terminal cwd fix
- add claude-code as virtual model in channel messaging (telegram/discord/whatsapp)
- new send-claude-code.ts: docker exec claude -p with session resumption
- route claude-code model in sendAndAwait before Pi pipeline
- append claude-code to listPiModels output
- fix container .claude mount (rw for sub-mounts), hooks format (matcher-based)
- pre-seed hasTrustDialogAccepted and bypassPermissions in container settings
- git init in entrypoint to skip workspace trust prompt
- fix ~/~ double-tilde in CommandTerminalWrapper cwd resolution
- remove --continue from claude-code panel command

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 192ae63c0e email-db tool: extract-attachment action, streaming, filename decoding, copy path fix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 2752102a7e add windows-1250/1251/1254 and iso-8859-15 charset support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 b963d9b7a7 email: charset decoding, inline attachments, UI fixes
- respect charset from Content-Type when decoding body and headers
- detect inline attachments with filenames (not just disposition: attachment)
- fix broken decodeQuotedPrintable reference in parseAttachments
- white background for email iframe (emails designed for light bg)
- sticky header in email list, scrollable message area
- arrow key navigation between emails with scroll-into-view
- /email/:id routing for deep linking to specific emails
- empty folder shows "No emails in this folder" instead of losing header
- fix attachment viewer header overlap with dialog close button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 de1baa1588 gmail sync: don't retry on overquota, import what we have
- OVERQUOTA from Gmail now continues to import step instead of retrying
- partial sync completion email tells user to try again in a few hours
- engine syncs handler meta to job on completion for richer notifications

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 583580eb10 replace imap gmail sync with mbsync + maildir import, app password UI
- rewrite gmail-sync handler: mbsync downloads to local Maildir, then import to sqlite
- add app password field to google integration config and API
- gmail sync section independent from oauth in settings UI
- live mbsync progress streaming to job status
- recoverable failure email with instructions for overquota/auth errors
- sync meta persisted to job on failure for richer notifications

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 927267e041 workspaces to dashboards, imap email sync, ffmpeg tool, tts fix, file browser refresh, automation sidebar reorder
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 bd362dc586 apify tool, tools API + automation UI, integrations config, super admin restrictions
- apify tool: TOOL.md definition, index.ts implementation with auto-auth via OFFICER_APIFY_TOKEN, output_path for large datasets
- tools API: /tools routes (list, detail, chat, create, delete) mirroring tasks pattern
- automation UI: tools tab in sidebar, NewTool component, tool detail view
- apify integration: settings page for enterprise API key config, pi-bridge passes env var to containers
- tiktok-trends task: rewritten as agent instructions using apify tool with output_path, scripted report generation for 50KB read limit
- restrict edit/delete of native/global capabilities to Super Admin only (backend + frontend)
- tools authoring guide: TOOLS.md with full spec for TOOL.md frontmatter, index.ts execute signature, patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:00:45 +00:00
pastilhasandClaude Opus 4.6 776738a983 add fitContent option to workspace layout panels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:38:31 +00:00
pastilhasandClaude Opus 4.6 0a00172e49 settings/apps page to view and delete published apps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:14:39 +00:00
pastilhasandClaude Opus 4.6 74ace56120 bug report tool — screenshot, console logs, and context sent to discord
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:09:51 +00:00
pastilhasandClaude Opus 4.6 30f06e91e4 cliamp music player integration with browser audio streaming
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:23:52 +00:00
pastilhasandClaude Opus 4.6 fd4d77a389 user app publishing system — build, serve, and use personal apps in workspace panels
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:23:24 +00:00
pastilhasandClaude Opus 4.6 4d30672adb browser relay: multi-session override, stale session recovery, better error feedback
- relay accepts new extension connections by closing old one (last wins, code 4000)
- extension recognizes code 4000 and stops auto-reconnect (shows "replaced" badge)
- fix ping interval race where old WS close handler killed new connection's pings
- retry CDP commands on "Session with given id not found" by re-attaching debugger
- describeError() maps known errors to user-friendly badge tooltips
- persisted relay tokens restored on server start
- user-scoped token salts, token regeneration/deletion endpoints
- extension download endpoint, integrations UI for browser relay setup
- browser relay env vars passed to pi-bridge sandboxes
- browser screen layout with chat panel and prompt prefix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:22:15 +00:00
pastilhasandClaude Opus 4.6 8f1963fedb user-scoped channel sessions, whatsapp disconnect cleanup, browser relay token fix
Channel session IDs now include userId (channel-{provider}-{userId}-{contextId})
to prevent cross-user contamination in multi-user setups. WhatsApp disconnect
properly logs out and clears cached auth. Browser relay uses server-derived token
directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:14:47 +00:00
pastilhasandClaude Opus 4.6 209d58a525 whatsapp qr code polling, validate token before save, fix bot startup timing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 12:41:46 +00:00
pastilhasandClaude Opus 4.6 b698e3d962 telegram and whatsapp channel integrations, validate bot tokens before saving
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 08:53:01 +00:00
pastilhas bc4c20929c Discord 2026-02-27 08:27:43 +00:00
pastilhas 7bf55af5b3 reset user data 2026-02-27 05:46:09 +00:00
pastilhasandClaude Opus 4.6 269b1026e5 preview auto-refresh after chat tool calls, gmail sync label scoping, queue notify option, workspace-scoped chat sessions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 01:49:52 +00:00
pastilhasandClaude Opus 4.6 968d502eaa persist panel sizes for email and automation screens, fix session title from prompt prefix
- switch email and automation screens from WorkspaceLayout to WorkspaceView + useWorkspacesState
- add promptPrefix prop to WorkspaceView, thread into WorkspaceContext
- automation dynamically adds/removes chat panel while preserving persisted sizes
- use displayText for session title so prompt prefix doesn't leak into titles
- fix email context filter to match screens/email workspace key

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:23:21 +00:00
pastilhasandClaude Opus 4.6 c443fe0fe2 pi session context persistence, fix new session button, add clear all sessions
- handle pi process death by nulling piProcess ref so next message respawns
- replay conversation history on respawn via --session flag
- fix user message JSONL format to array for pi compatibility
- fix container sessions mount to match storage path
- fix ChatPanelWrapper: key on inner component so usePiChat resets on new session
- add bulk delete sessions endpoint and clear all button in chat header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:04:14 +00:00