/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { Box, Text } from 'ink'; import { useUIState } from '../../contexts/UIStateContext.js'; import { ExtensionUpdateState } from '../../state/extensions.js'; export const ExtensionsList = () => { const { commandContext, extensionsUpdateState } = useUIState(); const allExtensions = commandContext.services.config!.getExtensions(); if (allExtensions.length === 0) { return No extensions installed.; } return ( Installed extensions: {allExtensions.map((ext) => { const state = extensionsUpdateState.get(ext.name); const isActive = ext.isActive; const activeString = isActive ? 'active' : 'disabled'; const activeColor = isActive ? 'green' : 'grey'; let stateColor = 'gray'; const stateText = state || 'unknown state'; switch (state) { case ExtensionUpdateState.CHECKING_FOR_UPDATES: case ExtensionUpdateState.UPDATING: stateColor = 'cyan'; break; case ExtensionUpdateState.UPDATE_AVAILABLE: case ExtensionUpdateState.UPDATED_NEEDS_RESTART: stateColor = 'yellow'; break; case ExtensionUpdateState.ERROR: stateColor = 'red'; break; case ExtensionUpdateState.UP_TO_DATE: case ExtensionUpdateState.NOT_UPDATABLE: stateColor = 'green'; break; default: console.error(`Unhandled ExtensionUpdateState ${state}`); break; } return ( {`${ext.name} (v${ext.version})`} {` - ${activeString}`} {{` (${stateText})`}} ); })} ); };