From a9886ccbb775f2306ec69e77a062f9b9d04c5a5c Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 15 May 2026 16:31:13 +0900 Subject: [PATCH] refactor(plugin): remove metadata assertions Guard optional plugin metadata and pane identifiers before passing them to cleanup and warning paths. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/features/team-mode/team-runtime/delete-team.ts | 7 +++++-- src/plugin-handlers/command-config-handler.ts | 4 ++-- src/plugin/hooks/create-session-hooks.ts | 4 ++-- src/shared/log-legacy-plugin-startup-warning.ts | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/features/team-mode/team-runtime/delete-team.ts b/src/features/team-mode/team-runtime/delete-team.ts index 201b44a63..88d4e3df4 100644 --- a/src/features/team-mode/team-runtime/delete-team.ts +++ b/src/features/team-mode/team-runtime/delete-team.ts @@ -103,8 +103,11 @@ export async function deleteTeam( const removedLayout = config.tmux_visualization && tmuxMgr !== undefined && deps.canVisualize() if (removedLayout) { const memberPaneIds = runtimeState.members - .filter((member) => member.agentType !== "leader" && member.tmuxPaneId) - .map((member) => member.tmuxPaneId!) + .flatMap((member) => ( + member.agentType !== "leader" && member.tmuxPaneId + ? [member.tmuxPaneId] + : [] + )) const cleanupTarget = runtimeState.tmuxLayout ? { diff --git a/src/plugin-handlers/command-config-handler.ts b/src/plugin-handlers/command-config-handler.ts index b6dda6178..3d5fafd2c 100644 --- a/src/plugin-handlers/command-config-handler.ts +++ b/src/plugin-handlers/command-config-handler.ts @@ -43,8 +43,8 @@ export async function applyCommandConfig(params: { const includeClaudeSkills = params.pluginConfig.claude_code?.skills ?? true; const externalSkillPlugin = detectExternalSkillPlugin(params.ctx.directory); - if (includeClaudeSkills && externalSkillPlugin.detected) { - log(getSkillPluginConflictWarning(externalSkillPlugin.pluginName!)); + if (includeClaudeSkills && externalSkillPlugin.detected && externalSkillPlugin.pluginName) { + log(getSkillPluginConflictWarning(externalSkillPlugin.pluginName)); } const [ diff --git a/src/plugin/hooks/create-session-hooks.ts b/src/plugin/hooks/create-session-hooks.ts index ae2d7bb11..69208820a 100644 --- a/src/plugin/hooks/create-session-hooks.ts +++ b/src/plugin/hooks/create-session-hooks.ts @@ -101,8 +101,8 @@ export function createSessionHooks(args: { if (isHookEnabled("session-notification")) { const forceEnable = pluginConfig.notification?.force_enable ?? false const externalNotifier = detectExternalNotificationPlugin(ctx.directory) - if (externalNotifier.detected && !forceEnable) { - log(getNotificationConflictWarning(externalNotifier.pluginName!)) + if (externalNotifier.detected && externalNotifier.pluginName && !forceEnable) { + log(getNotificationConflictWarning(externalNotifier.pluginName)) } else { sessionNotification = safeHook("session-notification", () => createSessionNotification(ctx)) } diff --git a/src/shared/log-legacy-plugin-startup-warning.ts b/src/shared/log-legacy-plugin-startup-warning.ts index d1151b122..a1d242adf 100644 --- a/src/shared/log-legacy-plugin-startup-warning.ts +++ b/src/shared/log-legacy-plugin-startup-warning.ts @@ -16,7 +16,7 @@ export function logLegacyPluginStartupWarning(deps: LogLegacyPluginStartupWarnin const migrateLegacyPluginEntryFn = deps.migrateLegacyPluginEntry ?? migrateLegacyPluginEntry const result = checkForLegacyPluginEntryFn() - if (!result.hasLegacyEntry) { + if (!result.hasLegacyEntry || !result.configPath) { return } @@ -34,7 +34,7 @@ export function logLegacyPluginStartupWarning(deps: LogLegacyPluginStartupWarnin + ` Attempting auto-migration...`, ) - const migrated = migrateLegacyPluginEntryFn(result.configPath!) + const migrated = migrateLegacyPluginEntryFn(result.configPath) if (migrated) { console.warn(`[oh-my-openagent] Auto-migrated opencode.json: ${result.legacyEntries.join(", ")} -> ${suggestedEntries.join(", ")}`) } else {