/ components / hooks / SelectMatcherMode.tsx
SelectMatcherMode.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  /**
  3   * SelectMatcherMode shows the configured matchers for a selected hook event.
  4   *
  5   * The /hooks menu is read-only: this view no longer offers "add new matcher"
  6   * and simply lets the user drill into each matcher to see its hooks.
  7   */
  8  import * as React from 'react';
  9  import type { HookEvent } from 'src/entrypoints/agentSdkTypes.js';
 10  import { Box, Text } from '../../ink.js';
 11  import { type HookSource, hookSourceInlineDisplayString, type IndividualHookConfig } from '../../utils/hooks/hooksSettings.js';
 12  import { plural } from '../../utils/stringUtils.js';
 13  import { Select } from '../CustomSelect/select.js';
 14  import { Dialog } from '../design-system/Dialog.js';
 15  type MatcherWithSource = {
 16    matcher: string;
 17    sources: HookSource[];
 18    hookCount: number;
 19  };
 20  type Props = {
 21    selectedEvent: HookEvent;
 22    matchersForSelectedEvent: string[];
 23    hooksByEventAndMatcher: Record<HookEvent, Record<string, IndividualHookConfig[]>>;
 24    eventDescription: string;
 25    onSelect: (matcher: string) => void;
 26    onCancel: () => void;
 27  };
 28  export function SelectMatcherMode(t0) {
 29    const $ = _c(25);
 30    const {
 31      selectedEvent,
 32      matchersForSelectedEvent,
 33      hooksByEventAndMatcher,
 34      eventDescription,
 35      onSelect,
 36      onCancel
 37    } = t0;
 38    let t1;
 39    if ($[0] !== hooksByEventAndMatcher || $[1] !== matchersForSelectedEvent || $[2] !== selectedEvent) {
 40      let t2;
 41      if ($[4] !== hooksByEventAndMatcher || $[5] !== selectedEvent) {
 42        t2 = matcher => {
 43          const hooks = hooksByEventAndMatcher[selectedEvent]?.[matcher] || [];
 44          const sources = Array.from(new Set(hooks.map(_temp)));
 45          return {
 46            matcher,
 47            sources,
 48            hookCount: hooks.length
 49          };
 50        };
 51        $[4] = hooksByEventAndMatcher;
 52        $[5] = selectedEvent;
 53        $[6] = t2;
 54      } else {
 55        t2 = $[6];
 56      }
 57      t1 = matchersForSelectedEvent.map(t2);
 58      $[0] = hooksByEventAndMatcher;
 59      $[1] = matchersForSelectedEvent;
 60      $[2] = selectedEvent;
 61      $[3] = t1;
 62    } else {
 63      t1 = $[3];
 64    }
 65    const matchersWithSources = t1;
 66    if (matchersForSelectedEvent.length === 0) {
 67      const t2 = `${selectedEvent} - Matchers`;
 68      let t3;
 69      if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
 70        t3 = <Box flexDirection="column" gap={1}><Text dimColor={true}>No hooks configured for this event.</Text><Text dimColor={true}>To add hooks, edit settings.json directly or ask Claude.</Text></Box>;
 71        $[7] = t3;
 72      } else {
 73        t3 = $[7];
 74      }
 75      let t4;
 76      if ($[8] !== eventDescription || $[9] !== onCancel || $[10] !== t2) {
 77        t4 = <Dialog title={t2} subtitle={eventDescription} onCancel={onCancel} inputGuide={_temp2}>{t3}</Dialog>;
 78        $[8] = eventDescription;
 79        $[9] = onCancel;
 80        $[10] = t2;
 81        $[11] = t4;
 82      } else {
 83        t4 = $[11];
 84      }
 85      return t4;
 86    }
 87    const t2 = `${selectedEvent} - Matchers`;
 88    let t3;
 89    if ($[12] !== matchersWithSources) {
 90      t3 = matchersWithSources.map(_temp3);
 91      $[12] = matchersWithSources;
 92      $[13] = t3;
 93    } else {
 94      t3 = $[13];
 95    }
 96    let t4;
 97    if ($[14] !== onSelect) {
 98      t4 = value => {
 99        onSelect(value);
100      };
101      $[14] = onSelect;
102      $[15] = t4;
103    } else {
104      t4 = $[15];
105    }
106    let t5;
107    if ($[16] !== onCancel || $[17] !== t3 || $[18] !== t4) {
108      t5 = <Box flexDirection="column"><Select options={t3} onChange={t4} onCancel={onCancel} /></Box>;
109      $[16] = onCancel;
110      $[17] = t3;
111      $[18] = t4;
112      $[19] = t5;
113    } else {
114      t5 = $[19];
115    }
116    let t6;
117    if ($[20] !== eventDescription || $[21] !== onCancel || $[22] !== t2 || $[23] !== t5) {
118      t6 = <Dialog title={t2} subtitle={eventDescription} onCancel={onCancel}>{t5}</Dialog>;
119      $[20] = eventDescription;
120      $[21] = onCancel;
121      $[22] = t2;
122      $[23] = t5;
123      $[24] = t6;
124    } else {
125      t6 = $[24];
126    }
127    return t6;
128  }
129  function _temp3(item) {
130    const sourceText = item.sources.map(hookSourceInlineDisplayString).join(", ");
131    const matcherLabel = item.matcher || "(all)";
132    return {
133      label: `[${sourceText}] ${matcherLabel}`,
134      value: item.matcher,
135      description: `${item.hookCount} ${plural(item.hookCount, "hook")}`
136    };
137  }
138  function _temp2() {
139    return <Text>Esc to go back</Text>;
140  }
141  function _temp(h) {
142    return h.source;
143  }
144  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkhvb2tFdmVudCIsIkJveCIsIlRleHQiLCJIb29rU291cmNlIiwiaG9va1NvdXJjZUlubGluZURpc3BsYXlTdHJpbmciLCJJbmRpdmlkdWFsSG9va0NvbmZpZyIsInBsdXJhbCIsIlNlbGVjdCIsIkRpYWxvZyIsIk1hdGNoZXJXaXRoU291cmNlIiwibWF0Y2hlciIsInNvdXJjZXMiLCJob29rQ291bnQiLCJQcm9wcyIsInNlbGVjdGVkRXZlbnQiLCJtYXRjaGVyc0ZvclNlbGVjdGVkRXZlbnQiLCJob29rc0J5RXZlbnRBbmRNYXRjaGVyIiwiUmVjb3JkIiwiZXZlbnREZXNjcmlwdGlvbiIsIm9uU2VsZWN0Iiwib25DYW5jZWwiLCJTZWxlY3RNYXRjaGVyTW9kZSIsInQwIiwiJCIsIl9jIiwidDEiLCJ0MiIsImhvb2tzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwibWFwIiwiX3RlbXAiLCJsZW5ndGgiLCJtYXRjaGVyc1dpdGhTb3VyY2VzIiwidDMiLCJTeW1ib2wiLCJmb3IiLCJ0NCIsIl90ZW1wMiIsIl90ZW1wMyIsInZhbHVlIiwidDUiLCJ0NiIsIml0ZW0iLCJzb3VyY2VUZXh0Iiwiam9pbiIsIm1hdGNoZXJMYWJlbCIsImxhYmVsIiwiZGVzY3JpcHRpb24iLCJoIiwic291cmNlIl0sInNvdXJjZXMiOlsiU2VsZWN0TWF0Y2hlck1vZGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VsZWN0TWF0Y2hlck1vZGUgc2hvd3MgdGhlIGNvbmZpZ3VyZWQgbWF0Y2hlcnMgZm9yIGEgc2VsZWN0ZWQgaG9vayBldmVudC5cbiAqXG4gKiBUaGUgL2hvb2tzIG1lbnUgaXMgcmVhZC1vbmx5OiB0aGlzIHZpZXcgbm8gbG9uZ2VyIG9mZmVycyBcImFkZCBuZXcgbWF0Y2hlclwiXG4gKiBhbmQgc2ltcGx5IGxldHMgdGhlIHVzZXIgZHJpbGwgaW50byBlYWNoIG1hdGNoZXIgdG8gc2VlIGl0cyBob29rcy5cbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEhvb2tFdmVudCB9IGZyb20gJ3NyYy9lbnRyeXBvaW50cy9hZ2VudFNka1R5cGVzLmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHtcbiAgdHlwZSBIb29rU291cmNlLFxuICBob29rU291cmNlSW5saW5lRGlzcGxheVN0cmluZyxcbiAgdHlwZSBJbmRpdmlkdWFsSG9va0NvbmZpZyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvaG9va3MvaG9va3NTZXR0aW5ncy5qcydcbmltcG9ydCB7IHBsdXJhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmluZ1V0aWxzLmpzJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJy4uL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuXG50eXBlIE1hdGNoZXJXaXRoU291cmNlID0ge1xuICBtYXRjaGVyOiBzdHJpbmdcbiAgc291cmNlczogSG9va1NvdXJjZVtdXG4gIGhvb2tDb3VudDogbnVtYmVyXG59XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNlbGVjdGVkRXZlbnQ6IEhvb2tFdmVudFxuICBtYXRjaGVyc0ZvclNlbGVjdGVkRXZlbnQ6IHN0cmluZ1tdXG4gIGhvb2tzQnlFdmVudEFuZE1hdGNoZXI6IFJlY29yZDxcbiAgICBIb29rRXZlbnQsXG4gICAgUmVjb3JkPHN0cmluZywgSW5kaXZpZHVhbEhvb2tDb25maWdbXT5cbiAgPlxuICBldmVudERlc2NyaXB0aW9uOiBzdHJpbmdcbiAgb25TZWxlY3Q6IChtYXRjaGVyOiBzdHJpbmcpID0+IHZvaWRcbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdE1hdGNoZXJNb2RlKHtcbiAgc2VsZWN0ZWRFdmVudCxcbiAgbWF0Y2hlcnNGb3JTZWxlY3RlZEV2ZW50LFxuICBob29rc0J5RXZlbnRBbmRNYXRjaGVyLFxuICBldmVudERlc2NyaXB0aW9uLFxuICBvblNlbGVjdCxcbiAgb25DYW5jZWwsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIEdyb3VwIG1hdGNoZXJzIHdpdGggdGhlaXIgc291cmNlcyAoYWxyZWFkeSBzb3J0ZWQgYnkgcHJpb3JpdHkgaW4gcGFyZW50KVxuICBjb25zdCBtYXRjaGVyc1dpdGhTb3VyY2VzOiBNYXRjaGVyV2l0aFNvdXJjZVtdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIG1hdGNoZXJzRm9yU2VsZWN0ZWRFdmVudC5tYXAobWF0Y2hlciA9PiB7XG4gICAgICBjb25zdCBob29rcyA9IGhvb2tzQnlFdmVudEFuZE1hdGNoZXJbc2VsZWN0ZWRFdmVudF0/LlttYXRjaGVyXSB8fCBbXVxuICAgICAgY29uc3Qgc291cmNlcyA9IEFycmF5LmZyb20obmV3IFNldChob29rcy5tYXAoaCA9PiBoLnNvdXJjZSkpKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2hlcixcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgaG9va0NvdW50OiBob29rcy5sZW5ndGgsXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21hdGNoZXJzRm9yU2VsZWN0ZWRFdmVudCwgaG9va3NCeUV2ZW50QW5kTWF0Y2hlciwgc2VsZWN0ZWRFdmVudF0pXG5cbiAgaWYgKG1hdGNoZXJzRm9yU2VsZWN0ZWRFdmVudC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ1xuICAgICAgICB0aXRsZT17YCR7c2VsZWN0ZWRFdmVudH0gLSBNYXRjaGVyc2B9XG4gICAgICAgIHN1YnRpdGxlPXtldmVudERlc2NyaXB0aW9ufVxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIGlucHV0R3VpZGU9eygpID0+IDxUZXh0PkVzYyB0byBnbyBiYWNrPC9UZXh0Pn1cbiAgICAgID5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5ObyBob29rcyBjb25maWd1cmVkIGZvciB0aGlzIGV2ZW50LjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgIFRvIGFkZCBob29rcywgZWRpdCBzZXR0aW5ncy5qc29uIGRpcmVjdGx5IG9yIGFzayBDbGF1ZGUuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvRGlhbG9nPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1xuICAgICAgdGl0bGU9e2Ake3NlbGVjdGVkRXZlbnR9IC0gTWF0Y2hlcnNgfVxuICAgICAgc3VidGl0bGU9e2V2ZW50RGVzY3JpcHRpb259XG4gICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgPlxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXttYXRjaGVyc1dpdGhTb3VyY2VzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVRleHQgPSBpdGVtLnNvdXJjZXNcbiAgICAgICAgICAgICAgLm1hcChob29rU291cmNlSW5saW5lRGlzcGxheVN0cmluZylcbiAgICAgICAgICAgICAgLmpvaW4oJywgJylcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXJMYWJlbCA9IGl0ZW0ubWF0Y2hlciB8fCAnKGFsbCknXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBsYWJlbDogYFske3NvdXJjZVRleHR9XSAke21hdGNoZXJMYWJlbH1gLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5tYXRjaGVyLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7aXRlbS5ob29rQ291bnR9ICR7cGx1cmFsKGl0ZW0uaG9va0NvdW50LCAnaG9vaycpfWAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+IHtcbiAgICAgICAgICAgIG9uU2VsZWN0KHZhbHVlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICAvPlxuICAgICAgPC9Cb3g+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sS0FBS0EsS0FBSyxNQUFNLE9BQU87QUFDOUIsY0FBY0MsU0FBUyxRQUFRLGtDQUFrQztBQUNqRSxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxjQUFjO0FBQ3hDLFNBQ0UsS0FBS0MsVUFBVSxFQUNmQyw2QkFBNkIsRUFDN0IsS0FBS0Msb0JBQW9CLFFBQ3BCLG9DQUFvQztBQUMzQyxTQUFTQyxNQUFNLFFBQVEsNEJBQTRCO0FBQ25ELFNBQVNDLE1BQU0sUUFBUSwyQkFBMkI7QUFDbEQsU0FBU0MsTUFBTSxRQUFRLDRCQUE0QjtBQUVuRCxLQUFLQyxpQkFBaUIsR0FBRztFQUN2QkMsT0FBTyxFQUFFLE1BQU07RUFDZkMsT0FBTyxFQUFFUixVQUFVLEVBQUU7RUFDckJTLFNBQVMsRUFBRSxNQUFNO0FBQ25CLENBQUM7QUFFRCxLQUFLQyxLQUFLLEdBQUc7RUFDWEMsYUFBYSxFQUFFZCxTQUFTO0VBQ3hCZSx3QkFBd0IsRUFBRSxNQUFNLEVBQUU7RUFDbENDLHNCQUFzQixFQUFFQyxNQUFNLENBQzVCakIsU0FBUyxFQUNUaUIsTUFBTSxDQUFDLE1BQU0sRUFBRVosb0JBQW9CLEVBQUUsQ0FBQyxDQUN2QztFQUNEYSxnQkFBZ0IsRUFBRSxNQUFNO0VBQ3hCQyxRQUFRLEVBQUUsQ0FBQ1QsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7RUFDbkNVLFFBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSTtBQUN0QixDQUFDO0FBRUQsT0FBTyxTQUFBQyxrQkFBQUMsRUFBQTtFQUFBLE1BQUFDLENBQUEsR0FBQUMs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