Commit Graph
100 Commits
Author SHA1 Message Date
pastilhasandClaude Opus 4.6 2caccc183c generalize convert-to-mp3 into convert-audio with selectable target format
- rename task to convert-audio, support mp3/flac/wav/ogg/aac/opus targets
- add options input type with selectable pill buttons in UI
- extend seed script parser to handle YAML list properties (options)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:42:44 +00:00
pastilhasandClaude Opus 4.6 729ffb930b add task input form and improve script runner output
- fetch task input definitions from API and render configurable inputs
- boolean inputs render as No/Yes toggle (e.g. delete_source)
- auto-filled inputs (file_path) are hidden from the form
- wrap script output in dark pre/code block with copy button
- fix ffmpeg -nostdin for batch directory processing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:35:48 +00:00
pastilhasandClaude Opus 4.6 d4530a9667 add script task templates and refactor convert-to-mp3 to use template pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:14:11 +00:00
pastilhasandClaude Opus 4.6 f32f427972 script-mode task execution — database-backed tasks with direct script runner
Tasks now live in the database (mode: script or agentic). Script-mode tasks
bypass the agent entirely — the implementation is materialized to a temp file
and executed directly, with stdout/stderr streamed to the UI via WebSocket.

Includes convert-to-mp3 as the first native script task.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:07:59 +00:00
pastilhasandClaude Opus 4.6 1159978187 add targets field to filter tools per agent harness (pi/claude/all)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:39:38 +00:00
pastilhasandClaude Opus 4.6 f2019a26b6 fix starship env_var syntax for USER prompt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:09:01 +00:00
pastilhasandClaude Opus 4.6 69f6ba94c5 use USER env var in starship prompt instead of system user
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:07:11 +00:00
pastilhasandClaude Opus 4.6 3eb4bd820f show member username in terminal prompt instead of email
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:05:49 +00:00
pastilhasandClaude Opus 4.6 84d5cf5048 fix sandbox HOME resolution — capture at module load before user-instance overrides it
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 07:50:33 +00:00
pastilhasandClaude Opus 4.6 11d95a25ab mount all of ~/.local in sandbox for claude binary resolution
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 07:43:27 +00:00
pastilhasandClaude Opus 4.6 8377da8a77 fix sandbox tool/extension/skill discovery for members
Sandbox now mounts global content at short /officer/* paths to avoid
bwrap intermediate directory traversal issues. Pi uses NODE_PATH for
extension dependency resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 07:13:19 +00:00
pastilhasandClaude Opus 4.6 8264e7b995 fix super admin claude: host cwd, host mcp config paths
Capture HOST_HOME before user-instance overrides process.env.HOME so
Super Admin spawns claude in /home/pastilhas. Generate separate MCP
configs for sandbox (sandbox paths) and host (real filesystem paths),
pick based on role at spawn time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:29:14 +00:00
pastilhasandClaude Opus 4.6 29229c8cb7 fix super admin pi cwd double-prefixing absolute paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:12:34 +00:00
pastilhasandClaude Opus 4.6 ea31014d72 user-local installs for claude and pi, fix sandbox mounts
Move claude and pi from sudo global installs to ~/.local. Claude
binary is copied to /usr/local/bin for sandbox visibility, pi runs
via node from ~/.local/lib (ro-mounted). Fix bwrap intermediate dir
traversal by setting 0755 perms on auto-created HOME dirs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:08:45 +00:00
pastilhasandClaude Opus 4.6 2f15214cdb match selected provider button style to locked state for better visibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:12:14 +00:00
pastilhasandClaude Opus 4.6 56f8da8907 remove seed directory, clean up provisioning and sync modules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:07:50 +00:00
pastilhasandClaude Opus 4.6 9578110e8b shared bwrap sandbox, skip for super admin, extend to pi and terminals
- extract buildSandboxPrefix/buildRunuserSuffix into shared sandbox.ts
- super admin bypasses bwrap for full host access (claude, pi, terminal)
- member pi processes now use bwrap instead of sudo -u
- member terminals now use bwrap instead of sudo -u
- mount /run for systemd-resolved DNS inside sandbox
- pass role through claude spawn params and channel types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:06:44 +00:00
pastilhasandClaude Opus 4.6 c38d5b0ea1 extract stream parser module with tests, add mcp tool call logging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:49:26 +00:00
pastilhasandClaude Opus 4.6 86ddcbfead mcp tool server for claude code — native tool execution via stdio protocol
Replaces prompt injection workaround with a proper MCP server that dynamically
discovers marketplace tools and exposes them as callable tools to Claude Code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:21:50 +00:00
pastilhasandClaude Opus 4.6 ecd83dc1ec dynamic claude.md regeneration and email db env for claude code
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:45:41 +00:00
pastilhasandClaude Opus 4.6 49cd559c8a tool registry, claude tool awareness, and model selector fix
- Add agent-agnostic tool registry (tool-registry.ts) that discovers tools from disk
- Embed tool-loader extension as platform infrastructure (ensure-tool-loader.ts)
- Inject tool context into Claude prompts on first message
- Add marketplace tool sync (sync-marketplace.ts)
- Fix model selector defaulting to claude-code when no model explicitly selected
- Exclude tool-loader-source.ts from tsconfig (Pi-specific deps)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 11:55:38 +00:00
pastilhas e97b4b2459 deleted old plans 2026-03-07 08:31:48 +00:00
pastilhasandClaude Opus 4.6 b896515b2c fix message duplication on auto-save after resume
The PUT endpoint was re-merging old DB messages (which already included
previous merges) with disk messages on every turn, causing duplication.
Now the client passes resumedMessageCount so the server always slices
only the original pre-resume messages before concatenating.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 08:23:31 +00:00
pastilhas 70442ae277 dockerization plan 2026-03-07 08:22:46 +00:00
pastilhas 6c4595279a fine tuning 2026-03-07 00:52:20 +00:00
pastilhasandClaude Opus 4.6 60230ccfec fix save indicator timing and auto-save history loss on resume
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:27:31 +00:00
pastilhasandClaude Opus 4.6 0e0be3327e dashboard chats: auto-load latest saved session for context on mount
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:46:09 +00:00
pastilhasandClaude Opus 4.6 8f46f9170a fix terminal state key leaking phantom dashboards; fix infinite loop in chat panel resume
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:39:44 +00:00
pastilhasandClaude Opus 4.6 406d8f9e54 saved sessions: make routable via /chat/saved/:id URLs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 20:15:36 +00:00
pastilhasandClaude Opus 4.6 2a8df0def1 saved sessions: replace transient history with persistent DB storage and auto-save
- Add saved_sessions table and CRUD endpoints (save, list, resume, update, delete)
- Save is instant (no LLM summarization), stores exact conversation with tool calls
- Resume loads full message history into chat UI, sends transcript to agent on first message
- Auto-save updates DB after every agent response once a session is saved
- Delete old filesystem-based session/group management (sessions router, useChatSessions, useChatGroups)
- Clean up ChatHeader, SessionList, ChatDetailPanel for saved sessions flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:36:25 +00:00
pastilhasandClaude Opus 4.6 d88fe3cac7 task logs: migrate from filesystem to postgresql; refactor sidecars into submodules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:49:39 +00:00
pastilhasandClaude Opus 4.6 5129f7827f dashboards: migrate from filesystem to postgresql
Replace JSON file storage with DB tables for dashboard layouts,
screens, projects, and terminal defaults. Fresh drizzle migration
with dashboardDefaults table and new columns on screens/projects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:35:11 +00:00
pastilhasandClaude Opus 4.6 daf5580c39 vnc sidecar: per-user desktop sessions via sidecar architecture
replaces the single hardcoded systemd VNC service with a dynamic
sidecar that manages per-user VNC sessions on demand. any authenticated
user can now access their own desktop, not just Super Admin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:49:53 +00:00
pastilhasandClaude Opus 4.6 a0d9ea63f9 sidecar self-registration: sidecars connect to API server instead of vice versa
Flips the connection model so sidecars register themselves with the API
server via WebSocket at /api/sidecar/register, enabling dynamic discovery,
location independence, and automatic reconnection from either side.

- Add registration protocol types and PTY command/event types
- Create sidecar-registry.ts (replaces sidecar-client.ts) as passive registry
- Create sidecar connector (connect.ts) with exponential backoff reconnect
- Convert process sidecar from WS server to WS client
- Convert PTY sidecar from WS server to multiplexed WS client
- Simplify terminal bridge to thin adapter using registry
- Add PTY sidecar as PM2-managed process
- Update all consumer imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 08:48:19 +00:00
pastilhas 6cfa40bad1 Merge remote-tracking branch 'origin/email-imap' 2026-03-06 07:27:45 +00:00
pastilhasandClaude Opus 4.6 7bbcccabf1 wip: remove opencode, searxng, resources; fix user settings read
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 07:27:19 +00:00
pastilhasandClaude Opus 4.6 bd7ece80cf email list sync button uses new email-sync handler, job duration logging
Rewired EmailList sync button to call /email/accounts/:id/sync instead
of the old gmail-sync job. Shows sync button for connected and synced
accounts. Allow manual incremental sync for synced accounts.

Added duration logging to queue runner: start/complete/fail markers
with elapsed time.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 07:25:26 +00:00
pastilhasandClaude Opus 4.6 4ececbe748 email sync: API passes full config at enqueue, auto-reconnect on IMAP drops
Sidecar/queue runner no longer needs job-specific context. API server
resolves account details, IMAP auth, and user email at enqueue time —
all persisted in the job file. Handler reads directly from job meta.

Removed "Load account" step. Sync step auto-reconnects up to 10 times
when Gmail drops the connection, resuming from saved UIDs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 07:02:51 +00:00
pastilhasandClaude Opus 4.6 170bd6d41b wip: email sync via imap with status tracking and auto cron
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 04:57:30 +00:00
pastilhasandClaude Opus 4.6 5925ac49a1 fix sidecar websocket: routes handler was intercepting upgrade requests
The Bun routes option matched "/" before fetch could handle the
WebSocket upgrade, so the API server could never connect. Moved
route handling into fetch after the upgrade check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:53:31 +00:00
pastilhasandClaude Opus 4.6 28f5cefb5b gmail sync: locale-agnostic folder mapping and import all mail
[Google Mail] locale variant was not matched by hardcoded [Gmail] paths,
so Sent/Starred/Important/Drafts were never labeled. All Mail was skipped
entirely, losing ~9k archived emails. Now normalizes the prefix, imports
everything with proper labels, and processes All Mail last so specific
folder labels take priority.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 09:29:22 +00:00
pastilhasandClaude Opus 4.6 5e86fcff88 add future possibilities section to sidecar docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 07:44:36 +00:00
pastilhasandClaude Opus 4.6 86c2d6333a process sidecar: independent process manager for long-running work
Introduces a separate Bun process (port 5100) that owns all spawned
processes and long-running work, so the API server can restart freely
without disrupting active sessions.

The sidecar owns:
- Anthropic proxy (port 5051) with persisted secret across restarts
- Claude Code process spawning and session tracking (--resume support)
- Pi agent spawning and RPC lifecycle (prompt/abort/thinking)
- Job queue engine (lane processing, retries, notifications)

The API server becomes a thin client that forwards commands over a
single WebSocket connection with auto-reconnect. send-claude-code.ts
goes from 550 lines of spawn logic to 73 lines of sidecar delegation.

State persisted to data/sidecar/state.json every 30s and on shutdown.
Lockfile prevents duplicate instances. See SIDECAR.md for full docs
and manual testing procedures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 07:36:47 +00:00
pastilhasandClaude Opus 4.6 726c77e346 show live email count during gmail sync instead of mbsync log lines
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 05:00:18 +00:00
pastilhasandClaude Opus 4.6 ed67cfa8e9 terminal auto-reconnect and connection indicator in panel header
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:58:14 +00:00
pastilhasandClaude Opus 4.6 c54ff9da28 bypass anthropic proxy for users with own claude credentials
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:35:34 +00:00
pastilhasandClaude Opus 4.6 ba9258cc17 fix pi config dir for non-service users
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:24:10 +00:00
pastilhasandClaude Opus 4.6 b7a017d8e2 docker compose setup and .env generation in monorepo scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:23:49 +00:00
pastilhasandClaude Opus 4.6 038fd16fb2 anthropic auth proxy for multi-user claude code
Local HTTP proxy on 127.0.0.1:5051 intercepts Claude Code API requests
from sandboxed member users, injects the real OAuth token server-side,
and forwards to Anthropic. Users only see a proxy secret, never the
real credentials.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 03:40:14 +00:00
pastilhasandClaude Opus 4.6 e966a71180 isolate user data with personal group ownership
- chown user dirs to pastilhas:<username> instead of pastilhas:officerdev
  so users cannot access each other's data
- chmod 2770 (setgid) gives only the owning user terminal access
- setup.sh: ensure home dir is traversable (o+x) for provisioned users

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 02:44:44 +00:00
pastilhasandClaude Opus 4.6 3df47bb48d shared group provisioning, upload context menu, go path fix
- provision linux users with pastilhas:officerdev ownership so server
  can always read/write, terminal users get group access
- add officerdev shared group setup to setup.sh
- move go install to ~/.local/go with GOPATH at ~/.local/go-path
- add upload file/folder items to file browser context menu

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 02:34:38 +00:00
pastilhasandClaude Opus 4.6 74894b0c35 hide dotfiles in super admin home directory, disable toggle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:37:42 +00:00
pastilhasandClaude Opus 4.6 451a61afb4 fix cliamp panel header, home dir lookup, and go install path
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:30:15 +00:00
pastilhasandClaude Opus 4.6 330b882d00 show login form immediately without waiting for landing page data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:05:56 +00:00
pastilhasandClaude Opus 4.6 20589ce845 soften card background to warm pastel in light mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:00:51 +00:00
pastilhasandClaude Opus 4.6 c7d509b725 scope file search to current directory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:58:10 +00:00
pastilhasandClaude Opus 4.6 c66bbfa379 add dictate and download video toolbar buttons, reorder context menu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:54:45 +00:00
pastilhasandClaude Opus 4.6 9fedbe02d4 use teal icon color for file browser toolbar buttons
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:46:59 +00:00
pastilhasandClaude Opus 4.6 9a95773664 fix Videos default dir name and strip tts voice subdir in save-result
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:42:47 +00:00
pastilhasandClaude Opus 4.6 7bfa36e5cf open ocr/tts/transcribe results in dual panels from file viewer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:42:02 +00:00
pastilhasandClaude Opus 4.6 b75f954b0f open ocr/tts/transcribe results in dual panels from file browser
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:30:30 +00:00
pastilhasandClaude Opus 4.6 cce8738e89 fix stale selection after double-clicking folder in file browser
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:11:00 +00:00
pastilhasandClaude Opus 4.6 0a39c5043a add dictate option to file browser context menu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 00:07:01 +00:00
pastilhasandClaude Opus 4.6 6a6ed5487d save ocr/tts/transcription results next to source file from context menu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:52:57 +00:00
pastilhasandClaude Opus 4.6 aa0207436c improve gmail sync: email input, permanent errors, auto-dock
- add isync to setup.sh
- ask for gmail address alongside app password in integrations
- add PermanentError to job queue (skips retries for non-recoverable failures)
- use PermanentError for missing credentials, missing executable, auth failures
- auto-add /email to dock after successful gmail sync
- invalidate dock cache on sync completion for seamless UI update

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 23:13:55 +00:00
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