removeSessionHook method

void removeSessionHook({
  1. required String sessionId,
  2. required HookEvent event,
  3. required HookCommand hook,
})

Remove a specific hook from the session.

Implementation

void removeSessionHook({
  required String sessionId,
  required HookEvent event,
  required HookCommand hook,
}) {
  final store = _stores[sessionId];
  if (store == null) return;

  final eventMatchers = store.hooks[event] ?? [];
  final updatedMatchers = <SessionHookMatcher>[];
  for (final m in eventMatchers) {
    final updatedHooks = m.hooks
        .where((h) => !isHookEqual(h.hook, hook))
        .toList();
    if (updatedHooks.isNotEmpty) {
      updatedMatchers.add(
        SessionHookMatcher(
          matcher: m.matcher,
          skillRoot: m.skillRoot,
          hooks: updatedHooks,
        ),
      );
    }
  }

  if (updatedMatchers.isNotEmpty) {
    store.hooks[event] = updatedMatchers;
  } else {
    store.hooks.remove(event);
  }
}