Compare commits

...

1 Commits

Author SHA1 Message Date
Alexander Whitestone
770ed8c27a feat: give GOFAI worker structured actions and live goals
Some checks failed
CI / test (pull_request) Failing after 24s
CI / validate (pull_request) Failing after 16s
Review Approval Gate / verify-review (pull_request) Failing after 2s
2026-04-12 21:27:57 -04:00
2 changed files with 10 additions and 3 deletions

11
app.js
View File

@@ -648,6 +648,7 @@ function setupGOFAI() {
// Setup Planner
symbolicPlanner.addAction('Stabilize Matrix', { energy: 50 }, { stability: 1.0 });
symbolicPlanner.addAction('Shed Portal Load', { activePortals: 1 }, { activePortals: 0, stability: 0.8 });
}
function deriveGOFAIState(elapsed) {
@@ -657,6 +658,12 @@ function deriveGOFAIState(elapsed) {
return { stability, energy, activePortals: activePortal ? 1 : 0 };
}
function deriveGOFAIGoal(facts) {
if (facts.get('CRITICAL_DRAIN_PATTERN')) return { activePortals: 0, stability: 0.8 };
if (facts.get('UNSTABLE_OSCILLATION')) return { stability: 1.0 };
return { stability: Math.max(0.7, facts.get('stability') || 0.7) };
}
function updateGOFAI(delta, elapsed) {
const startTime = performance.now();
@@ -666,8 +673,8 @@ function updateGOFAI(delta, elapsed) {
// Run reasoning
if (Math.floor(elapsed * 2) > Math.floor((elapsed - delta) * 2)) {
symbolicEngine.reason();
pseLayer.offloadReasoning(Array.from(symbolicEngine.facts.entries()), symbolicEngine.rules.map((r) => ({ description: r.description, triggerFacts: r.triggerFacts })));
pseLayer.offloadPlanning(Object.fromEntries(symbolicEngine.facts), { stability: 1.0 }, symbolicPlanner.actions);
pseLayer.offloadReasoning(Array.from(symbolicEngine.facts.entries()), symbolicEngine.rules.map((r) => ({ description: r.description, triggerFacts: r.triggerFacts, workerOutcome: r.action(symbolicEngine.facts), confidence: 0.9 })));
pseLayer.offloadPlanning(Object.fromEntries(symbolicEngine.facts), deriveGOFAIGoal(symbolicEngine.facts), symbolicPlanner.actions);
document.getElementById("pse-task-count").innerText = parseInt(document.getElementById("pse-task-count").innerText) + 1;
metaLayer.reflect();

View File

@@ -24,7 +24,7 @@ self.onmessage = function(e) {
const { type, data } = e.data;
if (type === 'REASON') {
const factMap = new Map(data.facts || []);
const results = (data.rules || []).filter((rule) => (rule.triggerFacts || []).every((fact) => factMap.get(fact))).map((rule) => ({ rule: rule.description, outcome: 'OFF-THREAD MATCH' }));
const results = (data.rules || []).filter((rule) => (rule.triggerFacts || []).every((fact) => factMap.get(fact))).map((rule) => ({ rule: rule.description, outcome: rule.workerOutcome || 'OFF-THREAD MATCH', triggerFacts: rule.triggerFacts || [], confidence: rule.confidence ?? 0.5 }));
self.postMessage({ type: 'REASON_RESULT', results });
return;
}