aboutsummaryrefslogtreecommitdiff
path: root/src/integration/registry.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/integration/registry.rs')
-rw-r--r--src/integration/registry.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/integration/registry.rs b/src/integration/registry.rs
index 569494a2..b7bb3bf2 100644
--- a/src/integration/registry.rs
+++ b/src/integration/registry.rs
@@ -405,6 +405,22 @@ fn grok_hook_config_is_valid(hook_path: &Path) -> bool {
.is_some_and(|config| config == super::targets::grok_hook_config(hook_path))
}
+fn opencode_tui_integration_is_valid(plugin_path: &Path, expected_version: u32) -> bool {
+ let Some(config_dir) = plugin_path.parent().and_then(Path::parent) else {
+ return false;
+ };
+ let tui_plugin_path = config_dir.join(super::OPENCODE_TUI_PLUGIN_INSTALL_NAME);
+ let tui_plugin_current = fs::read_to_string(tui_plugin_path)
+ .ok()
+ .and_then(|content| parse_integration_version(&content))
+ .is_some_and(|version| version >= expected_version);
+ tui_plugin_current
+ && super::opencode_config::tui_plugin_is_configured(
+ config_dir,
+ super::OPENCODE_TUI_PLUGIN_SPEC,
+ )
+}
+
pub(crate) fn integration_status_at(
target: crate::api::schema::IntegrationTarget,
path: PathBuf,
@@ -439,6 +455,12 @@ pub(crate) fn integration_status_at(
{
state = super::IntegrationStatusKind::Outdated;
}
+ if target == crate::api::schema::IntegrationTarget::Opencode
+ && state == super::IntegrationStatusKind::Current
+ && !opencode_tui_integration_is_valid(&path, expected_version)
+ {
+ state = super::IntegrationStatusKind::Outdated;
+ }
super::IntegrationStatus {
target,