From 1412a0fbb922200f04f240788093dc54fb3df459 Mon Sep 17 00:00:00 2001 From: pi-bot-01 Date: Fri, 13 Mar 2026 19:44:05 -0700 Subject: [PATCH] feat: conditional webhook/polling for openclaw compatibility - Webhook server + notification poller only start when needed: - pi-bot (no GITEA_HOOKS_URL): starts automatically (persistent session) - openclaw (GITEA_HOOKS_URL set): tools only, no server/poller - Override with GITEA_ENABLE_POLLING=1 to force polling in any mode - Tools (20 Gitea tools) always register regardless of mode --- pi-extension/index.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/pi-extension/index.ts b/pi-extension/index.ts index ef1675d..5f0a122 100644 --- a/pi-extension/index.ts +++ b/pi-extension/index.ts @@ -75,6 +75,12 @@ export default function (pi: ExtensionAPI) { // ── Lifecycle ──────────────────────────────────────────────────────────── + // GITEA_ENABLE_POLLING=1 opts in to running the webhook server + notification poller. + // pi-bot (persistent session): enabled by default + // openclaw (ephemeral sessions): disabled by default — events come via openclaw hooks + const enablePolling = process.env.GITEA_ENABLE_POLLING === "1" || + (!process.env.GITEA_HOOKS_URL && !process.env.OPENCLAW_HOOKS_URL); + pi.on("session_start", async (_event, ctx) => { console.log("[pi-gitea] Session started"); @@ -108,17 +114,23 @@ export default function (pi: ExtensionAPI) { }); } - try { - await startWebhookServer(pi); - await startPolling(pi); - } catch (err) { - console.error("[pi-gitea] Failed to start:", err); + if (enablePolling) { + try { + await startWebhookServer(pi); + await startPolling(pi); + } catch (err) { + console.error("[pi-gitea] Failed to start webhook/polling:", err); + } + } else { + console.log("[pi-gitea] Webhook server + polling disabled (openclaw mode — tools only)"); } }); pi.on("session_shutdown", async () => { console.log("[pi-gitea] Session shutting down"); - await stopWebhookServer(); - stopPolling(); + if (enablePolling) { + await stopWebhookServer(); + stopPolling(); + } }); }