Commit Graph
127 Commits
Author SHA1 Message Date
Claude 9a1425b137 Fix talkkonnect status detection using systemd service file
The status check was showing "Not installed" even after successful
installation because it relied on PATH and file checks that weren't
working reliably.

Changes:
- Check for /etc/systemd/system/talkkonnect.service first
- This is the most reliable indicator of installation
- Systemd service file is created during install and requires root
- Falls back to command/file checks if service file doesn't exist

This ensures status shows correctly immediately after installation.
2025-11-23 01:03:04 +00:00
Claude f6f2202e32 Stop running talkkonnect before binary replacement
Fixes "Text file busy" error and "Not installed" status:

1. **Stop service before install** (lines 535-547)
   - Check if talkkonnect service is running
   - Stop systemd service if active
   - Kill any stray processes
   - Sleep 1 second to ensure file is released
   - Then copy the new binary

2. **Fix status check** (line 72)
   - Changed from $HOME/go/bin/talkkonnect
   - To /home/$KIOSK_USER/go/bin/talkkonnect
   - Now correctly detects installed binary

3. **Separate build and install steps**
   - Build completes inside first sudo block
   - Installation happens in second sudo block after stopping service
   - Clean error handling for each step

This matches the working talkkonnect_complete_install.sh approach.
2025-11-23 00:56:03 +00:00
Claude 387cbec099 Move binary installation inside sudo block to fix permission check
The build was succeeding but the post-build verification was failing
because it tried to check /home/kiosk/talkkonnect-binary from outside
the sudo -u kiosk block.

Changes:
- Move binary verification and installation inside the sudo -u block
- Use ~ instead of /home/$KIOSK_USER (more reliable inside sudo)
- Remove redundant chmod/chown after sudo block
- Binary now installed while running as kiosk user

This matches the approach from talkkonnect_complete_install.sh where
all file operations happen inside the user context.
2025-11-23 00:50:52 +00:00
Claude e6d0374538 Use kiosk home directory for talkkonnect build (fixes permission errors)
Changed from /tmp to ~/talkkonnect to match working script approach:
- Clone to /home/$KIOSK_USER/talkkonnect instead of /tmp/talkkonnect-src
- Build to ~/talkkonnect-binary then copy to ~/go/bin/talkkonnect
- Run all operations as kiosk user from the start
- No chown needed - user owns their own home directory

This eliminates all "Permission denied" errors when:
- Creating vendor directory
- Removing old source files
- Building the binary

Matches the proven approach from talkkonnect_complete_install.sh
2025-11-22 23:50:15 +00:00
Claude d16ca7a408 Fix vendor directory permission denied error
Added chown after git clone to give kiosk user ownership of the
/tmp/talkkonnect-src directory. This allows 'go mod vendor' to
successfully create the vendor directory when running as kiosk user.

Without this fix, the build would fail with:
  "go: mkdir /tmp/talkkonnect-src/vendor: permission denied"
  "Warning: gopus not found in vendor directory"
  "[ERROR] Binary not executable after build"
2025-11-22 23:39:37 +00:00
Claude d544c5a702 Fix talkkonnect x86_64 build failure with Opus patch
Critical fixes to resolve "[ERROR] Binary not executable after build":

1. **Opus x86_64 Compatibility Patch**
   - Added gopus library patch to use system libopus for x86_64
   - The embedded Opus source in gopus is ARM-optimized and incomplete for x86_64
   - Now uses pkg-config to link against system libopus library

2. **Vendored Dependencies**
   - Added `go mod vendor` to create vendored dependencies
   - Build now uses `-mod=vendor` flag to ensure patched gopus is used

3. **Enhanced Build Process**
   - Set CGO_CFLAGS and CGO_LDFLAGS for proper Opus compilation
   - Build in cmd/talkkonnect directory (correct location)
   - Added build-essential and pkg-config to dependencies

4. **Improved XML Configuration**
   - Updated to modern talkkonnect/xml document type
   - Added critical voicetargets section to prevent crashes
   - Added proper global settings structure
   - Created .config/talkkonnect directory for logs

5. **Additional Dependencies**
   - Added libopus0, libopusfile-dev for complete Opus support
   - Added build-essential and pkg-config for compilation

This integrates the working approach from talkkonnect_complete_install.sh
into the setup_intercom.sh script.
2025-11-22 23:24:03 +00:00
outis1one 79b59e6df8 Add files via upload 2025-11-22 18:17:29 -05:00
outis1one ee7a7c1bc4 Merge pull request #35 from outis1one/claude/add-intercom-ptt-015jdwyCAZbQmbow1Jcbnxc4
Claude/add intercom ptt 015jdwy ca zb qmbow1 jcbnxc4
2025-11-22 18:02:58 -05:00
Claude e4154d2ed8 Integrate standalone intercom setup with install_kiosk_0.9.6
Changes:
- Add SCRIPT_DIR variable for locating companion scripts
- Update addon_talkkonnect_intercom() to launch setup_intercom.sh
- Replace 134 lines of duplicate code with 30-line integration
- Update INTERCOM_README.md with clear usage instructions

Benefits:
- Single source of truth for intercom functionality
- Easier maintenance (update only setup_intercom.sh)
- Cleaner separation: install_kiosk handles UBK, setup_intercom handles intercom
- Both scripts work standalone or together automatically

Usage:
- Option 1: Run install_kiosk_0.9.6.sh → Addons → Intercom (option 4)
- Option 2: Run setup_intercom.sh directly
- Both scripts must be in same directory (automatic when cloning repo)
2025-11-22 22:15:42 +00:00
Claude 8df3695f28 Add standalone intercom setup system (Mumble/Talkkonnect)
Created modular, standalone intercom system to avoid bloating the
10,000+ line main install script.

New Files:
- setup_intercom.sh: Complete standalone installation and management
  * Install Murmur server (one kiosk becomes the server)
  * Install talkkonnect client (connect to existing server)
  * Install both (all-in-one setup)
  * Full service management (start/stop/restart)
  * Configuration tools
  * Log viewing
  * Uninstall options

- INTERCOM_README.md: Comprehensive documentation
  * Quick start guide
  * Use cases and scenarios
  * Multi-kiosk setup instructions
  * Troubleshooting guide
  * Integration instructions
  * Technical details

- integrate_intercom.sh: Integration helper
  * Shows how to wire into main install script
  * Example menu integration code
  * Alternative sourcing method

Features:
✓ Menu-driven interface with dynamic options
✓ Status display (installed/running state)
✓ Server configuration (password, port, welcome text)
✓ Client configuration (server, credentials, channel)
✓ Service management (enable/disable/start/stop)
✓ Log viewing for diagnostics
✓ Clean uninstallation

Use Cases:
1. Single kiosk (server + client)
2. Multi-kiosk (one server, multiple clients)
3. Connect to external Mumble server
4. Other devices can connect (desktop/mobile Mumble apps)

Technical:
- Murmur server on port 64738
- talkkonnect built from source with Go
- Systemd service management
- Audio through ALSA/PipeWire
- PTT via keyboard (default: spacebar)

Next Steps:
- Test installation on clean system
- Wire into main install script addon menu
- Consider auto-discovery for multi-kiosk setups
2025-11-22 22:06:04 +00:00
Claude 40029c6978 WIP: Add intercom configuration framework for v0.9.6
Added comprehensive configuration system for WebRTC intercom feature:

Configuration:
- New configure_intercom() function with 4-question setup
- Friendly name, PTT key, lock mode, response mode
- Auto-discovery messaging and phone access URL display

Data Model:
- Added intercom globals to main.js (enableIntercom, intercomName, etc.)
- Added intercom state variables (peers, lastCaller, selectors)
- Config loading/saving with full intercom settings persistence

Installation Flow:
- configure_intercom() called during [7-11/27] setup phase
- Integrates with existing configuration workflow

Release Notes:
- Updated to v0.9.6 with detailed feature documentation
- Documents PWA approach, auto-discovery, conversation logic

Still TODO for full implementation:
- WebSocket signaling server (~200 lines)
- mDNS auto-discovery with bonjour (~100 lines)
- WebRTC peer connection handling (~300 lines)
- PTT media key handler (~100 lines)
- Target selector UI (~150 lines)
- PWA HTML client (~400 lines)
- npm package installation (ws, bonjour)

This commit provides the configuration framework. Core intercom
functionality to be added in subsequent commits.
2025-11-22 20:32:20 +00:00
outis1one 2908ec5cf1 Delete update_electron.sh 2025-11-22 13:20:35 -05:00
outis1one d33381a479 Delete update_0.9.2_fixes.sh 2025-11-22 13:20:14 -05:00
outis1one e1db1be069 Delete install_kiosk_0.9.5-9.sh 2025-11-22 13:19:58 -05:00
outis1one 9fbd9981a9 Delete install_kiosk_0.9.5-8.sh 2025-11-22 13:19:46 -05:00
outis1one 432937388c Delete install_kiosk_0.9.5-7.sh 2025-11-22 13:19:30 -05:00
outis1one 737ca83be9 Delete install_kiosk_0.9.5-6.sh 2025-11-22 13:18:32 -05:00
outis1one b9296f7d11 Delete install_kiosk_0.9.5-5.sh 2025-11-22 13:17:49 -05:00
outis1one 8e9da0f6ce Delete install_kiosk_0.9.5-4.sh 2025-11-22 13:17:36 -05:00
outis1one 32a4b1014e Delete install_kiosk_0.9.5-3.sh 2025-11-22 13:17:21 -05:00
outis1one 8e0ccb08d2 Delete install_kiosk_0.9.5-2.sh 2025-11-22 13:16:39 -05:00
outis1one 3c6d11f0c5 Delete install_kiosk_0.9.5-10.sh 2025-11-22 13:16:24 -05:00
outis1one aa8b466d77 Delete install_kiosk_0.9.4.sh 2025-11-22 13:16:06 -05:00
outis1one d35794ce71 Delete install_kiosk_0.9.2.sh 2025-11-22 13:15:50 -05:00
outis1one 4e508a1f98 Delete install_kiosk_0.9.1.sh 2025-11-22 13:15:34 -05:00
outis1one 566915af3f Merge pull request #34 from outis1one/claude/add-intercom-ptt-015jdwyCAZbQmbow1Jcbnxc4
Add install_kiosk_0.9.5-12.sh as base for intercom feature
2025-11-22 13:14:34 -05:00
outis1one 18af7e6fee Delete install_kiosk_0.9.0.sh 2025-11-22 13:05:03 -05:00
outis1one 7cef9c2690 Delete diagnose_pause_button.sh 2025-11-22 13:04:53 -05:00
outis1one f51265c67b Delete MANUAL_FIX_pause_button.txt 2025-11-22 13:04:43 -05:00
outis1one bfb41bc532 Delete check_pause_button.sh 2025-11-22 13:04:34 -05:00
Claude 204ce500a4 Add install_kiosk_0.9.5-12.sh as base for intercom feature
Retrieved latest version from claude/remove-lockout-prompt branch to use
as foundation for adding intercom/PTT functionality in version 0.9.6.
2025-11-22 18:03:38 +00:00
outis1one 1436712bf9 Merge pull request #33 from outis1one/claude/remove-lockout-prompt-01V9MEquAmtuNibvnnJE4VLK
Claude/remove lockout prompt 01 v9 m equ amtu nibvnn je4 vlk
2025-11-22 10:43:22 -05:00
Claude 44cfd63ebf Fix: Accept uppercase Y in installation prompt
The installation prompt was only accepting lowercase 'y', causing the
script to exit when users entered uppercase 'Y'. This fix aligns the
prompt behavior with all other y/n prompts in the script by using
case-insensitive pattern matching (=~ ^[Yy]$).

Fixes issue where installation would bail after selecting Y to proceed.
2025-11-22 15:42:06 +00:00
Claude 6a96de4073 Fix: Resolve BrowserView attachment error on password unlock
Fixes JavaScript error "given browserview is not attached to the window"
that occurred when unlocking the screen after boot with password protection.

Changes to unlockScreen() function:
- Add try-catch around hidden view restoration to prevent crashes
- Ensure view is attached with addBrowserView() before setTopBrowserView()
- Add fallback to regular views if hidden view restoration fails
- Validate currentIndex is within bounds before using it
- Check views.length>0 before attempting to attach views

This ensures safe view restoration in all unlock scenarios, particularly
when unlocking immediately after boot with password protection enabled.
2025-11-22 12:59:22 +00:00
outis1one 9242ae8a29 Merge pull request #32 from outis1one/claude/remove-lockout-prompt-01V9MEquAmtuNibvnnJE4VLK
Release v0.9.5-10: Enhanced password lockout security
2025-11-22 00:11:24 -05:00
Claude c9799153a3 Release v0.9.5-10: Enhanced password lockout security
Key changes:
- Remove time-based lockout prompt ("Only enforce lockout during specific hours?")
- Detach all browser views when locked to prevent content visibility
- Show power menu on solid black screen (lockoutWindow) when locked
- Password protection now always active when enabled (more reliable)

Fixes:
- Users can no longer see URLs or content when password screen is active
- Pressing Ctrl+Alt+Delete shows power menu on solid screen, not over content
- All browser views completely hidden until password is entered
2025-11-22 05:05:57 +00:00
outis1one 64a9d13f8a Add files via upload 2025-11-21 23:53:18 -05:00
outis1one 9423267177 Merge pull request #31 from outis1one/claude/debug-display-manager-014VwUsK84h5QekhULepX4WE
Claude/debug display manager 014 vw us k84h5 qekh u lep x4 we
2025-11-21 23:50:27 -05:00
outis1one e5a639a96f Update install_kiosk_0.9.5-9.sh 2025-11-21 23:23:22 -05:00
Claude 40d5ed71b2 v0.9.5-9: CRITICAL fix - inactivity lockout now works (simplified)
CRITICAL FIX: Removed lockoutActivityTime reset from markActivity()
- markActivity() was resetting lockoutActivityTime on EVERY activity
- This prevented inactivity lockout from EVER triggering
- Now lockout timer only resets when user unlocks or selects extension

ROOT CAUSE:
The markActivity() function was resetting lockoutActivityTime (line 3904):
  if(enablePasswordProtection && lockoutTimeout > 0){
    lockoutActivityTime = now;  // ← PROBLEM
  }

markActivity() is called on EVERY:
- Mouse move
- Mouse click
- Keyboard press
- Page load
- Focus change

Result: lockoutActivityTime was CONSTANTLY being reset, so lockout could
NEVER reach the configured timeout (user reported 17 minutes wasn't working).

FIX:
Removed the lockoutActivityTime reset from markActivity() entirely (line 3908).

Now lockoutActivityTime only resets when:
1. User unlocks screen (unlockScreen() function)
2. User selects time extension (showPauseDialog/showInactivityPrompt)

This is the correct, simple behavior: lockout should trigger after X minutes
of inactivity, period. If user wants to extend, they can select an extension.

USER REPORT:
- Scheduled lockout works ✓ (lock at 15:00)
- Inactivity lockout doesn't work ✗ (lock after 17 min idle)
- This fix addresses the inactivity lockout issue

SIMPLIFIED: Removed unnecessary complexity added in v0.9.5-7 and v0.9.5-8.
The simple fix was just to stop resetting the timer on every activity.
2025-11-22 04:19:50 +00:00
Claude 2cfa029a7a v0.9.5-8: CRITICAL fix - extensions now reset lockout activity timer
CRITICAL FIX: Extensions now properly reset lockout activity timer
- Pause button extensions now reset lockoutActivityTime when selected
- Manual site timeout extensions now reset lockoutActivityTime when selected
- Prevents lockout from counting idle time accumulated BEFORE extension
- Lockout timer now truly starts fresh when user selects an extension

ROOT CAUSE (v0.9.5-7 was incomplete):
In v0.9.5-7, I added code to checkLockoutTimer() to SKIP lockout checks during
active extensions. This prevented lockout from triggering during the extension
period. However, the extension handlers themselves didn't reset lockoutActivityTime.

TWO PLACES WERE MISSING lockoutActivityTime reset:

1. showInactivityPrompt() - Manual site timeout extensions (line 4632)
   When user selects "15 minutes" on manual site inactivity prompt:
   ✓ Set inactivityExtensionUntil = now + 15min
   ✓ Set lastUserInteraction = now
   ✓ Set siteStartTime = now
   ✗ Did NOT set lockoutActivityTime = now

2. showPauseDialog() - Pause button extensions (line 4680)
   When user clicks pause button and selects "15 minutes":
   ✓ Set inactivityExtensionUntil = now + 15min
   ✓ Set lastUserInteraction = now
   ✓ Set siteStartTime = now
   ✗ Did NOT set lockoutActivityTime = now

BROKEN SCENARIO IN v0.9.5-7:
- Lockout configured for 30 minutes of inactivity
- User is idle for 10 minutes
- User clicks "15 minutes" extension
- lockoutActivityTime still shows 10 minutes ago (NOT reset)
- Extension blocks lockout for 15 minutes (v0.9.5-7 fix working)
- After 15 minutes, extension expires
- v0.9.5-7 code resets lockoutActivityTime to now
- Lockout would happen 30 minutes later

The problem: This means lockout NEVER enforced the configured timeout if
users kept selecting extensions, because each extension expiration reset
the lockout timer.

FIX IN v0.9.5-8:
Added lockoutActivityTime = now to BOTH extension handlers:
- Lines 4637-4641: Manual site inactivity prompt extension handler
- Lines 4684-4688: Pause button extension handler

NEW BEHAVIOR:
- User idle for 10 minutes
- User clicks "15 minutes" extension
- lockoutActivityTime = now (RESET on extension selection)
- User is now considered "active" (selected extension = user interaction)
- Extension blocks lockout for 15 minutes
- After 15 minutes, lockoutActivityTime shows 15 minutes ago
- Lockout happens 30 minutes after extension selected (at 15 + 30 = 45 min total)

This is more intuitive: selecting an extension is a user interaction that
proves the user is present, so lockout timer should start fresh.

Includes all fixes from v0.9.5-7 (checkLockoutTimer respects extensions)
2025-11-22 03:52:42 +00:00
Claude 1a3bb99696 v0.9.5-7: CRITICAL fix for inactivity lockout ignoring time extensions
CRITICAL FIX: Inactivity lockout now respects time extensions
- Lockout timer was completely ignoring pause button extensions
- Lockout timer was ignoring manual site timeout extensions
- Added inactivityExtensionUntil check to checkLockoutTimer() function
- Time extensions now properly prevent BOTH site timeout AND lockout
- When extension expires, lockout timer resets (doesn't trigger immediately)

FIXED: Manual sites (duration: 0) now fully support time extensions
- Pause button extensions now work on manual sites
- Manual site timeout extensions now prevent lockout
- Extensions apply to both rotation blocking AND lockout prevention

ROOT CAUSE:
The checkLockoutTimer() function (line 4061) only checked:
- lockoutActivityTime vs lockoutTimeout
- Did NOT check inactivityExtensionUntil

This meant when a user clicked "15 minutes" on pause button:
✓ Site rotation/timeout was blocked (lines 4317, 4375 checked extension)
✗ Inactivity lockout still triggered after configured time

EXAMPLE SCENARIO THAT WAS BROKEN:
- Manual site with 2 min inactivity timeout to return home
- Lockout after 5 minutes of inactivity
- User idle for 1m 50s, clicks "15 minutes" extension
- Expected: Can stay for 15 more minutes
- Actual v0.9.5-6:
  * Home return prompt blocked ✓
  * Lockout happens at 5 min idle ✗
- Fixed v0.9.5-7:
  * Home return prompt blocked ✓
  * Lockout also blocked for 15 min ✓

FIX (lines 4083-4100):
Now checkLockoutTimer() checks inactivityExtensionUntil FIRST:
1. If within extension period: return early (skip lockout check)
2. If extension just expired: reset lockoutActivityTime (prevent immediate trigger)
3. Then check normal lockout timeout

This matches the pattern used in rotation (line 4317) and home return (line 4375).

Includes all fixes from v0.9.5-6 (boot password sequence, limited power menu)
2025-11-22 03:16:40 +00:00
Claude bdc5a9c196 v0.9.5-6: CRITICAL fix for boot password sequence and power menu
CRITICAL SECURITY FIX #1: Boot password now required BEFORE showing websites
- Password screen now appears IMMEDIATELY on boot (no website flash)
- Websites and rotation timer only start AFTER successful password entry
- Root cause: attachView() was called before checking boot flag
- Fix: Reordered code to check boot flag FIRST, only call attachView() if no boot
- unlockScreen() now starts master timer when unlocking from boot password

CRITICAL SECURITY FIX #2: Limited power menu when locked out
- Ctrl+Alt+Del when locked now shows LIMITED menu: Shutdown/Restart/Cancel
- NO Reload option available when locked (prevents bypass)
- Full menu (with Reload) only available when unlocked
- Still allows emergency shutdown/restart without password
- Message clearly indicates "System is locked. Limited options available."

ROOT CAUSE OF BOOT PASSWORD BYPASS:
In v0.9.5-5, the code sequence was:
1. attachView(startIndex) - shows website
2. Check boot flag - if exists, show password screen

This meant users saw the website for ~1 second, then password screen appeared.
Pressing Ctrl+Alt+Del at that moment would reload and bypass the password.

NEW SEQUENCE in v0.9.5-6:
1. Check boot flag FIRST
2. If boot flag exists: show password screen, DON'T load websites
3. If no boot flag: load websites normally
4. When password entered: attachView() and startMasterTimer()

Includes all fixes from v0.9.5-5 and v0.9.5-4
2025-11-21 22:56:58 +00:00
Claude a43e802810 v0.9.5-5: CRITICAL fix for boot password bypass via Ctrl+Alt+Del
CRITICAL SECURITY FIX:
- Fixed Ctrl+Alt+Del bypassing boot password requirement
  * Added isLockedOut check to showPowerMenu() function
  * Power menu (Shutdown/Restart/Reload) now blocked when system is locked out
  * Prevents bypassing boot password via Reload option
  * Also prevents bypassing inactivity lockout and time-based lockout

ROOT CAUSE:
The showPowerMenu() function was missing the isLockedOut check that other
navigation functions (nextTab, prevTab) already had. This allowed users to
press Ctrl+Alt+Del during boot password screen, select "Reload", and bypass
the password requirement entirely.

NAVIGATION TROUBLESHOOTING:
Added troubleshooting notes for users experiencing navigation issues:
- Check config.json for hidden sites (duration: -1)
- Hidden sites don't count toward navigation
- Need at least 2 visible sites for Ctrl+Tab/swipe to work

Includes all fixes from v0.9.5-4 (polkit restrictions, X server hardening,
autostart compatibility, xbindkeys fixes)
2025-11-21 22:31:48 +00:00
Claude 6201b2cc4d v0.9.5-4: CRITICAL security and compatibility fixes
This release addresses critical security vulnerabilities and compatibility issues:

CRITICAL SECURITY FIXES:
- Fix Ctrl+Alt+Del bypass vulnerability
  * Restricted polkit permissions from org.freedesktop.login1.* (ALL actions)
    to only specific power operations (power-off, reboot, suspend)
  * Prevents session switching and VT access that bypassed kiosk security
- Add X server ServerFlags to block dangerous key combinations
  * DontVTSwitch: Disable VT switching (Ctrl+Alt+F1-F12)
  * DontZap: Disable X server kill (Ctrl+Alt+Backspace)
  * AllowClosedownGrabs: Prevent client disconnection exploits
- Enhanced LightDM greeter security
  * Hide user list, disable manual login, disable guest account

COMPATIBILITY FIXES:
- Fix autostart script errors ([[: not found)
  * Converted bash-specific [[ ]] to POSIX-compliant [ ] syntax
  * Fixed display schedule and quiet hours conditional logic
- Fix xbindkeys startup errors
  * Now creates empty .xbindkeysrc file to prevent errors

Includes all fixes from v0.9.5-3 (time extensions, manual navigation)
2025-11-21 22:05:55 +00:00
Claude e8ad3bbf0d v0.9.5-3: CRITICAL security and compatibility fixes
CRITICAL SECURITY FIXES:
- Fix Ctrl+Alt+Del bypass vulnerability by restricting polkit permissions
  * Changed org.freedesktop.login1.* to specific power operations only
  * Prevents session/VT switching that bypassed kiosk security
- Add X server ServerFlags to block dangerous key combinations
  * Disable VT switching (Ctrl+Alt+F1-F12) with DontVTSwitch
  * Disable X server kill (Ctrl+Alt+Backspace) with DontZap
  * Add AllowClosedownGrabs protection
- Enhance LightDM greeter security settings

COMPATIBILITY FIXES:
- Fix autostart script errors ([[: not found) by converting bash-specific
  [[ ]] syntax to POSIX-compliant [ ] syntax
- Fix xbindkeys errors by creating empty .xbindkeysrc file

These fixes address:
1. Security vulnerability where Ctrl+Alt+Del could bypass password login
2. /home/kiosk/.config/openbox/autostart: 125: [[: not found errors
3. xbindkeys_autostart: line 24: CONF: unbound variable errors
2025-11-21 22:00:20 +00:00
outis1one 7228cbb6bb Merge pull request #30 from outis1one/claude/start-with-zero-01JzSswmEkEYSsVFuUf88YPQ
CRITICAL FIX: Remove inactivityExtensionUntil=0 from markActivity()
2025-11-20 22:53:03 -05:00
Claude 3884f06959 CRITICAL FIX: Remove inactivityExtensionUntil=0 from markActivity()
This was the root cause of extensions not working. When user clicked
extension buttons (15 min, 30 min, etc.), that click triggered markActivity()
which immediately cleared the extension that was just set.

Now extensions work correctly - they only expire when:
- Time runs out naturally
- User explicitly goes home
- User cancels the extension

This fixes:
- Pause button extensions not working (rotating after 1 min)
- Manual site timeout extensions not working (prompt after 1 min)
- Both rotation and inactivity timer extensions
2025-11-21 02:54:47 +00:00
outis1one d5377d1e22 Merge pull request #29 from outis1one/claude/start-with-zero-01JzSswmEkEYSsVFuUf88YPQ
Claude/start with zero 01 jz sswm ek ey ss v fu uf88 ypq
2025-11-20 20:56:17 -05:00
Claude f8ddfa954c Update script header to v0.9.5-2 with complete release notes 2025-11-21 01:55:30 +00:00