Commit Graph

51 Commits

Author SHA1 Message Date
SaelixCode eb0c0263c7 fix: Distributed API UI & metrics polish + DEP0060 suppression
Add Node modal — type selector & state reset:
- Restored a Local/Remote <Select> dropdown in renderFormFields so users can
  explicitly choose the node type instead of it defaulting silently to 'remote'.
- Switching type clears api_url and api_token so no stale remote credentials
  carry over if a user switches from Remote to Local mid-form.
- Replaced the static "Add Remote Node" title with a dynamic one that reflects
  the currently selected type ("Add Local Node" / "Add Remote Node").
- onOpenChange now resets formData to defaultFormData whenever the dialog
  opens, preventing stale values from a previous session leaking in.

Remote connection details — real metrics:
- testRemoteConnection previously returned hard-coded '-' for containers,
  images, and cpus after a successful auth/check ping.
- Now fires three parallel requests (Promise.allSettled) after auth passes:
    /api/stats          → containers total + running count
    /api/system/stats   → cpu.cores
    /api/system/images  → image list length
- Each field falls back to '-' gracefully if an endpoint is unavailable,
  so a slow or older remote instance never breaks the connection test.

DEP0060 util._extend suppression:
- http-proxy@1.18.1 calls util._extend when createProxyServer() is first
  invoked at runtime (NOT at import time). A process.emitWarning override
  placed before the proxy instantiations intercepts only DEP0060 without
  suppressing any other warnings. No package version changes needed.

Also includes linter/formatter normalisation across multiple files.
2026-03-19 16:06:47 -04:00
SaelixCode 5932bced36 fix: Distributed API auth hardening — Bearer tokens and URL normalization
- Extend WS upgrade handler to accept Authorization: Bearer tokens as a
  fallback to cookie auth. Remote Sencho instances receive proxied WS
  connections carrying Bearer (no cookie), so the previous cookie-only
  check caused immediate 401 rejections for all proxied log/terminal streams.
- Log token validation failures in authMiddleware (was silently swallowed,
  violating no-empty-catch directive).
- Normalize api_url by stripping trailing slashes in testRemoteConnection,
  the HTTP proxy target, and the WS proxy target to prevent double-slash URLs.
2026-03-19 15:11:57 -04:00
SaelixCode b48cf62e5b fix: skip remote nodes in MonitorService to prevent direct Docker access errors
Remote nodes in the Distributed API model are self-monitoring — each
remote Sencho instance runs its own MonitorService against its local
Docker socket. The main instance must not attempt direct DockerController
access for remote nodes, which caused fatal crashes on every 30s tick.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 12:41:34 -04:00
SaelixCode c91c9ed7fd refactor: pivot from ssh proxy to distributed api model
- Delete SSHFileAdapter, IFileAdapter, LocalFileAdapter (SSH/SFTP stack)
- Remove ssh2, ssh2-sftp-client dependencies; add http-proxy-middleware, http-proxy
- NodeRegistry: remote nodes no longer use Dockerode TCP; new getProxyTarget() returns {apiUrl, apiToken}
- NodeRegistry.testConnection: remote nodes use HTTP GET /api/auth/check instead of docker.info()
- DatabaseService: Node interface swaps SSH/TLS fields for api_url + api_token; legacy columns preserved for DB compat
- FileSystemService: reverted to clean local-only fs.promises; adapter pattern fully removed
- ComposeService: executeRemote() and SSH log streaming deleted; local-only execution remains
- index.ts: add /api/auth/generate-node-token endpoint (long-lived JWT, scope:node_proxy)
- index.ts: authMiddleware now accepts Bearer token in addition to cookie (Sencho-to-Sencho auth)
- index.ts: remote HTTP proxy middleware intercepts all /api/ requests for remote nodes, strips x-node-id, injects Authorization header, proxies to api_url
- index.ts: WS upgrade handler proxies WebSocket connections for remote nodes via http-proxy wsProxyServer
- NodeManager.tsx: form reduced to Name, API URL, API Token; Generate Node Token button added inline
- NodeContext.tsx: Node interface updated to api_url/api_token

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 12:20:32 -04:00
SaelixCode 2a37e114df feat: implement remote tls/ssh security, isolate system stats, and polish ux
- NodeRegistry: wire TLS ca/cert/key into Dockerode when present on node config
- index.ts: /api/system/stats now branches on node type — remote nodes use docker.info() for CPU/RAM, local keeps systeminformation; disk gracefully returns null for remote
- index.ts: POST /api/nodes now persists tls_ca, tls_cert, tls_key fields
- FileSystemService: throw clean error on missing/empty compose_dir instead of crashing path.join
- FileSystemService: guard getStacks() against falsy item.name entries
- SSHFileAdapter: filter undefined/non-string names from SFTP readdir before returning
- NodeManager: add SSH Authentication Type toggle (Password vs Private Key)
- NodeManager: add Enable TLS toggle with conditional CA/cert/key textarea fields
- NodeManager: auto-test connection immediately after node creation
- NodeManager: replace "Strategy B" copy with Docker TCP setup instructions
- NodeManager: add pr-8 to header and DialogHeader to prevent overlap with parent dialog X button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 09:40:03 -04:00
SaelixCode 26b8f62968 fix: separate Docker API port from SSH port, add SSH credential UI, fix compose_dir routing 2026-03-18 21:04:43 -04:00
SaelixCode f1f8e34da5 fix: harden telemetry parsing and null node fallbacks 2026-03-18 20:31:57 -04:00
SaelixCode 4bd80e29bf fix: harden docker api validation, handle sftp errors, and fix node manager ui 2026-03-18 14:13:07 -04:00
SaelixCode 69e86a0a37 fix: Resolve DatabaseService SQL syntax error and add concrete IFileAdapter implementations 2026-03-18 13:13:56 -04:00
SaelixCode 8c51198468 feat: Remote Nodes Wiring & SSH Adapters 2026-03-18 12:55:30 -04:00
SaelixCode 02e1ebe1b6 feat: Remote Nodes Foundation (Strategy B) - Add nodes table with auto-seeded default local node in DatabaseService - Create NodeRegistry service for multi-instance Docker daemon connections - Add 6 Node management API endpoints (CRUD + test connection) - Create NodeManager component with table UI and connection testing - Add NodeContext for frontend-wide active node state management - Add node switcher dropdown to sidebar (visible when >1 node) - Add Nodes tab to Settings Hub 2026-03-18 11:45:04 -04:00
SaelixCode 448a64a10d feat: implement enterprise sse global logs and developer mode 2026-03-09 14:02:10 -04:00
SaelixCode a4a5365da1 feat: implement centralized logging and historical metrics dashboard 2026-03-06 21:05:23 -05:00
SaelixCode b765403dcf feat: implement real-time container log streaming via SSE 2026-03-06 15:41:06 -05:00
SaelixCode fb3a28834e fix: implement two-stage teardown for reliable atomic rollbacks 2026-03-06 10:18:47 -05:00
SaelixCode 953049a45d feat: implement smart error parser and post-deploy health probe 2026-03-05 19:59:35 -05:00
SaelixCode f2fbca17b7 feat: implement dynamic volumes, custom env vars, and timezone detection 2026-03-05 14:55:04 -05:00
SaelixCode 4aa4bf1b80 fix(backend,frontend): correct docker socket connection on windows and fix api proxy in vite config 2026-03-05 14:49:24 -05:00
SaelixCode f9e8874f6c feat: integrate official lsio api and rich template metadata 2026-03-05 12:37:59 -05:00
SaelixCode 7d59400114 fix: update lsio template registry url to valid endpoint 2026-03-05 11:00:00 -05:00
SaelixCode 536a714d9b feat: add dynamic template registry and smart volume path sanitizer 2026-03-05 10:15:54 -05:00
SaelixCode 1676dc22df feat: implement app templates storefront and deployment engine 2026-03-04 14:26:07 -05:00
SaelixCode b3521a078b feat: add Docker API endpoints for managing images, volumes, and networks; implement Resources view in editor 2026-03-04 11:17:16 -05:00
SaelixCode b45553c927 feat: refactor authentication handling and migrate config to database 2026-03-04 09:05:03 -05:00
SaelixCode 6196ee7ccf feat: enhance container crash detection by extracting exit codes and filtering intentional stops 2026-03-03 19:36:08 -05:00
SaelixCode ed1a60bee0 feat: implement dynamic env file resolution and enhance error handling in stack operations 2026-03-03 15:25:05 -05:00
SaelixCode 242602480e refactor: simplify docker compose command arguments by removing stack name flag 2026-03-03 13:38:14 -05:00
SaelixCode 63d2df2436 fix: drain stdout to prevent pipe buffer from blocking the process 2026-03-03 12:54:21 -05:00
SaelixCode 10a483a0a6 feat: await command execution in stack management endpoints and update container stats display based on state 2026-03-03 12:06:19 -05:00
SaelixCode 2b96b08c04 feat: update stack deployment endpoint and enhance deployment functionality 2026-03-03 11:41:44 -05:00
SaelixCode 1fd078616a feat: add global Docker network stats tracking and update HomeDashboard title 2026-03-03 09:10:24 -05:00
SaelixCode 587e88e93d feat: enhance volume pruning functionality with filter options 2026-03-03 08:20:30 -05:00
SaelixCode ec90911e14 feat: implement Docker disk usage retrieval and enhance system prune functionality 2026-02-27 15:43:45 -05:00
SaelixCode 6bbd9b6484 feat: add notification deletion functionality in API and EditorLayout 2026-02-27 12:47:16 -05:00
SaelixCode f4700ebfc9 feat: enhance API error handling and improve alert message formatting 2026-02-27 12:22:10 -05:00
SaelixCode 91cafb49f9 refactor: update journal mode comment for DatabaseService and optimize CPU state check in EditorLayout 2026-02-27 11:10:35 -05:00
SaelixCode c6eb9d76e7 feat: add Notification Settings Modal and Stack Alert Sheet components
- Implemented NotificationSettingsModal for configuring notification agents (Discord, Slack, Webhook) and global settings.
- Added StackAlertSheet for managing stack-specific alert rules with metrics, thresholds, and cooldowns.
- Introduced reusable UI components: DropdownMenu, Popover, Select, Sheet, Slider, and Switch.
- Enhanced Tabs component by removing unnecessary client directive.
2026-02-26 23:09:47 -05:00
SaelixCode fcf0c9f983 feat: add HostConsole component for interactive terminal access and integrate into EditorLayout 2026-02-26 19:52:43 -05:00
SaelixCode 36335ee5ab feat: improved EditorLayout component for managing Docker Compose stacks, editing files, and monitoring containers. 2026-02-25 23:30:24 -05:00
SaelixCode 53b36c71ce feat: Implement an interactive terminal component with real-time log streaming, and formatting 2026-02-25 22:51:07 -05:00
SaelixCode 46e6aedfd0 feat: Improved frontend UI components with shadcn 2026-02-25 22:33:51 -05:00
SaelixCode cdecbba59a feat: Implement a comprehensive Docker Compose stack management UI with file editing, deployment, container monitoring, and interactive bash access. 2026-02-24 19:48:56 -05:00
SaelixCode d5fac02da3 feat: Implement Docker Compose stack management, container monitoring, and interactive bash terminal with new frontend and backend services. 2026-02-22 14:40:54 -05:00
SaelixCode 18c51f083e feat: Implement web-based Docker Compose stack management with file editing, deployment, container monitoring, and terminal access. 2026-02-21 15:05:05 -05:00
SaelixCode e94b706a9f refactor: enhance DockerController with smart fallback for legacy containers; add YAML parsing support and improve container retrieval logic 2026-02-20 23:37:37 -05:00
SaelixCode e686508dec refactor: update ComposeService and DockerController for improved error handling and path configuration; adjust docker-compose.yml for clarity on volume mappings 2026-02-20 23:06:18 -05:00
SaelixCode c301c2f9d6 refactor: add guard clause for empty output and enhance JSON parsing in DockerController 2026-02-20 22:29:03 -05:00
SaelixCode ad8c663629 refactor: update ComposeService and DockerController for improved path handling and environment variable management; enhance EditorLayout for dynamic button rendering based on stack state 2026-02-20 22:20:34 -05:00
SaelixCode b022b1c879 refactor: enhance security by dynamically retrieving JWT secret and updating cookie options; adjust directory paths for deployment 2026-02-20 20:40:16 -05:00
SaelixCode 800d47845f refactor: migrate to directory-based stack structure
- Updated ComposeService to run docker commands from stack-specific directories, ensuring relative paths resolve correctly.
- Refactored FileSystemService to manage stacks as directories, including methods for creating, updating, and deleting stacks.
- Implemented automatic migration of existing flat-file stacks to the new directory structure on server startup.
- Adjusted API routes to use stack names instead of filenames, simplifying stack management.
- Modified frontend components to align with the new stack naming conventions and removed unnecessary file extensions.
2026-02-20 19:45:45 -05:00