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 ───────────────────────────
|
// ── 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(() => {
|
const interval = setInterval(() => {
|
||||||
|
try {
|
||||||
const subagenten = laufendeSubagenten();
|
const subagenten = laufendeSubagenten();
|
||||||
if (subagenten.length === 0) return; // kein laufender Subagent ⇒ idle ist erlaubt
|
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.`,
|
`→ Nimm die watch_subagents-Überwachung sofort wieder auf und halte sie, bis ALLE Subagenten fertig sind.`,
|
||||||
);
|
);
|
||||||
} catch {}
|
} catch {}
|
||||||
|
} catch {
|
||||||
|
// Defensive Notbremse: Das Intervall darf den Pi-Prozess NIE crashen.
|
||||||
|
}
|
||||||
}, CHECK_INTERVAL_MS);
|
}, CHECK_INTERVAL_MS);
|
||||||
|
|
||||||
pi.on("session_shutdown", async () => {
|
pi.on("session_shutdown", async () => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue