source dump of claude code
at main 215 lines 21 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import chalk from 'chalk'; 3import type { UUID } from 'crypto'; 4import * as React from 'react'; 5import { getSessionId } from '../../bootstrap/state.js'; 6import type { CommandResultDisplay } from '../../commands.js'; 7import { Select } from '../../components/CustomSelect/select.js'; 8import { Dialog } from '../../components/design-system/Dialog.js'; 9import { COMMON_HELP_ARGS, COMMON_INFO_ARGS } from '../../constants/xml.js'; 10import { Box, Text } from '../../ink.js'; 11import { logEvent } from '../../services/analytics/index.js'; 12import type { LocalJSXCommandOnDone } from '../../types/command.js'; 13import { recursivelySanitizeUnicode } from '../../utils/sanitization.js'; 14import { getCurrentSessionTag, getTranscriptPath, saveTag } from '../../utils/sessionStorage.js'; 15function ConfirmRemoveTag(t0) { 16 const $ = _c(11); 17 const { 18 tagName, 19 onConfirm, 20 onCancel 21 } = t0; 22 const t1 = `Current tag: #${tagName}`; 23 let t2; 24 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 25 t2 = <Text>This will remove the tag from the current session.</Text>; 26 $[0] = t2; 27 } else { 28 t2 = $[0]; 29 } 30 let t3; 31 if ($[1] !== onCancel || $[2] !== onConfirm) { 32 t3 = value => value === "yes" ? onConfirm() : onCancel(); 33 $[1] = onCancel; 34 $[2] = onConfirm; 35 $[3] = t3; 36 } else { 37 t3 = $[3]; 38 } 39 let t4; 40 if ($[4] === Symbol.for("react.memo_cache_sentinel")) { 41 t4 = [{ 42 label: "Yes, remove tag", 43 value: "yes" 44 }, { 45 label: "No, keep tag", 46 value: "no" 47 }]; 48 $[4] = t4; 49 } else { 50 t4 = $[4]; 51 } 52 let t5; 53 if ($[5] !== t3) { 54 t5 = <Box flexDirection="column" gap={1}>{t2}<Select onChange={t3} options={t4} /></Box>; 55 $[5] = t3; 56 $[6] = t5; 57 } else { 58 t5 = $[6]; 59 } 60 let t6; 61 if ($[7] !== onCancel || $[8] !== t1 || $[9] !== t5) { 62 t6 = <Dialog title="Remove tag?" subtitle={t1} onCancel={onCancel} color="warning">{t5}</Dialog>; 63 $[7] = onCancel; 64 $[8] = t1; 65 $[9] = t5; 66 $[10] = t6; 67 } else { 68 t6 = $[10]; 69 } 70 return t6; 71} 72function ToggleTagAndClose(t0) { 73 const $ = _c(17); 74 const { 75 tagName, 76 onDone 77 } = t0; 78 const [showConfirm, setShowConfirm] = React.useState(false); 79 const [sessionId, setSessionId] = React.useState(null); 80 let t1; 81 if ($[0] !== tagName) { 82 t1 = recursivelySanitizeUnicode(tagName).trim(); 83 $[0] = tagName; 84 $[1] = t1; 85 } else { 86 t1 = $[1]; 87 } 88 const normalizedTag = t1; 89 let t2; 90 let t3; 91 if ($[2] !== normalizedTag || $[3] !== onDone) { 92 t2 = () => { 93 const id = getSessionId() as UUID; 94 if (!id) { 95 onDone("No active session to tag", { 96 display: "system" 97 }); 98 return; 99 } 100 if (!normalizedTag) { 101 onDone("Tag name cannot be empty", { 102 display: "system" 103 }); 104 return; 105 } 106 setSessionId(id); 107 const currentTag = getCurrentSessionTag(id); 108 if (currentTag === normalizedTag) { 109 logEvent("tengu_tag_command_remove_prompt", {}); 110 setShowConfirm(true); 111 } else { 112 const isReplacing = !!currentTag; 113 logEvent("tengu_tag_command_add", { 114 is_replacing: isReplacing 115 }); 116 (async () => { 117 const fullPath = getTranscriptPath(); 118 await saveTag(id, normalizedTag, fullPath); 119 onDone(`Tagged session with ${chalk.cyan(`#${normalizedTag}`)}`, { 120 display: "system" 121 }); 122 })(); 123 } 124 }; 125 t3 = [normalizedTag, onDone]; 126 $[2] = normalizedTag; 127 $[3] = onDone; 128 $[4] = t2; 129 $[5] = t3; 130 } else { 131 t2 = $[4]; 132 t3 = $[5]; 133 } 134 React.useEffect(t2, t3); 135 if (showConfirm && sessionId) { 136 let t4; 137 if ($[6] !== normalizedTag || $[7] !== onDone || $[8] !== sessionId) { 138 t4 = async () => { 139 logEvent("tengu_tag_command_remove_confirmed", {}); 140 const fullPath_0 = getTranscriptPath(); 141 await saveTag(sessionId, "", fullPath_0); 142 onDone(`Removed tag ${chalk.cyan(`#${normalizedTag}`)}`, { 143 display: "system" 144 }); 145 }; 146 $[6] = normalizedTag; 147 $[7] = onDone; 148 $[8] = sessionId; 149 $[9] = t4; 150 } else { 151 t4 = $[9]; 152 } 153 let t5; 154 if ($[10] !== normalizedTag || $[11] !== onDone) { 155 t5 = () => { 156 logEvent("tengu_tag_command_remove_cancelled", {}); 157 onDone(`Kept tag ${chalk.cyan(`#${normalizedTag}`)}`, { 158 display: "system" 159 }); 160 }; 161 $[10] = normalizedTag; 162 $[11] = onDone; 163 $[12] = t5; 164 } else { 165 t5 = $[12]; 166 } 167 let t6; 168 if ($[13] !== normalizedTag || $[14] !== t4 || $[15] !== t5) { 169 t6 = <ConfirmRemoveTag tagName={normalizedTag} onConfirm={t4} onCancel={t5} />; 170 $[13] = normalizedTag; 171 $[14] = t4; 172 $[15] = t5; 173 $[16] = t6; 174 } else { 175 t6 = $[16]; 176 } 177 return t6; 178 } 179 return null; 180} 181function ShowHelp(t0) { 182 const $ = _c(3); 183 const { 184 onDone 185 } = t0; 186 let t1; 187 let t2; 188 if ($[0] !== onDone) { 189 t1 = () => { 190 onDone("Usage: /tag <tag-name>\n\nToggle a searchable tag on the current session.\nRun the same command again to remove the tag.\nTags are displayed after the branch name in /resume and can be searched with /.\n\nExamples:\n /tag bugfix # Add tag\n /tag bugfix # Remove tag (toggle)\n /tag feature-auth\n /tag wip", { 191 display: "system" 192 }); 193 }; 194 t2 = [onDone]; 195 $[0] = onDone; 196 $[1] = t1; 197 $[2] = t2; 198 } else { 199 t1 = $[1]; 200 t2 = $[2]; 201 } 202 React.useEffect(t1, t2); 203 return null; 204} 205export async function call(onDone: LocalJSXCommandOnDone, _context: unknown, args?: string): Promise<React.ReactNode> { 206 args = args?.trim() || ''; 207 if (COMMON_INFO_ARGS.includes(args) || COMMON_HELP_ARGS.includes(args)) { 208 return <ShowHelp onDone={onDone} />; 209 } 210 if (!args) { 211 return <ShowHelp onDone={onDone} />; 212 } 213 return <ToggleTagAndClose tagName={args} onDone={onDone} />; 214} 215//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaGFsayIsIlVVSUQiLCJSZWFjdCIsImdldFNlc3Npb25JZCIsIkNvbW1hbmRSZXN1bHREaXNwbGF5IiwiU2VsZWN0IiwiRGlhbG9nIiwiQ09NTU9OX0hFTFBfQVJHUyIsIkNPTU1PTl9JTkZPX0FSR1MiLCJCb3giLCJUZXh0IiwibG9nRXZlbnQiLCJMb2NhbEpTWENvbW1hbmRPbkRvbmUiLCJyZWN1cnNpdmVseVNhbml0aXplVW5pY29kZSIsImdldEN1cnJlbnRTZXNzaW9uVGFnIiwiZ2V0VHJhbnNjcmlwdFBhdGgiLCJzYXZlVGFnIiwiQ29uZmlybVJlbW92ZVRhZyIsInQwIiwiJCIsIl9jIiwidGFnTmFtZSIsIm9uQ29uZmlybSIsIm9uQ2FuY2VsIiwidDEiLCJ0MiIsIlN5bWJvbCIsImZvciIsInQzIiwidmFsdWUiLCJ0NCIsImxhYmVsIiwidDUiLCJ0NiIsIlRvZ2dsZVRhZ0FuZENsb3NlIiwib25Eb25lIiwic2hvd0NvbmZpcm0iLCJzZXRTaG93Q29uZmlybSIsInVzZVN0YXRlIiwic2Vzc2lvbklkIiwic2V0U2Vzc2lvbklkIiwidHJpbSIsIm5vcm1hbGl6ZWRUYWciLCJpZCIsImRpc3BsYXkiLCJjdXJyZW50VGFnIiwiaXNSZXBsYWNpbmciLCJpc19yZXBsYWNpbmciLCJmdWxsUGF0aCIsImN5YW4iLCJ1c2VFZmZlY3QiLCJmdWxsUGF0aF8wIiwiU2hvd0hlbHAiLCJjYWxsIiwiX2NvbnRleHQiLCJhcmdzIiwiUHJvbWlzZSIsIlJlYWN0Tm9kZSIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsidGFnLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgdHlwZSB7IFVVSUQgfSBmcm9tICdjcnlwdG8nXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFNlc3Npb25JZCB9IGZyb20gJy4uLy4uL2Jvb3RzdHJhcC9zdGF0ZS5qcydcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFJlc3VsdERpc3BsYXkgfSBmcm9tICcuLi8uLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGVzaWduLXN5c3RlbS9EaWFsb2cuanMnXG5pbXBvcnQgeyBDT01NT05fSEVMUF9BUkdTLCBDT01NT05fSU5GT19BUkdTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3htbC5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IGxvZ0V2ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYW5hbHl0aWNzL2luZGV4LmpzJ1xuaW1wb3J0IHR5cGUgeyBMb2NhbEpTWENvbW1hbmRPbkRvbmUgfSBmcm9tICcuLi8uLi90eXBlcy9jb21tYW5kLmpzJ1xuaW1wb3J0IHsgcmVjdXJzaXZlbHlTYW5pdGl6ZVVuaWNvZGUgfSBmcm9tICcuLi8uLi91dGlscy9zYW5pdGl6YXRpb24uanMnXG5pbXBvcnQge1xuICBnZXRDdXJyZW50U2Vzc2lvblRhZyxcbiAgZ2V0VHJhbnNjcmlwdFBhdGgsXG4gIHNhdmVUYWcsXG59IGZyb20gJy4uLy4uL3V0aWxzL3Nlc3Npb25TdG9yYWdlLmpzJ1xuXG5mdW5jdGlvbiBDb25maXJtUmVtb3ZlVGFnKHtcbiAgdGFnTmFtZSxcbiAgb25Db25maXJtLFxuICBvbkNhbmNlbCxcbn06IHtcbiAgdGFnTmFtZTogc3RyaW5nXG4gIG9uQ29uZmlybTogKCkgPT4gdm9pZFxuICBvbkNhbmNlbDogKCkgPT4gdm9pZFxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1xuICAgICAgdGl0bGU9XCJSZW1vdmUgdGFnP1wiXG4gICAgICBzdWJ0aXRsZT17YEN1cnJlbnQgdGFnOiAjJHt0YWdOYW1lfWB9XG4gICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgID5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgIDxUZXh0PlRoaXMgd2lsbCByZW1vdmUgdGhlIHRhZyBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uPC9UZXh0PlxuICAgICAgICA8U2VsZWN0PCd5ZXMnIHwgJ25vJz5cbiAgICAgICAgICBvbkNoYW5nZT17dmFsdWUgPT4gKHZhbHVlID09PSAneWVzJyA/IG9uQ29uZmlybSgpIDogb25DYW5jZWwoKSl9XG4gICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgeyBsYWJlbDogJ1llcywgcmVtb3ZlIHRhZycsIHZhbHVlOiAneWVzJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ05vLCBrZWVwIHRhZycsIHZhbHVlOiAnbm8nIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG5cbmZ1bmN0aW9uIFRvZ2dsZVRhZ0FuZENsb3NlKHtcbiAgdGFnTmFtZSxcbiAgb25Eb25lLFxufToge1xuICB0YWdOYW1lOiBzdHJpbmdcbiAgb25Eb25lOiAoXG4gICAgcmVzdWx0Pzogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IGRpc3BsYXk/OiBDb21tYW5kUmVzdWx0RGlzcGxheSB9LFxuICApID0+IHZvaWRcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbc2hvd0NvbmZpcm0sIHNldFNob3dDb25maXJtXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2Vzc2lvbklkLCBzZXRTZXNzaW9uSWRdID0gUmVhY3QudXNlU3RhdGU8VVVJRCB8IG51bGw+KG51bGwpXG4gIC8vIFNhbml0aXplIHVuaWNvZGUgdG8gcHJldmVudCBoaWRkZW4gY2hhcmFjdGVyIGF0dGFja3MgYW5kIG5vcm1hbGl6ZVxuICBjb25zdCBub3JtYWxpemVkVGFnID0gcmVjdXJzaXZlbHlTYW5pdGl6ZVVuaWNvZGUodGFnTmFtZSkudHJpbSgpXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpZCA9IGdldFNlc3Npb25JZCgpIGFzIFVVSURcblxuICAgIGlmICghaWQpIHtcbiAgICAgIG9uRG9uZSgnTm8gYWN0aXZlIHNlc3Npb24gdG8gdGFnJywgeyBkaXNwbGF5OiAnc3lzdGVtJyB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFub3JtYWxpemVkVGFnKSB7XG4gICAgICBvbkRvbmUoJ1RhZyBuYW1lIGNhbm5vdCBiZSBlbXB0eScsIHsgZGlzcGxheTogJ3N5c3RlbScgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFNlc3Npb25JZChpZClcbiAgICBjb25zdCBjdXJyZW50VGFnID0gZ2V0Q3VycmVudFNlc3Npb25UYWcoaWQpXG5cbiAgICAvLyBJZiBzYW1lIHRhZyBleGlzdHMsIHNob3cgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgIGlmIChjdXJyZW50VGFnID09PSBub3JtYWxpemVkVGFnKSB7XG4gICAgICBsb2dFdmVudCgndGVuZ3VfdGFnX2NvbW1hbmRfcmVtb3ZlX3Byb21wdCcsIHt9KVxuICAgICAgc2V0U2hvd0NvbmZpcm0odHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRoZSBuZXcgdGFnIGRpcmVjdGx5XG4gICAgICBjb25zdCBpc1JlcGxhY2luZyA9ICEhY3VycmVudFRhZ1xuICAgICAgbG9nRXZlbnQoJ3Rlbmd1X3RhZ19jb21tYW5kX2FkZCcsIHsgaXNfcmVwbGFjaW5nOiBpc1JlcGxhY2luZyB9KVxuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGdldFRyYW5zY3JpcHRQYXRoKClcbiAgICAgICAgYXdhaXQgc2F2ZVRhZyhpZCwgbm9ybWFsaXplZFRhZywgZnVsbFBhdGgpXG4gICAgICAgIG9uRG9uZShgVGFnZ2VkIHNlc3Npb24gd2l0aCAke2NoYWxrLmN5YW4oYCMke25vcm1hbGl6ZWRUYWd9YCl9YCwge1xuICAgICAgICAgIGRpc3BsYXk6ICdzeXN0ZW0nLFxuICAgICAgICB9KVxuICAgICAgfSkoKVxuICAgIH1cbiAgfSwgW25vcm1hbGl6ZWRUYWcsIG9uRG9uZV0pXG5cbiAgaWYgKHNob3dDb25maXJtICYmIHNlc3Npb25JZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlybVJlbW92ZVRhZ1xuICAgICAgICB0YWdOYW1lPXtub3JtYWxpemVkVGFnfVxuICAgICAgICBvbkNvbmZpcm09e2FzeW5jICgpID0+IHtcbiAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfdGFnX2NvbW1hbmRfcmVtb3ZlX2NvbmZpcm1lZCcsIHt9KVxuICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gZ2V0VHJhbnNjcmlwdFBhdGgoKVxuICAgICAgICAgIGF3YWl0IHNhdmVUYWcoc2Vzc2lvbklkLCAnJywgZnVsbFBhdGgpXG4gICAgICAgICAgb25Eb25lKGBSZW1vdmVkIHRhZyAke2NoYWxrLmN5YW4oYCMke25vcm1hbGl6ZWRUYWd9YCl9YCwge1xuICAgICAgICAgICAgZGlzcGxheTogJ3N5c3RlbScsXG4gICAgICAgICAgfSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICBsb2dFdmVudCgndGVuZ3VfdGFnX2NvbW1hbmRfcmVtb3ZlX2NhbmNlbGxlZCcsIHt9KVxuICAgICAgICAgIG9uRG9uZShgS2VwdCB0YWcgJHtjaGFsay5jeWFuKGAjJHtub3JtYWxpemVkVGFnfWApfWAsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdzeXN0ZW0nLFxuICAgICAgICAgIH0pXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIFNob3dIZWxwKHtcbiAgb25Eb25lLFxufToge1xuICBvbkRvbmU6IChcbiAgICByZXN1bHQ/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgZGlzcGxheT86IENvbW1hbmRSZXN1bHREaXNwbGF5IH0sXG4gICkgPT4gdm9pZFxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25Eb25lKFxuICAgICAgYFVzYWdlOiAvdGFnIDx0YWctbmFtZT5cblxuVG9nZ2xlIGEgc2VhcmNoYWJsZSB0YWcgb24gdGhlIGN1cnJlbnQgc2Vzc2lvbi5cblJ1biB0aGUgc2FtZSBjb21tYW5kIGFnYWluIHRvIHJlbW92ZSB0aGUgdGFnLlxuVGFncyBhcmUgZGlzcGxheWVkIGFmdGVyIHRoZSBicmFuY2ggbmFtZSBpbiAvcmVzdW1lIGFuZCBjYW4gYmUgc2VhcmNoZWQgd2l0aCAvLlxuXG5FeGFtcGxlczpcbiAgL3RhZyBidWdmaXggICAgICAgICMgQWRkIHRhZ1xuICAvdGFnIGJ1Z2ZpeCAgICAgICAgIyBSZW1vdmUgdGFnICh0b2dnbGUpXG4gIC90YWcgZmVhdHVyZS1hdXRoXG4gIC90YWcgd2lwYCxcbiAgICAgIHsgZGlzcGxheTogJ3N5c3RlbScgfSxcbiAgICApXG4gIH0sIFtvbkRvbmVdKVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxsKFxuICBvbkRvbmU6IExvY2FsSlNYQ29tbWFuZE9uRG9uZSxcbiAgX2NvbnRleHQ6IHVua25vd24sXG4gIGFyZ3M/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFJlYWN0LlJlYWN0Tm9kZT4ge1xuICBhcmdzID0gYXJncz8udHJpbSgpIHx8ICcnXG5cbiAgaWYgKENPTU1PTl9JTkZPX0FSR1MuaW5jbHVkZXMoYXJncykgfHwgQ09NTU9OX0hFTFBfQVJHUy5pbmNsdWRlcyhhcmdzKSkge1xuICAgIHJldHVybiA8U2hvd0hlbHAgb25Eb25lPXtvbkRvbmV9IC8+XG4gIH1cblxuICBpZiAoIWFyZ3MpIHtcbiAgICByZXR1cm4gPFNob3dIZWxwIG9uRG9uZT17b25Eb25lfSAvPlxuICB9XG5cbiAgcmV0dXJuIDxUb2dnbGVUYWdBbmRD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