39 Commits
Author SHA1 Message Date
BoShen db8cc3026e Allow access for Tailscale IPs in HTTPS enforcement 2026-03-11 16:21:06 +08:00
Tugcan Topaloglu c72f2c796b feat: add temp and disk sparkline graphs to system gauges 2026-03-05 12:06:17 +03:00
Tugcan Topaloglu f9d7819926 feat: notification center with audit log events and badge counter 2026-03-05 12:00:56 +03:00
Tugcan Topaloglu e74fdc43c2 feat: docker management page with container controls and image listing 2026-03-05 11:52:04 +03:00
Tugcan Topaloglu 8166ae1928 feat: config editor with re-auth, JSON validation and auto-backup 2026-03-05 11:47:57 +03:00
Tugcan Topaloglu b18a30c84a feat: system security dashboard with re-auth gate for security tabs 2026-03-05 11:38:35 +03:00
Adrian Teh 3d8c38aeb9 fix: show log blocks with newest last (chronological by latest entry)
- Sort blocks by latest timestamp ascending (oldest → newest)
- Newest logs appear at bottom (user expectation)
- Clear header indicates chronological order
- Each block internally chronological (oldest → newest)

Final UX: user scrolls down to see current logs, can see historical logs above.
2026-02-27 13:15:32 +08:00
Tuğcan Topaloğlu dd94b7e5e3 fix: add Opus 4.5/4.6, Sonnet 4.6, Gemini Pro pricing and model normalization 2026-02-25 20:24:29 +03:00
Tuğcan Topaloğlu 1d9f7e0747 Merge pull request #15 from Mariano215/feat/multi-provider-cost
feat: multi-provider cost estimation with dynamic pricing
2026-02-25 20:22:46 +03:00
Tuğcan Topaloğlu 363c805110 Merge pull request #14 from Mariano215/fix/log-retrieval-multi-scope
fix: try multiple journal units and scopes for log retrieval
2026-02-25 20:21:56 +03:00
Tuğcan Topaloğlu 296d08a657 fix: harden service detection with input sanitization and correct process patterns
- Add regex validation for pgrep patterns and systemctl unit names
- Fix agent-dashboard process pattern (was dashboard-v2, now matches our structure)
- Prevents potential shell injection even though values are hardcoded
2026-02-25 20:20:14 +03:00
Tuğcan Topaloğlu 5d2c330511 Merge pull request #13 from Mariano215/fix/service-detection
fix: detect services via user-level systemd and pgrep fallback
2026-02-25 20:18:09 +03:00
Tuğcan Topaloğlu 82abb5b198 Merge pull request #12 from Mariano215/feat/configurable-auth-dir
feat: configurable auth data directory via DASHBOARD_AUTH_DIR
2026-02-25 20:13:37 +03:00
Mariano MatteiandClaude Opus 4.6 535435f478 feat: multi-provider cost estimation with dynamic pricing
Replace the hardcoded opus/sonnet pricing with a generic,
file-backed, multi-provider cost estimation system.

Server-side:
- Add DEFAULT_MODEL_PRICING table covering OpenAI, Anthropic,
  Google, xAI, and Nvidia models
- Add estimateMsgCost() that uses explicit cost when available,
  falling back to rate-table calculation
- Add normalizeProvider/normalizeModel helpers for consistent
  model key formatting (provider/model)
- Support optional data/model_pricing_usd_per_million.json file
  to override default rates
- Track cacheRead/cacheWrite tokens separately in usage windows
- Use estimateMsgCost() across getSessionCost, getCostData,
  getUsageWindows, and session detail endpoint

Client-side:
- Remove hardcoded pricing object from updateLimits()
- Read perModelCost from server response instead
- Display cache costs when present
- Use var and string concatenation for iOS Safari compatibility

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:46:57 -05:00
Mariano MatteiandClaude Opus 4.6 484843dd7b fix: try multiple journal units and scopes for log retrieval
The /api/logs endpoint only tried a single system-level journalctl
unit, so user-level services and compound services (e.g.
openclaw-gateway) returned "No logs available".

Now iterates over candidate unit names per service and both system
and user journal scopes, returning the first non-empty result.
Prefixes output with [source scope:unit] for debugging, and shows
a helpful message listing what was tried when no logs are found.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:43:49 -05:00
Mariano MatteiandClaude Opus 4.6 f11f5e8a97 fix: detect services via user-level systemd and pgrep fallback
The service status panel only checked system-level systemctl, so
services running as user-level systemd units (systemctl --user)
or standalone processes showed as inactive.

Now checks system systemctl first, then user systemctl, then falls
back to pgrep pattern matching. Also checks alternative unit names
(e.g. openclaw-gateway, openclaw-webhooks) for compound services.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:41:14 -05:00
Mariano MatteiandClaude Opus 4.6 998e925fed feat: configurable auth data directory via DASHBOARD_AUTH_DIR
Allow credential files (credentials.json, mfa-secret.txt, audit.log)
to be stored in a separate directory from the workspace data folder
by setting the DASHBOARD_AUTH_DIR environment variable.

Defaults to the existing dataDir when unset, so no behavior change
for current deployments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:40:01 -05:00
Mariano MatteiandClaude Opus 4.6 a0c41b0e83 fix: add unauthenticated /api/health endpoint
Add a lightweight health check endpoint that returns JSON
{"status":"ok","uptime":...} without requiring authentication.

Placed before the auth gate so load balancers, uptime monitors,
and Tailscale Funnel health probes can verify the server is running.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 07:33:11 -05:00
Tuğcan Topaloğlu 129ce89a82 feat: add Gemini usage tracking with provider/model switching
- Gemini usage scrape endpoint (/api/gemini-usage, /api/gemini-usage-scrape)
- Provider switch (Claude/Gemini) on overview card with localStorage persistence
- Per-model dropdown selector (Session/Weekly/Sonnet for Claude; all models for Gemini)
- Model selection persisted per-provider in localStorage
- Auto-refresh respects selected provider
- XSS sanitization on dynamic model names and reset labels
- Rate Limits page: dedicated Gemini Usage section with per-model bars
2026-02-19 09:37:07 +03:00
Tuğcan Topaloğlu 176c55a7a7 refactor: extract session file helpers, fix sid parsing and watcher consistency 2026-02-18 14:15:33 +03:00
Adrian Teh dadbc9351a feat: include reset sessions in stats 2026-02-18 16:25:37 +08:00
Tuğcan Topaloğlu d3f21baf7d revert unsafe CORS fallback from PR #5 2026-02-17 09:09:03 +03:00
b4bdfc33e1 fix: logs auth token, portable data paths, registration error handling
* Fix registration endpoint bugs causing 400 errors

- Fix CORS headers not being set when origin doesn't match host
- Add missing 'ip' variable definition in registration handler
- Fix hardcoded /root/ paths to use configurable dataDir
- Add error logging for better debugging

These changes resolve the "Bad request" error when creating new accounts.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Fix logs endpoint authentication

The fetchLogs() function was making unauthenticated API calls,
causing 401 Unauthorized errors. Added Bearer token authentication
header to the fetch request.

Also improved error handling to show HTTP status codes.

Fixes logs viewer and ensures all API calls include proper authentication.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Dave Lutz <dave@lutzfamily.net>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-17 09:08:33 +03:00
Mariano Mattei e014b3e1d7 fix: iOS Safari compatibility and cache-busting 2026-02-17 09:05:30 +03:00
Tuğcan Topaloğlu bb392ef1b3 remove tailscale ip exemption from https enforcement 2026-02-16 10:16:26 +03:00
Tuğcan Topaloğlu ef5a0c780a update https enforcement for tailscale, comprehensive readme 2026-02-16 10:14:11 +03:00
Tuğcan Topaloğlu 417ba5197e fix qr: svg as base64 data uri img, remove external api 2026-02-16 10:06:44 +03:00
Tuğcan Topaloğlu 5dbf8982f5 use qrserver api for reliable qr code generation 2026-02-16 10:05:32 +03:00
Tuğcan Topaloğlu af794317ab only count login attempts for rate limiting, not api auth failures 2026-02-16 10:03:04 +03:00
Tuğcan Topaloğlu 77c4f71a0d fix otpauth uri format for authenticator compatibility 2026-02-16 10:01:39 +03:00
Tuğcan Topaloğlu ef9ce021c9 require totp verification before enabling mfa 2026-02-16 09:54:43 +03:00
Tuğcan Topaloğlu 9a46ded448 fix registration screen display and csp img-src 2026-02-16 09:42:18 +03:00
Tuğcan Topaloğlu 4da767486d replace token auth with user/password, add https enforcement 2026-02-16 09:27:07 +03:00
Tuğcan Topaloğlu b79ee21aed fix medium and low security issues 2026-02-16 09:02:10 +03:00
Tuğcan Topaloğlu 7c79a48882 add auth and security hardening 2026-02-16 08:53:48 +03:00
Tuğcan Topaloğluanddavelutztx 09dfb2f6cf add files section with security hardening
- whitelist-based file access (no path traversal)
- remove absolute paths from API response
- 1MB POST body size limit
- read-only config files (openclaw-config.json, .service)
- backup before overwrite (.bak)
- input type validation on POST
- atomic writes (tmp + rename)

Co-authored-by: davelutztx
2026-02-16 08:36:04 +03:00
Tuğcan Topaloğlu f47f4b56e4 add macOS compatibility for system stats and services 2026-02-16 08:30:43 +03:00
Tuğcan Topaloğlu 2703cc1c6a add input validation: whitelist services, sanitize IDs, block path traversal 2026-02-10 17:59:05 +03:00
Tuğcan Topaloğlu c37ee44cdf Initial release: OpenClaw Agent Dashboard v1.0.0 2026-02-10 12:11:36 +03:00