fix/extensions: rule-enforcer — setInterval gegen uncaught exceptions härten
Pis Loader (loader.js:298-311) kapselt nur die synchrone Factory-Ausführung. Das 30s-setInterval feuert später und läge außerhalb dieses Schutzes — eine Exception dort wäre uncaught und könnte den Pi-Prozess beenden. Daher: gesamter Intervall-Rumpf in try/catch. Empirisch verifiziert (Pi-SDK createAgentSession, agentDir=~/.pi/agent): - rule-enforcer.ts lädt mit 0 Fehlern (10/10 Extensions geladen) - absichtlich kaputte Test-Extension crasht Pi NICHT — Fehler isoliert, gesunde Extensions laden weiter, Session startet normal
This commit is contained in:
parent
115cc61627
commit
6371fb9f60
1 changed files with 58 additions and 50 deletions
|
|
@ -212,7 +212,12 @@ export default function (pi: ExtensionAPI) {
|
|||
}
|
||||
|
||||
// ── 30s Background-Check: Invariante erzwingen ───────────────────────────
|
||||
// WICHTIG: Der gesamte Rumpf ist in try/catch gekapselt. Pis Loader umschließt
|
||||
// nur die synchrone Factory-Ausführung (loader.js:298-311); dieses Intervall
|
||||
// feuert später und läge sonst AUSSERHALB von Pis Schutz — eine Exception hier
|
||||
// wäre uncaught und könnte den Pi-Prozess beenden. Darum: niemals werfen.
|
||||
const interval = setInterval(() => {
|
||||
try {
|
||||
const subagenten = laufendeSubagenten();
|
||||
if (subagenten.length === 0) return; // kein laufender Subagent ⇒ idle ist erlaubt
|
||||
|
||||
|
|
@ -268,6 +273,9 @@ export default function (pi: ExtensionAPI) {
|
|||
`→ Nimm die watch_subagents-Überwachung sofort wieder auf und halte sie, bis ALLE Subagenten fertig sind.`,
|
||||
);
|
||||
} catch {}
|
||||
} catch {
|
||||
// Defensive Notbremse: Das Intervall darf den Pi-Prozess NIE crashen.
|
||||
}
|
||||
}, CHECK_INTERVAL_MS);
|
||||
|
||||
pi.on("session_shutdown", async () => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue