claude-code-tools 0.2.0__py3-none-any.whl → 1.0.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1799) hide show
  1. claude_code_tools/__init__.py +1 -1
  2. claude_code_tools/action_rpc.py +401 -0
  3. claude_code_tools/aichat.py +1718 -0
  4. claude_code_tools/claude_continue.py +295 -0
  5. claude_code_tools/codex_continue.py +261 -0
  6. claude_code_tools/config.py +93 -0
  7. claude_code_tools/delete_session.py +194 -0
  8. claude_code_tools/export_all.py +342 -0
  9. claude_code_tools/export_claude_session.py +481 -0
  10. claude_code_tools/export_codex_session.py +466 -0
  11. claude_code_tools/export_session.py +573 -0
  12. claude_code_tools/find_claude_session.py +1256 -118
  13. claude_code_tools/find_codex_session.py +928 -76
  14. claude_code_tools/find_original_session.py +134 -0
  15. claude_code_tools/find_session.py +1074 -0
  16. claude_code_tools/find_trimmed_sessions.py +259 -0
  17. claude_code_tools/node_menu_ui.py +406 -0
  18. claude_code_tools/search_index.py +1247 -0
  19. claude_code_tools/session_lineage.py +260 -0
  20. claude_code_tools/session_menu.py +187 -0
  21. claude_code_tools/session_menu_cli.py +448 -0
  22. claude_code_tools/session_tui.py +516 -0
  23. claude_code_tools/session_utils.py +1313 -0
  24. claude_code_tools/smart_trim.py +414 -0
  25. claude_code_tools/smart_trim_core.py +614 -0
  26. claude_code_tools/tmux_cli_controller.py +20 -11
  27. claude_code_tools/trim_session.py +791 -0
  28. claude_code_tools/trim_session_claude.py +319 -0
  29. claude_code_tools/trim_session_codex.py +344 -0
  30. claude_code_tools-1.0.6.dist-info/METADATA +685 -0
  31. claude_code_tools-1.0.6.dist-info/RECORD +1807 -0
  32. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.0.6.dist-info}/WHEEL +1 -1
  33. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.0.6.dist-info}/entry_points.txt +1 -2
  34. docs/lmsh.md +27 -5
  35. node_ui/action_config.js +72 -0
  36. node_ui/menu.js +2367 -0
  37. node_ui/node_modules/.bin/is-in-ci +5 -0
  38. node_ui/node_modules/.bin/loose-envify +16 -0
  39. node_ui/node_modules/.package-lock.json +714 -0
  40. node_ui/node_modules/@alcalzone/ansi-tokenize/README.md +248 -0
  41. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +11 -0
  42. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +41 -0
  43. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -0
  44. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.d.ts +6 -0
  45. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js +17 -0
  46. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js.map +1 -0
  47. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.d.ts +6 -0
  48. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js +7 -0
  49. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js.map +1 -0
  50. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.d.ts +5 -0
  51. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js +27 -0
  52. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js.map +1 -0
  53. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.d.ts +6 -0
  54. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js +38 -0
  55. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js.map +1 -0
  56. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +12 -0
  57. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +70 -0
  58. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -0
  59. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.d.ts +3 -0
  60. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js +11 -0
  61. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js.map +1 -0
  62. node_ui/node_modules/@alcalzone/ansi-tokenize/package.json +63 -0
  63. node_ui/node_modules/ansi-escapes/base.d.ts +292 -0
  64. node_ui/node_modules/ansi-escapes/base.js +198 -0
  65. node_ui/node_modules/ansi-escapes/index.d.ts +2 -0
  66. node_ui/node_modules/ansi-escapes/index.js +2 -0
  67. node_ui/node_modules/ansi-escapes/license +9 -0
  68. node_ui/node_modules/ansi-escapes/package.json +70 -0
  69. node_ui/node_modules/ansi-escapes/readme.md +284 -0
  70. node_ui/node_modules/ansi-regex/index.d.ts +33 -0
  71. node_ui/node_modules/ansi-regex/index.js +14 -0
  72. node_ui/node_modules/ansi-regex/license +9 -0
  73. node_ui/node_modules/ansi-regex/package.json +61 -0
  74. node_ui/node_modules/ansi-regex/readme.md +66 -0
  75. node_ui/node_modules/ansi-styles/index.d.ts +236 -0
  76. node_ui/node_modules/ansi-styles/index.js +223 -0
  77. node_ui/node_modules/ansi-styles/license +9 -0
  78. node_ui/node_modules/ansi-styles/package.json +54 -0
  79. node_ui/node_modules/ansi-styles/readme.md +173 -0
  80. node_ui/node_modules/auto-bind/index.d.ts +50 -0
  81. node_ui/node_modules/auto-bind/index.js +41 -0
  82. node_ui/node_modules/auto-bind/license +9 -0
  83. node_ui/node_modules/auto-bind/package.json +51 -0
  84. node_ui/node_modules/auto-bind/react.d.ts +26 -0
  85. node_ui/node_modules/auto-bind/react.js +28 -0
  86. node_ui/node_modules/auto-bind/readme.md +92 -0
  87. node_ui/node_modules/chalk/license +9 -0
  88. node_ui/node_modules/chalk/package.json +83 -0
  89. node_ui/node_modules/chalk/readme.md +325 -0
  90. node_ui/node_modules/chalk/source/index.d.ts +320 -0
  91. node_ui/node_modules/chalk/source/index.js +225 -0
  92. node_ui/node_modules/chalk/source/utilities.js +33 -0
  93. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  94. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  95. node_ui/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  96. node_ui/node_modules/chalk/source/vendor/supports-color/browser.js +30 -0
  97. node_ui/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  98. node_ui/node_modules/chalk/source/vendor/supports-color/index.js +182 -0
  99. node_ui/node_modules/cli-boxes/boxes.json +82 -0
  100. node_ui/node_modules/cli-boxes/index.d.ts +127 -0
  101. node_ui/node_modules/cli-boxes/index.js +6 -0
  102. node_ui/node_modules/cli-boxes/license +9 -0
  103. node_ui/node_modules/cli-boxes/package.json +42 -0
  104. node_ui/node_modules/cli-boxes/readme.md +115 -0
  105. node_ui/node_modules/cli-cursor/index.d.ts +47 -0
  106. node_ui/node_modules/cli-cursor/index.js +39 -0
  107. node_ui/node_modules/cli-cursor/license +9 -0
  108. node_ui/node_modules/cli-cursor/package.json +49 -0
  109. node_ui/node_modules/cli-cursor/readme.md +51 -0
  110. node_ui/node_modules/cli-truncate/index.d.ts +116 -0
  111. node_ui/node_modules/cli-truncate/index.js +99 -0
  112. node_ui/node_modules/cli-truncate/license +9 -0
  113. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/index.js +105 -0
  114. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/license +10 -0
  115. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/package.json +53 -0
  116. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/readme.md +66 -0
  117. node_ui/node_modules/cli-truncate/package.json +51 -0
  118. node_ui/node_modules/cli-truncate/readme.md +150 -0
  119. node_ui/node_modules/code-excerpt/dist/index.d.ts +9 -0
  120. node_ui/node_modules/code-excerpt/dist/index.js +27 -0
  121. node_ui/node_modules/code-excerpt/license +21 -0
  122. node_ui/node_modules/code-excerpt/package.json +43 -0
  123. node_ui/node_modules/code-excerpt/readme.md +65 -0
  124. node_ui/node_modules/convert-to-spaces/dist/index.d.ts +2 -0
  125. node_ui/node_modules/convert-to-spaces/dist/index.js +4 -0
  126. node_ui/node_modules/convert-to-spaces/license +21 -0
  127. node_ui/node_modules/convert-to-spaces/package.json +40 -0
  128. node_ui/node_modules/convert-to-spaces/readme.md +39 -0
  129. node_ui/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  130. node_ui/node_modules/emoji-regex/README.md +107 -0
  131. node_ui/node_modules/emoji-regex/index.d.ts +3 -0
  132. node_ui/node_modules/emoji-regex/index.js +4 -0
  133. node_ui/node_modules/emoji-regex/index.mjs +4 -0
  134. node_ui/node_modules/emoji-regex/package.json +45 -0
  135. node_ui/node_modules/environment/index.d.ts +74 -0
  136. node_ui/node_modules/environment/index.js +47 -0
  137. node_ui/node_modules/environment/license +9 -0
  138. node_ui/node_modules/environment/package.json +74 -0
  139. node_ui/node_modules/environment/readme.md +94 -0
  140. node_ui/node_modules/escape-string-regexp/index.d.ts +16 -0
  141. node_ui/node_modules/escape-string-regexp/index.js +11 -0
  142. node_ui/node_modules/escape-string-regexp/license +9 -0
  143. node_ui/node_modules/escape-string-regexp/package.json +40 -0
  144. node_ui/node_modules/escape-string-regexp/readme.md +34 -0
  145. node_ui/node_modules/figures/index.d.ts +269 -0
  146. node_ui/node_modules/figures/index.js +322 -0
  147. node_ui/node_modules/figures/license +9 -0
  148. node_ui/node_modules/figures/package.json +46 -0
  149. node_ui/node_modules/figures/readme.md +328 -0
  150. node_ui/node_modules/get-east-asian-width/index.d.ts +60 -0
  151. node_ui/node_modules/get-east-asian-width/index.js +30 -0
  152. node_ui/node_modules/get-east-asian-width/license +9 -0
  153. node_ui/node_modules/get-east-asian-width/lookup.js +403 -0
  154. node_ui/node_modules/get-east-asian-width/package.json +70 -0
  155. node_ui/node_modules/get-east-asian-width/readme.md +65 -0
  156. node_ui/node_modules/indent-string/index.d.ts +38 -0
  157. node_ui/node_modules/indent-string/index.js +38 -0
  158. node_ui/node_modules/indent-string/license +9 -0
  159. node_ui/node_modules/indent-string/package.json +40 -0
  160. node_ui/node_modules/indent-string/readme.md +73 -0
  161. node_ui/node_modules/ink/build/apply-styles.js +175 -0
  162. node_ui/node_modules/ink/build/build-layout.js +77 -0
  163. node_ui/node_modules/ink/build/calculate-wrapped-text.js +53 -0
  164. node_ui/node_modules/ink/build/colorize.d.ts +3 -0
  165. node_ui/node_modules/ink/build/colorize.js +48 -0
  166. node_ui/node_modules/ink/build/colorize.js.map +1 -0
  167. node_ui/node_modules/ink/build/components/App.d.ts +61 -0
  168. node_ui/node_modules/ink/build/components/App.js +286 -0
  169. node_ui/node_modules/ink/build/components/App.js.map +1 -0
  170. node_ui/node_modules/ink/build/components/AppContext.d.ts +12 -0
  171. node_ui/node_modules/ink/build/components/AppContext.js +11 -0
  172. node_ui/node_modules/ink/build/components/AppContext.js.map +1 -0
  173. node_ui/node_modules/ink/build/components/Box.d.ts +62 -0
  174. node_ui/node_modules/ink/build/components/Box.js +20 -0
  175. node_ui/node_modules/ink/build/components/Box.js.map +1 -0
  176. node_ui/node_modules/ink/build/components/Color.js +62 -0
  177. node_ui/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
  178. node_ui/node_modules/ink/build/components/ErrorOverview.js +79 -0
  179. node_ui/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
  180. node_ui/node_modules/ink/build/components/FocusContext.d.ts +17 -0
  181. node_ui/node_modules/ink/build/components/FocusContext.js +17 -0
  182. node_ui/node_modules/ink/build/components/FocusContext.js.map +1 -0
  183. node_ui/node_modules/ink/build/components/Newline.d.ts +13 -0
  184. node_ui/node_modules/ink/build/components/Newline.js +8 -0
  185. node_ui/node_modules/ink/build/components/Newline.js.map +1 -0
  186. node_ui/node_modules/ink/build/components/Spacer.d.ts +6 -0
  187. node_ui/node_modules/ink/build/components/Spacer.js +10 -0
  188. node_ui/node_modules/ink/build/components/Spacer.js.map +1 -0
  189. node_ui/node_modules/ink/build/components/Static.d.ts +31 -0
  190. node_ui/node_modules/ink/build/components/Static.js +33 -0
  191. node_ui/node_modules/ink/build/components/Static.js.map +1 -0
  192. node_ui/node_modules/ink/build/components/StderrContext.d.ts +19 -0
  193. node_ui/node_modules/ink/build/components/StderrContext.js +13 -0
  194. node_ui/node_modules/ink/build/components/StderrContext.js.map +1 -0
  195. node_ui/node_modules/ink/build/components/StdinContext.d.ts +26 -0
  196. node_ui/node_modules/ink/build/components/StdinContext.js +19 -0
  197. node_ui/node_modules/ink/build/components/StdinContext.js.map +1 -0
  198. node_ui/node_modules/ink/build/components/StdoutContext.d.ts +19 -0
  199. node_ui/node_modules/ink/build/components/StdoutContext.js +13 -0
  200. node_ui/node_modules/ink/build/components/StdoutContext.js.map +1 -0
  201. node_ui/node_modules/ink/build/components/Text.d.ts +49 -0
  202. node_ui/node_modules/ink/build/components/Text.js +40 -0
  203. node_ui/node_modules/ink/build/components/Text.js.map +1 -0
  204. node_ui/node_modules/ink/build/components/Transform.d.ts +15 -0
  205. node_ui/node_modules/ink/build/components/Transform.js +14 -0
  206. node_ui/node_modules/ink/build/components/Transform.js.map +1 -0
  207. node_ui/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
  208. node_ui/node_modules/ink/build/devtools-window-polyfill.js +64 -0
  209. node_ui/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
  210. node_ui/node_modules/ink/build/devtools.d.ts +1 -0
  211. node_ui/node_modules/ink/build/devtools.js +9 -0
  212. node_ui/node_modules/ink/build/devtools.js.map +1 -0
  213. node_ui/node_modules/ink/build/dom.d.ts +42 -0
  214. node_ui/node_modules/ink/build/dom.js +117 -0
  215. node_ui/node_modules/ink/build/dom.js.map +1 -0
  216. node_ui/node_modules/ink/build/experimental/apply-style.js +140 -0
  217. node_ui/node_modules/ink/build/experimental/dom.js +123 -0
  218. node_ui/node_modules/ink/build/experimental/output.js +91 -0
  219. node_ui/node_modules/ink/build/experimental/reconciler.js +141 -0
  220. node_ui/node_modules/ink/build/experimental/renderer.js +81 -0
  221. node_ui/node_modules/ink/build/get-max-width.d.ts +3 -0
  222. node_ui/node_modules/ink/build/get-max-width.js +10 -0
  223. node_ui/node_modules/ink/build/get-max-width.js.map +1 -0
  224. node_ui/node_modules/ink/build/hooks/use-app.d.ts +5 -0
  225. node_ui/node_modules/ink/build/hooks/use-app.js +8 -0
  226. node_ui/node_modules/ink/build/hooks/use-app.js.map +1 -0
  227. node_ui/node_modules/ink/build/hooks/use-focus-manager.d.ts +34 -0
  228. node_ui/node_modules/ink/build/hooks/use-focus-manager.js +18 -0
  229. node_ui/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
  230. node_ui/node_modules/ink/build/hooks/use-focus.d.ts +34 -0
  231. node_ui/node_modules/ink/build/hooks/use-focus.js +47 -0
  232. node_ui/node_modules/ink/build/hooks/use-focus.js.map +1 -0
  233. node_ui/node_modules/ink/build/hooks/use-input.d.ts +97 -0
  234. node_ui/node_modules/ink/build/hooks/use-input.js +96 -0
  235. node_ui/node_modules/ink/build/hooks/use-input.js.map +1 -0
  236. node_ui/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
  237. node_ui/node_modules/ink/build/hooks/use-stderr.js +8 -0
  238. node_ui/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
  239. node_ui/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
  240. node_ui/node_modules/ink/build/hooks/use-stdin.js +8 -0
  241. node_ui/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
  242. node_ui/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
  243. node_ui/node_modules/ink/build/hooks/use-stdout.js +8 -0
  244. node_ui/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
  245. node_ui/node_modules/ink/build/hooks/useInput.js +38 -0
  246. node_ui/node_modules/ink/build/index.d.ts +27 -0
  247. node_ui/node_modules/ink/build/index.js +16 -0
  248. node_ui/node_modules/ink/build/index.js.map +1 -0
  249. node_ui/node_modules/ink/build/ink.d.ts +38 -0
  250. node_ui/node_modules/ink/build/ink.js +235 -0
  251. node_ui/node_modules/ink/build/ink.js.map +1 -0
  252. node_ui/node_modules/ink/build/instance.js +205 -0
  253. node_ui/node_modules/ink/build/instances.d.ts +4 -0
  254. node_ui/node_modules/ink/build/instances.js +8 -0
  255. node_ui/node_modules/ink/build/instances.js.map +1 -0
  256. node_ui/node_modules/ink/build/log-update.d.ts +13 -0
  257. node_ui/node_modules/ink/build/log-update.js +37 -0
  258. node_ui/node_modules/ink/build/log-update.js.map +1 -0
  259. node_ui/node_modules/ink/build/measure-element.d.ts +16 -0
  260. node_ui/node_modules/ink/build/measure-element.js +9 -0
  261. node_ui/node_modules/ink/build/measure-element.js.map +1 -0
  262. node_ui/node_modules/ink/build/measure-text.d.ts +6 -0
  263. node_ui/node_modules/ink/build/measure-text.js +20 -0
  264. node_ui/node_modules/ink/build/measure-text.js.map +1 -0
  265. node_ui/node_modules/ink/build/output.d.ts +35 -0
  266. node_ui/node_modules/ink/build/output.js +148 -0
  267. node_ui/node_modules/ink/build/output.js.map +1 -0
  268. node_ui/node_modules/ink/build/parse-keypress.d.ts +15 -0
  269. node_ui/node_modules/ink/build/parse-keypress.js +225 -0
  270. node_ui/node_modules/ink/build/parse-keypress.js.map +1 -0
  271. node_ui/node_modules/ink/build/reconciler.d.ts +4 -0
  272. node_ui/node_modules/ink/build/reconciler.js +219 -0
  273. node_ui/node_modules/ink/build/reconciler.js.map +1 -0
  274. node_ui/node_modules/ink/build/render-border.d.ts +4 -0
  275. node_ui/node_modules/ink/build/render-border.js +73 -0
  276. node_ui/node_modules/ink/build/render-border.js.map +1 -0
  277. node_ui/node_modules/ink/build/render-node-to-output.d.ts +10 -0
  278. node_ui/node_modules/ink/build/render-node-to-output.js +99 -0
  279. node_ui/node_modules/ink/build/render-node-to-output.js.map +1 -0
  280. node_ui/node_modules/ink/build/render.d.ts +68 -0
  281. node_ui/node_modules/ink/build/render.js +48 -0
  282. node_ui/node_modules/ink/build/render.js.map +1 -0
  283. node_ui/node_modules/ink/build/renderer.d.ts +8 -0
  284. node_ui/node_modules/ink/build/renderer.js +36 -0
  285. node_ui/node_modules/ink/build/renderer.js.map +1 -0
  286. node_ui/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
  287. node_ui/node_modules/ink/build/squash-text-nodes.js +35 -0
  288. node_ui/node_modules/ink/build/squash-text-nodes.js.map +1 -0
  289. node_ui/node_modules/ink/build/styles.d.ts +243 -0
  290. node_ui/node_modules/ink/build/styles.js +229 -0
  291. node_ui/node_modules/ink/build/styles.js.map +1 -0
  292. node_ui/node_modules/ink/build/wrap-text.d.ts +3 -0
  293. node_ui/node_modules/ink/build/wrap-text.js +31 -0
  294. node_ui/node_modules/ink/build/wrap-text.js.map +1 -0
  295. node_ui/node_modules/ink/license +9 -0
  296. node_ui/node_modules/ink/package.json +197 -0
  297. node_ui/node_modules/ink/readme.md +2153 -0
  298. node_ui/node_modules/ink-select-input/build/Indicator.d.ts +6 -0
  299. node_ui/node_modules/ink-select-input/build/Indicator.js +8 -0
  300. node_ui/node_modules/ink-select-input/build/Indicator.js.map +1 -0
  301. node_ui/node_modules/ink-select-input/build/Item.d.ts +7 -0
  302. node_ui/node_modules/ink-select-input/build/Item.js +7 -0
  303. node_ui/node_modules/ink-select-input/build/Item.js.map +1 -0
  304. node_ui/node_modules/ink-select-input/build/SelectInput.d.ts +49 -0
  305. node_ui/node_modules/ink-select-input/build/SelectInput.js +83 -0
  306. node_ui/node_modules/ink-select-input/build/SelectInput.js.map +1 -0
  307. node_ui/node_modules/ink-select-input/build/index.d.ts +3 -0
  308. node_ui/node_modules/ink-select-input/build/index.js +4 -0
  309. node_ui/node_modules/ink-select-input/build/index.js.map +1 -0
  310. node_ui/node_modules/ink-select-input/license +9 -0
  311. node_ui/node_modules/ink-select-input/node_modules/figures/index.d.ts +279 -0
  312. node_ui/node_modules/ink-select-input/node_modules/figures/index.js +292 -0
  313. node_ui/node_modules/ink-select-input/node_modules/figures/license +9 -0
  314. node_ui/node_modules/ink-select-input/node_modules/figures/package.json +49 -0
  315. node_ui/node_modules/ink-select-input/node_modules/figures/readme.md +337 -0
  316. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.d.ts +12 -0
  317. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.js +21 -0
  318. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/license +9 -0
  319. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/package.json +47 -0
  320. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/readme.md +35 -0
  321. node_ui/node_modules/ink-select-input/package.json +83 -0
  322. node_ui/node_modules/ink-select-input/readme.md +98 -0
  323. node_ui/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  324. node_ui/node_modules/is-fullwidth-code-point/index.js +40 -0
  325. node_ui/node_modules/is-fullwidth-code-point/license +9 -0
  326. node_ui/node_modules/is-fullwidth-code-point/package.json +45 -0
  327. node_ui/node_modules/is-fullwidth-code-point/readme.md +43 -0
  328. node_ui/node_modules/is-in-ci/cli.js +5 -0
  329. node_ui/node_modules/is-in-ci/index.d.ts +15 -0
  330. node_ui/node_modules/is-in-ci/index.js +11 -0
  331. node_ui/node_modules/is-in-ci/license +9 -0
  332. node_ui/node_modules/is-in-ci/package.json +48 -0
  333. node_ui/node_modules/is-in-ci/readme.md +43 -0
  334. node_ui/node_modules/is-unicode-supported/index.d.ts +12 -0
  335. node_ui/node_modules/is-unicode-supported/index.js +17 -0
  336. node_ui/node_modules/is-unicode-supported/license +9 -0
  337. node_ui/node_modules/is-unicode-supported/package.json +43 -0
  338. node_ui/node_modules/is-unicode-supported/readme.md +35 -0
  339. node_ui/node_modules/js-tokens/CHANGELOG.md +151 -0
  340. node_ui/node_modules/js-tokens/LICENSE +21 -0
  341. node_ui/node_modules/js-tokens/README.md +240 -0
  342. node_ui/node_modules/js-tokens/index.js +23 -0
  343. node_ui/node_modules/js-tokens/package.json +30 -0
  344. node_ui/node_modules/lodash/LICENSE +47 -0
  345. node_ui/node_modules/lodash/README.md +39 -0
  346. node_ui/node_modules/lodash/_DataView.js +7 -0
  347. node_ui/node_modules/lodash/_Hash.js +32 -0
  348. node_ui/node_modules/lodash/_LazyWrapper.js +28 -0
  349. node_ui/node_modules/lodash/_ListCache.js +32 -0
  350. node_ui/node_modules/lodash/_LodashWrapper.js +22 -0
  351. node_ui/node_modules/lodash/_Map.js +7 -0
  352. node_ui/node_modules/lodash/_MapCache.js +32 -0
  353. node_ui/node_modules/lodash/_Promise.js +7 -0
  354. node_ui/node_modules/lodash/_Set.js +7 -0
  355. node_ui/node_modules/lodash/_SetCache.js +27 -0
  356. node_ui/node_modules/lodash/_Stack.js +27 -0
  357. node_ui/node_modules/lodash/_Symbol.js +6 -0
  358. node_ui/node_modules/lodash/_Uint8Array.js +6 -0
  359. node_ui/node_modules/lodash/_WeakMap.js +7 -0
  360. node_ui/node_modules/lodash/_apply.js +21 -0
  361. node_ui/node_modules/lodash/_arrayAggregator.js +22 -0
  362. node_ui/node_modules/lodash/_arrayEach.js +22 -0
  363. node_ui/node_modules/lodash/_arrayEachRight.js +21 -0
  364. node_ui/node_modules/lodash/_arrayEvery.js +23 -0
  365. node_ui/node_modules/lodash/_arrayFilter.js +25 -0
  366. node_ui/node_modules/lodash/_arrayIncludes.js +17 -0
  367. node_ui/node_modules/lodash/_arrayIncludesWith.js +22 -0
  368. node_ui/node_modules/lodash/_arrayLikeKeys.js +49 -0
  369. node_ui/node_modules/lodash/_arrayMap.js +21 -0
  370. node_ui/node_modules/lodash/_arrayPush.js +20 -0
  371. node_ui/node_modules/lodash/_arrayReduce.js +26 -0
  372. node_ui/node_modules/lodash/_arrayReduceRight.js +24 -0
  373. node_ui/node_modules/lodash/_arraySample.js +15 -0
  374. node_ui/node_modules/lodash/_arraySampleSize.js +17 -0
  375. node_ui/node_modules/lodash/_arrayShuffle.js +15 -0
  376. node_ui/node_modules/lodash/_arraySome.js +23 -0
  377. node_ui/node_modules/lodash/_asciiSize.js +12 -0
  378. node_ui/node_modules/lodash/_asciiToArray.js +12 -0
  379. node_ui/node_modules/lodash/_asciiWords.js +15 -0
  380. node_ui/node_modules/lodash/_assignMergeValue.js +20 -0
  381. node_ui/node_modules/lodash/_assignValue.js +28 -0
  382. node_ui/node_modules/lodash/_assocIndexOf.js +21 -0
  383. node_ui/node_modules/lodash/_baseAggregator.js +21 -0
  384. node_ui/node_modules/lodash/_baseAssign.js +17 -0
  385. node_ui/node_modules/lodash/_baseAssignIn.js +17 -0
  386. node_ui/node_modules/lodash/_baseAssignValue.js +25 -0
  387. node_ui/node_modules/lodash/_baseAt.js +23 -0
  388. node_ui/node_modules/lodash/_baseClamp.js +22 -0
  389. node_ui/node_modules/lodash/_baseClone.js +166 -0
  390. node_ui/node_modules/lodash/_baseConforms.js +18 -0
  391. node_ui/node_modules/lodash/_baseConformsTo.js +27 -0
  392. node_ui/node_modules/lodash/_baseCreate.js +30 -0
  393. node_ui/node_modules/lodash/_baseDelay.js +21 -0
  394. node_ui/node_modules/lodash/_baseDifference.js +67 -0
  395. node_ui/node_modules/lodash/_baseEach.js +14 -0
  396. node_ui/node_modules/lodash/_baseEachRight.js +14 -0
  397. node_ui/node_modules/lodash/_baseEvery.js +21 -0
  398. node_ui/node_modules/lodash/_baseExtremum.js +32 -0
  399. node_ui/node_modules/lodash/_baseFill.js +32 -0
  400. node_ui/node_modules/lodash/_baseFilter.js +21 -0
  401. node_ui/node_modules/lodash/_baseFindIndex.js +24 -0
  402. node_ui/node_modules/lodash/_baseFindKey.js +23 -0
  403. node_ui/node_modules/lodash/_baseFlatten.js +38 -0
  404. node_ui/node_modules/lodash/_baseFor.js +16 -0
  405. node_ui/node_modules/lodash/_baseForOwn.js +16 -0
  406. node_ui/node_modules/lodash/_baseForOwnRight.js +16 -0
  407. node_ui/node_modules/lodash/_baseForRight.js +15 -0
  408. node_ui/node_modules/lodash/_baseFunctions.js +19 -0
  409. node_ui/node_modules/lodash/_baseGet.js +24 -0
  410. node_ui/node_modules/lodash/_baseGetAllKeys.js +20 -0
  411. node_ui/node_modules/lodash/_baseGetTag.js +28 -0
  412. node_ui/node_modules/lodash/_baseGt.js +14 -0
  413. node_ui/node_modules/lodash/_baseHas.js +19 -0
  414. node_ui/node_modules/lodash/_baseHasIn.js +13 -0
  415. node_ui/node_modules/lodash/_baseInRange.js +18 -0
  416. node_ui/node_modules/lodash/_baseIndexOf.js +20 -0
  417. node_ui/node_modules/lodash/_baseIndexOfWith.js +23 -0
  418. node_ui/node_modules/lodash/_baseIntersection.js +74 -0
  419. node_ui/node_modules/lodash/_baseInverter.js +21 -0
  420. node_ui/node_modules/lodash/_baseInvoke.js +24 -0
  421. node_ui/node_modules/lodash/_baseIsArguments.js +18 -0
  422. node_ui/node_modules/lodash/_baseIsArrayBuffer.js +17 -0
  423. node_ui/node_modules/lodash/_baseIsDate.js +18 -0
  424. node_ui/node_modules/lodash/_baseIsEqual.js +28 -0
  425. node_ui/node_modules/lodash/_baseIsEqualDeep.js +83 -0
  426. node_ui/node_modules/lodash/_baseIsMap.js +18 -0
  427. node_ui/node_modules/lodash/_baseIsMatch.js +62 -0
  428. node_ui/node_modules/lodash/_baseIsNaN.js +12 -0
  429. node_ui/node_modules/lodash/_baseIsNative.js +47 -0
  430. node_ui/node_modules/lodash/_baseIsRegExp.js +18 -0
  431. node_ui/node_modules/lodash/_baseIsSet.js +18 -0
  432. node_ui/node_modules/lodash/_baseIsTypedArray.js +60 -0
  433. node_ui/node_modules/lodash/_baseIteratee.js +31 -0
  434. node_ui/node_modules/lodash/_baseKeys.js +30 -0
  435. node_ui/node_modules/lodash/_baseKeysIn.js +33 -0
  436. node_ui/node_modules/lodash/_baseLodash.js +10 -0
  437. node_ui/node_modules/lodash/_baseLt.js +14 -0
  438. node_ui/node_modules/lodash/_baseMap.js +22 -0
  439. node_ui/node_modules/lodash/_baseMatches.js +22 -0
  440. node_ui/node_modules/lodash/_baseMatchesProperty.js +33 -0
  441. node_ui/node_modules/lodash/_baseMean.js +20 -0
  442. node_ui/node_modules/lodash/_baseMerge.js +42 -0
  443. node_ui/node_modules/lodash/_baseMergeDeep.js +94 -0
  444. node_ui/node_modules/lodash/_baseNth.js +20 -0
  445. node_ui/node_modules/lodash/_baseOrderBy.js +49 -0
  446. node_ui/node_modules/lodash/_basePick.js +19 -0
  447. node_ui/node_modules/lodash/_basePickBy.js +30 -0
  448. node_ui/node_modules/lodash/_baseProperty.js +14 -0
  449. node_ui/node_modules/lodash/_basePropertyDeep.js +16 -0
  450. node_ui/node_modules/lodash/_basePropertyOf.js +14 -0
  451. node_ui/node_modules/lodash/_basePullAll.js +51 -0
  452. node_ui/node_modules/lodash/_basePullAt.js +37 -0
  453. node_ui/node_modules/lodash/_baseRandom.js +18 -0
  454. node_ui/node_modules/lodash/_baseRange.js +28 -0
  455. node_ui/node_modules/lodash/_baseReduce.js +23 -0
  456. node_ui/node_modules/lodash/_baseRepeat.js +35 -0
  457. node_ui/node_modules/lodash/_baseRest.js +17 -0
  458. node_ui/node_modules/lodash/_baseSample.js +15 -0
  459. node_ui/node_modules/lodash/_baseSampleSize.js +18 -0
  460. node_ui/node_modules/lodash/_baseSet.js +51 -0
  461. node_ui/node_modules/lodash/_baseSetData.js +17 -0
  462. node_ui/node_modules/lodash/_baseSetToString.js +22 -0
  463. node_ui/node_modules/lodash/_baseShuffle.js +15 -0
  464. node_ui/node_modules/lodash/_baseSlice.js +31 -0
  465. node_ui/node_modules/lodash/_baseSome.js +22 -0
  466. node_ui/node_modules/lodash/_baseSortBy.js +21 -0
  467. node_ui/node_modules/lodash/_baseSortedIndex.js +42 -0
  468. node_ui/node_modules/lodash/_baseSortedIndexBy.js +67 -0
  469. node_ui/node_modules/lodash/_baseSortedUniq.js +30 -0
  470. node_ui/node_modules/lodash/_baseSum.js +24 -0
  471. node_ui/node_modules/lodash/_baseTimes.js +20 -0
  472. node_ui/node_modules/lodash/_baseToNumber.js +24 -0
  473. node_ui/node_modules/lodash/_baseToPairs.js +18 -0
  474. node_ui/node_modules/lodash/_baseToString.js +37 -0
  475. node_ui/node_modules/lodash/_baseTrim.js +19 -0
  476. node_ui/node_modules/lodash/_baseUnary.js +14 -0
  477. node_ui/node_modules/lodash/_baseUniq.js +72 -0
  478. node_ui/node_modules/lodash/_baseUnset.js +20 -0
  479. node_ui/node_modules/lodash/_baseUpdate.js +18 -0
  480. node_ui/node_modules/lodash/_baseValues.js +19 -0
  481. node_ui/node_modules/lodash/_baseWhile.js +26 -0
  482. node_ui/node_modules/lodash/_baseWrapperValue.js +25 -0
  483. node_ui/node_modules/lodash/_baseXor.js +36 -0
  484. node_ui/node_modules/lodash/_baseZipObject.js +23 -0
  485. node_ui/node_modules/lodash/_cacheHas.js +13 -0
  486. node_ui/node_modules/lodash/_castArrayLikeObject.js +14 -0
  487. node_ui/node_modules/lodash/_castFunction.js +14 -0
  488. node_ui/node_modules/lodash/_castPath.js +21 -0
  489. node_ui/node_modules/lodash/_castRest.js +14 -0
  490. node_ui/node_modules/lodash/_castSlice.js +18 -0
  491. node_ui/node_modules/lodash/_charsEndIndex.js +19 -0
  492. node_ui/node_modules/lodash/_charsStartIndex.js +20 -0
  493. node_ui/node_modules/lodash/_cloneArrayBuffer.js +16 -0
  494. node_ui/node_modules/lodash/_cloneBuffer.js +35 -0
  495. node_ui/node_modules/lodash/_cloneDataView.js +16 -0
  496. node_ui/node_modules/lodash/_cloneRegExp.js +17 -0
  497. node_ui/node_modules/lodash/_cloneSymbol.js +18 -0
  498. node_ui/node_modules/lodash/_cloneTypedArray.js +16 -0
  499. node_ui/node_modules/lodash/_compareAscending.js +41 -0
  500. node_ui/node_modules/lodash/_compareMultiple.js +44 -0
  501. node_ui/node_modules/lodash/_composeArgs.js +39 -0
  502. node_ui/node_modules/lodash/_composeArgsRight.js +41 -0
  503. node_ui/node_modules/lodash/_copyArray.js +20 -0
  504. node_ui/node_modules/lodash/_copyObject.js +40 -0
  505. node_ui/node_modules/lodash/_copySymbols.js +16 -0
  506. node_ui/node_modules/lodash/_copySymbolsIn.js +16 -0
  507. node_ui/node_modules/lodash/_coreJsData.js +6 -0
  508. node_ui/node_modules/lodash/_countHolders.js +21 -0
  509. node_ui/node_modules/lodash/_createAggregator.js +23 -0
  510. node_ui/node_modules/lodash/_createAssigner.js +37 -0
  511. node_ui/node_modules/lodash/_createBaseEach.js +32 -0
  512. node_ui/node_modules/lodash/_createBaseFor.js +25 -0
  513. node_ui/node_modules/lodash/_createBind.js +28 -0
  514. node_ui/node_modules/lodash/_createCaseFirst.js +33 -0
  515. node_ui/node_modules/lodash/_createCompounder.js +24 -0
  516. node_ui/node_modules/lodash/_createCtor.js +37 -0
  517. node_ui/node_modules/lodash/_createCurry.js +46 -0
  518. node_ui/node_modules/lodash/_createFind.js +25 -0
  519. node_ui/node_modules/lodash/_createFlow.js +78 -0
  520. node_ui/node_modules/lodash/_createHybrid.js +92 -0
  521. node_ui/node_modules/lodash/_createInverter.js +17 -0
  522. node_ui/node_modules/lodash/_createMathOperation.js +38 -0
  523. node_ui/node_modules/lodash/_createOver.js +27 -0
  524. node_ui/node_modules/lodash/_createPadding.js +33 -0
  525. node_ui/node_modules/lodash/_createPartial.js +43 -0
  526. node_ui/node_modules/lodash/_createRange.js +30 -0
  527. node_ui/node_modules/lodash/_createRecurry.js +56 -0
  528. node_ui/node_modules/lodash/_createRelationalOperation.js +20 -0
  529. node_ui/node_modules/lodash/_createRound.js +35 -0
  530. node_ui/node_modules/lodash/_createSet.js +19 -0
  531. node_ui/node_modules/lodash/_createToPairs.js +30 -0
  532. node_ui/node_modules/lodash/_createWrap.js +106 -0
  533. node_ui/node_modules/lodash/_customDefaultsAssignIn.js +29 -0
  534. node_ui/node_modules/lodash/_customDefaultsMerge.js +28 -0
  535. node_ui/node_modules/lodash/_customOmitClone.js +16 -0
  536. node_ui/node_modules/lodash/_deburrLetter.js +71 -0
  537. node_ui/node_modules/lodash/_defineProperty.js +11 -0
  538. node_ui/node_modules/lodash/_equalArrays.js +84 -0
  539. node_ui/node_modules/lodash/_equalByTag.js +112 -0
  540. node_ui/node_modules/lodash/_equalObjects.js +90 -0
  541. node_ui/node_modules/lodash/_escapeHtmlChar.js +21 -0
  542. node_ui/node_modules/lodash/_escapeStringChar.js +22 -0
  543. node_ui/node_modules/lodash/_flatRest.js +16 -0
  544. node_ui/node_modules/lodash/_freeGlobal.js +4 -0
  545. node_ui/node_modules/lodash/_getAllKeys.js +16 -0
  546. node_ui/node_modules/lodash/_getAllKeysIn.js +17 -0
  547. node_ui/node_modules/lodash/_getData.js +15 -0
  548. node_ui/node_modules/lodash/_getFuncName.js +31 -0
  549. node_ui/node_modules/lodash/_getHolder.js +13 -0
  550. node_ui/node_modules/lodash/_getMapData.js +18 -0
  551. node_ui/node_modules/lodash/_getMatchData.js +24 -0
  552. node_ui/node_modules/lodash/_getNative.js +17 -0
  553. node_ui/node_modules/lodash/_getPrototype.js +6 -0
  554. node_ui/node_modules/lodash/_getRawTag.js +46 -0
  555. node_ui/node_modules/lodash/_getSymbols.js +30 -0
  556. node_ui/node_modules/lodash/_getSymbolsIn.js +25 -0
  557. node_ui/node_modules/lodash/_getTag.js +58 -0
  558. node_ui/node_modules/lodash/_getValue.js +13 -0
  559. node_ui/node_modules/lodash/_getView.js +33 -0
  560. node_ui/node_modules/lodash/_getWrapDetails.js +17 -0
  561. node_ui/node_modules/lodash/_hasPath.js +39 -0
  562. node_ui/node_modules/lodash/_hasUnicode.js +26 -0
  563. node_ui/node_modules/lodash/_hasUnicodeWord.js +15 -0
  564. node_ui/node_modules/lodash/_hashClear.js +15 -0
  565. node_ui/node_modules/lodash/_hashDelete.js +17 -0
  566. node_ui/node_modules/lodash/_hashGet.js +30 -0
  567. node_ui/node_modules/lodash/_hashHas.js +23 -0
  568. node_ui/node_modules/lodash/_hashSet.js +23 -0
  569. node_ui/node_modules/lodash/_initCloneArray.js +26 -0
  570. node_ui/node_modules/lodash/_initCloneByTag.js +77 -0
  571. node_ui/node_modules/lodash/_initCloneObject.js +18 -0
  572. node_ui/node_modules/lodash/_insertWrapDetails.js +23 -0
  573. node_ui/node_modules/lodash/_isFlattenable.js +20 -0
  574. node_ui/node_modules/lodash/_isIndex.js +25 -0
  575. node_ui/node_modules/lodash/_isIterateeCall.js +30 -0
  576. node_ui/node_modules/lodash/_isKey.js +29 -0
  577. node_ui/node_modules/lodash/_isKeyable.js +15 -0
  578. node_ui/node_modules/lodash/_isLaziable.js +28 -0
  579. node_ui/node_modules/lodash/_isMaskable.js +14 -0
  580. node_ui/node_modules/lodash/_isMasked.js +20 -0
  581. node_ui/node_modules/lodash/_isPrototype.js +18 -0
  582. node_ui/node_modules/lodash/_isStrictComparable.js +15 -0
  583. node_ui/node_modules/lodash/_iteratorToArray.js +18 -0
  584. node_ui/node_modules/lodash/_lazyClone.js +23 -0
  585. node_ui/node_modules/lodash/_lazyReverse.js +23 -0
  586. node_ui/node_modules/lodash/_lazyValue.js +69 -0
  587. node_ui/node_modules/lodash/_listCacheClear.js +13 -0
  588. node_ui/node_modules/lodash/_listCacheDelete.js +35 -0
  589. node_ui/node_modules/lodash/_listCacheGet.js +19 -0
  590. node_ui/node_modules/lodash/_listCacheHas.js +16 -0
  591. node_ui/node_modules/lodash/_listCacheSet.js +26 -0
  592. node_ui/node_modules/lodash/_mapCacheClear.js +21 -0
  593. node_ui/node_modules/lodash/_mapCacheDelete.js +18 -0
  594. node_ui/node_modules/lodash/_mapCacheGet.js +16 -0
  595. node_ui/node_modules/lodash/_mapCacheHas.js +16 -0
  596. node_ui/node_modules/lodash/_mapCacheSet.js +22 -0
  597. node_ui/node_modules/lodash/_mapToArray.js +18 -0
  598. node_ui/node_modules/lodash/_matchesStrictComparable.js +20 -0
  599. node_ui/node_modules/lodash/_memoizeCapped.js +26 -0
  600. node_ui/node_modules/lodash/_mergeData.js +90 -0
  601. node_ui/node_modules/lodash/_metaMap.js +6 -0
  602. node_ui/node_modules/lodash/_nativeCreate.js +6 -0
  603. node_ui/node_modules/lodash/_nativeKeys.js +6 -0
  604. node_ui/node_modules/lodash/_nativeKeysIn.js +20 -0
  605. node_ui/node_modules/lodash/_nodeUtil.js +30 -0
  606. node_ui/node_modules/lodash/_objectToString.js +22 -0
  607. node_ui/node_modules/lodash/_overArg.js +15 -0
  608. node_ui/node_modules/lodash/_overRest.js +36 -0
  609. node_ui/node_modules/lodash/_parent.js +16 -0
  610. node_ui/node_modules/lodash/_reEscape.js +4 -0
  611. node_ui/node_modules/lodash/_reEvaluate.js +4 -0
  612. node_ui/node_modules/lodash/_reInterpolate.js +4 -0
  613. node_ui/node_modules/lodash/_realNames.js +4 -0
  614. node_ui/node_modules/lodash/_reorder.js +29 -0
  615. node_ui/node_modules/lodash/_replaceHolders.js +29 -0
  616. node_ui/node_modules/lodash/_root.js +9 -0
  617. node_ui/node_modules/lodash/_safeGet.js +21 -0
  618. node_ui/node_modules/lodash/_setCacheAdd.js +19 -0
  619. node_ui/node_modules/lodash/_setCacheHas.js +14 -0
  620. node_ui/node_modules/lodash/_setData.js +20 -0
  621. node_ui/node_modules/lodash/_setToArray.js +18 -0
  622. node_ui/node_modules/lodash/_setToPairs.js +18 -0
  623. node_ui/node_modules/lodash/_setToString.js +14 -0
  624. node_ui/node_modules/lodash/_setWrapToString.js +21 -0
  625. node_ui/node_modules/lodash/_shortOut.js +37 -0
  626. node_ui/node_modules/lodash/_shuffleSelf.js +28 -0
  627. node_ui/node_modules/lodash/_stackClear.js +15 -0
  628. node_ui/node_modules/lodash/_stackDelete.js +18 -0
  629. node_ui/node_modules/lodash/_stackGet.js +14 -0
  630. node_ui/node_modules/lodash/_stackHas.js +14 -0
  631. node_ui/node_modules/lodash/_stackSet.js +34 -0
  632. node_ui/node_modules/lodash/_strictIndexOf.js +23 -0
  633. node_ui/node_modules/lodash/_strictLastIndexOf.js +21 -0
  634. node_ui/node_modules/lodash/_stringSize.js +18 -0
  635. node_ui/node_modules/lodash/_stringToArray.js +18 -0
  636. node_ui/node_modules/lodash/_stringToPath.js +27 -0
  637. node_ui/node_modules/lodash/_toKey.js +21 -0
  638. node_ui/node_modules/lodash/_toSource.js +26 -0
  639. node_ui/node_modules/lodash/_trimmedEndIndex.js +19 -0
  640. node_ui/node_modules/lodash/_unescapeHtmlChar.js +21 -0
  641. node_ui/node_modules/lodash/_unicodeSize.js +44 -0
  642. node_ui/node_modules/lodash/_unicodeToArray.js +40 -0
  643. node_ui/node_modules/lodash/_unicodeWords.js +69 -0
  644. node_ui/node_modules/lodash/_updateWrapDetails.js +46 -0
  645. node_ui/node_modules/lodash/_wrapperClone.js +23 -0
  646. node_ui/node_modules/lodash/add.js +22 -0
  647. node_ui/node_modules/lodash/after.js +42 -0
  648. node_ui/node_modules/lodash/array.js +67 -0
  649. node_ui/node_modules/lodash/ary.js +29 -0
  650. node_ui/node_modules/lodash/assign.js +58 -0
  651. node_ui/node_modules/lodash/assignIn.js +40 -0
  652. node_ui/node_modules/lodash/assignInWith.js +38 -0
  653. node_ui/node_modules/lodash/assignWith.js +37 -0
  654. node_ui/node_modules/lodash/at.js +23 -0
  655. node_ui/node_modules/lodash/attempt.js +35 -0
  656. node_ui/node_modules/lodash/before.js +40 -0
  657. node_ui/node_modules/lodash/bind.js +57 -0
  658. node_ui/node_modules/lodash/bindAll.js +41 -0
  659. node_ui/node_modules/lodash/bindKey.js +68 -0
  660. node_ui/node_modules/lodash/camelCase.js +29 -0
  661. node_ui/node_modules/lodash/capitalize.js +23 -0
  662. node_ui/node_modules/lodash/castArray.js +44 -0
  663. node_ui/node_modules/lodash/ceil.js +26 -0
  664. node_ui/node_modules/lodash/chain.js +38 -0
  665. node_ui/node_modules/lodash/chunk.js +50 -0
  666. node_ui/node_modules/lodash/clamp.js +39 -0
  667. node_ui/node_modules/lodash/clone.js +36 -0
  668. node_ui/node_modules/lodash/cloneDeep.js +29 -0
  669. node_ui/node_modules/lodash/cloneDeepWith.js +40 -0
  670. node_ui/node_modules/lodash/cloneWith.js +42 -0
  671. node_ui/node_modules/lodash/collection.js +30 -0
  672. node_ui/node_modules/lodash/commit.js +33 -0
  673. node_ui/node_modules/lodash/compact.js +31 -0
  674. node_ui/node_modules/lodash/concat.js +43 -0
  675. node_ui/node_modules/lodash/cond.js +60 -0
  676. node_ui/node_modules/lodash/conforms.js +35 -0
  677. node_ui/node_modules/lodash/conformsTo.js +32 -0
  678. node_ui/node_modules/lodash/constant.js +26 -0
  679. node_ui/node_modules/lodash/core.js +3877 -0
  680. node_ui/node_modules/lodash/core.min.js +29 -0
  681. node_ui/node_modules/lodash/countBy.js +40 -0
  682. node_ui/node_modules/lodash/create.js +43 -0
  683. node_ui/node_modules/lodash/curry.js +57 -0
  684. node_ui/node_modules/lodash/curryRight.js +54 -0
  685. node_ui/node_modules/lodash/date.js +3 -0
  686. node_ui/node_modules/lodash/debounce.js +191 -0
  687. node_ui/node_modules/lodash/deburr.js +45 -0
  688. node_ui/node_modules/lodash/defaultTo.js +25 -0
  689. node_ui/node_modules/lodash/defaults.js +64 -0
  690. node_ui/node_modules/lodash/defaultsDeep.js +30 -0
  691. node_ui/node_modules/lodash/defer.js +26 -0
  692. node_ui/node_modules/lodash/delay.js +28 -0
  693. node_ui/node_modules/lodash/difference.js +33 -0
  694. node_ui/node_modules/lodash/differenceBy.js +44 -0
  695. node_ui/node_modules/lodash/differenceWith.js +40 -0
  696. node_ui/node_modules/lodash/divide.js +22 -0
  697. node_ui/node_modules/lodash/drop.js +38 -0
  698. node_ui/node_modules/lodash/dropRight.js +39 -0
  699. node_ui/node_modules/lodash/dropRightWhile.js +45 -0
  700. node_ui/node_modules/lodash/dropWhile.js +45 -0
  701. node_ui/node_modules/lodash/each.js +1 -0
  702. node_ui/node_modules/lodash/eachRight.js +1 -0
  703. node_ui/node_modules/lodash/endsWith.js +43 -0
  704. node_ui/node_modules/lodash/entries.js +1 -0
  705. node_ui/node_modules/lodash/entriesIn.js +1 -0
  706. node_ui/node_modules/lodash/eq.js +37 -0
  707. node_ui/node_modules/lodash/escape.js +43 -0
  708. node_ui/node_modules/lodash/escapeRegExp.js +32 -0
  709. node_ui/node_modules/lodash/every.js +56 -0
  710. node_ui/node_modules/lodash/extend.js +1 -0
  711. node_ui/node_modules/lodash/extendWith.js +1 -0
  712. node_ui/node_modules/lodash/fill.js +45 -0
  713. node_ui/node_modules/lodash/filter.js +52 -0
  714. node_ui/node_modules/lodash/find.js +42 -0
  715. node_ui/node_modules/lodash/findIndex.js +55 -0
  716. node_ui/node_modules/lodash/findKey.js +44 -0
  717. node_ui/node_modules/lodash/findLast.js +25 -0
  718. node_ui/node_modules/lodash/findLastIndex.js +59 -0
  719. node_ui/node_modules/lodash/findLastKey.js +44 -0
  720. node_ui/node_modules/lodash/first.js +1 -0
  721. node_ui/node_modules/lodash/flake.lock +40 -0
  722. node_ui/node_modules/lodash/flake.nix +20 -0
  723. node_ui/node_modules/lodash/flatMap.js +29 -0
  724. node_ui/node_modules/lodash/flatMapDeep.js +31 -0
  725. node_ui/node_modules/lodash/flatMapDepth.js +31 -0
  726. node_ui/node_modules/lodash/flatten.js +22 -0
  727. node_ui/node_modules/lodash/flattenDeep.js +25 -0
  728. node_ui/node_modules/lodash/flattenDepth.js +33 -0
  729. node_ui/node_modules/lodash/flip.js +28 -0
  730. node_ui/node_modules/lodash/floor.js +26 -0
  731. node_ui/node_modules/lodash/flow.js +27 -0
  732. node_ui/node_modules/lodash/flowRight.js +26 -0
  733. node_ui/node_modules/lodash/forEach.js +41 -0
  734. node_ui/node_modules/lodash/forEachRight.js +31 -0
  735. node_ui/node_modules/lodash/forIn.js +39 -0
  736. node_ui/node_modules/lodash/forInRight.js +37 -0
  737. node_ui/node_modules/lodash/forOwn.js +36 -0
  738. node_ui/node_modules/lodash/forOwnRight.js +34 -0
  739. node_ui/node_modules/lodash/fp/F.js +1 -0
  740. node_ui/node_modules/lodash/fp/T.js +1 -0
  741. node_ui/node_modules/lodash/fp/__.js +1 -0
  742. node_ui/node_modules/lodash/fp/_baseConvert.js +569 -0
  743. node_ui/node_modules/lodash/fp/_convertBrowser.js +18 -0
  744. node_ui/node_modules/lodash/fp/_falseOptions.js +7 -0
  745. node_ui/node_modules/lodash/fp/_mapping.js +358 -0
  746. node_ui/node_modules/lodash/fp/_util.js +16 -0
  747. node_ui/node_modules/lodash/fp/add.js +5 -0
  748. node_ui/node_modules/lodash/fp/after.js +5 -0
  749. node_ui/node_modules/lodash/fp/all.js +1 -0
  750. node_ui/node_modules/lodash/fp/allPass.js +1 -0
  751. node_ui/node_modules/lodash/fp/always.js +1 -0
  752. node_ui/node_modules/lodash/fp/any.js +1 -0
  753. node_ui/node_modules/lodash/fp/anyPass.js +1 -0
  754. node_ui/node_modules/lodash/fp/apply.js +1 -0
  755. node_ui/node_modules/lodash/fp/array.js +2 -0
  756. node_ui/node_modules/lodash/fp/ary.js +5 -0
  757. node_ui/node_modules/lodash/fp/assign.js +5 -0
  758. node_ui/node_modules/lodash/fp/assignAll.js +5 -0
  759. node_ui/node_modules/lodash/fp/assignAllWith.js +5 -0
  760. node_ui/node_modules/lodash/fp/assignIn.js +5 -0
  761. node_ui/node_modules/lodash/fp/assignInAll.js +5 -0
  762. node_ui/node_modules/lodash/fp/assignInAllWith.js +5 -0
  763. node_ui/node_modules/lodash/fp/assignInWith.js +5 -0
  764. node_ui/node_modules/lodash/fp/assignWith.js +5 -0
  765. node_ui/node_modules/lodash/fp/assoc.js +1 -0
  766. node_ui/node_modules/lodash/fp/assocPath.js +1 -0
  767. node_ui/node_modules/lodash/fp/at.js +5 -0
  768. node_ui/node_modules/lodash/fp/attempt.js +5 -0
  769. node_ui/node_modules/lodash/fp/before.js +5 -0
  770. node_ui/node_modules/lodash/fp/bind.js +5 -0
  771. node_ui/node_modules/lodash/fp/bindAll.js +5 -0
  772. node_ui/node_modules/lodash/fp/bindKey.js +5 -0
  773. node_ui/node_modules/lodash/fp/camelCase.js +5 -0
  774. node_ui/node_modules/lodash/fp/capitalize.js +5 -0
  775. node_ui/node_modules/lodash/fp/castArray.js +5 -0
  776. node_ui/node_modules/lodash/fp/ceil.js +5 -0
  777. node_ui/node_modules/lodash/fp/chain.js +5 -0
  778. node_ui/node_modules/lodash/fp/chunk.js +5 -0
  779. node_ui/node_modules/lodash/fp/clamp.js +5 -0
  780. node_ui/node_modules/lodash/fp/clone.js +5 -0
  781. node_ui/node_modules/lodash/fp/cloneDeep.js +5 -0
  782. node_ui/node_modules/lodash/fp/cloneDeepWith.js +5 -0
  783. node_ui/node_modules/lodash/fp/cloneWith.js +5 -0
  784. node_ui/node_modules/lodash/fp/collection.js +2 -0
  785. node_ui/node_modules/lodash/fp/commit.js +5 -0
  786. node_ui/node_modules/lodash/fp/compact.js +5 -0
  787. node_ui/node_modules/lodash/fp/complement.js +1 -0
  788. node_ui/node_modules/lodash/fp/compose.js +1 -0
  789. node_ui/node_modules/lodash/fp/concat.js +5 -0
  790. node_ui/node_modules/lodash/fp/cond.js +5 -0
  791. node_ui/node_modules/lodash/fp/conforms.js +1 -0
  792. node_ui/node_modules/lodash/fp/conformsTo.js +5 -0
  793. node_ui/node_modules/lodash/fp/constant.js +5 -0
  794. node_ui/node_modules/lodash/fp/contains.js +1 -0
  795. node_ui/node_modules/lodash/fp/convert.js +18 -0
  796. node_ui/node_modules/lodash/fp/countBy.js +5 -0
  797. node_ui/node_modules/lodash/fp/create.js +5 -0
  798. node_ui/node_modules/lodash/fp/curry.js +5 -0
  799. node_ui/node_modules/lodash/fp/curryN.js +5 -0
  800. node_ui/node_modules/lodash/fp/curryRight.js +5 -0
  801. node_ui/node_modules/lodash/fp/curryRightN.js +5 -0
  802. node_ui/node_modules/lodash/fp/date.js +2 -0
  803. node_ui/node_modules/lodash/fp/debounce.js +5 -0
  804. node_ui/node_modules/lodash/fp/deburr.js +5 -0
  805. node_ui/node_modules/lodash/fp/defaultTo.js +5 -0
  806. node_ui/node_modules/lodash/fp/defaults.js +5 -0
  807. node_ui/node_modules/lodash/fp/defaultsAll.js +5 -0
  808. node_ui/node_modules/lodash/fp/defaultsDeep.js +5 -0
  809. node_ui/node_modules/lodash/fp/defaultsDeepAll.js +5 -0
  810. node_ui/node_modules/lodash/fp/defer.js +5 -0
  811. node_ui/node_modules/lodash/fp/delay.js +5 -0
  812. node_ui/node_modules/lodash/fp/difference.js +5 -0
  813. node_ui/node_modules/lodash/fp/differenceBy.js +5 -0
  814. node_ui/node_modules/lodash/fp/differenceWith.js +5 -0
  815. node_ui/node_modules/lodash/fp/dissoc.js +1 -0
  816. node_ui/node_modules/lodash/fp/dissocPath.js +1 -0
  817. node_ui/node_modules/lodash/fp/divide.js +5 -0
  818. node_ui/node_modules/lodash/fp/drop.js +5 -0
  819. node_ui/node_modules/lodash/fp/dropLast.js +1 -0
  820. node_ui/node_modules/lodash/fp/dropLastWhile.js +1 -0
  821. node_ui/node_modules/lodash/fp/dropRight.js +5 -0
  822. node_ui/node_modules/lodash/fp/dropRightWhile.js +5 -0
  823. node_ui/node_modules/lodash/fp/dropWhile.js +5 -0
  824. node_ui/node_modules/lodash/fp/each.js +1 -0
  825. node_ui/node_modules/lodash/fp/eachRight.js +1 -0
  826. node_ui/node_modules/lodash/fp/endsWith.js +5 -0
  827. node_ui/node_modules/lodash/fp/entries.js +1 -0
  828. node_ui/node_modules/lodash/fp/entriesIn.js +1 -0
  829. node_ui/node_modules/lodash/fp/eq.js +5 -0
  830. node_ui/node_modules/lodash/fp/equals.js +1 -0
  831. node_ui/node_modules/lodash/fp/escape.js +5 -0
  832. node_ui/node_modules/lodash/fp/escapeRegExp.js +5 -0
  833. node_ui/node_modules/lodash/fp/every.js +5 -0
  834. node_ui/node_modules/lodash/fp/extend.js +1 -0
  835. node_ui/node_modules/lodash/fp/extendAll.js +1 -0
  836. node_ui/node_modules/lodash/fp/extendAllWith.js +1 -0
  837. node_ui/node_modules/lodash/fp/extendWith.js +1 -0
  838. node_ui/node_modules/lodash/fp/fill.js +5 -0
  839. node_ui/node_modules/lodash/fp/filter.js +5 -0
  840. node_ui/node_modules/lodash/fp/find.js +5 -0
  841. node_ui/node_modules/lodash/fp/findFrom.js +5 -0
  842. node_ui/node_modules/lodash/fp/findIndex.js +5 -0
  843. node_ui/node_modules/lodash/fp/findIndexFrom.js +5 -0
  844. node_ui/node_modules/lodash/fp/findKey.js +5 -0
  845. node_ui/node_modules/lodash/fp/findLast.js +5 -0
  846. node_ui/node_modules/lodash/fp/findLastFrom.js +5 -0
  847. node_ui/node_modules/lodash/fp/findLastIndex.js +5 -0
  848. node_ui/node_modules/lodash/fp/findLastIndexFrom.js +5 -0
  849. node_ui/node_modules/lodash/fp/findLastKey.js +5 -0
  850. node_ui/node_modules/lodash/fp/first.js +1 -0
  851. node_ui/node_modules/lodash/fp/flatMap.js +5 -0
  852. node_ui/node_modules/lodash/fp/flatMapDeep.js +5 -0
  853. node_ui/node_modules/lodash/fp/flatMapDepth.js +5 -0
  854. node_ui/node_modules/lodash/fp/flatten.js +5 -0
  855. node_ui/node_modules/lodash/fp/flattenDeep.js +5 -0
  856. node_ui/node_modules/lodash/fp/flattenDepth.js +5 -0
  857. node_ui/node_modules/lodash/fp/flip.js +5 -0
  858. node_ui/node_modules/lodash/fp/floor.js +5 -0
  859. node_ui/node_modules/lodash/fp/flow.js +5 -0
  860. node_ui/node_modules/lodash/fp/flowRight.js +5 -0
  861. node_ui/node_modules/lodash/fp/forEach.js +5 -0
  862. node_ui/node_modules/lodash/fp/forEachRight.js +5 -0
  863. node_ui/node_modules/lodash/fp/forIn.js +5 -0
  864. node_ui/node_modules/lodash/fp/forInRight.js +5 -0
  865. node_ui/node_modules/lodash/fp/forOwn.js +5 -0
  866. node_ui/node_modules/lodash/fp/forOwnRight.js +5 -0
  867. node_ui/node_modules/lodash/fp/fromPairs.js +5 -0
  868. node_ui/node_modules/lodash/fp/function.js +2 -0
  869. node_ui/node_modules/lodash/fp/functions.js +5 -0
  870. node_ui/node_modules/lodash/fp/functionsIn.js +5 -0
  871. node_ui/node_modules/lodash/fp/get.js +5 -0
  872. node_ui/node_modules/lodash/fp/getOr.js +5 -0
  873. node_ui/node_modules/lodash/fp/groupBy.js +5 -0
  874. node_ui/node_modules/lodash/fp/gt.js +5 -0
  875. node_ui/node_modules/lodash/fp/gte.js +5 -0
  876. node_ui/node_modules/lodash/fp/has.js +5 -0
  877. node_ui/node_modules/lodash/fp/hasIn.js +5 -0
  878. node_ui/node_modules/lodash/fp/head.js +5 -0
  879. node_ui/node_modules/lodash/fp/identical.js +1 -0
  880. node_ui/node_modules/lodash/fp/identity.js +5 -0
  881. node_ui/node_modules/lodash/fp/inRange.js +5 -0
  882. node_ui/node_modules/lodash/fp/includes.js +5 -0
  883. node_ui/node_modules/lodash/fp/includesFrom.js +5 -0
  884. node_ui/node_modules/lodash/fp/indexBy.js +1 -0
  885. node_ui/node_modules/lodash/fp/indexOf.js +5 -0
  886. node_ui/node_modules/lodash/fp/indexOfFrom.js +5 -0
  887. node_ui/node_modules/lodash/fp/init.js +1 -0
  888. node_ui/node_modules/lodash/fp/initial.js +5 -0
  889. node_ui/node_modules/lodash/fp/intersection.js +5 -0
  890. node_ui/node_modules/lodash/fp/intersectionBy.js +5 -0
  891. node_ui/node_modules/lodash/fp/intersectionWith.js +5 -0
  892. node_ui/node_modules/lodash/fp/invert.js +5 -0
  893. node_ui/node_modules/lodash/fp/invertBy.js +5 -0
  894. node_ui/node_modules/lodash/fp/invertObj.js +1 -0
  895. node_ui/node_modules/lodash/fp/invoke.js +5 -0
  896. node_ui/node_modules/lodash/fp/invokeArgs.js +5 -0
  897. node_ui/node_modules/lodash/fp/invokeArgsMap.js +5 -0
  898. node_ui/node_modules/lodash/fp/invokeMap.js +5 -0
  899. node_ui/node_modules/lodash/fp/isArguments.js +5 -0
  900. node_ui/node_modules/lodash/fp/isArray.js +5 -0
  901. node_ui/node_modules/lodash/fp/isArrayBuffer.js +5 -0
  902. node_ui/node_modules/lodash/fp/isArrayLike.js +5 -0
  903. node_ui/node_modules/lodash/fp/isArrayLikeObject.js +5 -0
  904. node_ui/node_modules/lodash/fp/isBoolean.js +5 -0
  905. node_ui/node_modules/lodash/fp/isBuffer.js +5 -0
  906. node_ui/node_modules/lodash/fp/isDate.js +5 -0
  907. node_ui/node_modules/lodash/fp/isElement.js +5 -0
  908. node_ui/node_modules/lodash/fp/isEmpty.js +5 -0
  909. node_ui/node_modules/lodash/fp/isEqual.js +5 -0
  910. node_ui/node_modules/lodash/fp/isEqualWith.js +5 -0
  911. node_ui/node_modules/lodash/fp/isError.js +5 -0
  912. node_ui/node_modules/lodash/fp/isFinite.js +5 -0
  913. node_ui/node_modules/lodash/fp/isFunction.js +5 -0
  914. node_ui/node_modules/lodash/fp/isInteger.js +5 -0
  915. node_ui/node_modules/lodash/fp/isLength.js +5 -0
  916. node_ui/node_modules/lodash/fp/isMap.js +5 -0
  917. node_ui/node_modules/lodash/fp/isMatch.js +5 -0
  918. node_ui/node_modules/lodash/fp/isMatchWith.js +5 -0
  919. node_ui/node_modules/lodash/fp/isNaN.js +5 -0
  920. node_ui/node_modules/lodash/fp/isNative.js +5 -0
  921. node_ui/node_modules/lodash/fp/isNil.js +5 -0
  922. node_ui/node_modules/lodash/fp/isNull.js +5 -0
  923. node_ui/node_modules/lodash/fp/isNumber.js +5 -0
  924. node_ui/node_modules/lodash/fp/isObject.js +5 -0
  925. node_ui/node_modules/lodash/fp/isObjectLike.js +5 -0
  926. node_ui/node_modules/lodash/fp/isPlainObject.js +5 -0
  927. node_ui/node_modules/lodash/fp/isRegExp.js +5 -0
  928. node_ui/node_modules/lodash/fp/isSafeInteger.js +5 -0
  929. node_ui/node_modules/lodash/fp/isSet.js +5 -0
  930. node_ui/node_modules/lodash/fp/isString.js +5 -0
  931. node_ui/node_modules/lodash/fp/isSymbol.js +5 -0
  932. node_ui/node_modules/lodash/fp/isTypedArray.js +5 -0
  933. node_ui/node_modules/lodash/fp/isUndefined.js +5 -0
  934. node_ui/node_modules/lodash/fp/isWeakMap.js +5 -0
  935. node_ui/node_modules/lodash/fp/isWeakSet.js +5 -0
  936. node_ui/node_modules/lodash/fp/iteratee.js +5 -0
  937. node_ui/node_modules/lodash/fp/join.js +5 -0
  938. node_ui/node_modules/lodash/fp/juxt.js +1 -0
  939. node_ui/node_modules/lodash/fp/kebabCase.js +5 -0
  940. node_ui/node_modules/lodash/fp/keyBy.js +5 -0
  941. node_ui/node_modules/lodash/fp/keys.js +5 -0
  942. node_ui/node_modules/lodash/fp/keysIn.js +5 -0
  943. node_ui/node_modules/lodash/fp/lang.js +2 -0
  944. node_ui/node_modules/lodash/fp/last.js +5 -0
  945. node_ui/node_modules/lodash/fp/lastIndexOf.js +5 -0
  946. node_ui/node_modules/lodash/fp/lastIndexOfFrom.js +5 -0
  947. node_ui/node_modules/lodash/fp/lowerCase.js +5 -0
  948. node_ui/node_modules/lodash/fp/lowerFirst.js +5 -0
  949. node_ui/node_modules/lodash/fp/lt.js +5 -0
  950. node_ui/node_modules/lodash/fp/lte.js +5 -0
  951. node_ui/node_modules/lodash/fp/map.js +5 -0
  952. node_ui/node_modules/lodash/fp/mapKeys.js +5 -0
  953. node_ui/node_modules/lodash/fp/mapValues.js +5 -0
  954. node_ui/node_modules/lodash/fp/matches.js +1 -0
  955. node_ui/node_modules/lodash/fp/matchesProperty.js +5 -0
  956. node_ui/node_modules/lodash/fp/math.js +2 -0
  957. node_ui/node_modules/lodash/fp/max.js +5 -0
  958. node_ui/node_modules/lodash/fp/maxBy.js +5 -0
  959. node_ui/node_modules/lodash/fp/mean.js +5 -0
  960. node_ui/node_modules/lodash/fp/meanBy.js +5 -0
  961. node_ui/node_modules/lodash/fp/memoize.js +5 -0
  962. node_ui/node_modules/lodash/fp/merge.js +5 -0
  963. node_ui/node_modules/lodash/fp/mergeAll.js +5 -0
  964. node_ui/node_modules/lodash/fp/mergeAllWith.js +5 -0
  965. node_ui/node_modules/lodash/fp/mergeWith.js +5 -0
  966. node_ui/node_modules/lodash/fp/method.js +5 -0
  967. node_ui/node_modules/lodash/fp/methodOf.js +5 -0
  968. node_ui/node_modules/lodash/fp/min.js +5 -0
  969. node_ui/node_modules/lodash/fp/minBy.js +5 -0
  970. node_ui/node_modules/lodash/fp/mixin.js +5 -0
  971. node_ui/node_modules/lodash/fp/multiply.js +5 -0
  972. node_ui/node_modules/lodash/fp/nAry.js +1 -0
  973. node_ui/node_modules/lodash/fp/negate.js +5 -0
  974. node_ui/node_modules/lodash/fp/next.js +5 -0
  975. node_ui/node_modules/lodash/fp/noop.js +5 -0
  976. node_ui/node_modules/lodash/fp/now.js +5 -0
  977. node_ui/node_modules/lodash/fp/nth.js +5 -0
  978. node_ui/node_modules/lodash/fp/nthArg.js +5 -0
  979. node_ui/node_modules/lodash/fp/number.js +2 -0
  980. node_ui/node_modules/lodash/fp/object.js +2 -0
  981. node_ui/node_modules/lodash/fp/omit.js +5 -0
  982. node_ui/node_modules/lodash/fp/omitAll.js +1 -0
  983. node_ui/node_modules/lodash/fp/omitBy.js +5 -0
  984. node_ui/node_modules/lodash/fp/once.js +5 -0
  985. node_ui/node_modules/lodash/fp/orderBy.js +5 -0
  986. node_ui/node_modules/lodash/fp/over.js +5 -0
  987. node_ui/node_modules/lodash/fp/overArgs.js +5 -0
  988. node_ui/node_modules/lodash/fp/overEvery.js +5 -0
  989. node_ui/node_modules/lodash/fp/overSome.js +5 -0
  990. node_ui/node_modules/lodash/fp/pad.js +5 -0
  991. node_ui/node_modules/lodash/fp/padChars.js +5 -0
  992. node_ui/node_modules/lodash/fp/padCharsEnd.js +5 -0
  993. node_ui/node_modules/lodash/fp/padCharsStart.js +5 -0
  994. node_ui/node_modules/lodash/fp/padEnd.js +5 -0
  995. node_ui/node_modules/lodash/fp/padStart.js +5 -0
  996. node_ui/node_modules/lodash/fp/parseInt.js +5 -0
  997. node_ui/node_modules/lodash/fp/partial.js +5 -0
  998. node_ui/node_modules/lodash/fp/partialRight.js +5 -0
  999. node_ui/node_modules/lodash/fp/partition.js +5 -0
  1000. node_ui/node_modules/lodash/fp/path.js +1 -0
  1001. node_ui/node_modules/lodash/fp/pathEq.js +1 -0
  1002. node_ui/node_modules/lodash/fp/pathOr.js +1 -0
  1003. node_ui/node_modules/lodash/fp/paths.js +1 -0
  1004. node_ui/node_modules/lodash/fp/pick.js +5 -0
  1005. node_ui/node_modules/lodash/fp/pickAll.js +1 -0
  1006. node_ui/node_modules/lodash/fp/pickBy.js +5 -0
  1007. node_ui/node_modules/lodash/fp/pipe.js +1 -0
  1008. node_ui/node_modules/lodash/fp/placeholder.js +6 -0
  1009. node_ui/node_modules/lodash/fp/plant.js +5 -0
  1010. node_ui/node_modules/lodash/fp/pluck.js +1 -0
  1011. node_ui/node_modules/lodash/fp/prop.js +1 -0
  1012. node_ui/node_modules/lodash/fp/propEq.js +1 -0
  1013. node_ui/node_modules/lodash/fp/propOr.js +1 -0
  1014. node_ui/node_modules/lodash/fp/property.js +1 -0
  1015. node_ui/node_modules/lodash/fp/propertyOf.js +5 -0
  1016. node_ui/node_modules/lodash/fp/props.js +1 -0
  1017. node_ui/node_modules/lodash/fp/pull.js +5 -0
  1018. node_ui/node_modules/lodash/fp/pullAll.js +5 -0
  1019. node_ui/node_modules/lodash/fp/pullAllBy.js +5 -0
  1020. node_ui/node_modules/lodash/fp/pullAllWith.js +5 -0
  1021. node_ui/node_modules/lodash/fp/pullAt.js +5 -0
  1022. node_ui/node_modules/lodash/fp/random.js +5 -0
  1023. node_ui/node_modules/lodash/fp/range.js +5 -0
  1024. node_ui/node_modules/lodash/fp/rangeRight.js +5 -0
  1025. node_ui/node_modules/lodash/fp/rangeStep.js +5 -0
  1026. node_ui/node_modules/lodash/fp/rangeStepRight.js +5 -0
  1027. node_ui/node_modules/lodash/fp/rearg.js +5 -0
  1028. node_ui/node_modules/lodash/fp/reduce.js +5 -0
  1029. node_ui/node_modules/lodash/fp/reduceRight.js +5 -0
  1030. node_ui/node_modules/lodash/fp/reject.js +5 -0
  1031. node_ui/node_modules/lodash/fp/remove.js +5 -0
  1032. node_ui/node_modules/lodash/fp/repeat.js +5 -0
  1033. node_ui/node_modules/lodash/fp/replace.js +5 -0
  1034. node_ui/node_modules/lodash/fp/rest.js +5 -0
  1035. node_ui/node_modules/lodash/fp/restFrom.js +5 -0
  1036. node_ui/node_modules/lodash/fp/result.js +5 -0
  1037. node_ui/node_modules/lodash/fp/reverse.js +5 -0
  1038. node_ui/node_modules/lodash/fp/round.js +5 -0
  1039. node_ui/node_modules/lodash/fp/sample.js +5 -0
  1040. node_ui/node_modules/lodash/fp/sampleSize.js +5 -0
  1041. node_ui/node_modules/lodash/fp/seq.js +2 -0
  1042. node_ui/node_modules/lodash/fp/set.js +5 -0
  1043. node_ui/node_modules/lodash/fp/setWith.js +5 -0
  1044. node_ui/node_modules/lodash/fp/shuffle.js +5 -0
  1045. node_ui/node_modules/lodash/fp/size.js +5 -0
  1046. node_ui/node_modules/lodash/fp/slice.js +5 -0
  1047. node_ui/node_modules/lodash/fp/snakeCase.js +5 -0
  1048. node_ui/node_modules/lodash/fp/some.js +5 -0
  1049. node_ui/node_modules/lodash/fp/sortBy.js +5 -0
  1050. node_ui/node_modules/lodash/fp/sortedIndex.js +5 -0
  1051. node_ui/node_modules/lodash/fp/sortedIndexBy.js +5 -0
  1052. node_ui/node_modules/lodash/fp/sortedIndexOf.js +5 -0
  1053. node_ui/node_modules/lodash/fp/sortedLastIndex.js +5 -0
  1054. node_ui/node_modules/lodash/fp/sortedLastIndexBy.js +5 -0
  1055. node_ui/node_modules/lodash/fp/sortedLastIndexOf.js +5 -0
  1056. node_ui/node_modules/lodash/fp/sortedUniq.js +5 -0
  1057. node_ui/node_modules/lodash/fp/sortedUniqBy.js +5 -0
  1058. node_ui/node_modules/lodash/fp/split.js +5 -0
  1059. node_ui/node_modules/lodash/fp/spread.js +5 -0
  1060. node_ui/node_modules/lodash/fp/spreadFrom.js +5 -0
  1061. node_ui/node_modules/lodash/fp/startCase.js +5 -0
  1062. node_ui/node_modules/lodash/fp/startsWith.js +5 -0
  1063. node_ui/node_modules/lodash/fp/string.js +2 -0
  1064. node_ui/node_modules/lodash/fp/stubArray.js +5 -0
  1065. node_ui/node_modules/lodash/fp/stubFalse.js +5 -0
  1066. node_ui/node_modules/lodash/fp/stubObject.js +5 -0
  1067. node_ui/node_modules/lodash/fp/stubString.js +5 -0
  1068. node_ui/node_modules/lodash/fp/stubTrue.js +5 -0
  1069. node_ui/node_modules/lodash/fp/subtract.js +5 -0
  1070. node_ui/node_modules/lodash/fp/sum.js +5 -0
  1071. node_ui/node_modules/lodash/fp/sumBy.js +5 -0
  1072. node_ui/node_modules/lodash/fp/symmetricDifference.js +1 -0
  1073. node_ui/node_modules/lodash/fp/symmetricDifferenceBy.js +1 -0
  1074. node_ui/node_modules/lodash/fp/symmetricDifferenceWith.js +1 -0
  1075. node_ui/node_modules/lodash/fp/tail.js +5 -0
  1076. node_ui/node_modules/lodash/fp/take.js +5 -0
  1077. node_ui/node_modules/lodash/fp/takeLast.js +1 -0
  1078. node_ui/node_modules/lodash/fp/takeLastWhile.js +1 -0
  1079. node_ui/node_modules/lodash/fp/takeRight.js +5 -0
  1080. node_ui/node_modules/lodash/fp/takeRightWhile.js +5 -0
  1081. node_ui/node_modules/lodash/fp/takeWhile.js +5 -0
  1082. node_ui/node_modules/lodash/fp/tap.js +5 -0
  1083. node_ui/node_modules/lodash/fp/template.js +5 -0
  1084. node_ui/node_modules/lodash/fp/templateSettings.js +5 -0
  1085. node_ui/node_modules/lodash/fp/throttle.js +5 -0
  1086. node_ui/node_modules/lodash/fp/thru.js +5 -0
  1087. node_ui/node_modules/lodash/fp/times.js +5 -0
  1088. node_ui/node_modules/lodash/fp/toArray.js +5 -0
  1089. node_ui/node_modules/lodash/fp/toFinite.js +5 -0
  1090. node_ui/node_modules/lodash/fp/toInteger.js +5 -0
  1091. node_ui/node_modules/lodash/fp/toIterator.js +5 -0
  1092. node_ui/node_modules/lodash/fp/toJSON.js +5 -0
  1093. node_ui/node_modules/lodash/fp/toLength.js +5 -0
  1094. node_ui/node_modules/lodash/fp/toLower.js +5 -0
  1095. node_ui/node_modules/lodash/fp/toNumber.js +5 -0
  1096. node_ui/node_modules/lodash/fp/toPairs.js +5 -0
  1097. node_ui/node_modules/lodash/fp/toPairsIn.js +5 -0
  1098. node_ui/node_modules/lodash/fp/toPath.js +5 -0
  1099. node_ui/node_modules/lodash/fp/toPlainObject.js +5 -0
  1100. node_ui/node_modules/lodash/fp/toSafeInteger.js +5 -0
  1101. node_ui/node_modules/lodash/fp/toString.js +5 -0
  1102. node_ui/node_modules/lodash/fp/toUpper.js +5 -0
  1103. node_ui/node_modules/lodash/fp/transform.js +5 -0
  1104. node_ui/node_modules/lodash/fp/trim.js +5 -0
  1105. node_ui/node_modules/lodash/fp/trimChars.js +5 -0
  1106. node_ui/node_modules/lodash/fp/trimCharsEnd.js +5 -0
  1107. node_ui/node_modules/lodash/fp/trimCharsStart.js +5 -0
  1108. node_ui/node_modules/lodash/fp/trimEnd.js +5 -0
  1109. node_ui/node_modules/lodash/fp/trimStart.js +5 -0
  1110. node_ui/node_modules/lodash/fp/truncate.js +5 -0
  1111. node_ui/node_modules/lodash/fp/unapply.js +1 -0
  1112. node_ui/node_modules/lodash/fp/unary.js +5 -0
  1113. node_ui/node_modules/lodash/fp/unescape.js +5 -0
  1114. node_ui/node_modules/lodash/fp/union.js +5 -0
  1115. node_ui/node_modules/lodash/fp/unionBy.js +5 -0
  1116. node_ui/node_modules/lodash/fp/unionWith.js +5 -0
  1117. node_ui/node_modules/lodash/fp/uniq.js +5 -0
  1118. node_ui/node_modules/lodash/fp/uniqBy.js +5 -0
  1119. node_ui/node_modules/lodash/fp/uniqWith.js +5 -0
  1120. node_ui/node_modules/lodash/fp/uniqueId.js +5 -0
  1121. node_ui/node_modules/lodash/fp/unnest.js +1 -0
  1122. node_ui/node_modules/lodash/fp/unset.js +5 -0
  1123. node_ui/node_modules/lodash/fp/unzip.js +5 -0
  1124. node_ui/node_modules/lodash/fp/unzipWith.js +5 -0
  1125. node_ui/node_modules/lodash/fp/update.js +5 -0
  1126. node_ui/node_modules/lodash/fp/updateWith.js +5 -0
  1127. node_ui/node_modules/lodash/fp/upperCase.js +5 -0
  1128. node_ui/node_modules/lodash/fp/upperFirst.js +5 -0
  1129. node_ui/node_modules/lodash/fp/useWith.js +1 -0
  1130. node_ui/node_modules/lodash/fp/util.js +2 -0
  1131. node_ui/node_modules/lodash/fp/value.js +5 -0
  1132. node_ui/node_modules/lodash/fp/valueOf.js +5 -0
  1133. node_ui/node_modules/lodash/fp/values.js +5 -0
  1134. node_ui/node_modules/lodash/fp/valuesIn.js +5 -0
  1135. node_ui/node_modules/lodash/fp/where.js +1 -0
  1136. node_ui/node_modules/lodash/fp/whereEq.js +1 -0
  1137. node_ui/node_modules/lodash/fp/without.js +5 -0
  1138. node_ui/node_modules/lodash/fp/words.js +5 -0
  1139. node_ui/node_modules/lodash/fp/wrap.js +5 -0
  1140. node_ui/node_modules/lodash/fp/wrapperAt.js +5 -0
  1141. node_ui/node_modules/lodash/fp/wrapperChain.js +5 -0
  1142. node_ui/node_modules/lodash/fp/wrapperLodash.js +5 -0
  1143. node_ui/node_modules/lodash/fp/wrapperReverse.js +5 -0
  1144. node_ui/node_modules/lodash/fp/wrapperValue.js +5 -0
  1145. node_ui/node_modules/lodash/fp/xor.js +5 -0
  1146. node_ui/node_modules/lodash/fp/xorBy.js +5 -0
  1147. node_ui/node_modules/lodash/fp/xorWith.js +5 -0
  1148. node_ui/node_modules/lodash/fp/zip.js +5 -0
  1149. node_ui/node_modules/lodash/fp/zipAll.js +5 -0
  1150. node_ui/node_modules/lodash/fp/zipObj.js +1 -0
  1151. node_ui/node_modules/lodash/fp/zipObject.js +5 -0
  1152. node_ui/node_modules/lodash/fp/zipObjectDeep.js +5 -0
  1153. node_ui/node_modules/lodash/fp/zipWith.js +5 -0
  1154. node_ui/node_modules/lodash/fp.js +2 -0
  1155. node_ui/node_modules/lodash/fromPairs.js +28 -0
  1156. node_ui/node_modules/lodash/function.js +25 -0
  1157. node_ui/node_modules/lodash/functions.js +31 -0
  1158. node_ui/node_modules/lodash/functionsIn.js +31 -0
  1159. node_ui/node_modules/lodash/get.js +33 -0
  1160. node_ui/node_modules/lodash/groupBy.js +41 -0
  1161. node_ui/node_modules/lodash/gt.js +29 -0
  1162. node_ui/node_modules/lodash/gte.js +30 -0
  1163. node_ui/node_modules/lodash/has.js +35 -0
  1164. node_ui/node_modules/lodash/hasIn.js +34 -0
  1165. node_ui/node_modules/lodash/head.js +23 -0
  1166. node_ui/node_modules/lodash/identity.js +21 -0
  1167. node_ui/node_modules/lodash/inRange.js +55 -0
  1168. node_ui/node_modules/lodash/includes.js +53 -0
  1169. node_ui/node_modules/lodash/index.js +1 -0
  1170. node_ui/node_modules/lodash/indexOf.js +42 -0
  1171. node_ui/node_modules/lodash/initial.js +22 -0
  1172. node_ui/node_modules/lodash/intersection.js +30 -0
  1173. node_ui/node_modules/lodash/intersectionBy.js +45 -0
  1174. node_ui/node_modules/lodash/intersectionWith.js +41 -0
  1175. node_ui/node_modules/lodash/invert.js +42 -0
  1176. node_ui/node_modules/lodash/invertBy.js +56 -0
  1177. node_ui/node_modules/lodash/invoke.js +24 -0
  1178. node_ui/node_modules/lodash/invokeMap.js +41 -0
  1179. node_ui/node_modules/lodash/isArguments.js +36 -0
  1180. node_ui/node_modules/lodash/isArray.js +26 -0
  1181. node_ui/node_modules/lodash/isArrayBuffer.js +27 -0
  1182. node_ui/node_modules/lodash/isArrayLike.js +33 -0
  1183. node_ui/node_modules/lodash/isArrayLikeObject.js +33 -0
  1184. node_ui/node_modules/lodash/isBoolean.js +29 -0
  1185. node_ui/node_modules/lodash/isBuffer.js +38 -0
  1186. node_ui/node_modules/lodash/isDate.js +27 -0
  1187. node_ui/node_modules/lodash/isElement.js +25 -0
  1188. node_ui/node_modules/lodash/isEmpty.js +77 -0
  1189. node_ui/node_modules/lodash/isEqual.js +35 -0
  1190. node_ui/node_modules/lodash/isEqualWith.js +41 -0
  1191. node_ui/node_modules/lodash/isError.js +36 -0
  1192. node_ui/node_modules/lodash/isFinite.js +36 -0
  1193. node_ui/node_modules/lodash/isFunction.js +37 -0
  1194. node_ui/node_modules/lodash/isInteger.js +33 -0
  1195. node_ui/node_modules/lodash/isLength.js +35 -0
  1196. node_ui/node_modules/lodash/isMap.js +27 -0
  1197. node_ui/node_modules/lodash/isMatch.js +36 -0
  1198. node_ui/node_modules/lodash/isMatchWith.js +41 -0
  1199. node_ui/node_modules/lodash/isNaN.js +38 -0
  1200. node_ui/node_modules/lodash/isNative.js +40 -0
  1201. node_ui/node_modules/lodash/isNil.js +25 -0
  1202. node_ui/node_modules/lodash/isNull.js +22 -0
  1203. node_ui/node_modules/lodash/isNumber.js +38 -0
  1204. node_ui/node_modules/lodash/isObject.js +31 -0
  1205. node_ui/node_modules/lodash/isObjectLike.js +29 -0
  1206. node_ui/node_modules/lodash/isPlainObject.js +62 -0
  1207. node_ui/node_modules/lodash/isRegExp.js +27 -0
  1208. node_ui/node_modules/lodash/isSafeInteger.js +37 -0
  1209. node_ui/node_modules/lodash/isSet.js +27 -0
  1210. node_ui/node_modules/lodash/isString.js +30 -0
  1211. node_ui/node_modules/lodash/isSymbol.js +29 -0
  1212. node_ui/node_modules/lodash/isTypedArray.js +27 -0
  1213. node_ui/node_modules/lodash/isUndefined.js +22 -0
  1214. node_ui/node_modules/lodash/isWeakMap.js +28 -0
  1215. node_ui/node_modules/lodash/isWeakSet.js +28 -0
  1216. node_ui/node_modules/lodash/iteratee.js +53 -0
  1217. node_ui/node_modules/lodash/join.js +26 -0
  1218. node_ui/node_modules/lodash/kebabCase.js +28 -0
  1219. node_ui/node_modules/lodash/keyBy.js +36 -0
  1220. node_ui/node_modules/lodash/keys.js +37 -0
  1221. node_ui/node_modules/lodash/keysIn.js +32 -0
  1222. node_ui/node_modules/lodash/lang.js +58 -0
  1223. node_ui/node_modules/lodash/last.js +20 -0
  1224. node_ui/node_modules/lodash/lastIndexOf.js +46 -0
  1225. node_ui/node_modules/lodash/lodash.js +17209 -0
  1226. node_ui/node_modules/lodash/lodash.min.js +140 -0
  1227. node_ui/node_modules/lodash/lowerCase.js +27 -0
  1228. node_ui/node_modules/lodash/lowerFirst.js +22 -0
  1229. node_ui/node_modules/lodash/lt.js +29 -0
  1230. node_ui/node_modules/lodash/lte.js +30 -0
  1231. node_ui/node_modules/lodash/map.js +53 -0
  1232. node_ui/node_modules/lodash/mapKeys.js +36 -0
  1233. node_ui/node_modules/lodash/mapValues.js +43 -0
  1234. node_ui/node_modules/lodash/matches.js +46 -0
  1235. node_ui/node_modules/lodash/matchesProperty.js +44 -0
  1236. node_ui/node_modules/lodash/math.js +17 -0
  1237. node_ui/node_modules/lodash/max.js +29 -0
  1238. node_ui/node_modules/lodash/maxBy.js +34 -0
  1239. node_ui/node_modules/lodash/mean.js +22 -0
  1240. node_ui/node_modules/lodash/meanBy.js +31 -0
  1241. node_ui/node_modules/lodash/memoize.js +73 -0
  1242. node_ui/node_modules/lodash/merge.js +39 -0
  1243. node_ui/node_modules/lodash/mergeWith.js +39 -0
  1244. node_ui/node_modules/lodash/method.js +34 -0
  1245. node_ui/node_modules/lodash/methodOf.js +33 -0
  1246. node_ui/node_modules/lodash/min.js +29 -0
  1247. node_ui/node_modules/lodash/minBy.js +34 -0
  1248. node_ui/node_modules/lodash/mixin.js +74 -0
  1249. node_ui/node_modules/lodash/multiply.js +22 -0
  1250. node_ui/node_modules/lodash/negate.js +40 -0
  1251. node_ui/node_modules/lodash/next.js +35 -0
  1252. node_ui/node_modules/lodash/noop.js +17 -0
  1253. node_ui/node_modules/lodash/now.js +23 -0
  1254. node_ui/node_modules/lodash/nth.js +29 -0
  1255. node_ui/node_modules/lodash/nthArg.js +32 -0
  1256. node_ui/node_modules/lodash/number.js +5 -0
  1257. node_ui/node_modules/lodash/object.js +49 -0
  1258. node_ui/node_modules/lodash/omit.js +57 -0
  1259. node_ui/node_modules/lodash/omitBy.js +29 -0
  1260. node_ui/node_modules/lodash/once.js +25 -0
  1261. node_ui/node_modules/lodash/orderBy.js +47 -0
  1262. node_ui/node_modules/lodash/over.js +24 -0
  1263. node_ui/node_modules/lodash/overArgs.js +61 -0
  1264. node_ui/node_modules/lodash/overEvery.js +34 -0
  1265. node_ui/node_modules/lodash/overSome.js +37 -0
  1266. node_ui/node_modules/lodash/package.json +17 -0
  1267. node_ui/node_modules/lodash/pad.js +49 -0
  1268. node_ui/node_modules/lodash/padEnd.js +39 -0
  1269. node_ui/node_modules/lodash/padStart.js +39 -0
  1270. node_ui/node_modules/lodash/parseInt.js +43 -0
  1271. node_ui/node_modules/lodash/partial.js +50 -0
  1272. node_ui/node_modules/lodash/partialRight.js +49 -0
  1273. node_ui/node_modules/lodash/partition.js +43 -0
  1274. node_ui/node_modules/lodash/pick.js +25 -0
  1275. node_ui/node_modules/lodash/pickBy.js +37 -0
  1276. node_ui/node_modules/lodash/plant.js +48 -0
  1277. node_ui/node_modules/lodash/property.js +32 -0
  1278. node_ui/node_modules/lodash/propertyOf.js +30 -0
  1279. node_ui/node_modules/lodash/pull.js +29 -0
  1280. node_ui/node_modules/lodash/pullAll.js +29 -0
  1281. node_ui/node_modules/lodash/pullAllBy.js +33 -0
  1282. node_ui/node_modules/lodash/pullAllWith.js +32 -0
  1283. node_ui/node_modules/lodash/pullAt.js +43 -0
  1284. node_ui/node_modules/lodash/random.js +82 -0
  1285. node_ui/node_modules/lodash/range.js +46 -0
  1286. node_ui/node_modules/lodash/rangeRight.js +41 -0
  1287. node_ui/node_modules/lodash/rearg.js +33 -0
  1288. node_ui/node_modules/lodash/reduce.js +51 -0
  1289. node_ui/node_modules/lodash/reduceRight.js +36 -0
  1290. node_ui/node_modules/lodash/reject.js +46 -0
  1291. node_ui/node_modules/lodash/release.md +48 -0
  1292. node_ui/node_modules/lodash/remove.js +53 -0
  1293. node_ui/node_modules/lodash/repeat.js +37 -0
  1294. node_ui/node_modules/lodash/replace.js +29 -0
  1295. node_ui/node_modules/lodash/rest.js +40 -0
  1296. node_ui/node_modules/lodash/result.js +56 -0
  1297. node_ui/node_modules/lodash/reverse.js +34 -0
  1298. node_ui/node_modules/lodash/round.js +26 -0
  1299. node_ui/node_modules/lodash/sample.js +24 -0
  1300. node_ui/node_modules/lodash/sampleSize.js +37 -0
  1301. node_ui/node_modules/lodash/seq.js +16 -0
  1302. node_ui/node_modules/lodash/set.js +35 -0
  1303. node_ui/node_modules/lodash/setWith.js +32 -0
  1304. node_ui/node_modules/lodash/shuffle.js +25 -0
  1305. node_ui/node_modules/lodash/size.js +46 -0
  1306. node_ui/node_modules/lodash/slice.js +37 -0
  1307. node_ui/node_modules/lodash/snakeCase.js +28 -0
  1308. node_ui/node_modules/lodash/some.js +51 -0
  1309. node_ui/node_modules/lodash/sortBy.js +48 -0
  1310. node_ui/node_modules/lodash/sortedIndex.js +24 -0
  1311. node_ui/node_modules/lodash/sortedIndexBy.js +33 -0
  1312. node_ui/node_modules/lodash/sortedIndexOf.js +31 -0
  1313. node_ui/node_modules/lodash/sortedLastIndex.js +25 -0
  1314. node_ui/node_modules/lodash/sortedLastIndexBy.js +33 -0
  1315. node_ui/node_modules/lodash/sortedLastIndexOf.js +31 -0
  1316. node_ui/node_modules/lodash/sortedUniq.js +24 -0
  1317. node_ui/node_modules/lodash/sortedUniqBy.js +26 -0
  1318. node_ui/node_modules/lodash/split.js +52 -0
  1319. node_ui/node_modules/lodash/spread.js +63 -0
  1320. node_ui/node_modules/lodash/startCase.js +29 -0
  1321. node_ui/node_modules/lodash/startsWith.js +39 -0
  1322. node_ui/node_modules/lodash/string.js +33 -0
  1323. node_ui/node_modules/lodash/stubArray.js +23 -0
  1324. node_ui/node_modules/lodash/stubFalse.js +18 -0
  1325. node_ui/node_modules/lodash/stubObject.js +23 -0
  1326. node_ui/node_modules/lodash/stubString.js +18 -0
  1327. node_ui/node_modules/lodash/stubTrue.js +18 -0
  1328. node_ui/node_modules/lodash/subtract.js +22 -0
  1329. node_ui/node_modules/lodash/sum.js +24 -0
  1330. node_ui/node_modules/lodash/sumBy.js +33 -0
  1331. node_ui/node_modules/lodash/tail.js +22 -0
  1332. node_ui/node_modules/lodash/take.js +37 -0
  1333. node_ui/node_modules/lodash/takeRight.js +39 -0
  1334. node_ui/node_modules/lodash/takeRightWhile.js +45 -0
  1335. node_ui/node_modules/lodash/takeWhile.js +45 -0
  1336. node_ui/node_modules/lodash/tap.js +29 -0
  1337. node_ui/node_modules/lodash/template.js +272 -0
  1338. node_ui/node_modules/lodash/templateSettings.js +67 -0
  1339. node_ui/node_modules/lodash/throttle.js +69 -0
  1340. node_ui/node_modules/lodash/thru.js +28 -0
  1341. node_ui/node_modules/lodash/times.js +51 -0
  1342. node_ui/node_modules/lodash/toArray.js +58 -0
  1343. node_ui/node_modules/lodash/toFinite.js +42 -0
  1344. node_ui/node_modules/lodash/toInteger.js +36 -0
  1345. node_ui/node_modules/lodash/toIterator.js +23 -0
  1346. node_ui/node_modules/lodash/toJSON.js +1 -0
  1347. node_ui/node_modules/lodash/toLength.js +38 -0
  1348. node_ui/node_modules/lodash/toLower.js +28 -0
  1349. node_ui/node_modules/lodash/toNumber.js +64 -0
  1350. node_ui/node_modules/lodash/toPairs.js +30 -0
  1351. node_ui/node_modules/lodash/toPairsIn.js +30 -0
  1352. node_ui/node_modules/lodash/toPath.js +33 -0
  1353. node_ui/node_modules/lodash/toPlainObject.js +32 -0
  1354. node_ui/node_modules/lodash/toSafeInteger.js +37 -0
  1355. node_ui/node_modules/lodash/toString.js +28 -0
  1356. node_ui/node_modules/lodash/toUpper.js +28 -0
  1357. node_ui/node_modules/lodash/transform.js +65 -0
  1358. node_ui/node_modules/lodash/trim.js +47 -0
  1359. node_ui/node_modules/lodash/trimEnd.js +41 -0
  1360. node_ui/node_modules/lodash/trimStart.js +43 -0
  1361. node_ui/node_modules/lodash/truncate.js +111 -0
  1362. node_ui/node_modules/lodash/unary.js +22 -0
  1363. node_ui/node_modules/lodash/unescape.js +34 -0
  1364. node_ui/node_modules/lodash/union.js +26 -0
  1365. node_ui/node_modules/lodash/unionBy.js +39 -0
  1366. node_ui/node_modules/lodash/unionWith.js +34 -0
  1367. node_ui/node_modules/lodash/uniq.js +25 -0
  1368. node_ui/node_modules/lodash/uniqBy.js +31 -0
  1369. node_ui/node_modules/lodash/uniqWith.js +28 -0
  1370. node_ui/node_modules/lodash/uniqueId.js +28 -0
  1371. node_ui/node_modules/lodash/unset.js +34 -0
  1372. node_ui/node_modules/lodash/unzip.js +45 -0
  1373. node_ui/node_modules/lodash/unzipWith.js +39 -0
  1374. node_ui/node_modules/lodash/update.js +35 -0
  1375. node_ui/node_modules/lodash/updateWith.js +33 -0
  1376. node_ui/node_modules/lodash/upperCase.js +27 -0
  1377. node_ui/node_modules/lodash/upperFirst.js +22 -0
  1378. node_ui/node_modules/lodash/util.js +34 -0
  1379. node_ui/node_modules/lodash/value.js +1 -0
  1380. node_ui/node_modules/lodash/valueOf.js +1 -0
  1381. node_ui/node_modules/lodash/values.js +34 -0
  1382. node_ui/node_modules/lodash/valuesIn.js +32 -0
  1383. node_ui/node_modules/lodash/without.js +31 -0
  1384. node_ui/node_modules/lodash/words.js +35 -0
  1385. node_ui/node_modules/lodash/wrap.js +30 -0
  1386. node_ui/node_modules/lodash/wrapperAt.js +48 -0
  1387. node_ui/node_modules/lodash/wrapperChain.js +34 -0
  1388. node_ui/node_modules/lodash/wrapperLodash.js +147 -0
  1389. node_ui/node_modules/lodash/wrapperReverse.js +44 -0
  1390. node_ui/node_modules/lodash/wrapperValue.js +21 -0
  1391. node_ui/node_modules/lodash/xor.js +28 -0
  1392. node_ui/node_modules/lodash/xorBy.js +39 -0
  1393. node_ui/node_modules/lodash/xorWith.js +34 -0
  1394. node_ui/node_modules/lodash/zip.js +22 -0
  1395. node_ui/node_modules/lodash/zipObject.js +24 -0
  1396. node_ui/node_modules/lodash/zipObjectDeep.js +23 -0
  1397. node_ui/node_modules/lodash/zipWith.js +32 -0
  1398. node_ui/node_modules/lodash.isequal/LICENSE +47 -0
  1399. node_ui/node_modules/lodash.isequal/README.md +18 -0
  1400. node_ui/node_modules/lodash.isequal/index.js +1848 -0
  1401. node_ui/node_modules/lodash.isequal/package.json +16 -0
  1402. node_ui/node_modules/loose-envify/LICENSE +21 -0
  1403. node_ui/node_modules/loose-envify/README.md +45 -0
  1404. node_ui/node_modules/loose-envify/cli.js +16 -0
  1405. node_ui/node_modules/loose-envify/custom.js +4 -0
  1406. node_ui/node_modules/loose-envify/index.js +3 -0
  1407. node_ui/node_modules/loose-envify/loose-envify.js +36 -0
  1408. node_ui/node_modules/loose-envify/package.json +36 -0
  1409. node_ui/node_modules/loose-envify/replace.js +65 -0
  1410. node_ui/node_modules/meow/build/dependencies.js +8828 -0
  1411. node_ui/node_modules/meow/build/index.d.ts +1425 -0
  1412. node_ui/node_modules/meow/build/index.js +95 -0
  1413. node_ui/node_modules/meow/build/licenses.md +1620 -0
  1414. node_ui/node_modules/meow/build/options.js +92 -0
  1415. node_ui/node_modules/meow/build/parser.js +84 -0
  1416. node_ui/node_modules/meow/build/utils.js +7 -0
  1417. node_ui/node_modules/meow/build/validate.js +122 -0
  1418. node_ui/node_modules/meow/license +9 -0
  1419. node_ui/node_modules/meow/package.json +105 -0
  1420. node_ui/node_modules/meow/readme.md +314 -0
  1421. node_ui/node_modules/mimic-fn/index.d.ts +54 -0
  1422. node_ui/node_modules/mimic-fn/index.js +13 -0
  1423. node_ui/node_modules/mimic-fn/license +9 -0
  1424. node_ui/node_modules/mimic-fn/package.json +42 -0
  1425. node_ui/node_modules/mimic-fn/readme.md +69 -0
  1426. node_ui/node_modules/onetime/index.d.ts +64 -0
  1427. node_ui/node_modules/onetime/index.js +44 -0
  1428. node_ui/node_modules/onetime/license +9 -0
  1429. node_ui/node_modules/onetime/package.json +43 -0
  1430. node_ui/node_modules/onetime/readme.md +94 -0
  1431. node_ui/node_modules/patch-console/dist/index.d.ts +4 -0
  1432. node_ui/node_modules/patch-console/dist/index.js +45 -0
  1433. node_ui/node_modules/patch-console/dist/index.js.map +1 -0
  1434. node_ui/node_modules/patch-console/license +9 -0
  1435. node_ui/node_modules/patch-console/package.json +53 -0
  1436. node_ui/node_modules/patch-console/readme.md +62 -0
  1437. node_ui/node_modules/react/LICENSE +21 -0
  1438. node_ui/node_modules/react/README.md +37 -0
  1439. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.development.js +1315 -0
  1440. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
  1441. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
  1442. node_ui/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
  1443. node_ui/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
  1444. node_ui/node_modules/react/cjs/react-jsx-runtime.profiling.min.js +11 -0
  1445. node_ui/node_modules/react/cjs/react.development.js +2740 -0
  1446. node_ui/node_modules/react/cjs/react.production.min.js +26 -0
  1447. node_ui/node_modules/react/cjs/react.shared-subset.development.js +20 -0
  1448. node_ui/node_modules/react/cjs/react.shared-subset.production.min.js +10 -0
  1449. node_ui/node_modules/react/index.js +7 -0
  1450. node_ui/node_modules/react/jsx-dev-runtime.js +7 -0
  1451. node_ui/node_modules/react/jsx-runtime.js +7 -0
  1452. node_ui/node_modules/react/package.json +47 -0
  1453. node_ui/node_modules/react/react.shared-subset.js +7 -0
  1454. node_ui/node_modules/react/umd/react.development.js +3343 -0
  1455. node_ui/node_modules/react/umd/react.production.min.js +31 -0
  1456. node_ui/node_modules/react/umd/react.profiling.min.js +31 -0
  1457. node_ui/node_modules/react-devtools-core/README.md +131 -0
  1458. node_ui/node_modules/react-devtools-core/backend.js +1 -0
  1459. node_ui/node_modules/react-devtools-core/dist/backend.js +16888 -0
  1460. node_ui/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  1461. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  1462. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  1463. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js +2 -0
  1464. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js.map +1 -0
  1465. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +2 -0
  1466. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  1467. node_ui/node_modules/react-devtools-core/dist/standalone.js +3 -0
  1468. node_ui/node_modules/react-devtools-core/dist/standalone.js.LICENSE.txt +41 -0
  1469. node_ui/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  1470. node_ui/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  1471. node_ui/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  1472. node_ui/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  1473. node_ui/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  1474. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  1475. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  1476. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  1477. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  1478. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  1479. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  1480. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  1481. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  1482. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  1483. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  1484. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  1485. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  1486. node_ui/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  1487. node_ui/node_modules/react-devtools-core/package.json +38 -0
  1488. node_ui/node_modules/react-devtools-core/standalone.js +1 -0
  1489. node_ui/node_modules/react-reconciler/LICENSE +21 -0
  1490. node_ui/node_modules/react-reconciler/README.md +337 -0
  1491. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.development.js +45 -0
  1492. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js +10 -0
  1493. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +660 -0
  1494. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +15 -0
  1495. node_ui/node_modules/react-reconciler/cjs/react-reconciler.development.js +21531 -0
  1496. node_ui/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +234 -0
  1497. node_ui/node_modules/react-reconciler/cjs/react-reconciler.profiling.min.js +255 -0
  1498. node_ui/node_modules/react-reconciler/constants.js +7 -0
  1499. node_ui/node_modules/react-reconciler/index.js +7 -0
  1500. node_ui/node_modules/react-reconciler/package.json +40 -0
  1501. node_ui/node_modules/react-reconciler/reflection.js +7 -0
  1502. node_ui/node_modules/restore-cursor/index.d.ts +11 -0
  1503. node_ui/node_modules/restore-cursor/index.js +11 -0
  1504. node_ui/node_modules/restore-cursor/license +9 -0
  1505. node_ui/node_modules/restore-cursor/package.json +55 -0
  1506. node_ui/node_modules/restore-cursor/readme.md +31 -0
  1507. node_ui/node_modules/scheduler/LICENSE +21 -0
  1508. node_ui/node_modules/scheduler/README.md +9 -0
  1509. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +700 -0
  1510. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.production.min.js +20 -0
  1511. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +207 -0
  1512. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.min.js +14 -0
  1513. node_ui/node_modules/scheduler/cjs/scheduler.development.js +634 -0
  1514. node_ui/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
  1515. node_ui/node_modules/scheduler/index.js +7 -0
  1516. node_ui/node_modules/scheduler/package.json +36 -0
  1517. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.development.js +699 -0
  1518. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.production.min.js +19 -0
  1519. node_ui/node_modules/scheduler/umd/scheduler.development.js +152 -0
  1520. node_ui/node_modules/scheduler/umd/scheduler.production.min.js +146 -0
  1521. node_ui/node_modules/scheduler/umd/scheduler.profiling.min.js +146 -0
  1522. node_ui/node_modules/scheduler/unstable_mock.js +7 -0
  1523. node_ui/node_modules/scheduler/unstable_post_task.js +7 -0
  1524. node_ui/node_modules/shell-quote/.eslintrc +30 -0
  1525. node_ui/node_modules/shell-quote/.github/FUNDING.yml +12 -0
  1526. node_ui/node_modules/shell-quote/.nycrc +14 -0
  1527. node_ui/node_modules/shell-quote/LICENSE +24 -0
  1528. node_ui/node_modules/shell-quote/README.md +161 -0
  1529. node_ui/node_modules/shell-quote/index.js +4 -0
  1530. node_ui/node_modules/shell-quote/package.json +72 -0
  1531. node_ui/node_modules/shell-quote/parse.js +226 -0
  1532. node_ui/node_modules/shell-quote/print.py +3 -0
  1533. node_ui/node_modules/shell-quote/quote.js +19 -0
  1534. node_ui/node_modules/shell-quote/security.md +11 -0
  1535. node_ui/node_modules/shell-quote/test/comment.js +16 -0
  1536. node_ui/node_modules/shell-quote/test/env.js +52 -0
  1537. node_ui/node_modules/shell-quote/test/env_fn.js +21 -0
  1538. node_ui/node_modules/shell-quote/test/op.js +102 -0
  1539. node_ui/node_modules/shell-quote/test/parse.js +44 -0
  1540. node_ui/node_modules/shell-quote/test/quote.js +60 -0
  1541. node_ui/node_modules/shell-quote/test/set.js +31 -0
  1542. node_ui/node_modules/signal-exit/LICENSE.txt +16 -0
  1543. node_ui/node_modules/signal-exit/README.md +39 -0
  1544. node_ui/node_modules/signal-exit/index.js +202 -0
  1545. node_ui/node_modules/signal-exit/package.json +38 -0
  1546. node_ui/node_modules/signal-exit/signals.js +53 -0
  1547. node_ui/node_modules/slice-ansi/index.d.ts +19 -0
  1548. node_ui/node_modules/slice-ansi/index.js +169 -0
  1549. node_ui/node_modules/slice-ansi/license +10 -0
  1550. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  1551. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js +12 -0
  1552. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/license +9 -0
  1553. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/package.json +53 -0
  1554. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/readme.md +31 -0
  1555. node_ui/node_modules/slice-ansi/package.json +58 -0
  1556. node_ui/node_modules/slice-ansi/readme.md +54 -0
  1557. node_ui/node_modules/stack-utils/LICENSE.md +21 -0
  1558. node_ui/node_modules/stack-utils/index.js +344 -0
  1559. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.d.ts +18 -0
  1560. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.js +11 -0
  1561. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/license +9 -0
  1562. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/package.json +43 -0
  1563. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/readme.md +29 -0
  1564. node_ui/node_modules/stack-utils/package.json +39 -0
  1565. node_ui/node_modules/stack-utils/readme.md +143 -0
  1566. node_ui/node_modules/string-width/index.d.ts +39 -0
  1567. node_ui/node_modules/string-width/index.js +82 -0
  1568. node_ui/node_modules/string-width/license +9 -0
  1569. node_ui/node_modules/string-width/package.json +64 -0
  1570. node_ui/node_modules/string-width/readme.md +66 -0
  1571. node_ui/node_modules/strip-ansi/index.d.ts +15 -0
  1572. node_ui/node_modules/strip-ansi/index.js +14 -0
  1573. node_ui/node_modules/strip-ansi/license +9 -0
  1574. node_ui/node_modules/strip-ansi/package.json +59 -0
  1575. node_ui/node_modules/strip-ansi/readme.md +37 -0
  1576. node_ui/node_modules/to-rotated/index.d.ts +18 -0
  1577. node_ui/node_modules/to-rotated/index.js +24 -0
  1578. node_ui/node_modules/to-rotated/license +9 -0
  1579. node_ui/node_modules/to-rotated/package.json +46 -0
  1580. node_ui/node_modules/to-rotated/readme.md +29 -0
  1581. node_ui/node_modules/type-fest/index.d.ts +178 -0
  1582. node_ui/node_modules/type-fest/license-cc0 +121 -0
  1583. node_ui/node_modules/type-fest/license-mit +9 -0
  1584. node_ui/node_modules/type-fest/package.json +91 -0
  1585. node_ui/node_modules/type-fest/readme.md +1060 -0
  1586. node_ui/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
  1587. node_ui/node_modules/type-fest/source/and.d.ts +25 -0
  1588. node_ui/node_modules/type-fest/source/array-indices.d.ts +23 -0
  1589. node_ui/node_modules/type-fest/source/array-slice.d.ts +109 -0
  1590. node_ui/node_modules/type-fest/source/array-splice.d.ts +99 -0
  1591. node_ui/node_modules/type-fest/source/array-tail.d.ts +76 -0
  1592. node_ui/node_modules/type-fest/source/array-values.d.ts +22 -0
  1593. node_ui/node_modules/type-fest/source/arrayable.d.ts +29 -0
  1594. node_ui/node_modules/type-fest/source/async-return-type.d.ts +23 -0
  1595. node_ui/node_modules/type-fest/source/asyncify.d.ts +32 -0
  1596. node_ui/node_modules/type-fest/source/basic.d.ts +68 -0
  1597. node_ui/node_modules/type-fest/source/camel-case.d.ts +89 -0
  1598. node_ui/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
  1599. node_ui/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
  1600. node_ui/node_modules/type-fest/source/conditional-except.d.ts +45 -0
  1601. node_ui/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
  1602. node_ui/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
  1603. node_ui/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
  1604. node_ui/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
  1605. node_ui/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
  1606. node_ui/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
  1607. node_ui/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
  1608. node_ui/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
  1609. node_ui/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
  1610. node_ui/node_modules/type-fest/source/empty-object.d.ts +46 -0
  1611. node_ui/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
  1612. node_ui/node_modules/type-fest/source/entries.d.ts +62 -0
  1613. node_ui/node_modules/type-fest/source/entry.d.ts +65 -0
  1614. node_ui/node_modules/type-fest/source/exact.d.ts +68 -0
  1615. node_ui/node_modules/type-fest/source/except.d.ts +108 -0
  1616. node_ui/node_modules/type-fest/source/find-global-type.d.ts +64 -0
  1617. node_ui/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
  1618. node_ui/node_modules/type-fest/source/get.d.ts +219 -0
  1619. node_ui/node_modules/type-fest/source/global-this.d.ts +21 -0
  1620. node_ui/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
  1621. node_ui/node_modules/type-fest/source/greater-than.d.ts +56 -0
  1622. node_ui/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
  1623. node_ui/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
  1624. node_ui/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
  1625. node_ui/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
  1626. node_ui/node_modules/type-fest/source/if-any.d.ts +24 -0
  1627. node_ui/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
  1628. node_ui/node_modules/type-fest/source/if-never.d.ts +24 -0
  1629. node_ui/node_modules/type-fest/source/if-null.d.ts +24 -0
  1630. node_ui/node_modules/type-fest/source/if-unknown.d.ts +24 -0
  1631. node_ui/node_modules/type-fest/source/includes.d.ts +22 -0
  1632. node_ui/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
  1633. node_ui/node_modules/type-fest/source/int-range.d.ts +55 -0
  1634. node_ui/node_modules/type-fest/source/internal/array.d.ts +126 -0
  1635. node_ui/node_modules/type-fest/source/internal/characters.d.ts +67 -0
  1636. node_ui/node_modules/type-fest/source/internal/index.d.ts +8 -0
  1637. node_ui/node_modules/type-fest/source/internal/keys.d.ts +97 -0
  1638. node_ui/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
  1639. node_ui/node_modules/type-fest/source/internal/object.d.ts +236 -0
  1640. node_ui/node_modules/type-fest/source/internal/string.d.ts +210 -0
  1641. node_ui/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
  1642. node_ui/node_modules/type-fest/source/internal/type.d.ts +139 -0
  1643. node_ui/node_modules/type-fest/source/invariant-of.d.ts +76 -0
  1644. node_ui/node_modules/type-fest/source/is-any.d.ts +33 -0
  1645. node_ui/node_modules/type-fest/source/is-equal.d.ts +31 -0
  1646. node_ui/node_modules/type-fest/source/is-float.d.ts +41 -0
  1647. node_ui/node_modules/type-fest/source/is-integer.d.ts +58 -0
  1648. node_ui/node_modules/type-fest/source/is-literal.d.ts +296 -0
  1649. node_ui/node_modules/type-fest/source/is-never.d.ts +42 -0
  1650. node_ui/node_modules/type-fest/source/is-null.d.ts +20 -0
  1651. node_ui/node_modules/type-fest/source/is-tuple.d.ts +89 -0
  1652. node_ui/node_modules/type-fest/source/is-unknown.d.ts +52 -0
  1653. node_ui/node_modules/type-fest/source/iterable-element.d.ts +64 -0
  1654. node_ui/node_modules/type-fest/source/join.d.ts +68 -0
  1655. node_ui/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
  1656. node_ui/node_modules/type-fest/source/jsonify.d.ts +122 -0
  1657. node_ui/node_modules/type-fest/source/kebab-case.d.ts +44 -0
  1658. node_ui/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
  1659. node_ui/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
  1660. node_ui/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
  1661. node_ui/node_modules/type-fest/source/last-array-element.d.ts +38 -0
  1662. node_ui/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
  1663. node_ui/node_modules/type-fest/source/less-than.d.ts +26 -0
  1664. node_ui/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
  1665. node_ui/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
  1666. node_ui/node_modules/type-fest/source/literal-union.d.ts +37 -0
  1667. node_ui/node_modules/type-fest/source/merge-deep.d.ts +486 -0
  1668. node_ui/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
  1669. node_ui/node_modules/type-fest/source/merge.d.ts +48 -0
  1670. node_ui/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
  1671. node_ui/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
  1672. node_ui/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
  1673. node_ui/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
  1674. node_ui/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
  1675. node_ui/node_modules/type-fest/source/numeric.d.ts +222 -0
  1676. node_ui/node_modules/type-fest/source/observable-like.d.ts +63 -0
  1677. node_ui/node_modules/type-fest/source/omit-deep.d.ts +167 -0
  1678. node_ui/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
  1679. node_ui/node_modules/type-fest/source/opaque.d.ts +1 -0
  1680. node_ui/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
  1681. node_ui/node_modules/type-fest/source/or.d.ts +25 -0
  1682. node_ui/node_modules/type-fest/source/override-properties.d.ts +36 -0
  1683. node_ui/node_modules/type-fest/source/package-json.d.ts +676 -0
  1684. node_ui/node_modules/type-fest/source/partial-deep.d.ts +151 -0
  1685. node_ui/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
  1686. node_ui/node_modules/type-fest/source/pascal-case.d.ts +42 -0
  1687. node_ui/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
  1688. node_ui/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
  1689. node_ui/node_modules/type-fest/source/paths.d.ts +262 -0
  1690. node_ui/node_modules/type-fest/source/pick-deep.d.ts +149 -0
  1691. node_ui/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
  1692. node_ui/node_modules/type-fest/source/primitive.d.ts +13 -0
  1693. node_ui/node_modules/type-fest/source/promisable.d.ts +25 -0
  1694. node_ui/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
  1695. node_ui/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
  1696. node_ui/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
  1697. node_ui/node_modules/type-fest/source/replace.d.ts +85 -0
  1698. node_ui/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
  1699. node_ui/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
  1700. node_ui/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
  1701. node_ui/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
  1702. node_ui/node_modules/type-fest/source/required-deep.d.ts +78 -0
  1703. node_ui/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
  1704. node_ui/node_modules/type-fest/source/schema.d.ts +114 -0
  1705. node_ui/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
  1706. node_ui/node_modules/type-fest/source/set-field-type.d.ts +65 -0
  1707. node_ui/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
  1708. node_ui/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
  1709. node_ui/node_modules/type-fest/source/set-optional.d.ts +38 -0
  1710. node_ui/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
  1711. node_ui/node_modules/type-fest/source/set-readonly.d.ts +39 -0
  1712. node_ui/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
  1713. node_ui/node_modules/type-fest/source/set-required.d.ts +70 -0
  1714. node_ui/node_modules/type-fest/source/set-return-type.d.ts +29 -0
  1715. node_ui/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
  1716. node_ui/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
  1717. node_ui/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  1718. node_ui/node_modules/type-fest/source/simplify.d.ts +58 -0
  1719. node_ui/node_modules/type-fest/source/single-key-object.d.ts +29 -0
  1720. node_ui/node_modules/type-fest/source/snake-case.d.ts +45 -0
  1721. node_ui/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
  1722. node_ui/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
  1723. node_ui/node_modules/type-fest/source/split.d.ts +88 -0
  1724. node_ui/node_modules/type-fest/source/spread.d.ts +84 -0
  1725. node_ui/node_modules/type-fest/source/string-key-of.d.ts +25 -0
  1726. node_ui/node_modules/type-fest/source/string-repeat.d.ts +47 -0
  1727. node_ui/node_modules/type-fest/source/string-slice.d.ts +37 -0
  1728. node_ui/node_modules/type-fest/source/stringified.d.ts +23 -0
  1729. node_ui/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
  1730. node_ui/node_modules/type-fest/source/subtract.d.ts +83 -0
  1731. node_ui/node_modules/type-fest/source/sum.d.ts +78 -0
  1732. node_ui/node_modules/type-fest/source/tagged-union.d.ts +51 -0
  1733. node_ui/node_modules/type-fest/source/tagged.d.ts +256 -0
  1734. node_ui/node_modules/type-fest/source/trim.d.ts +27 -0
  1735. node_ui/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
  1736. node_ui/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
  1737. node_ui/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
  1738. node_ui/node_modules/type-fest/source/typed-array.d.ts +17 -0
  1739. node_ui/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
  1740. node_ui/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
  1741. node_ui/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
  1742. node_ui/node_modules/type-fest/source/unknown-array.d.ts +25 -0
  1743. node_ui/node_modules/type-fest/source/unknown-map.d.ts +24 -0
  1744. node_ui/node_modules/type-fest/source/unknown-record.d.ts +31 -0
  1745. node_ui/node_modules/type-fest/source/unknown-set.d.ts +24 -0
  1746. node_ui/node_modules/type-fest/source/value-of.d.ts +42 -0
  1747. node_ui/node_modules/type-fest/source/words.d.ts +118 -0
  1748. node_ui/node_modules/type-fest/source/writable-deep.d.ts +83 -0
  1749. node_ui/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
  1750. node_ui/node_modules/type-fest/source/writable.d.ts +68 -0
  1751. node_ui/node_modules/widest-line/index.d.ts +12 -0
  1752. node_ui/node_modules/widest-line/index.js +11 -0
  1753. node_ui/node_modules/widest-line/license +9 -0
  1754. node_ui/node_modules/widest-line/package.json +60 -0
  1755. node_ui/node_modules/widest-line/readme.md +26 -0
  1756. node_ui/node_modules/wrap-ansi/index.d.ts +41 -0
  1757. node_ui/node_modules/wrap-ansi/index.js +222 -0
  1758. node_ui/node_modules/wrap-ansi/license +9 -0
  1759. node_ui/node_modules/wrap-ansi/package.json +69 -0
  1760. node_ui/node_modules/wrap-ansi/readme.md +75 -0
  1761. node_ui/node_modules/ws/LICENSE +20 -0
  1762. node_ui/node_modules/ws/README.md +548 -0
  1763. node_ui/node_modules/ws/browser.js +8 -0
  1764. node_ui/node_modules/ws/index.js +13 -0
  1765. node_ui/node_modules/ws/lib/buffer-util.js +131 -0
  1766. node_ui/node_modules/ws/lib/constants.js +18 -0
  1767. node_ui/node_modules/ws/lib/event-target.js +292 -0
  1768. node_ui/node_modules/ws/lib/extension.js +203 -0
  1769. node_ui/node_modules/ws/lib/limiter.js +55 -0
  1770. node_ui/node_modules/ws/lib/permessage-deflate.js +528 -0
  1771. node_ui/node_modules/ws/lib/receiver.js +706 -0
  1772. node_ui/node_modules/ws/lib/sender.js +602 -0
  1773. node_ui/node_modules/ws/lib/stream.js +161 -0
  1774. node_ui/node_modules/ws/lib/subprotocol.js +62 -0
  1775. node_ui/node_modules/ws/lib/validation.js +152 -0
  1776. node_ui/node_modules/ws/lib/websocket-server.js +550 -0
  1777. node_ui/node_modules/ws/lib/websocket.js +1388 -0
  1778. node_ui/node_modules/ws/package.json +69 -0
  1779. node_ui/node_modules/ws/wrapper.mjs +8 -0
  1780. node_ui/node_modules/yoga-wasm-web/LICENSE +21 -0
  1781. node_ui/node_modules/yoga-wasm-web/README.md +70 -0
  1782. node_ui/node_modules/yoga-wasm-web/dist/asm.d.ts +6 -0
  1783. node_ui/node_modules/yoga-wasm-web/dist/asm.js +1 -0
  1784. node_ui/node_modules/yoga-wasm-web/dist/auto.d.ts +7 -0
  1785. node_ui/node_modules/yoga-wasm-web/dist/browser.js +1 -0
  1786. node_ui/node_modules/yoga-wasm-web/dist/generated/YGEnums.d.ts +328 -0
  1787. node_ui/node_modules/yoga-wasm-web/dist/index.d.ts +7 -0
  1788. node_ui/node_modules/yoga-wasm-web/dist/index.js +1 -0
  1789. node_ui/node_modules/yoga-wasm-web/dist/node.js +1 -0
  1790. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-57389177.js +1 -0
  1791. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js +1 -0
  1792. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm.d.ts +176 -0
  1793. node_ui/node_modules/yoga-wasm-web/dist/yoga.wasm +0 -0
  1794. node_ui/node_modules/yoga-wasm-web/package.json +56 -0
  1795. node_ui/package.json +21 -0
  1796. claude_code_tools/codex_bridge_mcp.py +0 -333
  1797. claude_code_tools-0.2.0.dist-info/METADATA +0 -495
  1798. claude_code_tools-0.2.0.dist-info/RECORD +0 -22
  1799. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.0.6.dist-info}/licenses/LICENSE +0 -0
@@ -19,12 +19,97 @@ import json
19
19
  import os
20
20
  import re
21
21
  import shlex
22
- import subprocess
23
22
  import sys
23
+ import time
24
+ import termios
25
+ import tty
24
26
  from datetime import datetime
25
27
  from pathlib import Path
26
28
  from typing import List, Set, Tuple, Optional
27
29
 
30
+ from claude_code_tools.session_menu import (
31
+ show_action_menu as menu_show_action_menu,
32
+ show_resume_submenu as menu_show_resume_submenu,
33
+ prompt_suppress_options as menu_prompt_suppress_options,
34
+ )
35
+ from claude_code_tools.node_menu_ui import run_node_menu_ui, run_find_options_ui
36
+ from claude_code_tools.trim_session import (
37
+ trim_and_create_session,
38
+ is_trimmed_session,
39
+ get_session_derivation_type,
40
+ )
41
+
42
+
43
+ def get_session_start_timestamp(jsonl_file: Path) -> Optional[float]:
44
+ """Extract session start timestamp from first entry with timestamp field.
45
+
46
+ Args:
47
+ jsonl_file: Path to Claude session JSONL file
48
+
49
+ Returns:
50
+ Unix timestamp as float, or None if not found
51
+ """
52
+ try:
53
+ with open(jsonl_file, "r", encoding="utf-8") as f:
54
+ for i, line in enumerate(f):
55
+ if i >= 10: # Only check first 10 lines
56
+ break
57
+ line = line.strip()
58
+ if not line:
59
+ continue
60
+ try:
61
+ data = json.loads(line)
62
+ if data.get("timestamp"):
63
+ ts = data["timestamp"]
64
+ # Parse ISO format (e.g., "2025-10-22T16:05:28.707Z")
65
+ if ts.endswith("Z"):
66
+ ts = ts[:-1] + "+00:00"
67
+ return datetime.fromisoformat(ts).timestamp()
68
+ except (json.JSONDecodeError, ValueError, TypeError):
69
+ continue
70
+ except (OSError, IOError):
71
+ pass
72
+ return None
73
+
74
+
75
+ def _read_key() -> str:
76
+ """Read a single keypress (Enter/Esc)."""
77
+ fd = sys.stdin.fileno()
78
+ old = termios.tcgetattr(fd)
79
+ try:
80
+ tty.setcbreak(fd)
81
+ ch = sys.stdin.read(1)
82
+ finally:
83
+ termios.tcsetattr(fd, termios.TCSADRAIN, old)
84
+ return ch
85
+
86
+
87
+ def prompt_post_action() -> str:
88
+ """After non-launch actions: Enter exits, Esc returns to menu."""
89
+ print("\n[Action complete] Press Enter to exit, or Esc to return to menu", file=sys.stderr)
90
+ ch = _read_key()
91
+ if ch == "\x1b":
92
+ return "back"
93
+ return "exit"
94
+
95
+ # Try to import TUI - it's optional
96
+ try:
97
+ from claude_code_tools.session_tui import run_session_tui
98
+ TUI_AVAILABLE = True
99
+ except ImportError:
100
+ TUI_AVAILABLE = False
101
+ from claude_code_tools.smart_trim_core import identify_trimmable_lines_cli
102
+ from claude_code_tools.smart_trim import trim_lines
103
+ from claude_code_tools.session_utils import (
104
+ get_claude_home,
105
+ encode_claude_project_path,
106
+ is_valid_session,
107
+ is_malformed_session,
108
+ extract_cwd_from_session,
109
+ format_session_id_display,
110
+ filter_sessions_by_time,
111
+ )
112
+
28
113
  try:
29
114
  from rich.console import Console
30
115
  from rich.table import Table
@@ -41,27 +126,21 @@ console = Console() if RICH_AVAILABLE else None
41
126
  def get_claude_project_dir(claude_home: Optional[str] = None) -> Path:
42
127
  """Convert current working directory to Claude project directory path."""
43
128
  cwd = os.getcwd()
44
-
45
- # Use provided claude_home or default to ~/.claude
46
- if claude_home:
47
- base_dir = Path(claude_home).expanduser()
48
- else:
49
- base_dir = Path.home() / ".claude"
50
129
 
51
- # Replace / with - to match Claude's directory naming convention
52
- project_path = cwd.replace("/", "-")
130
+ # Use provided claude_home, CLAUDE_CONFIG_DIR env var, or default to ~/.claude
131
+ base_dir = get_claude_home(claude_home)
132
+
133
+ # Encode path to match Claude's directory naming convention
134
+ project_path = encode_claude_project_path(cwd)
53
135
  claude_dir = base_dir / "projects" / project_path
54
136
  return claude_dir
55
137
 
56
138
 
57
139
  def get_all_claude_projects(claude_home: Optional[str] = None) -> List[Tuple[Path, str]]:
58
140
  """Get all Claude project directories with their original paths."""
59
- # Use provided claude_home or default to ~/.claude
60
- if claude_home:
61
- base_dir = Path(claude_home).expanduser()
62
- else:
63
- base_dir = Path.home() / ".claude"
64
-
141
+ # Use provided claude_home, CLAUDE_CONFIG_DIR env var, or default to ~/.claude
142
+ base_dir = get_claude_home(claude_home)
143
+
65
144
  projects_dir = base_dir / "projects"
66
145
 
67
146
  if not projects_dir.exists():
@@ -121,51 +200,74 @@ def extract_project_name(original_path: str) -> str:
121
200
  return parts[-1] if parts else "unknown"
122
201
 
123
202
 
124
- def search_keywords_in_file(filepath: Path, keywords: List[str]) -> tuple[bool, int, Optional[str]]:
125
203
  """
126
204
  Check if all keywords are present in the JSONL file, count lines, and extract git branch.
127
-
205
+
128
206
  Args:
129
207
  filepath: Path to the JSONL file
130
- keywords: List of keywords to search for (case-insensitive)
131
-
208
+ keywords: List of keywords to search for (case-insensitive). Empty list matches all files.
209
+
132
210
  Returns:
133
211
  Tuple of (matches: bool, line_count: int, git_branch: Optional[str])
134
- - matches: True if ALL keywords are found in the file
212
+ - matches: True if ALL keywords are found in the file (or True if no keywords)
135
213
  - line_count: Total number of lines in the file
136
214
  - git_branch: Git branch name from the first message that has it, or None
137
215
  """
216
+ # If no keywords, match all files
217
+ if not keywords:
218
+ msg_count = 0
219
+ git_branch = None
220
+ try:
221
+ with open(filepath, 'r', encoding='utf-8') as f:
222
+ for line in f:
223
+ try:
224
+ data = json.loads(line.strip())
225
+ # Only count user/assistant messages
226
+ if data.get('type') in ('user', 'assistant'):
227
+ msg_count += 1
228
+ # Extract git branch from JSON if not already found
229
+ if git_branch is None:
230
+ if 'gitBranch' in data and data['gitBranch']:
231
+ git_branch = data['gitBranch']
232
+ except (json.JSONDecodeError, KeyError):
233
+ pass
234
+ except Exception:
235
+ return False, 0, None
236
+ return True, msg_count, git_branch
237
+
138
238
  # Convert keywords to lowercase for case-insensitive search
139
239
  keywords_lower = [k.lower() for k in keywords]
140
240
  found_keywords = set()
141
- line_count = 0
241
+ msg_count = 0
142
242
  git_branch = None
143
-
243
+
144
244
  try:
145
245
  with open(filepath, 'r', encoding='utf-8') as f:
146
246
  for line in f:
147
- line_count += 1
148
247
  line_lower = line.lower()
149
-
150
- # Extract git branch from JSON if not already found
151
- if git_branch is None:
152
- try:
153
- data = json.loads(line.strip())
248
+
249
+ try:
250
+ data = json.loads(line.strip())
251
+ # Only count user/assistant messages
252
+ if data.get('type') in ('user', 'assistant'):
253
+ msg_count += 1
254
+ # Extract git branch from JSON if not already found
255
+ if git_branch is None:
154
256
  if 'gitBranch' in data and data['gitBranch']:
155
257
  git_branch = data['gitBranch']
156
- except (json.JSONDecodeError, KeyError):
157
- pass
158
-
159
- # Check which keywords are in this line
258
+ except (json.JSONDecodeError, KeyError):
259
+ pass
260
+
261
+ # Check which keywords are in this line (search all lines)
160
262
  for keyword in keywords_lower:
161
263
  if keyword in line_lower:
162
264
  found_keywords.add(keyword)
163
265
  except Exception:
164
266
  # Skip files that can't be read
165
267
  return False, 0, None
166
-
268
+
167
269
  matches = len(found_keywords) == len(keywords_lower)
168
- return matches, line_count, git_branch
270
+ return matches, msg_count, git_branch
169
271
 
170
272
 
171
273
  def is_system_message(text: str) -> bool:
@@ -179,17 +281,123 @@ def is_system_message(text: str) -> bool:
179
281
  return False
180
282
 
181
283
 
284
+ def is_sidechain_session(filepath: Path) -> bool:
285
+ """
286
+ Check if a session file is a sidechain (sub-agent) session.
287
+
288
+ Sidechain sessions are created when launching sub-agents via the Task tool
289
+ and cannot be resumed directly.
290
+
291
+ Args:
292
+ filepath: Path to session JSONL file.
293
+
294
+ Returns:
295
+ True if session is a sidechain, False otherwise.
296
+ """
297
+ if not filepath.exists():
298
+ return False
299
+
300
+ try:
301
+ with open(filepath, 'r', encoding='utf-8') as f:
302
+ # Check first few lines for isSidechain field
303
+ for i, line in enumerate(f):
304
+ if i >= 10: # Only check first 10 lines
305
+ break
306
+ try:
307
+ data = json.loads(line.strip())
308
+ if "isSidechain" in data:
309
+ return data["isSidechain"] is True
310
+ except (json.JSONDecodeError, KeyError):
311
+ continue
312
+ except (OSError, IOError):
313
+ pass
314
+
315
+ return False
316
+
317
+
318
+ def search_keywords_in_file(filepath: Path, keywords: List[str]) -> tuple[bool, int, Optional[str]]:
319
+ """
320
+ Check if all keywords are present in the JSONL file, count lines, and extract git branch.
321
+
322
+ Args:
323
+ filepath: Path to the JSONL file
324
+ keywords: List of keywords to search for (case-insensitive). Empty list matches all files.
325
+
326
+ Returns:
327
+ Tuple of (matches: bool, line_count: int, git_branch: Optional[str])
328
+ - matches: True if ALL keywords are found in the file (or True if no keywords)
329
+ - line_count: Total number of lines in the file
330
+ - git_branch: Git branch name from the first message that has it, or None
331
+ """
332
+ # If no keywords, match all files
333
+ if not keywords:
334
+ msg_count = 0
335
+ git_branch = None
336
+ try:
337
+ with open(filepath, 'r', encoding='utf-8') as f:
338
+ for line in f:
339
+ try:
340
+ data = json.loads(line.strip())
341
+ # Only count user/assistant messages
342
+ if data.get('type') in ('user', 'assistant'):
343
+ msg_count += 1
344
+ # Extract git branch from JSON if not already found
345
+ if git_branch is None:
346
+ if 'gitBranch' in data and data['gitBranch']:
347
+ git_branch = data['gitBranch']
348
+ except (json.JSONDecodeError, KeyError):
349
+ pass
350
+ except Exception:
351
+ return False, 0, None
352
+ return True, msg_count, git_branch
353
+
354
+ # Convert keywords to lowercase for case-insensitive search
355
+ keywords_lower = [k.lower() for k in keywords]
356
+ found_keywords = set()
357
+ msg_count = 0
358
+ git_branch = None
359
+
360
+ try:
361
+ with open(filepath, 'r', encoding='utf-8') as f:
362
+ for line in f:
363
+ line_lower = line.lower()
364
+
365
+ try:
366
+ data = json.loads(line.strip())
367
+ # Only count user/assistant messages
368
+ if data.get('type') in ('user', 'assistant'):
369
+ msg_count += 1
370
+ # Extract git branch from JSON if not already found
371
+ if git_branch is None:
372
+ if 'gitBranch' in data and data['gitBranch']:
373
+ git_branch = data['gitBranch']
374
+ except (json.JSONDecodeError, KeyError):
375
+ pass
376
+
377
+ # Check which keywords are in this line (search all lines)
378
+ for keyword in keywords_lower:
379
+ if keyword in line_lower:
380
+ found_keywords.add(keyword)
381
+ except Exception:
382
+ # Skip files that can't be read
383
+ return False, 0, None
384
+
385
+ matches = len(found_keywords) == len(keywords_lower)
386
+ return matches, msg_count, git_branch
387
+
388
+
182
389
  def get_session_preview(filepath: Path) -> str:
183
- """Get a preview of the session from the LAST user message."""
184
- last_user_message = None
390
+ """Get a preview of the session from the LAST message of any type."""
391
+ last_message = None # Tuple of (type_prefix, content)
185
392
 
186
393
  try:
187
394
  with open(filepath, 'r', encoding='utf-8') as f:
188
395
  for line in f:
189
396
  try:
190
397
  data = json.loads(line.strip())
191
- # Check top-level type for user messages
192
- if data.get('type') == 'user':
398
+ msg_type = data.get('type')
399
+ # Accept user or assistant messages
400
+ if msg_type in ('user', 'assistant'):
193
401
  message = data.get('message', {})
194
402
  content = message.get('content', '')
195
403
  text = None
@@ -203,34 +411,49 @@ def get_session_preview(filepath: Path) -> str:
203
411
  text = item.get('text', '').strip()
204
412
  break
205
413
 
206
- # Filter out system messages and keep updating to get LAST message
414
+ # Filter out system messages and keep updating to get LAST
207
415
  if text and not is_system_message(text):
208
416
  cleaned = text.replace('\n', ' ')[:400]
417
+ type_prefix = f"[{msg_type}]"
209
418
  # Prefer substantial messages (>20 chars)
210
419
  if len(cleaned) > 20:
211
- last_user_message = cleaned
212
- elif last_user_message is None:
213
- last_user_message = cleaned
420
+ last_message = (type_prefix, cleaned)
421
+ elif last_message is None:
422
+ last_message = (type_prefix, cleaned)
214
423
 
215
424
  except (json.JSONDecodeError, KeyError):
216
425
  continue
217
426
  except Exception:
218
427
  pass
219
428
 
220
- return last_user_message if last_user_message else "No preview available"
429
+ if last_message:
430
+ return f"{last_message[0]} {last_message[1]}"
431
+ return "No preview available"
221
432
 
222
433
 
223
- def find_sessions(keywords: List[str], global_search: bool = False, claude_home: Optional[str] = None) -> List[Tuple[str, float, int, str, str, str, Optional[str]]]:
434
+ def find_sessions(
435
+ keywords: List[str],
436
+ global_search: bool = False,
437
+ claude_home: Optional[str] = None,
438
+ original_only: bool = False,
439
+ no_sub: bool = False,
440
+ no_trim: bool = False,
441
+ no_cont: bool = False,
442
+ ) -> List[Tuple[str, float, float, int, str, str, str, Optional[str], bool]]:
224
443
  """
225
444
  Find all Claude Code sessions containing the specified keywords.
226
-
445
+
227
446
  Args:
228
447
  keywords: List of keywords to search for
229
448
  global_search: If True, search all projects; if False, search current project only
230
449
  claude_home: Optional custom Claude home directory (defaults to ~/.claude)
231
-
450
+ original_only: If True, show only original sessions (excludes trimmed, rollover, and sub-agent sessions)
451
+ no_sub: If True, exclude sub-agent sessions
452
+ no_trim: If True, exclude trimmed sessions
453
+ no_cont: If True, exclude rollover sessions (internally "continued")
454
+
232
455
  Returns:
233
- List of tuples (session_id, modification_time, line_count, project_name, preview, project_path, git_branch) sorted by modification time
456
+ List of tuples (session_id, modification_time, creation_time, line_count, project_name, preview, project_path, git_branch, is_trimmed) sorted by modification time
234
457
  """
235
458
  matching_sessions = []
236
459
 
@@ -255,24 +478,94 @@ def find_sessions(keywords: List[str], global_search: bool = False, claude_home:
255
478
  for jsonl_file in project_dir.glob("*.jsonl"):
256
479
  matches, line_count, git_branch = search_keywords_in_file(jsonl_file, keywords)
257
480
  if matches:
481
+ # Skip malformed sessions (missing metadata, cannot resume)
482
+ if is_malformed_session(jsonl_file):
483
+ continue
484
+
485
+ # Check if session is trimmed/continued
486
+ is_trimmed = is_trimmed_session(jsonl_file)
487
+ derivation_type = get_session_derivation_type(jsonl_file) if is_trimmed else None
488
+
489
+ # Check if session is sidechain (sub-agent)
490
+ is_sidechain = is_sidechain_session(jsonl_file)
491
+
492
+ # Apply filters (original_only overrides individual filters)
493
+ if original_only:
494
+ # Original only: exclude trimmed, continued, and sub-agents
495
+ if is_trimmed or is_sidechain:
496
+ continue
497
+ else:
498
+ # Individual filters
499
+ if no_sub and is_sidechain:
500
+ continue
501
+ if no_trim and derivation_type == "trimmed":
502
+ continue
503
+ if no_cont and derivation_type == "continued":
504
+ continue
505
+
258
506
  session_id = jsonl_file.stem
259
- mod_time = jsonl_file.stat().st_mtime
507
+ stat = jsonl_file.stat()
508
+ mod_time = stat.st_mtime
509
+ # Get session start timestamp from JSON metadata, fall back to file stats
510
+ create_time = get_session_start_timestamp(jsonl_file)
511
+ if create_time is None:
512
+ create_time = getattr(stat, 'st_birthtime', stat.st_ctime)
260
513
  preview = get_session_preview(jsonl_file)
261
- matching_sessions.append((session_id, mod_time, line_count, project_name, preview, original_path, git_branch))
262
-
514
+ # Extract actual cwd from session file - MUST NOT use reconstructed path as fallback
515
+ actual_cwd = extract_cwd_from_session(jsonl_file)
516
+ if not actual_cwd:
517
+ # Skip sessions without cwd metadata (shouldn't happen for valid Claude sessions)
518
+ continue
519
+ matching_sessions.append((session_id, mod_time, create_time, line_count, project_name, preview, actual_cwd, git_branch, derivation_type, is_sidechain))
520
+
263
521
  progress.advance(task)
264
522
  else:
265
523
  # Fallback without rich
266
524
  for project_dir, original_path in projects:
267
525
  project_name = extract_project_name(original_path)
268
-
526
+
269
527
  for jsonl_file in project_dir.glob("*.jsonl"):
270
528
  matches, line_count, git_branch = search_keywords_in_file(jsonl_file, keywords)
271
529
  if matches:
530
+ # Skip malformed sessions (missing metadata, cannot resume)
531
+ if is_malformed_session(jsonl_file):
532
+ continue
533
+
534
+ # Check if session is trimmed/continued
535
+ is_trimmed = is_trimmed_session(jsonl_file)
536
+ derivation_type = get_session_derivation_type(jsonl_file) if is_trimmed else None
537
+
538
+ # Check if session is sidechain (sub-agent)
539
+ is_sidechain = is_sidechain_session(jsonl_file)
540
+
541
+ # Apply filters (original_only overrides individual filters)
542
+ if original_only:
543
+ # Original only: exclude trimmed, continued, and sub-agents
544
+ if is_trimmed or is_sidechain:
545
+ continue
546
+ else:
547
+ # Individual filters
548
+ if no_sub and is_sidechain:
549
+ continue
550
+ if no_trim and derivation_type == "trimmed":
551
+ continue
552
+ if no_cont and derivation_type == "continued":
553
+ continue
554
+
272
555
  session_id = jsonl_file.stem
273
- mod_time = jsonl_file.stat().st_mtime
556
+ stat = jsonl_file.stat()
557
+ mod_time = stat.st_mtime
558
+ # Get session start timestamp from JSON metadata, fall back to file stats
559
+ create_time = get_session_start_timestamp(jsonl_file)
560
+ if create_time is None:
561
+ create_time = getattr(stat, 'st_birthtime', stat.st_ctime)
274
562
  preview = get_session_preview(jsonl_file)
275
- matching_sessions.append((session_id, mod_time, line_count, project_name, preview, original_path, git_branch))
563
+ # Extract actual cwd from session file - MUST NOT use reconstructed path as fallback
564
+ actual_cwd = extract_cwd_from_session(jsonl_file)
565
+ if not actual_cwd:
566
+ # Skip sessions without cwd metadata (shouldn't happen for valid Claude sessions)
567
+ continue
568
+ matching_sessions.append((session_id, mod_time, create_time, line_count, project_name, preview, actual_cwd, git_branch, derivation_type, is_sidechain))
276
569
  else:
277
570
  # Search current project only
278
571
  claude_dir = get_claude_project_dir(claude_home)
@@ -286,10 +579,42 @@ def find_sessions(keywords: List[str], global_search: bool = False, claude_home:
286
579
  for jsonl_file in claude_dir.glob("*.jsonl"):
287
580
  matches, line_count, git_branch = search_keywords_in_file(jsonl_file, keywords)
288
581
  if matches:
582
+ # Skip malformed sessions (missing metadata, cannot resume)
583
+ if is_malformed_session(jsonl_file):
584
+ continue
585
+
586
+ # Check if session is trimmed/continued
587
+ is_trimmed = is_trimmed_session(jsonl_file)
588
+ derivation_type = get_session_derivation_type(jsonl_file) if is_trimmed else None
589
+
590
+ # Check if session is sidechain (sub-agent)
591
+ is_sidechain = is_sidechain_session(jsonl_file)
592
+
593
+ # Apply filters (original_only overrides individual filters)
594
+ if original_only:
595
+ # Original only: exclude trimmed, continued, and sub-agents
596
+ if is_trimmed or is_sidechain:
597
+ continue
598
+ else:
599
+ # Individual filters
600
+ if no_sub and is_sidechain:
601
+ continue
602
+ if no_trim and derivation_type == "trimmed":
603
+ continue
604
+ if no_cont and derivation_type == "continued":
605
+ continue
606
+
289
607
  session_id = jsonl_file.stem
290
- mod_time = jsonl_file.stat().st_mtime
608
+ stat = jsonl_file.stat()
609
+ mod_time = stat.st_mtime
610
+ # Get session start timestamp from JSON metadata, fall back to file stats
611
+ create_time = get_session_start_timestamp(jsonl_file)
612
+ if create_time is None:
613
+ create_time = getattr(stat, 'st_birthtime', stat.st_ctime)
291
614
  preview = get_session_preview(jsonl_file)
292
- matching_sessions.append((session_id, mod_time, line_count, project_name, preview, os.getcwd(), git_branch))
615
+ # Extract actual cwd from session file for consistency
616
+ actual_cwd = extract_cwd_from_session(jsonl_file) or os.getcwd()
617
+ matching_sessions.append((session_id, mod_time, create_time, line_count, project_name, preview, actual_cwd, git_branch, derivation_type, is_sidechain))
293
618
 
294
619
  # Sort by modification time (newest first)
295
620
  matching_sessions.sort(key=lambda x: x[1], reverse=True)
@@ -297,26 +622,27 @@ def find_sessions(keywords: List[str], global_search: bool = False, claude_home:
297
622
  return matching_sessions
298
623
 
299
624
 
300
- def display_interactive_ui(sessions: List[Tuple[str, float, int, str, str, str, Optional[str]]], keywords: List[str], stderr_mode: bool = False, num_matches: int = 10) -> Optional[Tuple[str, str]]:
625
+ def display_interactive_ui(sessions: List[Tuple[str, float, float, int, str, str, str, Optional[str], bool]], keywords: List[str], stderr_mode: bool = False, num_matches: int = 10) -> Optional[Tuple[str, str]]:
301
626
  """Display interactive UI for session selection."""
302
627
  if not RICH_AVAILABLE:
303
628
  return None
304
-
629
+
305
630
  # Use stderr console if in stderr mode
306
631
  ui_console = Console(file=sys.stderr) if stderr_mode else console
307
632
  if not ui_console:
308
633
  return None
309
-
634
+
310
635
  # Limit to specified number of sessions
311
636
  display_sessions = sessions[:num_matches]
312
-
637
+
313
638
  if not display_sessions:
314
639
  ui_console.print("[red]No sessions found[/red]")
315
640
  return None
316
-
641
+
317
642
  # Create table
643
+ title = f"Sessions matching: {', '.join(keywords)}" if keywords else "All sessions"
318
644
  table = Table(
319
- title=f"Sessions matching: {', '.join(keywords)}",
645
+ title=title,
320
646
  box=box.ROUNDED,
321
647
  show_header=True,
322
648
  header_style="bold cyan"
@@ -326,28 +652,61 @@ def display_interactive_ui(sessions: List[Tuple[str, float, int, str, str, str,
326
652
  table.add_column("Session ID", style="dim")
327
653
  table.add_column("Project", style="green")
328
654
  table.add_column("Branch", style="magenta")
329
- table.add_column("Date", style="blue")
655
+ table.add_column("Date-Range", style="blue")
330
656
  table.add_column("Lines", style="cyan", justify="right")
331
- table.add_column("Preview", style="white", max_width=60, overflow="fold")
657
+ table.add_column("Last User Message", style="white", max_width=60, overflow="fold")
332
658
 
333
- for idx, (session_id, mod_time, line_count, project_name, preview, _, git_branch) in enumerate(display_sessions, 1):
334
- mod_date = datetime.fromtimestamp(mod_time).strftime('%Y-%m-%d %H:%M')
659
+ for idx, (session_id, mod_time, create_time, line_count, project_name, preview, _, git_branch, derivation_type, is_sidechain) in enumerate(display_sessions, 1):
660
+ # Format: "10/04 - 10/09 13:45"
661
+ create_date = datetime.fromtimestamp(create_time).strftime('%m/%d')
662
+ mod_date = datetime.fromtimestamp(mod_time).strftime('%m/%d %H:%M')
663
+ date_display = f"{create_date} - {mod_date}"
335
664
  branch_display = git_branch if git_branch else "N/A"
665
+
666
+ # Format session ID with annotations using centralized helper
667
+ session_id_display = format_session_id_display(
668
+ session_id,
669
+ is_trimmed=(derivation_type == "trimmed"),
670
+ is_continued=(derivation_type == "continued"),
671
+ is_sidechain=is_sidechain,
672
+ truncate_length=8,
673
+ )
674
+
336
675
  table.add_row(
337
676
  str(idx),
338
- session_id[:8] + "...",
677
+ session_id_display,
339
678
  project_name,
340
679
  branch_display,
341
- mod_date,
680
+ date_display,
342
681
  str(line_count),
343
682
  preview
344
683
  )
345
684
 
346
685
  ui_console.print(table)
686
+
687
+ # Show footnotes if any sessions are trimmed, continued, or sidechain
688
+ has_trimmed = any(s[8] == "trimmed" for s in display_sessions) # derivation_type is index 8
689
+ has_continued = any(s[8] == "continued" for s in display_sessions)
690
+ has_sidechain = any(s[9] for s in display_sessions) # is_sidechain is index 9
691
+ if has_trimmed or has_continued or has_sidechain:
692
+ footnotes = []
693
+ if has_trimmed:
694
+ footnotes.append("(t) = Trimmed session")
695
+ if has_continued:
696
+ footnotes.append("(c) = Continued session")
697
+ if has_sidechain:
698
+ footnotes.append("(sub) = Sub-agent session (not directly resumable)")
699
+ ui_console.print("[dim]" + " | ".join(footnotes) + "[/dim]")
700
+
701
+ # Auto-select if only one result
702
+ if len(display_sessions) == 1:
703
+ ui_console.print(f"\n[yellow]Auto-selecting only match: {display_sessions[0][0][:16]}...[/yellow]")
704
+ return display_sessions[0]
705
+
347
706
  ui_console.print("\n[bold]Select a session:[/bold]")
348
707
  ui_console.print(f" • Enter number (1-{len(display_sessions)}) to select")
349
- ui_console.print(" • Press Ctrl+C to cancel\n")
350
-
708
+ ui_console.print(" • Press Enter to cancel\n")
709
+
351
710
  while True:
352
711
  try:
353
712
  # In stderr mode, we need to ensure nothing goes to stdout
@@ -355,48 +714,513 @@ def display_interactive_ui(sessions: List[Tuple[str, float, int, str, str, str,
355
714
  # Temporarily redirect stdout to devnull
356
715
  old_stdout = sys.stdout
357
716
  sys.stdout = open(os.devnull, 'w')
358
-
717
+
359
718
  choice = Prompt.ask(
360
719
  "Your choice",
361
- choices=[str(i) for i in range(1, len(display_sessions) + 1)],
362
- show_choices=False,
720
+ default="",
721
+ show_default=False,
363
722
  console=ui_console
364
723
  )
365
-
366
- # Handle empty input
724
+
725
+ # Handle empty input - cancel
367
726
  if not choice or not choice.strip():
368
- ui_console.print("[red]Invalid choice. Please try again.[/red]")
369
- continue
370
-
727
+ # Restore stdout first
728
+ if stderr_mode:
729
+ sys.stdout.close()
730
+ sys.stdout = old_stdout
731
+ ui_console.print("[yellow]Cancelled[/yellow]")
732
+ return None
733
+
371
734
  # Restore stdout
372
735
  if stderr_mode:
373
736
  sys.stdout.close()
374
737
  sys.stdout = old_stdout
375
-
738
+
376
739
  idx = int(choice) - 1
377
740
  if 0 <= idx < len(display_sessions):
378
741
  session_info = display_sessions[idx]
379
- return (session_info[0], session_info[5]) # Return (session_id, project_path)
380
-
742
+ return session_info # Return full session tuple
743
+ else:
744
+ ui_console.print("[red]Invalid choice. Please try again.[/red]")
745
+
381
746
  except KeyboardInterrupt:
747
+ # Restore stdout if needed
748
+ if stderr_mode and sys.stdout != old_stdout:
749
+ sys.stdout.close()
750
+ sys.stdout = old_stdout
382
751
  ui_console.print("\n[yellow]Cancelled[/yellow]")
383
752
  return None
384
753
  except EOFError:
754
+ # Restore stdout if needed
755
+ if stderr_mode and sys.stdout != old_stdout:
756
+ sys.stdout.close()
757
+ sys.stdout = old_stdout
385
758
  ui_console.print("\n[yellow]Cancelled (EOF)[/yellow]")
386
759
  return None
387
760
  except ValueError:
388
761
  ui_console.print("[red]Invalid choice. Please try again.[/red]")
389
762
 
390
763
 
391
- def resume_session(session_id: str, project_path: str, shell_mode: bool = False):
764
+ def show_resume_submenu() -> Optional[str]:
765
+ """Show resume options submenu."""
766
+ return menu_show_resume_submenu(stderr_mode=False)
767
+
768
+
769
+ def prompt_suppress_options() -> Optional[Tuple[Optional[str], int, Optional[int]]]:
770
+ """
771
+ Prompt user for suppress-tool-results options.
772
+
773
+ Returns:
774
+ Tuple of (tools, threshold, trim_assistant_messages) or None if cancelled
775
+ """
776
+ return menu_prompt_suppress_options(stderr_mode=False)
777
+
778
+
779
+ def extract_first_user_message_claude(session_file: Path) -> str:
780
+ """Extract first user message from Claude session file."""
781
+ with open(session_file, "r") as f:
782
+ for line in f:
783
+ try:
784
+ data = json.loads(line)
785
+ except json.JSONDecodeError:
786
+ continue
787
+
788
+ if data.get("type") == "user":
789
+ content = data.get("message", {}).get("content")
790
+ if isinstance(content, str):
791
+ return content
792
+ elif isinstance(content, list):
793
+ for item in content:
794
+ if isinstance(item, dict) and item.get("type") == "text":
795
+ return item.get("text", "")
796
+
797
+ return "Suppressed session"
798
+
799
+
800
+ def handle_suppress_resume_claude(
801
+ session_id: str,
802
+ project_path: str,
803
+ tools: Optional[str],
804
+ threshold: int,
805
+ trim_assistant_messages: Optional[int] = None,
806
+ claude_home: Optional[str] = None,
807
+ ) -> str | None:
808
+ """
809
+ Suppress tool results and resume Claude Code session.
810
+
811
+ Returns:
812
+ 'back' if user wants to go back to menu, None otherwise.
813
+ """
814
+ session_file = Path(get_session_file_path(session_id, project_path, claude_home))
815
+
816
+ print(f"\n🔧 Trimming session...")
817
+
818
+ # Parse tools into set if provided
819
+ target_tools = None
820
+ if tools:
821
+ target_tools = {tool.strip().lower() for tool in tools.split(",")}
822
+
823
+ try:
824
+ # Use helper function to trim and create new session
825
+ result = trim_and_create_session(
826
+ "claude",
827
+ session_file,
828
+ target_tools,
829
+ threshold,
830
+ trim_assistant_messages=trim_assistant_messages
831
+ )
832
+ except Exception as e:
833
+ print(f"❌ Error trimming session: {e}")
834
+ return None
835
+
836
+ new_session_id = result["session_id"]
837
+ new_session_file = Path(result["output_file"])
838
+
839
+ # Calculate total lines trimmed for confirmation UI
840
+ total_trimmed = result['num_tools_trimmed'] + result['num_assistant_trimmed']
841
+
842
+ # Show confirmation UI
843
+ from claude_code_tools.node_menu_ui import run_trim_confirm_ui
844
+ action = run_trim_confirm_ui(
845
+ new_session_id=new_session_id,
846
+ lines_trimmed=total_trimmed,
847
+ tokens_saved=result['tokens_saved'],
848
+ output_file=str(new_session_file),
849
+ )
850
+
851
+ if action == 'resume':
852
+ # Resume the new session
853
+ resume_session(new_session_id, project_path, claude_home=claude_home)
854
+ return None
855
+ elif action == 'delete':
856
+ # Delete the new session file and go back to menu
857
+ new_session_file.unlink(missing_ok=True)
858
+ print(f"\n🗑️ Deleted session file: {new_session_file.name}")
859
+ return 'back'
860
+ else:
861
+ # Cancel (escape) - keep file, go back to menu
862
+ print(f"\n📁 Session file kept: {new_session_file}")
863
+ print(f" Session ID: {new_session_id}")
864
+ return 'back'
865
+
866
+
867
+ def handle_smart_trim_resume_claude(
868
+ session_id: str,
869
+ project_path: str,
870
+ claude_home: Optional[str] = None,
871
+ custom_instructions: Optional[str] = None,
872
+ ) -> str | None:
873
+ """
874
+ Smart trim session using parallel agents and resume Claude Code session.
875
+
876
+ Args:
877
+ session_id: Session ID to trim
878
+ project_path: Project path
879
+ claude_home: Optional custom Claude home directory
880
+ custom_instructions: Optional custom instructions for the trim agents
881
+
882
+ Returns:
883
+ 'back' if user wants to go back to menu, None otherwise.
884
+ """
885
+ import uuid
886
+
887
+ session_file = Path(get_session_file_path(session_id, project_path, claude_home))
888
+
889
+ print(f"\n🤖 Smart trimming session using Claude CLI...")
890
+ if custom_instructions:
891
+ print(f" Instructions: {custom_instructions[:60]}...")
892
+ print(f" This may take a minute as Claude analyzes the session...")
893
+
894
+ try:
895
+ # Identify trimmable lines using CLI with parallel sub-agents
896
+ trimmable = identify_trimmable_lines_cli(
897
+ session_file,
898
+ exclude_types=[],
899
+ preserve_recent=10,
900
+ custom_instructions=custom_instructions,
901
+ )
902
+
903
+ if not trimmable:
904
+ # Show confirmation for "nothing to trim" case
905
+ from claude_code_tools.node_menu_ui import run_trim_confirm_ui
906
+ action = run_trim_confirm_ui(
907
+ nothing_to_trim=True,
908
+ original_session_id=session_id,
909
+ )
910
+
911
+ if action == 'resume':
912
+ resume_session(session_id, project_path, claude_home=claude_home)
913
+ return None
914
+ # 'back' or 'cancel' - return signal to go back to menu
915
+ return 'back'
916
+
917
+ print(f" Found {len(trimmable)} lines to trim")
918
+
919
+ # Extract line indices and descriptions from verbose tuples
920
+ # trimmable is list of (line_idx, rationale, description) tuples
921
+ line_indices = [item[0] for item in trimmable]
922
+ descriptions = {
923
+ item[0]: item[2] for item in trimmable if len(item) > 2 and item[2]
924
+ }
925
+
926
+ # Generate new session ID
927
+ new_session_id = str(uuid.uuid4())
928
+
929
+ # Create output path
930
+ output_file = session_file.parent / f"{new_session_id}.jsonl"
931
+
932
+ # Perform trimming
933
+ stats = trim_lines(
934
+ session_file, line_indices, output_file, descriptions=descriptions
935
+ )
936
+
937
+ # Check if savings are worth it (minimum 300 tokens)
938
+ MIN_TOKEN_SAVINGS = 300
939
+ if stats['tokens_saved'] < MIN_TOKEN_SAVINGS:
940
+ # Not worth trimming - delete output and show nothing to trim
941
+ output_file.unlink(missing_ok=True)
942
+ print(f" Savings too small ({stats['tokens_saved']} tokens < {MIN_TOKEN_SAVINGS})")
943
+ print(f" (Diagnostic file: .claude/trim-result-{session_id}.jsonl)")
944
+ from claude_code_tools.node_menu_ui import run_trim_confirm_ui
945
+ action = run_trim_confirm_ui(
946
+ nothing_to_trim=True,
947
+ original_session_id=session_id,
948
+ )
949
+ if action == 'resume':
950
+ resume_session(session_id, project_path, claude_home=claude_home)
951
+ return None
952
+ return 'back'
953
+
954
+ # Show confirmation UI
955
+ from claude_code_tools.node_menu_ui import run_trim_confirm_ui
956
+ action = run_trim_confirm_ui(
957
+ new_session_id=new_session_id,
958
+ lines_trimmed=stats['num_lines_trimmed'],
959
+ tokens_saved=stats['tokens_saved'],
960
+ output_file=str(output_file),
961
+ )
962
+
963
+ if action == 'resume':
964
+ # Resume the new session
965
+ resume_session(new_session_id, project_path, claude_home=claude_home)
966
+ return None
967
+ elif action == 'delete':
968
+ # Delete the new session file and go back to menu
969
+ output_file.unlink(missing_ok=True)
970
+ print(f"\n🗑️ Deleted session file: {output_file.name}")
971
+ return 'back'
972
+ else:
973
+ # Cancel (escape) - keep file, go back to menu
974
+ print(f"\n📁 Session file kept: {output_file}")
975
+ print(f" Session ID: {new_session_id}")
976
+ return 'back'
977
+
978
+ except Exception as e:
979
+ print(f"❌ Error during smart trim: {e}")
980
+ import traceback
981
+ traceback.print_exc()
982
+ return None
983
+
984
+
985
+ def show_action_menu(session_info: Tuple[str, float, float, int, str, str, str, Optional[str]]) -> Optional[str]:
986
+ """
987
+ Show action menu for selected session.
988
+
989
+ Returns: action choice ('resume', 'path', 'copy') or None if cancelled
990
+ """
991
+ session_id, _, _, _, project_name, _, project_path, git_branch, _, is_sidechain = session_info
992
+
993
+ return menu_show_action_menu(
994
+ session_id=session_id,
995
+ agent="claude",
996
+ project_name=project_name,
997
+ git_branch=git_branch,
998
+ is_sidechain=is_sidechain,
999
+ stderr_mode=False,
1000
+ )
1001
+
1002
+
1003
+ def get_session_file_path(
1004
+ session_id: str, project_path: str, claude_home: Optional[str] = None
1005
+ ) -> str:
1006
+ """Get the full file path for a session.
1007
+
1008
+ Supports both full and partial session IDs. If an exact match isn't found,
1009
+ searches for sessions containing the given ID string.
1010
+
1011
+ Args:
1012
+ session_id: Full or partial session UUID
1013
+ project_path: Project working directory path
1014
+ claude_home: Optional custom Claude home directory
1015
+
1016
+ Returns:
1017
+ Full path to the session file
1018
+
1019
+ Raises:
1020
+ FileNotFoundError: If session cannot be found
1021
+ ValueError: If partial ID matches multiple sessions
1022
+ """
1023
+ base_dir = get_claude_home(claude_home)
1024
+ encoded_path = encode_claude_project_path(project_path)
1025
+ claude_project_dir = base_dir / "projects" / encoded_path
1026
+
1027
+ # Try exact match first (fast path)
1028
+ exact_path = claude_project_dir / f"{session_id}.jsonl"
1029
+ if exact_path.exists():
1030
+ return str(exact_path)
1031
+
1032
+ # If project directory doesn't exist, return constructed path
1033
+ # (maintains backward compatibility - caller can handle non-existent path)
1034
+ if not claude_project_dir.exists():
1035
+ return str(exact_path)
1036
+
1037
+ # Search for partial matches in the project directory
1038
+ matches = []
1039
+ for jsonl_file in claude_project_dir.glob("*.jsonl"):
1040
+ if session_id in jsonl_file.stem:
1041
+ matches.append(jsonl_file)
1042
+
1043
+ if len(matches) == 0:
1044
+ # No partial matches found, return constructed path
1045
+ return str(exact_path)
1046
+ elif len(matches) == 1:
1047
+ return str(matches[0])
1048
+ else:
1049
+ match_list = "\n ".join(str(m.name) for m in matches)
1050
+ raise ValueError(
1051
+ f"Multiple sessions match '{session_id}':\n {match_list}\n"
1052
+ f"Please use a more specific session ID."
1053
+ )
1054
+
1055
+
1056
+ def handle_export_session(session_file_path: str, dest_override: str | None = None, silent: bool = False) -> None:
1057
+ """Export session to text file."""
1058
+ from claude_code_tools.export_claude_session import export_session_to_markdown as do_export
1059
+ from datetime import datetime
1060
+
1061
+ try:
1062
+ # Generate default export path using session's project directory
1063
+ session_file = Path(session_file_path)
1064
+ session_id = session_file.stem
1065
+ today = datetime.now().strftime("%Y%m%d")
1066
+
1067
+ # Infer project directory from session metadata
1068
+ project_dir = extract_cwd_from_session(session_file)
1069
+ if project_dir:
1070
+ output_dir = Path(project_dir) / "exported-sessions"
1071
+ else:
1072
+ output_dir = Path.cwd() / "exported-sessions"
1073
+
1074
+ default_path = output_dir / f"{today}-claude-session-{session_id}.txt"
1075
+
1076
+ if dest_override is None:
1077
+ print(f"\nDefault export path: {default_path}")
1078
+ dest = input("Path (or Enter for default): ").strip()
1079
+ if not dest:
1080
+ dest_path = default_path
1081
+ else:
1082
+ dest_path = Path(dest).expanduser()
1083
+
1084
+ # Force .txt extension
1085
+ if dest_path.suffix != ".txt":
1086
+ dest_path = dest_path.with_suffix(".txt")
1087
+ else:
1088
+ dest_path = Path(dest_override).expanduser()
1089
+ if dest_path.suffix != ".txt":
1090
+ dest_path = dest_path.with_suffix(".txt")
1091
+
1092
+ # Create parent directory if needed
1093
+ dest_path.parent.mkdir(parents=True, exist_ok=True)
1094
+
1095
+ # Export to text file
1096
+ print(f"\n📄 Exporting session...")
1097
+ with open(dest_path, 'w') as f:
1098
+ stats = do_export(Path(session_file_path), f, verbose=False)
1099
+
1100
+ if not silent:
1101
+ print(f"✅ Export complete!")
1102
+ print(f" User messages: {stats['user_messages']}")
1103
+ print(f" Assistant messages: {stats['assistant_messages']}")
1104
+ print(f" Tool calls: {stats['tool_calls']}")
1105
+ print(f" Tool results: {stats['tool_results']}")
1106
+ print(f" Skipped items: {stats['skipped']}")
1107
+ print(f"\n📄 Exported to: {dest_path}")
1108
+
1109
+ except Exception as e:
1110
+ print(f"\nError exporting session: {e}")
1111
+
1112
+
1113
+ def copy_session_file(session_file_path: str, dest_override: str | None = None, silent: bool = False) -> None:
1114
+ """Copy session file to user-specified file or directory."""
1115
+ try:
1116
+ if dest_override is None:
1117
+ dest = input("\nEnter destination file or directory path: ").strip()
1118
+ if not dest:
1119
+ print("Cancelled.")
1120
+ return
1121
+ else:
1122
+ dest = dest_override
1123
+
1124
+ dest_path = Path(dest).expanduser()
1125
+ source = Path(session_file_path)
1126
+
1127
+ # Determine if destination is a directory or file
1128
+ if dest_path.exists():
1129
+ if dest_path.is_dir():
1130
+ # Copy into directory with original filename
1131
+ dest_file = dest_path / source.name
1132
+ else:
1133
+ # Copy to specified file
1134
+ dest_file = dest_path
1135
+ else:
1136
+ # Destination doesn't exist - check if it looks like a directory
1137
+ if dest.endswith('/') or dest.endswith(os.sep):
1138
+ # Treat as directory - create it
1139
+ create = input(f"Directory {dest_path} does not exist. Create it? [y/N]: ").strip().lower()
1140
+ if create in ('y', 'yes'):
1141
+ dest_path.mkdir(parents=True, exist_ok=True)
1142
+ dest_file = dest_path / source.name
1143
+ else:
1144
+ print("Cancelled.")
1145
+ return
1146
+ else:
1147
+ # Treat as file - create parent directory if needed
1148
+ parent = dest_path.parent
1149
+ if not parent.exists():
1150
+ create = input(f"Parent directory {parent} does not exist. Create it? [y/N]: ").strip().lower()
1151
+ if create in ('y', 'yes'):
1152
+ parent.mkdir(parents=True, exist_ok=True)
1153
+ else:
1154
+ print("Cancelled.")
1155
+ return
1156
+ dest_file = dest_path
1157
+
1158
+ import shutil
1159
+ shutil.copy2(source, dest_file)
1160
+ if not silent:
1161
+ print(f"\nCopied to: {dest_file}")
1162
+
1163
+ except KeyboardInterrupt:
1164
+ print("\nCancelled.")
1165
+ except Exception as e:
1166
+ print(f"\nError copying file: {e}")
1167
+
1168
+
1169
+ def clone_session(session_id: str, project_path: str, shell_mode: bool = False, claude_home: Optional[str] = None):
1170
+ """Clone a Claude session to a new file with new UUID and resume it."""
1171
+ import shutil
1172
+ import uuid
1173
+
1174
+ # Get the original session file path
1175
+ source_path = Path(get_session_file_path(session_id, project_path, claude_home))
1176
+
1177
+ if not source_path.exists():
1178
+ print(f"\nError: Session file not found: {source_path}")
1179
+ return
1180
+
1181
+ # Generate new UUID for cloned session
1182
+ new_session_id = str(uuid.uuid4())
1183
+
1184
+ # Create destination path with new UUID in same directory
1185
+ dest_path = source_path.parent / f"{new_session_id}.jsonl"
1186
+
1187
+ try:
1188
+ # Copy the file
1189
+ shutil.copy2(source_path, dest_path)
1190
+
1191
+ # Update sessionId in all lines to match the new filename UUID
1192
+ from claude_code_tools.trim_session import update_session_id_in_file
1193
+ update_session_id_in_file(dest_path, new_session_id, agent="claude")
1194
+
1195
+ if not shell_mode:
1196
+ print(f"\nCloned session:")
1197
+ print(f" Original: {session_id}")
1198
+ print(f" New: {new_session_id}")
1199
+ print(f"\nResuming cloned session...")
1200
+
1201
+ # Resume the new cloned session
1202
+ resume_session(new_session_id, project_path, shell_mode=shell_mode, claude_home=claude_home)
1203
+
1204
+ except Exception as e:
1205
+ print(f"\nError cloning session: {e}")
1206
+ return
1207
+
1208
+
1209
+ def resume_session(session_id: str, project_path: str, shell_mode: bool = False, claude_home: Optional[str] = None):
392
1210
  """Resume a Claude session using claude -r command."""
393
1211
  current_dir = os.getcwd()
394
-
1212
+
395
1213
  # In shell mode, output commands for the shell to evaluate
396
1214
  if shell_mode:
397
1215
  if project_path != current_dir:
398
1216
  print(f'cd {shlex.quote(project_path)}')
399
- print(f'claude -r {shlex.quote(session_id)}')
1217
+ # Set CLAUDE_CONFIG_DIR environment variable if custom path specified
1218
+ # (either via CLI arg or already set via env var)
1219
+ if claude_home or os.environ.get('CLAUDE_CONFIG_DIR'):
1220
+ expanded_home = str(get_claude_home(claude_home).absolute())
1221
+ print(f'CLAUDE_CONFIG_DIR={shlex.quote(expanded_home)} claude -r {shlex.quote(session_id)}')
1222
+ else:
1223
+ print(f'claude -r {shlex.quote(session_id)}')
400
1224
  return
401
1225
 
402
1226
  # Check if we need to change directory
@@ -439,7 +1263,14 @@ def resume_session(session_id: str, project_path: str, shell_mode: bool = False)
439
1263
  # Change directory if needed (won't persist after exit)
440
1264
  if change_dir and project_path != current_dir:
441
1265
  os.chdir(project_path)
442
-
1266
+
1267
+ # Set CLAUDE_CONFIG_DIR environment variable if custom path specified
1268
+ # (either via CLI arg or already set via env var)
1269
+ if claude_home or os.environ.get('CLAUDE_CONFIG_DIR'):
1270
+ # Get the resolved home directory (respects precedence)
1271
+ expanded_home = str(get_claude_home(claude_home).absolute())
1272
+ os.environ['CLAUDE_CONFIG_DIR'] = expanded_home
1273
+
443
1274
  # Execute claude
444
1275
  os.execvp("claude", ["claude", "-r", session_id])
445
1276
 
@@ -457,6 +1288,75 @@ def resume_session(session_id: str, project_path: str, shell_mode: bool = False)
457
1288
  sys.exit(1)
458
1289
 
459
1290
 
1291
+ def create_action_handler(claude_home: Optional[str] = None, nonlaunch_flag: Optional[dict] = None):
1292
+ """
1293
+ Create an action handler function for TUI/UI integration.
1294
+
1295
+ Args:
1296
+ claude_home: Optional Claude home directory
1297
+
1298
+ Returns:
1299
+ Function that handles session actions
1300
+ """
1301
+ def handle_session_action(
1302
+ session: Tuple, action: str, kwargs: Optional[dict] = None
1303
+ ) -> None:
1304
+ """Handle actions for a selected session."""
1305
+ kwargs = kwargs or {}
1306
+
1307
+ if isinstance(session, dict):
1308
+ session_id = session.get("session_id")
1309
+ project_path = session.get("cwd")
1310
+ else:
1311
+ session_id = session[0]
1312
+ project_path = session[6]
1313
+
1314
+ if action == "resume":
1315
+ resume_session(session_id, project_path, shell_mode=False, claude_home=claude_home)
1316
+ elif action == "suppress_resume":
1317
+ tools = kwargs.get("tools")
1318
+ threshold = kwargs.get("threshold")
1319
+ trim_assistant = kwargs.get("trim_assistant")
1320
+ if tools is None and threshold is None and trim_assistant is None:
1321
+ options = prompt_suppress_options()
1322
+ if not options:
1323
+ return
1324
+ tools, threshold, trim_assistant = options
1325
+ handle_suppress_resume_claude(
1326
+ session_id, project_path, tools, threshold or 500, trim_assistant, claude_home
1327
+ )
1328
+ elif action == "smart_trim_resume":
1329
+ handle_smart_trim_resume_claude(session_id, project_path, claude_home)
1330
+ elif action == "path":
1331
+ # handled in Node UI via RPC
1332
+ if nonlaunch_flag is not None:
1333
+ nonlaunch_flag["done"] = True
1334
+ nonlaunch_flag["session_id"] = session_id
1335
+ elif action == "copy":
1336
+ if nonlaunch_flag is not None:
1337
+ nonlaunch_flag["done"] = True
1338
+ nonlaunch_flag["session_id"] = session_id
1339
+ elif action == "clone":
1340
+ clone_session(session_id, project_path, shell_mode=False, claude_home=claude_home)
1341
+ elif action == "export":
1342
+ session_file_path = get_session_file_path(session_id, project_path, claude_home)
1343
+ handle_export_session(session_file_path)
1344
+ if nonlaunch_flag is not None:
1345
+ nonlaunch_flag["done"] = True
1346
+ nonlaunch_flag["session_id"] = session_id
1347
+ elif action == "continue":
1348
+ from claude_code_tools.session_utils import continue_with_options
1349
+ session_file_path = get_session_file_path(session_id, project_path, claude_home)
1350
+ continue_with_options(
1351
+ session_file_path,
1352
+ "claude",
1353
+ claude_home=claude_home,
1354
+ codex_home=None
1355
+ )
1356
+
1357
+ return handle_session_action
1358
+
1359
+
460
1360
  def main():
461
1361
  parser = argparse.ArgumentParser(
462
1362
  description="Search Claude Code session files by keywords",
@@ -477,7 +1377,9 @@ To persist directory changes when resuming sessions:
477
1377
  )
478
1378
  parser.add_argument(
479
1379
  "keywords",
480
- help="Comma-separated keywords to search for (case-insensitive)"
1380
+ nargs='?',
1381
+ default="",
1382
+ help="Comma-separated keywords to search for (case-insensitive). If omitted, shows all sessions."
481
1383
  )
482
1384
  parser.add_argument(
483
1385
  "-g", "--global",
@@ -500,63 +1402,299 @@ To persist directory changes when resuming sessions:
500
1402
  type=str,
501
1403
  help="Path to Claude home directory (default: ~/.claude)"
502
1404
  )
503
-
1405
+ parser.add_argument(
1406
+ "--original",
1407
+ action="store_true",
1408
+ help="Show only original sessions (excludes trimmed, continued, and sub-agent sessions)"
1409
+ )
1410
+ parser.add_argument(
1411
+ "--no-sub",
1412
+ action="store_true",
1413
+ help="Exclude sub-agent sessions from results"
1414
+ )
1415
+ parser.add_argument(
1416
+ "--no-trim",
1417
+ action="store_true",
1418
+ help="Exclude trimmed sessions from results"
1419
+ )
1420
+ parser.add_argument(
1421
+ "--no-roll",
1422
+ dest="no_cont", # Keep internal name for compatibility
1423
+ action="store_true",
1424
+ help="Exclude rollover sessions from results"
1425
+ )
1426
+ parser.add_argument(
1427
+ "--simple-ui",
1428
+ dest="simple_ui",
1429
+ action="store_true",
1430
+ help="Use simple Rich table UI instead of Node interactive UI"
1431
+ )
1432
+ parser.add_argument(
1433
+ "--min-lines",
1434
+ type=int,
1435
+ default=0,
1436
+ help="Only show sessions with at least this many lines (default: 0 = no minimum)"
1437
+ )
1438
+ parser.add_argument(
1439
+ "--before",
1440
+ type=str,
1441
+ help="Only show sessions modified before this time (inclusive). "
1442
+ "Formats: YYYYMMDD, YYYY-MM-DD, MM/DD/YY, with optional T or space + HH:MM:SS",
1443
+ )
1444
+ parser.add_argument(
1445
+ "--after",
1446
+ type=str,
1447
+ help="Only show sessions modified after this time (inclusive). "
1448
+ "Formats: YYYYMMDD, YYYY-MM-DD, MM/DD/YY, with optional T or space + HH:MM:SS",
1449
+ )
1450
+ parser.add_argument(
1451
+ "--no-ui",
1452
+ action="store_true",
1453
+ help="Skip interactive options menu and run search directly with CLI args",
1454
+ )
1455
+
504
1456
  args = parser.parse_args()
505
-
1457
+
1458
+ # Show interactive options UI unless --no-ui or --simple-ui
1459
+ if not args.no_ui and not args.simple_ui:
1460
+ initial_options = {
1461
+ "keywords": args.keywords or "",
1462
+ "global": getattr(args, 'global', False),
1463
+ "num_matches": args.num_matches,
1464
+ "original": args.original,
1465
+ "no_sub": args.no_sub,
1466
+ "no_trim": args.no_trim,
1467
+ "no_cont": args.no_cont,
1468
+ "min_lines": args.min_lines or "",
1469
+ "before": args.before or "",
1470
+ "after": args.after or "",
1471
+ }
1472
+ opts = run_find_options_ui(initial_options, variant="find-claude")
1473
+ if opts is None:
1474
+ sys.exit(0)
1475
+ # Update args with user's selections
1476
+ args.keywords = opts.get("keywords") or ""
1477
+ setattr(args, 'global', opts.get("global", False))
1478
+ args.num_matches = opts.get("num_matches", 10)
1479
+ args.original = opts.get("original", False)
1480
+ args.no_sub = opts.get("no_sub", False)
1481
+ args.no_trim = opts.get("no_trim", False)
1482
+ args.no_cont = opts.get("no_cont", False)
1483
+ args.min_lines = opts.get("min_lines") or 0
1484
+ args.before = opts.get("before")
1485
+ args.after = opts.get("after")
1486
+
1487
+ # Build and display equivalent CLI command
1488
+ cmd_parts = ["aichat find-claude"]
1489
+ if args.keywords:
1490
+ cmd_parts.append(f'"{args.keywords}"')
1491
+ if getattr(args, 'global'):
1492
+ cmd_parts.append("-g")
1493
+ if args.num_matches != 10:
1494
+ cmd_parts.append(f"-n {args.num_matches}")
1495
+ if args.original:
1496
+ cmd_parts.append("--original")
1497
+ if args.no_sub:
1498
+ cmd_parts.append("--no-sub")
1499
+ if args.no_trim:
1500
+ cmd_parts.append("--no-trim")
1501
+ if args.no_cont:
1502
+ cmd_parts.append("--no-roll")
1503
+ if args.min_lines:
1504
+ cmd_parts.append(f"--min-lines {args.min_lines}")
1505
+ if args.before:
1506
+ cmd_parts.append(f"--before {args.before}")
1507
+ if args.after:
1508
+ cmd_parts.append(f"--after {args.after}")
1509
+ cmd_parts.append("--no-ui")
1510
+ print(f"\n→ {' '.join(cmd_parts)}\n", file=sys.stderr)
1511
+
506
1512
  # Parse keywords
507
- keywords = [k.strip() for k in args.keywords.split(",") if k.strip()]
508
-
509
- if not keywords:
510
- print("Error: No keywords provided", file=sys.stderr)
511
- sys.exit(1)
512
-
1513
+ keywords = [k.strip() for k in args.keywords.split(",") if k.strip()] if args.keywords else []
1514
+
1515
+ # Display informational message about what session types are being shown
1516
+ if args.original:
1517
+ print("Showing: Original sessions only (excluding trimmed, rollover, and sub-agent sessions)", file=sys.stderr)
1518
+ else:
1519
+ # Build list of included/excluded types
1520
+ excluded_types = []
1521
+ if args.no_sub:
1522
+ excluded_types.append("sub-agent")
1523
+ if args.no_trim:
1524
+ excluded_types.append("trimmed")
1525
+ if args.no_cont:
1526
+ excluded_types.append("rollover")
1527
+
1528
+ if excluded_types:
1529
+ excluded_str = ", ".join(excluded_types)
1530
+ print(f"Showing: All sessions except {excluded_str}", file=sys.stderr)
1531
+ else:
1532
+ print("Showing: All session types (original, trimmed, rollover, and sub-agent)", file=sys.stderr)
1533
+ print("Tip: Use --no-sub, --no-trim, or --no-roll to exclude specific types", file=sys.stderr)
1534
+ print(file=sys.stderr) # Blank line for readability
1535
+
513
1536
  # Check if searching current project only
514
1537
  if not getattr(args, 'global'):
515
1538
  claude_dir = get_claude_project_dir(args.claude_home)
516
-
1539
+
517
1540
  if not claude_dir.exists():
518
1541
  print(f"No Claude project directory found for: {os.getcwd()}", file=sys.stderr)
519
1542
  print(f"Expected directory: {claude_dir}", file=sys.stderr)
520
1543
  sys.exit(1)
521
-
1544
+
522
1545
  # Find matching sessions
523
- matching_sessions = find_sessions(keywords, global_search=getattr(args, 'global'), claude_home=args.claude_home)
524
-
1546
+ matching_sessions = find_sessions(
1547
+ keywords,
1548
+ global_search=getattr(args, 'global'),
1549
+ claude_home=args.claude_home,
1550
+ original_only=args.original,
1551
+ no_sub=args.no_sub,
1552
+ no_trim=args.no_trim,
1553
+ no_cont=args.no_cont,
1554
+ )
1555
+
1556
+ # Filter by minimum lines if specified (line_count is at index 3 in tuple)
1557
+ if args.min_lines > 0:
1558
+ matching_sessions = [s for s in matching_sessions if s[3] >= args.min_lines]
1559
+
1560
+ # Filter by time bounds if specified (mod_time is at index 1 in tuple)
1561
+ if args.before or args.after:
1562
+ matching_sessions = filter_sessions_by_time(
1563
+ matching_sessions, before=args.before, after=args.after, time_index=1
1564
+ )
1565
+
525
1566
  if not matching_sessions:
526
1567
  scope = "all projects" if getattr(args, 'global') else "current project"
1568
+ keyword_msg = f" containing all keywords: {', '.join(keywords)}" if keywords else ""
527
1569
  if RICH_AVAILABLE and console and not args.shell:
528
- console.print(f"[yellow]No sessions found containing all keywords in {scope}:[/yellow] {', '.join(keywords)}")
1570
+ console.print(f"[yellow]No sessions found{keyword_msg} in {scope}[/yellow]")
529
1571
  else:
530
- print(f"No sessions found containing all keywords in {scope}: {', '.join(keywords)}", file=sys.stderr)
1572
+ print(f"No sessions found{keyword_msg} in {scope}", file=sys.stderr)
531
1573
  sys.exit(0)
532
1574
 
533
- # If we have rich and there are results, show interactive UI
534
- if RICH_AVAILABLE and console:
535
- result = display_interactive_ui(matching_sessions, keywords, stderr_mode=args.shell, num_matches=args.num_matches)
536
- if result:
537
- session_id, project_path = result
538
- resume_session(session_id, project_path, shell_mode=args.shell)
1575
+ # ============================================================
1576
+ # Default: Node UI (rich interactive interface)
1577
+ # --simple-ui: Falls back to Rich table UI
1578
+ # ============================================================
1579
+ nonlaunch_flag = {"done": False}
1580
+ action_handler = create_action_handler(args.claude_home, nonlaunch_flag=nonlaunch_flag)
1581
+ rpc_path = str(Path(__file__).parent / "action_rpc.py")
1582
+
1583
+ if not args.simple_ui:
1584
+ limited = [
1585
+ {
1586
+ "agent": "claude",
1587
+ "agent_display": "Claude",
1588
+ "session_id": s[0],
1589
+ "mod_time": s[1],
1590
+ "create_time": s[2],
1591
+ "lines": s[3],
1592
+ "project": s[4],
1593
+ "preview": s[5],
1594
+ "cwd": s[6],
1595
+ "branch": s[7] if len(s) > 7 else "",
1596
+ "file_path": get_session_file_path(s[0], s[6], args.claude_home),
1597
+ "claude_home": args.claude_home,
1598
+ "is_trimmed": s[8] if len(s) > 8 else False,
1599
+ "derivation_type": None,
1600
+ "is_sidechain": s[9] if len(s) > 9 else False,
1601
+ }
1602
+ for s in matching_sessions[: args.num_matches]
1603
+ ]
1604
+
1605
+ focus_id = None
1606
+ start_action = False
1607
+ while True:
1608
+ nonlaunch_flag["done"] = False
1609
+ run_node_menu_ui(
1610
+ limited,
1611
+ keywords,
1612
+ action_handler,
1613
+ stderr_mode=args.shell,
1614
+ focus_session_id=focus_id,
1615
+ start_action=start_action,
1616
+ rpc_path=rpc_path,
1617
+ )
1618
+ if nonlaunch_flag["done"]:
1619
+ choice = prompt_post_action()
1620
+ if choice == "back":
1621
+ focus_id = nonlaunch_flag.get("session_id")
1622
+ start_action = True
1623
+ continue
1624
+ break
1625
+ elif RICH_AVAILABLE and console:
1626
+ # Use Rich-based interactive UI
1627
+ selected_session = display_interactive_ui(matching_sessions, keywords, stderr_mode=args.shell, num_matches=args.num_matches)
1628
+ if selected_session:
1629
+ # Show action menu
1630
+ action = show_action_menu(selected_session)
1631
+ if not action:
1632
+ return
1633
+
1634
+ session_id = selected_session[0]
1635
+ project_path = selected_session[6] # Updated index after adding creation_time
1636
+
1637
+ # Perform selected action
1638
+ if action == "resume":
1639
+ resume_session(session_id, project_path, shell_mode=args.shell, claude_home=args.claude_home)
1640
+ elif action == "suppress_resume":
1641
+ # Prompt for suppress options
1642
+ options = prompt_suppress_options()
1643
+ if options:
1644
+ tools, threshold, trim_assistant = options
1645
+ handle_suppress_resume_claude(
1646
+ session_id, project_path, tools, threshold, trim_assistant, args.claude_home
1647
+ )
1648
+ elif action == "smart_trim_resume":
1649
+ # Smart trim using parallel agents
1650
+ handle_smart_trim_resume_claude(
1651
+ session_id, project_path, args.claude_home
1652
+ )
1653
+ elif action == "path":
1654
+ session_file_path = get_session_file_path(session_id, project_path, args.claude_home)
1655
+ print(f"\nSession file path:")
1656
+ print(session_file_path)
1657
+ elif action == "copy":
1658
+ session_file_path = get_session_file_path(session_id, project_path, args.claude_home)
1659
+ copy_session_file(session_file_path)
1660
+ elif action == "clone":
1661
+ clone_session(session_id, project_path, shell_mode=args.shell, claude_home=args.claude_home)
1662
+ elif action == "export":
1663
+ session_file_path = get_session_file_path(session_id, project_path, args.claude_home)
1664
+ handle_export_session(session_file_path)
1665
+ elif action == "continue":
1666
+ # Continue with context in fresh session
1667
+ from claude_code_tools.session_utils import continue_with_options
1668
+ session_file_path = get_session_file_path(session_id, project_path, args.claude_home)
1669
+ continue_with_options(
1670
+ session_file_path,
1671
+ "claude",
1672
+ claude_home=args.claude_home,
1673
+ codex_home=None
1674
+ )
539
1675
  else:
540
1676
  # Fallback: print session IDs as before
541
1677
  if not args.shell:
542
1678
  print("\nMatching sessions:")
543
- for idx, (session_id, mod_time, line_count, project_name, preview, project_path, git_branch) in enumerate(matching_sessions[:args.num_matches], 1):
544
- mod_date = datetime.fromtimestamp(mod_time).strftime('%Y-%m-%d %H:%M:%S')
1679
+ for idx, (session_id, mod_time, create_time, line_count, project_name, preview, project_path, git_branch) in enumerate(matching_sessions[:args.num_matches], 1):
1680
+ create_date = datetime.fromtimestamp(create_time).strftime('%m/%d')
1681
+ mod_date = datetime.fromtimestamp(mod_time).strftime('%m/%d %H:%M')
1682
+ date_display = f"{create_date} - {mod_date}"
545
1683
  branch_display = git_branch if git_branch else "N/A"
546
1684
  if getattr(args, 'global'):
547
- print(f"{idx}. {session_id} | {project_name} | {branch_display} | {mod_date} | {line_count} lines", file=sys.stderr if args.shell else sys.stdout)
1685
+ print(f"{idx}. {session_id} | {project_name} | {branch_display} | {date_display} | {line_count} lines", file=sys.stderr if args.shell else sys.stdout)
548
1686
  else:
549
- print(f"{idx}. {session_id} | {branch_display} | {mod_date} | {line_count} lines", file=sys.stderr if args.shell else sys.stdout)
550
-
1687
+ print(f"{idx}. {session_id} | {branch_display} | {date_display} | {line_count} lines", file=sys.stderr if args.shell else sys.stdout)
1688
+
551
1689
  if len(matching_sessions) > args.num_matches:
552
1690
  print(f"\n... and {len(matching_sessions) - args.num_matches} more sessions", file=sys.stderr if args.shell else sys.stdout)
553
-
1691
+
554
1692
  # Simple selection without rich
555
1693
  if len(matching_sessions) == 1:
556
1694
  if not args.shell:
557
1695
  print("\nOnly one match found. Resuming automatically...")
558
- session_id, _, _, _, _, project_path, _ = matching_sessions[0]
559
- resume_session(session_id, project_path, shell_mode=args.shell)
1696
+ session_id, _, _, _, _, _, project_path, _, _, _ = matching_sessions[0]
1697
+ resume_session(session_id, project_path, shell_mode=args.shell, claude_home=args.claude_home)
560
1698
  else:
561
1699
  try:
562
1700
  if args.shell:
@@ -566,16 +1704,16 @@ To persist directory changes when resuming sessions:
566
1704
  choice = sys.stdin.readline().strip()
567
1705
  else:
568
1706
  choice = input("\nEnter number to resume session (or Ctrl+C to cancel): ")
569
-
1707
+
570
1708
  # Handle empty input or EOF
571
1709
  if not choice:
572
1710
  print("Cancelled (EOF)", file=sys.stderr)
573
1711
  sys.exit(0)
574
-
1712
+
575
1713
  idx = int(choice) - 1
576
1714
  if 0 <= idx < min(args.num_matches, len(matching_sessions)):
577
- session_id, _, _, _, _, project_path, _ = matching_sessions[idx]
578
- resume_session(session_id, project_path, shell_mode=args.shell)
1715
+ session_id, _, _, _, _, _, project_path, _, _, _ = matching_sessions[idx]
1716
+ resume_session(session_id, project_path, shell_mode=args.shell, claude_home=args.claude_home)
579
1717
  else:
580
1718
  print("Invalid choice", file=sys.stderr)
581
1719
  sys.exit(1)
@@ -588,4 +1726,4 @@ To persist directory changes when resuming sessions:
588
1726
 
589
1727
 
590
1728
  if __name__ == "__main__":
591
- main()
1729
+ main()