overseer v2 1

This commit is contained in:
legop3
2026-05-03 22:51:50 -04:00
parent 32e4afdbe8
commit 850f89c8ed
26 changed files with 929 additions and 128 deletions
@@ -0,0 +1,6 @@
module.exports = {
signature: 'chat_say(text)',
availability() {
return { available: true, reason: null };
},
};
@@ -0,0 +1,14 @@
module.exports = {
signature: 'ha_set_entity(entity_id, state)',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (ctx.homeAssistantState?.lightPolicy?.lockedOn) {
return { available: false, reason: 'policy_lock:lights_locked_on' };
}
if (!ctx.homeAssistantState?.connected) return { available: false, reason: 'unavailable' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,42 @@
const chatSay = require('./chatSay');
const memoryRead = require('./memoryRead');
const memoryWrite = require('./memoryWrite');
const liftUp = require('./liftUp');
const liftDown = require('./liftDown');
const neatoStart = require('./neatoStart');
const neatoSendHome = require('./neatoSendHome');
const neatoLocate = require('./neatoLocate');
const neatoClearErrors = require('./neatoClearErrors');
const haSetEntity = require('./haSetEntity');
const TOOL_DEFINITIONS = [
chatSay,
memoryRead,
memoryWrite,
liftUp,
liftDown,
neatoStart,
neatoSendHome,
neatoLocate,
neatoClearErrors,
haSetEntity,
];
function evaluateTools(context = {}) {
const available = [];
const blocked = [];
TOOL_DEFINITIONS.forEach((tool) => {
const result = typeof tool.availability === 'function' ? tool.availability(context) : { available: false, reason: 'unavailable' };
if (result?.available) {
available.push(tool.signature);
return;
}
blocked.push({ tool: tool.signature, reason: result?.reason || 'unavailable' });
});
return { available, blocked };
}
module.exports = {
TOOL_DEFINITIONS,
evaluateTools,
};
@@ -0,0 +1,12 @@
module.exports = {
signature: 'lift_down()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.liftState?.connected) return { available: false, reason: 'unavailable' };
if (ctx.liftState?.busy) return { available: false, reason: 'busy' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,12 @@
module.exports = {
signature: 'lift_up()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.liftState?.connected) return { available: false, reason: 'unavailable' };
if (ctx.liftState?.busy) return { available: false, reason: 'busy' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,6 @@
module.exports = {
signature: 'memory_read()',
availability() {
return { available: true, reason: null };
},
};
@@ -0,0 +1,6 @@
module.exports = {
signature: 'memory_write(slot, text)',
availability() {
return { available: true, reason: null };
},
};
@@ -0,0 +1,11 @@
module.exports = {
signature: 'neato_clear_errors()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.neatoState?.connected) return { available: false, reason: 'unavailable' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,11 @@
module.exports = {
signature: 'neato_locate()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.neatoState?.connected) return { available: false, reason: 'unavailable' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,11 @@
module.exports = {
signature: 'neato_send_home()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.neatoState?.connected) return { available: false, reason: 'unavailable' };
return { available: true, reason: null };
},
};
@@ -0,0 +1,11 @@
module.exports = {
signature: 'neato_start()',
availability(ctx = {}) {
const mode = String(ctx.mode || '');
if (mode === 'admin' || mode === 'lockdown') {
return { available: false, reason: `policy_lock:site_mode_${mode}` };
}
if (!ctx.neatoState?.connected) return { available: false, reason: 'unavailable' };
return { available: true, reason: null };
},
};