This commit is contained in:
legop3
2026-05-04 13:21:23 -04:00
parent f4eab8776f
commit 49987c445f
3 changed files with 32 additions and 7 deletions
@@ -22,6 +22,7 @@ Actions:
Chat output: Chat output:
- Always use English. - Always use English.
- Not everyone is always talking to you. Sometimes people talk to themselves or others.
- If speaking, send one short in-character live-chat line. - If speaking, send one short in-character live-chat line.
- Keep it concise and informal (roughly 3-14 words). - Keep it concise and informal (roughly 3-14 words).
- Chat output must be spoken text only. - Chat output must be spoken text only.
@@ -17,9 +17,10 @@ function toStateUpdate({ mode, homeAssistantState, neatoState, liftState, roster
} }
const roverLines = (Array.isArray(roster) ? roster : []).slice(0, 6).map((rover) => { const roverLines = (Array.isArray(roster) ? roster : []).slice(0, 6).map((rover) => {
const roverId = rover?.id || 'unknown'; const roverId = rover?.id || 'unknown';
const driver = rover?.driverNickname || 'none'; const drivers = Array.isArray(rover?.drivers) ? rover.drivers.filter(Boolean) : [];
const driver = drivers.length ? drivers.join(',') : 'none';
const status = rover?.statusTag || 'unknown'; const status = rover?.statusTag || 'unknown';
return `- ${roverId} status=${status} driver=${driver}`; return `- ${roverId} status=${status} drivers=${driver}`;
}); });
if (roverLines.length) { if (roverLines.length) {
lines.push('rovers:'); lines.push('rovers:');
@@ -126,11 +126,34 @@ function buildRosterSummary() {
return roverManager return roverManager
.getRoster() .getRoster()
.filter((rover) => roverManager.canReplayRoverId(rover?.id)) .filter((rover) => roverManager.canReplayRoverId(rover?.id))
.map((rover) => ({ .map((rover) => {
id: rover?.id || 'unknown', const roverId = String(rover?.id || '');
statusTag: rover?.statusTag || 'unknown', const record = roverManager.rovers.get(roverId);
driverNickname: rover?.driverNickname || null, const driverSocketIds = record?.drivers ? Array.from(record.drivers) : [];
})); const drivers = driverSocketIds
.map((socketId) => {
const socket = io.sockets.sockets.get(socketId);
const nickname = String(socket?.data?.nickname || socket?.data?.user?.username || '').trim();
return nickname || socketId;
})
.filter(Boolean);
const sensors = record?.lastSensor?.decoded || {};
const docked = Boolean(record?.docked || sensors?.chargingSources?.homeBase);
const oiMode = String(sensors?.oiMode?.label || '').toLowerCase();
let statusTag = 'docking';
if (docked) {
statusTag = 'docked';
} else if (oiMode === 'safe' || oiMode === 'full') {
statusTag = 'driving';
} else if (oiMode === 'passive' || oiMode === 'off' || oiMode === 'unknown' || !oiMode) {
statusTag = 'docking';
}
return {
id: roverId || 'unknown',
statusTag,
drivers,
};
});
} }
function computeTriggerReason() { function computeTriggerReason() {