From 811f908918b31c5e225dcb03c41da6c36434414d Mon Sep 17 00:00:00 2001 From: K2 Date: Thu, 23 Jul 2026 11:11:51 +0100 Subject: [PATCH] fix: allow extension to load when offline The model fetch at startup throws and blocks pi from starting when there's no network. Catch the error and register the provider with an empty model list instead. --- CHANGELOG.md | 6 ++++++ index.ts | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ff5c35..3d5207f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +- Allow pi to start when the model list fetch fails due to no network connectivity. Command Code models are fetched live when online; if the provider starts offline, run `/reload` once connected to refresh the model catalog. + +### Contributors + +- @k3-2o — reported that the model-list fetch blocked pi startup when offline. + ## 0.4.2 - 2026-07-05 - Fix Oh My Pi extension validation by avoiding the missing `calculateCost` export from OMP's legacy `pi-ai` shim. diff --git a/index.ts b/index.ts index b7fb6d9..5fa47e1 100644 --- a/index.ts +++ b/index.ts @@ -17,7 +17,7 @@ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent" import { COMMAND_CODE_CLI_VERSION, createStreamCommandCode, DEFAULT_API_BASE } from "./src/core.ts" import { calculateCommandCodeCost } from "./src/cost.ts" -import { DEFAULT_MODELS_URL, fetchCommandCodeModels } from "./src/models.ts" +import { DEFAULT_MODELS_URL, fetchCommandCodeModels, type CommandCodeModel } from "./src/models.ts" import { getApiKey, login, refreshToken } from "./src/oauth.ts" const API_BASE = process.env.COMMANDCODE_API_BASE ?? DEFAULT_API_BASE @@ -79,7 +79,12 @@ const streamCommandCode = createStreamCommandCode({ // --------------------------------------------------------------------------- export default async function (pi: ExtensionAPI) { - const models = await fetchCommandCodeModels({ url: MODELS_URL }) + let models: readonly CommandCodeModel[] + try { + models = await fetchCommandCodeModels({ url: MODELS_URL }) + } catch { + models = [] + } pi.registerProvider("commandcode", { name: "Command Code",