How extension availability is detected
mainThe ClineExtensionProvider.isAvailable(project) method determines if the extension can be used by checking two primary locations:
- Project/User Space Directory: Checks if files exist at
${VsixManager.getBaseDirectory()}/${config.codeDir}(wherecodeDiris retrieved fromExtensionConfiguration). - Plugin Built-in Resources: If not found in the user space, it checks the plugin's internal resources using
PluginResourceUtil.getResourcePath(PLUGIN_ID, config.codeDir).
If files are found in either location, the method returns true.
override fun isAvailable(project: Project): Boolean {
// Check if roo-code extension files exist
val extensionConfig = ExtensionConfiguration.getInstance(project)
val config = extensionConfig.getConfig(ExtensionType.CLINE)
// First check project paths
val possiblePaths = listOf(
"${getBaseDirectory()}/${config.codeDir}"
)
if (possiblePaths.any { File(it).exists() }) {
return true
}
// Then check plugin resources (for built-in extensions)
try {
val pluginResourcePath = PluginResourceUtil.getResourcePath(
PluginConstants.PLUGIN_ID,
config.codeDir
)
if (pluginResourcePath != null && File(pluginResourcePath).exists()) {
return true
}
} catch (e: Exception) {
// Ignore exceptions when checking plugin resources
}
return false
}