fix(daemon): improve error handling and security (#445)
* fix(beads): cache version check and add timeout to prevent cli lag
* fix(mail_queue): add nil check for queue config
Prevents potential nil pointer panic when queue config exists
in map but has nil value. Added || queueCfg == nil check to
the queue lookup condition in runMailClaim function.
Fixes potential panic that could occur if a queue entry exists
in config but with a nil value.
* fix(migrate_agents_test): fix icon expectations to match actual output
The printMigrationResult function uses icons with two leading spaces
(" ✓", " ⊘", " ✗") but the test expected icons without spaces.
This fixes the test expectations to match the actual output format.
* fix(hook): handle error from events.LogFeed
Previously the error from LogFeed was silently ignored with _.
Now we log the error to stderr at warning level but don't fail
the operation since the primary hook action succeeded.
* fix(tmux): security and error handling improvements
- Fix unchecked regexp error in IsClaudeRunning (CVE-like)
- Add input sanitization to SetPaneDiedHook to prevent shell injection
- Add session name validation to SetDynamicStatus
- Sanitize mail from/subject in SendNotificationBanner
- Return error on parse failure in GetEnvironment
- Track skipped lines in ListSessionIDs for debuggability
See: tmux.fix for full analysis
* fix(daemon): improve error handling and security
- Capture stderr in syncWorkspace for better debuggability
- Fail fast on git fetch failures to prevent stale code
- Add logging to previously silent bd list errors
- Change notification state file permissions to 0600
- Improve error messages with actual stderr content
This prevents agents from starting with stale code and provides
better visibility into daemon operations.
This commit is contained in:
@@ -115,7 +115,7 @@ func (m *NotificationManager) RecordSend(session, slot, message string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(m.slotPath(session, slot), data, 0644)
|
||||
return os.WriteFile(m.slotPath(session, slot), data, 0600)
|
||||
}
|
||||
|
||||
// MarkConsumed marks a slot's notification as consumed (agent responded).
|
||||
@@ -137,7 +137,7 @@ func (m *NotificationManager) MarkConsumed(session, slot string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(m.slotPath(session, slot), data, 0644)
|
||||
return os.WriteFile(m.slotPath(session, slot), data, 0600)
|
||||
}
|
||||
|
||||
// MarkSessionActive marks all slots for a session as consumed.
|
||||
|
||||
Reference in New Issue
Block a user