claude-code-tools 0.2.0__py3-none-any.whl → 1.4.1__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 (1805) hide show
  1. claude_code_tools/__init__.py +1 -1
  2. claude_code_tools/action_rpc.py +407 -0
  3. claude_code_tools/aichat.py +2460 -0
  4. claude_code_tools/claude_continue.py +299 -0
  5. claude_code_tools/codex_continue.py +309 -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 +577 -0
  12. claude_code_tools/find_claude_session.py +1280 -118
  13. claude_code_tools/find_codex_session.py +946 -79
  14. claude_code_tools/find_original_session.py +134 -0
  15. claude_code_tools/find_session.py +1088 -0
  16. claude_code_tools/find_trimmed_sessions.py +259 -0
  17. claude_code_tools/gdoc2md.py +220 -0
  18. claude_code_tools/md2gdoc.py +549 -0
  19. claude_code_tools/node_menu_ui.py +406 -0
  20. claude_code_tools/search_index.py +1321 -0
  21. claude_code_tools/session_lineage.py +260 -0
  22. claude_code_tools/session_menu.py +187 -0
  23. claude_code_tools/session_menu_cli.py +448 -0
  24. claude_code_tools/session_utils.py +1313 -0
  25. claude_code_tools/smart_trim.py +424 -0
  26. claude_code_tools/smart_trim_core.py +616 -0
  27. claude_code_tools/tmux_cli_controller.py +55 -36
  28. claude_code_tools/trim_session.py +817 -0
  29. claude_code_tools/trim_session_claude.py +319 -0
  30. claude_code_tools/trim_session_codex.py +344 -0
  31. claude_code_tools-1.4.1.dist-info/METADATA +1113 -0
  32. claude_code_tools-1.4.1.dist-info/RECORD +1813 -0
  33. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.4.1.dist-info}/WHEEL +1 -1
  34. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.4.1.dist-info}/entry_points.txt +3 -2
  35. docs/lmsh.md +27 -5
  36. docs/local-llm-setup.md +286 -0
  37. docs/reddit-aichat-resume-v2.md +80 -0
  38. docs/reddit-aichat-resume.md +29 -0
  39. docs/reddit-aichat.md +79 -0
  40. docs/rollover-details.md +67 -0
  41. node_ui/action_config.js +72 -0
  42. node_ui/menu.js +2321 -0
  43. node_ui/node_modules/.bin/is-in-ci +5 -0
  44. node_ui/node_modules/.bin/loose-envify +16 -0
  45. node_ui/node_modules/.package-lock.json +714 -0
  46. node_ui/node_modules/@alcalzone/ansi-tokenize/README.md +248 -0
  47. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +11 -0
  48. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +41 -0
  49. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -0
  50. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.d.ts +6 -0
  51. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js +17 -0
  52. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js.map +1 -0
  53. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.d.ts +6 -0
  54. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js +7 -0
  55. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js.map +1 -0
  56. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.d.ts +5 -0
  57. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js +27 -0
  58. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js.map +1 -0
  59. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.d.ts +6 -0
  60. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js +38 -0
  61. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js.map +1 -0
  62. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +12 -0
  63. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +70 -0
  64. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -0
  65. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.d.ts +3 -0
  66. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js +11 -0
  67. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js.map +1 -0
  68. node_ui/node_modules/@alcalzone/ansi-tokenize/package.json +63 -0
  69. node_ui/node_modules/ansi-escapes/base.d.ts +292 -0
  70. node_ui/node_modules/ansi-escapes/base.js +198 -0
  71. node_ui/node_modules/ansi-escapes/index.d.ts +2 -0
  72. node_ui/node_modules/ansi-escapes/index.js +2 -0
  73. node_ui/node_modules/ansi-escapes/license +9 -0
  74. node_ui/node_modules/ansi-escapes/package.json +70 -0
  75. node_ui/node_modules/ansi-escapes/readme.md +284 -0
  76. node_ui/node_modules/ansi-regex/index.d.ts +33 -0
  77. node_ui/node_modules/ansi-regex/index.js +14 -0
  78. node_ui/node_modules/ansi-regex/license +9 -0
  79. node_ui/node_modules/ansi-regex/package.json +61 -0
  80. node_ui/node_modules/ansi-regex/readme.md +66 -0
  81. node_ui/node_modules/ansi-styles/index.d.ts +236 -0
  82. node_ui/node_modules/ansi-styles/index.js +223 -0
  83. node_ui/node_modules/ansi-styles/license +9 -0
  84. node_ui/node_modules/ansi-styles/package.json +54 -0
  85. node_ui/node_modules/ansi-styles/readme.md +173 -0
  86. node_ui/node_modules/auto-bind/index.d.ts +50 -0
  87. node_ui/node_modules/auto-bind/index.js +41 -0
  88. node_ui/node_modules/auto-bind/license +9 -0
  89. node_ui/node_modules/auto-bind/package.json +51 -0
  90. node_ui/node_modules/auto-bind/react.d.ts +26 -0
  91. node_ui/node_modules/auto-bind/react.js +28 -0
  92. node_ui/node_modules/auto-bind/readme.md +92 -0
  93. node_ui/node_modules/chalk/license +9 -0
  94. node_ui/node_modules/chalk/package.json +83 -0
  95. node_ui/node_modules/chalk/readme.md +325 -0
  96. node_ui/node_modules/chalk/source/index.d.ts +320 -0
  97. node_ui/node_modules/chalk/source/index.js +225 -0
  98. node_ui/node_modules/chalk/source/utilities.js +33 -0
  99. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  100. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  101. node_ui/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  102. node_ui/node_modules/chalk/source/vendor/supports-color/browser.js +30 -0
  103. node_ui/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  104. node_ui/node_modules/chalk/source/vendor/supports-color/index.js +182 -0
  105. node_ui/node_modules/cli-boxes/boxes.json +82 -0
  106. node_ui/node_modules/cli-boxes/index.d.ts +127 -0
  107. node_ui/node_modules/cli-boxes/index.js +6 -0
  108. node_ui/node_modules/cli-boxes/license +9 -0
  109. node_ui/node_modules/cli-boxes/package.json +42 -0
  110. node_ui/node_modules/cli-boxes/readme.md +115 -0
  111. node_ui/node_modules/cli-cursor/index.d.ts +47 -0
  112. node_ui/node_modules/cli-cursor/index.js +39 -0
  113. node_ui/node_modules/cli-cursor/license +9 -0
  114. node_ui/node_modules/cli-cursor/package.json +49 -0
  115. node_ui/node_modules/cli-cursor/readme.md +51 -0
  116. node_ui/node_modules/cli-truncate/index.d.ts +116 -0
  117. node_ui/node_modules/cli-truncate/index.js +99 -0
  118. node_ui/node_modules/cli-truncate/license +9 -0
  119. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/index.js +105 -0
  120. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/license +10 -0
  121. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/package.json +53 -0
  122. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/readme.md +66 -0
  123. node_ui/node_modules/cli-truncate/package.json +51 -0
  124. node_ui/node_modules/cli-truncate/readme.md +150 -0
  125. node_ui/node_modules/code-excerpt/dist/index.d.ts +9 -0
  126. node_ui/node_modules/code-excerpt/dist/index.js +27 -0
  127. node_ui/node_modules/code-excerpt/license +21 -0
  128. node_ui/node_modules/code-excerpt/package.json +43 -0
  129. node_ui/node_modules/code-excerpt/readme.md +65 -0
  130. node_ui/node_modules/convert-to-spaces/dist/index.d.ts +2 -0
  131. node_ui/node_modules/convert-to-spaces/dist/index.js +4 -0
  132. node_ui/node_modules/convert-to-spaces/license +21 -0
  133. node_ui/node_modules/convert-to-spaces/package.json +40 -0
  134. node_ui/node_modules/convert-to-spaces/readme.md +39 -0
  135. node_ui/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  136. node_ui/node_modules/emoji-regex/README.md +107 -0
  137. node_ui/node_modules/emoji-regex/index.d.ts +3 -0
  138. node_ui/node_modules/emoji-regex/index.js +4 -0
  139. node_ui/node_modules/emoji-regex/index.mjs +4 -0
  140. node_ui/node_modules/emoji-regex/package.json +45 -0
  141. node_ui/node_modules/environment/index.d.ts +74 -0
  142. node_ui/node_modules/environment/index.js +47 -0
  143. node_ui/node_modules/environment/license +9 -0
  144. node_ui/node_modules/environment/package.json +74 -0
  145. node_ui/node_modules/environment/readme.md +94 -0
  146. node_ui/node_modules/escape-string-regexp/index.d.ts +16 -0
  147. node_ui/node_modules/escape-string-regexp/index.js +11 -0
  148. node_ui/node_modules/escape-string-regexp/license +9 -0
  149. node_ui/node_modules/escape-string-regexp/package.json +40 -0
  150. node_ui/node_modules/escape-string-regexp/readme.md +34 -0
  151. node_ui/node_modules/figures/index.d.ts +269 -0
  152. node_ui/node_modules/figures/index.js +322 -0
  153. node_ui/node_modules/figures/license +9 -0
  154. node_ui/node_modules/figures/package.json +46 -0
  155. node_ui/node_modules/figures/readme.md +328 -0
  156. node_ui/node_modules/get-east-asian-width/index.d.ts +60 -0
  157. node_ui/node_modules/get-east-asian-width/index.js +30 -0
  158. node_ui/node_modules/get-east-asian-width/license +9 -0
  159. node_ui/node_modules/get-east-asian-width/lookup.js +403 -0
  160. node_ui/node_modules/get-east-asian-width/package.json +70 -0
  161. node_ui/node_modules/get-east-asian-width/readme.md +65 -0
  162. node_ui/node_modules/indent-string/index.d.ts +38 -0
  163. node_ui/node_modules/indent-string/index.js +38 -0
  164. node_ui/node_modules/indent-string/license +9 -0
  165. node_ui/node_modules/indent-string/package.json +40 -0
  166. node_ui/node_modules/indent-string/readme.md +73 -0
  167. node_ui/node_modules/ink/build/apply-styles.js +175 -0
  168. node_ui/node_modules/ink/build/build-layout.js +77 -0
  169. node_ui/node_modules/ink/build/calculate-wrapped-text.js +53 -0
  170. node_ui/node_modules/ink/build/colorize.d.ts +3 -0
  171. node_ui/node_modules/ink/build/colorize.js +48 -0
  172. node_ui/node_modules/ink/build/colorize.js.map +1 -0
  173. node_ui/node_modules/ink/build/components/App.d.ts +61 -0
  174. node_ui/node_modules/ink/build/components/App.js +286 -0
  175. node_ui/node_modules/ink/build/components/App.js.map +1 -0
  176. node_ui/node_modules/ink/build/components/AppContext.d.ts +12 -0
  177. node_ui/node_modules/ink/build/components/AppContext.js +11 -0
  178. node_ui/node_modules/ink/build/components/AppContext.js.map +1 -0
  179. node_ui/node_modules/ink/build/components/Box.d.ts +62 -0
  180. node_ui/node_modules/ink/build/components/Box.js +20 -0
  181. node_ui/node_modules/ink/build/components/Box.js.map +1 -0
  182. node_ui/node_modules/ink/build/components/Color.js +62 -0
  183. node_ui/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
  184. node_ui/node_modules/ink/build/components/ErrorOverview.js +79 -0
  185. node_ui/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
  186. node_ui/node_modules/ink/build/components/FocusContext.d.ts +17 -0
  187. node_ui/node_modules/ink/build/components/FocusContext.js +17 -0
  188. node_ui/node_modules/ink/build/components/FocusContext.js.map +1 -0
  189. node_ui/node_modules/ink/build/components/Newline.d.ts +13 -0
  190. node_ui/node_modules/ink/build/components/Newline.js +8 -0
  191. node_ui/node_modules/ink/build/components/Newline.js.map +1 -0
  192. node_ui/node_modules/ink/build/components/Spacer.d.ts +6 -0
  193. node_ui/node_modules/ink/build/components/Spacer.js +10 -0
  194. node_ui/node_modules/ink/build/components/Spacer.js.map +1 -0
  195. node_ui/node_modules/ink/build/components/Static.d.ts +31 -0
  196. node_ui/node_modules/ink/build/components/Static.js +33 -0
  197. node_ui/node_modules/ink/build/components/Static.js.map +1 -0
  198. node_ui/node_modules/ink/build/components/StderrContext.d.ts +19 -0
  199. node_ui/node_modules/ink/build/components/StderrContext.js +13 -0
  200. node_ui/node_modules/ink/build/components/StderrContext.js.map +1 -0
  201. node_ui/node_modules/ink/build/components/StdinContext.d.ts +26 -0
  202. node_ui/node_modules/ink/build/components/StdinContext.js +19 -0
  203. node_ui/node_modules/ink/build/components/StdinContext.js.map +1 -0
  204. node_ui/node_modules/ink/build/components/StdoutContext.d.ts +19 -0
  205. node_ui/node_modules/ink/build/components/StdoutContext.js +13 -0
  206. node_ui/node_modules/ink/build/components/StdoutContext.js.map +1 -0
  207. node_ui/node_modules/ink/build/components/Text.d.ts +49 -0
  208. node_ui/node_modules/ink/build/components/Text.js +40 -0
  209. node_ui/node_modules/ink/build/components/Text.js.map +1 -0
  210. node_ui/node_modules/ink/build/components/Transform.d.ts +15 -0
  211. node_ui/node_modules/ink/build/components/Transform.js +14 -0
  212. node_ui/node_modules/ink/build/components/Transform.js.map +1 -0
  213. node_ui/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
  214. node_ui/node_modules/ink/build/devtools-window-polyfill.js +64 -0
  215. node_ui/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
  216. node_ui/node_modules/ink/build/devtools.d.ts +1 -0
  217. node_ui/node_modules/ink/build/devtools.js +9 -0
  218. node_ui/node_modules/ink/build/devtools.js.map +1 -0
  219. node_ui/node_modules/ink/build/dom.d.ts +42 -0
  220. node_ui/node_modules/ink/build/dom.js +117 -0
  221. node_ui/node_modules/ink/build/dom.js.map +1 -0
  222. node_ui/node_modules/ink/build/experimental/apply-style.js +140 -0
  223. node_ui/node_modules/ink/build/experimental/dom.js +123 -0
  224. node_ui/node_modules/ink/build/experimental/output.js +91 -0
  225. node_ui/node_modules/ink/build/experimental/reconciler.js +141 -0
  226. node_ui/node_modules/ink/build/experimental/renderer.js +81 -0
  227. node_ui/node_modules/ink/build/get-max-width.d.ts +3 -0
  228. node_ui/node_modules/ink/build/get-max-width.js +10 -0
  229. node_ui/node_modules/ink/build/get-max-width.js.map +1 -0
  230. node_ui/node_modules/ink/build/hooks/use-app.d.ts +5 -0
  231. node_ui/node_modules/ink/build/hooks/use-app.js +8 -0
  232. node_ui/node_modules/ink/build/hooks/use-app.js.map +1 -0
  233. node_ui/node_modules/ink/build/hooks/use-focus-manager.d.ts +34 -0
  234. node_ui/node_modules/ink/build/hooks/use-focus-manager.js +18 -0
  235. node_ui/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
  236. node_ui/node_modules/ink/build/hooks/use-focus.d.ts +34 -0
  237. node_ui/node_modules/ink/build/hooks/use-focus.js +47 -0
  238. node_ui/node_modules/ink/build/hooks/use-focus.js.map +1 -0
  239. node_ui/node_modules/ink/build/hooks/use-input.d.ts +97 -0
  240. node_ui/node_modules/ink/build/hooks/use-input.js +96 -0
  241. node_ui/node_modules/ink/build/hooks/use-input.js.map +1 -0
  242. node_ui/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
  243. node_ui/node_modules/ink/build/hooks/use-stderr.js +8 -0
  244. node_ui/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
  245. node_ui/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
  246. node_ui/node_modules/ink/build/hooks/use-stdin.js +8 -0
  247. node_ui/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
  248. node_ui/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
  249. node_ui/node_modules/ink/build/hooks/use-stdout.js +8 -0
  250. node_ui/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
  251. node_ui/node_modules/ink/build/hooks/useInput.js +38 -0
  252. node_ui/node_modules/ink/build/index.d.ts +27 -0
  253. node_ui/node_modules/ink/build/index.js +16 -0
  254. node_ui/node_modules/ink/build/index.js.map +1 -0
  255. node_ui/node_modules/ink/build/ink.d.ts +38 -0
  256. node_ui/node_modules/ink/build/ink.js +235 -0
  257. node_ui/node_modules/ink/build/ink.js.map +1 -0
  258. node_ui/node_modules/ink/build/instance.js +205 -0
  259. node_ui/node_modules/ink/build/instances.d.ts +4 -0
  260. node_ui/node_modules/ink/build/instances.js +8 -0
  261. node_ui/node_modules/ink/build/instances.js.map +1 -0
  262. node_ui/node_modules/ink/build/log-update.d.ts +13 -0
  263. node_ui/node_modules/ink/build/log-update.js +37 -0
  264. node_ui/node_modules/ink/build/log-update.js.map +1 -0
  265. node_ui/node_modules/ink/build/measure-element.d.ts +16 -0
  266. node_ui/node_modules/ink/build/measure-element.js +9 -0
  267. node_ui/node_modules/ink/build/measure-element.js.map +1 -0
  268. node_ui/node_modules/ink/build/measure-text.d.ts +6 -0
  269. node_ui/node_modules/ink/build/measure-text.js +20 -0
  270. node_ui/node_modules/ink/build/measure-text.js.map +1 -0
  271. node_ui/node_modules/ink/build/output.d.ts +35 -0
  272. node_ui/node_modules/ink/build/output.js +148 -0
  273. node_ui/node_modules/ink/build/output.js.map +1 -0
  274. node_ui/node_modules/ink/build/parse-keypress.d.ts +15 -0
  275. node_ui/node_modules/ink/build/parse-keypress.js +225 -0
  276. node_ui/node_modules/ink/build/parse-keypress.js.map +1 -0
  277. node_ui/node_modules/ink/build/reconciler.d.ts +4 -0
  278. node_ui/node_modules/ink/build/reconciler.js +219 -0
  279. node_ui/node_modules/ink/build/reconciler.js.map +1 -0
  280. node_ui/node_modules/ink/build/render-border.d.ts +4 -0
  281. node_ui/node_modules/ink/build/render-border.js +73 -0
  282. node_ui/node_modules/ink/build/render-border.js.map +1 -0
  283. node_ui/node_modules/ink/build/render-node-to-output.d.ts +10 -0
  284. node_ui/node_modules/ink/build/render-node-to-output.js +99 -0
  285. node_ui/node_modules/ink/build/render-node-to-output.js.map +1 -0
  286. node_ui/node_modules/ink/build/render.d.ts +68 -0
  287. node_ui/node_modules/ink/build/render.js +48 -0
  288. node_ui/node_modules/ink/build/render.js.map +1 -0
  289. node_ui/node_modules/ink/build/renderer.d.ts +8 -0
  290. node_ui/node_modules/ink/build/renderer.js +36 -0
  291. node_ui/node_modules/ink/build/renderer.js.map +1 -0
  292. node_ui/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
  293. node_ui/node_modules/ink/build/squash-text-nodes.js +35 -0
  294. node_ui/node_modules/ink/build/squash-text-nodes.js.map +1 -0
  295. node_ui/node_modules/ink/build/styles.d.ts +243 -0
  296. node_ui/node_modules/ink/build/styles.js +229 -0
  297. node_ui/node_modules/ink/build/styles.js.map +1 -0
  298. node_ui/node_modules/ink/build/wrap-text.d.ts +3 -0
  299. node_ui/node_modules/ink/build/wrap-text.js +31 -0
  300. node_ui/node_modules/ink/build/wrap-text.js.map +1 -0
  301. node_ui/node_modules/ink/license +9 -0
  302. node_ui/node_modules/ink/package.json +197 -0
  303. node_ui/node_modules/ink/readme.md +2153 -0
  304. node_ui/node_modules/ink-select-input/build/Indicator.d.ts +6 -0
  305. node_ui/node_modules/ink-select-input/build/Indicator.js +8 -0
  306. node_ui/node_modules/ink-select-input/build/Indicator.js.map +1 -0
  307. node_ui/node_modules/ink-select-input/build/Item.d.ts +7 -0
  308. node_ui/node_modules/ink-select-input/build/Item.js +7 -0
  309. node_ui/node_modules/ink-select-input/build/Item.js.map +1 -0
  310. node_ui/node_modules/ink-select-input/build/SelectInput.d.ts +49 -0
  311. node_ui/node_modules/ink-select-input/build/SelectInput.js +83 -0
  312. node_ui/node_modules/ink-select-input/build/SelectInput.js.map +1 -0
  313. node_ui/node_modules/ink-select-input/build/index.d.ts +3 -0
  314. node_ui/node_modules/ink-select-input/build/index.js +4 -0
  315. node_ui/node_modules/ink-select-input/build/index.js.map +1 -0
  316. node_ui/node_modules/ink-select-input/license +9 -0
  317. node_ui/node_modules/ink-select-input/node_modules/figures/index.d.ts +279 -0
  318. node_ui/node_modules/ink-select-input/node_modules/figures/index.js +292 -0
  319. node_ui/node_modules/ink-select-input/node_modules/figures/license +9 -0
  320. node_ui/node_modules/ink-select-input/node_modules/figures/package.json +49 -0
  321. node_ui/node_modules/ink-select-input/node_modules/figures/readme.md +337 -0
  322. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.d.ts +12 -0
  323. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.js +21 -0
  324. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/license +9 -0
  325. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/package.json +47 -0
  326. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/readme.md +35 -0
  327. node_ui/node_modules/ink-select-input/package.json +83 -0
  328. node_ui/node_modules/ink-select-input/readme.md +98 -0
  329. node_ui/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  330. node_ui/node_modules/is-fullwidth-code-point/index.js +40 -0
  331. node_ui/node_modules/is-fullwidth-code-point/license +9 -0
  332. node_ui/node_modules/is-fullwidth-code-point/package.json +45 -0
  333. node_ui/node_modules/is-fullwidth-code-point/readme.md +43 -0
  334. node_ui/node_modules/is-in-ci/cli.js +5 -0
  335. node_ui/node_modules/is-in-ci/index.d.ts +15 -0
  336. node_ui/node_modules/is-in-ci/index.js +11 -0
  337. node_ui/node_modules/is-in-ci/license +9 -0
  338. node_ui/node_modules/is-in-ci/package.json +48 -0
  339. node_ui/node_modules/is-in-ci/readme.md +43 -0
  340. node_ui/node_modules/is-unicode-supported/index.d.ts +12 -0
  341. node_ui/node_modules/is-unicode-supported/index.js +17 -0
  342. node_ui/node_modules/is-unicode-supported/license +9 -0
  343. node_ui/node_modules/is-unicode-supported/package.json +43 -0
  344. node_ui/node_modules/is-unicode-supported/readme.md +35 -0
  345. node_ui/node_modules/js-tokens/CHANGELOG.md +151 -0
  346. node_ui/node_modules/js-tokens/LICENSE +21 -0
  347. node_ui/node_modules/js-tokens/README.md +240 -0
  348. node_ui/node_modules/js-tokens/index.js +23 -0
  349. node_ui/node_modules/js-tokens/package.json +30 -0
  350. node_ui/node_modules/lodash/LICENSE +47 -0
  351. node_ui/node_modules/lodash/README.md +39 -0
  352. node_ui/node_modules/lodash/_DataView.js +7 -0
  353. node_ui/node_modules/lodash/_Hash.js +32 -0
  354. node_ui/node_modules/lodash/_LazyWrapper.js +28 -0
  355. node_ui/node_modules/lodash/_ListCache.js +32 -0
  356. node_ui/node_modules/lodash/_LodashWrapper.js +22 -0
  357. node_ui/node_modules/lodash/_Map.js +7 -0
  358. node_ui/node_modules/lodash/_MapCache.js +32 -0
  359. node_ui/node_modules/lodash/_Promise.js +7 -0
  360. node_ui/node_modules/lodash/_Set.js +7 -0
  361. node_ui/node_modules/lodash/_SetCache.js +27 -0
  362. node_ui/node_modules/lodash/_Stack.js +27 -0
  363. node_ui/node_modules/lodash/_Symbol.js +6 -0
  364. node_ui/node_modules/lodash/_Uint8Array.js +6 -0
  365. node_ui/node_modules/lodash/_WeakMap.js +7 -0
  366. node_ui/node_modules/lodash/_apply.js +21 -0
  367. node_ui/node_modules/lodash/_arrayAggregator.js +22 -0
  368. node_ui/node_modules/lodash/_arrayEach.js +22 -0
  369. node_ui/node_modules/lodash/_arrayEachRight.js +21 -0
  370. node_ui/node_modules/lodash/_arrayEvery.js +23 -0
  371. node_ui/node_modules/lodash/_arrayFilter.js +25 -0
  372. node_ui/node_modules/lodash/_arrayIncludes.js +17 -0
  373. node_ui/node_modules/lodash/_arrayIncludesWith.js +22 -0
  374. node_ui/node_modules/lodash/_arrayLikeKeys.js +49 -0
  375. node_ui/node_modules/lodash/_arrayMap.js +21 -0
  376. node_ui/node_modules/lodash/_arrayPush.js +20 -0
  377. node_ui/node_modules/lodash/_arrayReduce.js +26 -0
  378. node_ui/node_modules/lodash/_arrayReduceRight.js +24 -0
  379. node_ui/node_modules/lodash/_arraySample.js +15 -0
  380. node_ui/node_modules/lodash/_arraySampleSize.js +17 -0
  381. node_ui/node_modules/lodash/_arrayShuffle.js +15 -0
  382. node_ui/node_modules/lodash/_arraySome.js +23 -0
  383. node_ui/node_modules/lodash/_asciiSize.js +12 -0
  384. node_ui/node_modules/lodash/_asciiToArray.js +12 -0
  385. node_ui/node_modules/lodash/_asciiWords.js +15 -0
  386. node_ui/node_modules/lodash/_assignMergeValue.js +20 -0
  387. node_ui/node_modules/lodash/_assignValue.js +28 -0
  388. node_ui/node_modules/lodash/_assocIndexOf.js +21 -0
  389. node_ui/node_modules/lodash/_baseAggregator.js +21 -0
  390. node_ui/node_modules/lodash/_baseAssign.js +17 -0
  391. node_ui/node_modules/lodash/_baseAssignIn.js +17 -0
  392. node_ui/node_modules/lodash/_baseAssignValue.js +25 -0
  393. node_ui/node_modules/lodash/_baseAt.js +23 -0
  394. node_ui/node_modules/lodash/_baseClamp.js +22 -0
  395. node_ui/node_modules/lodash/_baseClone.js +166 -0
  396. node_ui/node_modules/lodash/_baseConforms.js +18 -0
  397. node_ui/node_modules/lodash/_baseConformsTo.js +27 -0
  398. node_ui/node_modules/lodash/_baseCreate.js +30 -0
  399. node_ui/node_modules/lodash/_baseDelay.js +21 -0
  400. node_ui/node_modules/lodash/_baseDifference.js +67 -0
  401. node_ui/node_modules/lodash/_baseEach.js +14 -0
  402. node_ui/node_modules/lodash/_baseEachRight.js +14 -0
  403. node_ui/node_modules/lodash/_baseEvery.js +21 -0
  404. node_ui/node_modules/lodash/_baseExtremum.js +32 -0
  405. node_ui/node_modules/lodash/_baseFill.js +32 -0
  406. node_ui/node_modules/lodash/_baseFilter.js +21 -0
  407. node_ui/node_modules/lodash/_baseFindIndex.js +24 -0
  408. node_ui/node_modules/lodash/_baseFindKey.js +23 -0
  409. node_ui/node_modules/lodash/_baseFlatten.js +38 -0
  410. node_ui/node_modules/lodash/_baseFor.js +16 -0
  411. node_ui/node_modules/lodash/_baseForOwn.js +16 -0
  412. node_ui/node_modules/lodash/_baseForOwnRight.js +16 -0
  413. node_ui/node_modules/lodash/_baseForRight.js +15 -0
  414. node_ui/node_modules/lodash/_baseFunctions.js +19 -0
  415. node_ui/node_modules/lodash/_baseGet.js +24 -0
  416. node_ui/node_modules/lodash/_baseGetAllKeys.js +20 -0
  417. node_ui/node_modules/lodash/_baseGetTag.js +28 -0
  418. node_ui/node_modules/lodash/_baseGt.js +14 -0
  419. node_ui/node_modules/lodash/_baseHas.js +19 -0
  420. node_ui/node_modules/lodash/_baseHasIn.js +13 -0
  421. node_ui/node_modules/lodash/_baseInRange.js +18 -0
  422. node_ui/node_modules/lodash/_baseIndexOf.js +20 -0
  423. node_ui/node_modules/lodash/_baseIndexOfWith.js +23 -0
  424. node_ui/node_modules/lodash/_baseIntersection.js +74 -0
  425. node_ui/node_modules/lodash/_baseInverter.js +21 -0
  426. node_ui/node_modules/lodash/_baseInvoke.js +24 -0
  427. node_ui/node_modules/lodash/_baseIsArguments.js +18 -0
  428. node_ui/node_modules/lodash/_baseIsArrayBuffer.js +17 -0
  429. node_ui/node_modules/lodash/_baseIsDate.js +18 -0
  430. node_ui/node_modules/lodash/_baseIsEqual.js +28 -0
  431. node_ui/node_modules/lodash/_baseIsEqualDeep.js +83 -0
  432. node_ui/node_modules/lodash/_baseIsMap.js +18 -0
  433. node_ui/node_modules/lodash/_baseIsMatch.js +62 -0
  434. node_ui/node_modules/lodash/_baseIsNaN.js +12 -0
  435. node_ui/node_modules/lodash/_baseIsNative.js +47 -0
  436. node_ui/node_modules/lodash/_baseIsRegExp.js +18 -0
  437. node_ui/node_modules/lodash/_baseIsSet.js +18 -0
  438. node_ui/node_modules/lodash/_baseIsTypedArray.js +60 -0
  439. node_ui/node_modules/lodash/_baseIteratee.js +31 -0
  440. node_ui/node_modules/lodash/_baseKeys.js +30 -0
  441. node_ui/node_modules/lodash/_baseKeysIn.js +33 -0
  442. node_ui/node_modules/lodash/_baseLodash.js +10 -0
  443. node_ui/node_modules/lodash/_baseLt.js +14 -0
  444. node_ui/node_modules/lodash/_baseMap.js +22 -0
  445. node_ui/node_modules/lodash/_baseMatches.js +22 -0
  446. node_ui/node_modules/lodash/_baseMatchesProperty.js +33 -0
  447. node_ui/node_modules/lodash/_baseMean.js +20 -0
  448. node_ui/node_modules/lodash/_baseMerge.js +42 -0
  449. node_ui/node_modules/lodash/_baseMergeDeep.js +94 -0
  450. node_ui/node_modules/lodash/_baseNth.js +20 -0
  451. node_ui/node_modules/lodash/_baseOrderBy.js +49 -0
  452. node_ui/node_modules/lodash/_basePick.js +19 -0
  453. node_ui/node_modules/lodash/_basePickBy.js +30 -0
  454. node_ui/node_modules/lodash/_baseProperty.js +14 -0
  455. node_ui/node_modules/lodash/_basePropertyDeep.js +16 -0
  456. node_ui/node_modules/lodash/_basePropertyOf.js +14 -0
  457. node_ui/node_modules/lodash/_basePullAll.js +51 -0
  458. node_ui/node_modules/lodash/_basePullAt.js +37 -0
  459. node_ui/node_modules/lodash/_baseRandom.js +18 -0
  460. node_ui/node_modules/lodash/_baseRange.js +28 -0
  461. node_ui/node_modules/lodash/_baseReduce.js +23 -0
  462. node_ui/node_modules/lodash/_baseRepeat.js +35 -0
  463. node_ui/node_modules/lodash/_baseRest.js +17 -0
  464. node_ui/node_modules/lodash/_baseSample.js +15 -0
  465. node_ui/node_modules/lodash/_baseSampleSize.js +18 -0
  466. node_ui/node_modules/lodash/_baseSet.js +51 -0
  467. node_ui/node_modules/lodash/_baseSetData.js +17 -0
  468. node_ui/node_modules/lodash/_baseSetToString.js +22 -0
  469. node_ui/node_modules/lodash/_baseShuffle.js +15 -0
  470. node_ui/node_modules/lodash/_baseSlice.js +31 -0
  471. node_ui/node_modules/lodash/_baseSome.js +22 -0
  472. node_ui/node_modules/lodash/_baseSortBy.js +21 -0
  473. node_ui/node_modules/lodash/_baseSortedIndex.js +42 -0
  474. node_ui/node_modules/lodash/_baseSortedIndexBy.js +67 -0
  475. node_ui/node_modules/lodash/_baseSortedUniq.js +30 -0
  476. node_ui/node_modules/lodash/_baseSum.js +24 -0
  477. node_ui/node_modules/lodash/_baseTimes.js +20 -0
  478. node_ui/node_modules/lodash/_baseToNumber.js +24 -0
  479. node_ui/node_modules/lodash/_baseToPairs.js +18 -0
  480. node_ui/node_modules/lodash/_baseToString.js +37 -0
  481. node_ui/node_modules/lodash/_baseTrim.js +19 -0
  482. node_ui/node_modules/lodash/_baseUnary.js +14 -0
  483. node_ui/node_modules/lodash/_baseUniq.js +72 -0
  484. node_ui/node_modules/lodash/_baseUnset.js +20 -0
  485. node_ui/node_modules/lodash/_baseUpdate.js +18 -0
  486. node_ui/node_modules/lodash/_baseValues.js +19 -0
  487. node_ui/node_modules/lodash/_baseWhile.js +26 -0
  488. node_ui/node_modules/lodash/_baseWrapperValue.js +25 -0
  489. node_ui/node_modules/lodash/_baseXor.js +36 -0
  490. node_ui/node_modules/lodash/_baseZipObject.js +23 -0
  491. node_ui/node_modules/lodash/_cacheHas.js +13 -0
  492. node_ui/node_modules/lodash/_castArrayLikeObject.js +14 -0
  493. node_ui/node_modules/lodash/_castFunction.js +14 -0
  494. node_ui/node_modules/lodash/_castPath.js +21 -0
  495. node_ui/node_modules/lodash/_castRest.js +14 -0
  496. node_ui/node_modules/lodash/_castSlice.js +18 -0
  497. node_ui/node_modules/lodash/_charsEndIndex.js +19 -0
  498. node_ui/node_modules/lodash/_charsStartIndex.js +20 -0
  499. node_ui/node_modules/lodash/_cloneArrayBuffer.js +16 -0
  500. node_ui/node_modules/lodash/_cloneBuffer.js +35 -0
  501. node_ui/node_modules/lodash/_cloneDataView.js +16 -0
  502. node_ui/node_modules/lodash/_cloneRegExp.js +17 -0
  503. node_ui/node_modules/lodash/_cloneSymbol.js +18 -0
  504. node_ui/node_modules/lodash/_cloneTypedArray.js +16 -0
  505. node_ui/node_modules/lodash/_compareAscending.js +41 -0
  506. node_ui/node_modules/lodash/_compareMultiple.js +44 -0
  507. node_ui/node_modules/lodash/_composeArgs.js +39 -0
  508. node_ui/node_modules/lodash/_composeArgsRight.js +41 -0
  509. node_ui/node_modules/lodash/_copyArray.js +20 -0
  510. node_ui/node_modules/lodash/_copyObject.js +40 -0
  511. node_ui/node_modules/lodash/_copySymbols.js +16 -0
  512. node_ui/node_modules/lodash/_copySymbolsIn.js +16 -0
  513. node_ui/node_modules/lodash/_coreJsData.js +6 -0
  514. node_ui/node_modules/lodash/_countHolders.js +21 -0
  515. node_ui/node_modules/lodash/_createAggregator.js +23 -0
  516. node_ui/node_modules/lodash/_createAssigner.js +37 -0
  517. node_ui/node_modules/lodash/_createBaseEach.js +32 -0
  518. node_ui/node_modules/lodash/_createBaseFor.js +25 -0
  519. node_ui/node_modules/lodash/_createBind.js +28 -0
  520. node_ui/node_modules/lodash/_createCaseFirst.js +33 -0
  521. node_ui/node_modules/lodash/_createCompounder.js +24 -0
  522. node_ui/node_modules/lodash/_createCtor.js +37 -0
  523. node_ui/node_modules/lodash/_createCurry.js +46 -0
  524. node_ui/node_modules/lodash/_createFind.js +25 -0
  525. node_ui/node_modules/lodash/_createFlow.js +78 -0
  526. node_ui/node_modules/lodash/_createHybrid.js +92 -0
  527. node_ui/node_modules/lodash/_createInverter.js +17 -0
  528. node_ui/node_modules/lodash/_createMathOperation.js +38 -0
  529. node_ui/node_modules/lodash/_createOver.js +27 -0
  530. node_ui/node_modules/lodash/_createPadding.js +33 -0
  531. node_ui/node_modules/lodash/_createPartial.js +43 -0
  532. node_ui/node_modules/lodash/_createRange.js +30 -0
  533. node_ui/node_modules/lodash/_createRecurry.js +56 -0
  534. node_ui/node_modules/lodash/_createRelationalOperation.js +20 -0
  535. node_ui/node_modules/lodash/_createRound.js +35 -0
  536. node_ui/node_modules/lodash/_createSet.js +19 -0
  537. node_ui/node_modules/lodash/_createToPairs.js +30 -0
  538. node_ui/node_modules/lodash/_createWrap.js +106 -0
  539. node_ui/node_modules/lodash/_customDefaultsAssignIn.js +29 -0
  540. node_ui/node_modules/lodash/_customDefaultsMerge.js +28 -0
  541. node_ui/node_modules/lodash/_customOmitClone.js +16 -0
  542. node_ui/node_modules/lodash/_deburrLetter.js +71 -0
  543. node_ui/node_modules/lodash/_defineProperty.js +11 -0
  544. node_ui/node_modules/lodash/_equalArrays.js +84 -0
  545. node_ui/node_modules/lodash/_equalByTag.js +112 -0
  546. node_ui/node_modules/lodash/_equalObjects.js +90 -0
  547. node_ui/node_modules/lodash/_escapeHtmlChar.js +21 -0
  548. node_ui/node_modules/lodash/_escapeStringChar.js +22 -0
  549. node_ui/node_modules/lodash/_flatRest.js +16 -0
  550. node_ui/node_modules/lodash/_freeGlobal.js +4 -0
  551. node_ui/node_modules/lodash/_getAllKeys.js +16 -0
  552. node_ui/node_modules/lodash/_getAllKeysIn.js +17 -0
  553. node_ui/node_modules/lodash/_getData.js +15 -0
  554. node_ui/node_modules/lodash/_getFuncName.js +31 -0
  555. node_ui/node_modules/lodash/_getHolder.js +13 -0
  556. node_ui/node_modules/lodash/_getMapData.js +18 -0
  557. node_ui/node_modules/lodash/_getMatchData.js +24 -0
  558. node_ui/node_modules/lodash/_getNative.js +17 -0
  559. node_ui/node_modules/lodash/_getPrototype.js +6 -0
  560. node_ui/node_modules/lodash/_getRawTag.js +46 -0
  561. node_ui/node_modules/lodash/_getSymbols.js +30 -0
  562. node_ui/node_modules/lodash/_getSymbolsIn.js +25 -0
  563. node_ui/node_modules/lodash/_getTag.js +58 -0
  564. node_ui/node_modules/lodash/_getValue.js +13 -0
  565. node_ui/node_modules/lodash/_getView.js +33 -0
  566. node_ui/node_modules/lodash/_getWrapDetails.js +17 -0
  567. node_ui/node_modules/lodash/_hasPath.js +39 -0
  568. node_ui/node_modules/lodash/_hasUnicode.js +26 -0
  569. node_ui/node_modules/lodash/_hasUnicodeWord.js +15 -0
  570. node_ui/node_modules/lodash/_hashClear.js +15 -0
  571. node_ui/node_modules/lodash/_hashDelete.js +17 -0
  572. node_ui/node_modules/lodash/_hashGet.js +30 -0
  573. node_ui/node_modules/lodash/_hashHas.js +23 -0
  574. node_ui/node_modules/lodash/_hashSet.js +23 -0
  575. node_ui/node_modules/lodash/_initCloneArray.js +26 -0
  576. node_ui/node_modules/lodash/_initCloneByTag.js +77 -0
  577. node_ui/node_modules/lodash/_initCloneObject.js +18 -0
  578. node_ui/node_modules/lodash/_insertWrapDetails.js +23 -0
  579. node_ui/node_modules/lodash/_isFlattenable.js +20 -0
  580. node_ui/node_modules/lodash/_isIndex.js +25 -0
  581. node_ui/node_modules/lodash/_isIterateeCall.js +30 -0
  582. node_ui/node_modules/lodash/_isKey.js +29 -0
  583. node_ui/node_modules/lodash/_isKeyable.js +15 -0
  584. node_ui/node_modules/lodash/_isLaziable.js +28 -0
  585. node_ui/node_modules/lodash/_isMaskable.js +14 -0
  586. node_ui/node_modules/lodash/_isMasked.js +20 -0
  587. node_ui/node_modules/lodash/_isPrototype.js +18 -0
  588. node_ui/node_modules/lodash/_isStrictComparable.js +15 -0
  589. node_ui/node_modules/lodash/_iteratorToArray.js +18 -0
  590. node_ui/node_modules/lodash/_lazyClone.js +23 -0
  591. node_ui/node_modules/lodash/_lazyReverse.js +23 -0
  592. node_ui/node_modules/lodash/_lazyValue.js +69 -0
  593. node_ui/node_modules/lodash/_listCacheClear.js +13 -0
  594. node_ui/node_modules/lodash/_listCacheDelete.js +35 -0
  595. node_ui/node_modules/lodash/_listCacheGet.js +19 -0
  596. node_ui/node_modules/lodash/_listCacheHas.js +16 -0
  597. node_ui/node_modules/lodash/_listCacheSet.js +26 -0
  598. node_ui/node_modules/lodash/_mapCacheClear.js +21 -0
  599. node_ui/node_modules/lodash/_mapCacheDelete.js +18 -0
  600. node_ui/node_modules/lodash/_mapCacheGet.js +16 -0
  601. node_ui/node_modules/lodash/_mapCacheHas.js +16 -0
  602. node_ui/node_modules/lodash/_mapCacheSet.js +22 -0
  603. node_ui/node_modules/lodash/_mapToArray.js +18 -0
  604. node_ui/node_modules/lodash/_matchesStrictComparable.js +20 -0
  605. node_ui/node_modules/lodash/_memoizeCapped.js +26 -0
  606. node_ui/node_modules/lodash/_mergeData.js +90 -0
  607. node_ui/node_modules/lodash/_metaMap.js +6 -0
  608. node_ui/node_modules/lodash/_nativeCreate.js +6 -0
  609. node_ui/node_modules/lodash/_nativeKeys.js +6 -0
  610. node_ui/node_modules/lodash/_nativeKeysIn.js +20 -0
  611. node_ui/node_modules/lodash/_nodeUtil.js +30 -0
  612. node_ui/node_modules/lodash/_objectToString.js +22 -0
  613. node_ui/node_modules/lodash/_overArg.js +15 -0
  614. node_ui/node_modules/lodash/_overRest.js +36 -0
  615. node_ui/node_modules/lodash/_parent.js +16 -0
  616. node_ui/node_modules/lodash/_reEscape.js +4 -0
  617. node_ui/node_modules/lodash/_reEvaluate.js +4 -0
  618. node_ui/node_modules/lodash/_reInterpolate.js +4 -0
  619. node_ui/node_modules/lodash/_realNames.js +4 -0
  620. node_ui/node_modules/lodash/_reorder.js +29 -0
  621. node_ui/node_modules/lodash/_replaceHolders.js +29 -0
  622. node_ui/node_modules/lodash/_root.js +9 -0
  623. node_ui/node_modules/lodash/_safeGet.js +21 -0
  624. node_ui/node_modules/lodash/_setCacheAdd.js +19 -0
  625. node_ui/node_modules/lodash/_setCacheHas.js +14 -0
  626. node_ui/node_modules/lodash/_setData.js +20 -0
  627. node_ui/node_modules/lodash/_setToArray.js +18 -0
  628. node_ui/node_modules/lodash/_setToPairs.js +18 -0
  629. node_ui/node_modules/lodash/_setToString.js +14 -0
  630. node_ui/node_modules/lodash/_setWrapToString.js +21 -0
  631. node_ui/node_modules/lodash/_shortOut.js +37 -0
  632. node_ui/node_modules/lodash/_shuffleSelf.js +28 -0
  633. node_ui/node_modules/lodash/_stackClear.js +15 -0
  634. node_ui/node_modules/lodash/_stackDelete.js +18 -0
  635. node_ui/node_modules/lodash/_stackGet.js +14 -0
  636. node_ui/node_modules/lodash/_stackHas.js +14 -0
  637. node_ui/node_modules/lodash/_stackSet.js +34 -0
  638. node_ui/node_modules/lodash/_strictIndexOf.js +23 -0
  639. node_ui/node_modules/lodash/_strictLastIndexOf.js +21 -0
  640. node_ui/node_modules/lodash/_stringSize.js +18 -0
  641. node_ui/node_modules/lodash/_stringToArray.js +18 -0
  642. node_ui/node_modules/lodash/_stringToPath.js +27 -0
  643. node_ui/node_modules/lodash/_toKey.js +21 -0
  644. node_ui/node_modules/lodash/_toSource.js +26 -0
  645. node_ui/node_modules/lodash/_trimmedEndIndex.js +19 -0
  646. node_ui/node_modules/lodash/_unescapeHtmlChar.js +21 -0
  647. node_ui/node_modules/lodash/_unicodeSize.js +44 -0
  648. node_ui/node_modules/lodash/_unicodeToArray.js +40 -0
  649. node_ui/node_modules/lodash/_unicodeWords.js +69 -0
  650. node_ui/node_modules/lodash/_updateWrapDetails.js +46 -0
  651. node_ui/node_modules/lodash/_wrapperClone.js +23 -0
  652. node_ui/node_modules/lodash/add.js +22 -0
  653. node_ui/node_modules/lodash/after.js +42 -0
  654. node_ui/node_modules/lodash/array.js +67 -0
  655. node_ui/node_modules/lodash/ary.js +29 -0
  656. node_ui/node_modules/lodash/assign.js +58 -0
  657. node_ui/node_modules/lodash/assignIn.js +40 -0
  658. node_ui/node_modules/lodash/assignInWith.js +38 -0
  659. node_ui/node_modules/lodash/assignWith.js +37 -0
  660. node_ui/node_modules/lodash/at.js +23 -0
  661. node_ui/node_modules/lodash/attempt.js +35 -0
  662. node_ui/node_modules/lodash/before.js +40 -0
  663. node_ui/node_modules/lodash/bind.js +57 -0
  664. node_ui/node_modules/lodash/bindAll.js +41 -0
  665. node_ui/node_modules/lodash/bindKey.js +68 -0
  666. node_ui/node_modules/lodash/camelCase.js +29 -0
  667. node_ui/node_modules/lodash/capitalize.js +23 -0
  668. node_ui/node_modules/lodash/castArray.js +44 -0
  669. node_ui/node_modules/lodash/ceil.js +26 -0
  670. node_ui/node_modules/lodash/chain.js +38 -0
  671. node_ui/node_modules/lodash/chunk.js +50 -0
  672. node_ui/node_modules/lodash/clamp.js +39 -0
  673. node_ui/node_modules/lodash/clone.js +36 -0
  674. node_ui/node_modules/lodash/cloneDeep.js +29 -0
  675. node_ui/node_modules/lodash/cloneDeepWith.js +40 -0
  676. node_ui/node_modules/lodash/cloneWith.js +42 -0
  677. node_ui/node_modules/lodash/collection.js +30 -0
  678. node_ui/node_modules/lodash/commit.js +33 -0
  679. node_ui/node_modules/lodash/compact.js +31 -0
  680. node_ui/node_modules/lodash/concat.js +43 -0
  681. node_ui/node_modules/lodash/cond.js +60 -0
  682. node_ui/node_modules/lodash/conforms.js +35 -0
  683. node_ui/node_modules/lodash/conformsTo.js +32 -0
  684. node_ui/node_modules/lodash/constant.js +26 -0
  685. node_ui/node_modules/lodash/core.js +3877 -0
  686. node_ui/node_modules/lodash/core.min.js +29 -0
  687. node_ui/node_modules/lodash/countBy.js +40 -0
  688. node_ui/node_modules/lodash/create.js +43 -0
  689. node_ui/node_modules/lodash/curry.js +57 -0
  690. node_ui/node_modules/lodash/curryRight.js +54 -0
  691. node_ui/node_modules/lodash/date.js +3 -0
  692. node_ui/node_modules/lodash/debounce.js +191 -0
  693. node_ui/node_modules/lodash/deburr.js +45 -0
  694. node_ui/node_modules/lodash/defaultTo.js +25 -0
  695. node_ui/node_modules/lodash/defaults.js +64 -0
  696. node_ui/node_modules/lodash/defaultsDeep.js +30 -0
  697. node_ui/node_modules/lodash/defer.js +26 -0
  698. node_ui/node_modules/lodash/delay.js +28 -0
  699. node_ui/node_modules/lodash/difference.js +33 -0
  700. node_ui/node_modules/lodash/differenceBy.js +44 -0
  701. node_ui/node_modules/lodash/differenceWith.js +40 -0
  702. node_ui/node_modules/lodash/divide.js +22 -0
  703. node_ui/node_modules/lodash/drop.js +38 -0
  704. node_ui/node_modules/lodash/dropRight.js +39 -0
  705. node_ui/node_modules/lodash/dropRightWhile.js +45 -0
  706. node_ui/node_modules/lodash/dropWhile.js +45 -0
  707. node_ui/node_modules/lodash/each.js +1 -0
  708. node_ui/node_modules/lodash/eachRight.js +1 -0
  709. node_ui/node_modules/lodash/endsWith.js +43 -0
  710. node_ui/node_modules/lodash/entries.js +1 -0
  711. node_ui/node_modules/lodash/entriesIn.js +1 -0
  712. node_ui/node_modules/lodash/eq.js +37 -0
  713. node_ui/node_modules/lodash/escape.js +43 -0
  714. node_ui/node_modules/lodash/escapeRegExp.js +32 -0
  715. node_ui/node_modules/lodash/every.js +56 -0
  716. node_ui/node_modules/lodash/extend.js +1 -0
  717. node_ui/node_modules/lodash/extendWith.js +1 -0
  718. node_ui/node_modules/lodash/fill.js +45 -0
  719. node_ui/node_modules/lodash/filter.js +52 -0
  720. node_ui/node_modules/lodash/find.js +42 -0
  721. node_ui/node_modules/lodash/findIndex.js +55 -0
  722. node_ui/node_modules/lodash/findKey.js +44 -0
  723. node_ui/node_modules/lodash/findLast.js +25 -0
  724. node_ui/node_modules/lodash/findLastIndex.js +59 -0
  725. node_ui/node_modules/lodash/findLastKey.js +44 -0
  726. node_ui/node_modules/lodash/first.js +1 -0
  727. node_ui/node_modules/lodash/flake.lock +40 -0
  728. node_ui/node_modules/lodash/flake.nix +20 -0
  729. node_ui/node_modules/lodash/flatMap.js +29 -0
  730. node_ui/node_modules/lodash/flatMapDeep.js +31 -0
  731. node_ui/node_modules/lodash/flatMapDepth.js +31 -0
  732. node_ui/node_modules/lodash/flatten.js +22 -0
  733. node_ui/node_modules/lodash/flattenDeep.js +25 -0
  734. node_ui/node_modules/lodash/flattenDepth.js +33 -0
  735. node_ui/node_modules/lodash/flip.js +28 -0
  736. node_ui/node_modules/lodash/floor.js +26 -0
  737. node_ui/node_modules/lodash/flow.js +27 -0
  738. node_ui/node_modules/lodash/flowRight.js +26 -0
  739. node_ui/node_modules/lodash/forEach.js +41 -0
  740. node_ui/node_modules/lodash/forEachRight.js +31 -0
  741. node_ui/node_modules/lodash/forIn.js +39 -0
  742. node_ui/node_modules/lodash/forInRight.js +37 -0
  743. node_ui/node_modules/lodash/forOwn.js +36 -0
  744. node_ui/node_modules/lodash/forOwnRight.js +34 -0
  745. node_ui/node_modules/lodash/fp/F.js +1 -0
  746. node_ui/node_modules/lodash/fp/T.js +1 -0
  747. node_ui/node_modules/lodash/fp/__.js +1 -0
  748. node_ui/node_modules/lodash/fp/_baseConvert.js +569 -0
  749. node_ui/node_modules/lodash/fp/_convertBrowser.js +18 -0
  750. node_ui/node_modules/lodash/fp/_falseOptions.js +7 -0
  751. node_ui/node_modules/lodash/fp/_mapping.js +358 -0
  752. node_ui/node_modules/lodash/fp/_util.js +16 -0
  753. node_ui/node_modules/lodash/fp/add.js +5 -0
  754. node_ui/node_modules/lodash/fp/after.js +5 -0
  755. node_ui/node_modules/lodash/fp/all.js +1 -0
  756. node_ui/node_modules/lodash/fp/allPass.js +1 -0
  757. node_ui/node_modules/lodash/fp/always.js +1 -0
  758. node_ui/node_modules/lodash/fp/any.js +1 -0
  759. node_ui/node_modules/lodash/fp/anyPass.js +1 -0
  760. node_ui/node_modules/lodash/fp/apply.js +1 -0
  761. node_ui/node_modules/lodash/fp/array.js +2 -0
  762. node_ui/node_modules/lodash/fp/ary.js +5 -0
  763. node_ui/node_modules/lodash/fp/assign.js +5 -0
  764. node_ui/node_modules/lodash/fp/assignAll.js +5 -0
  765. node_ui/node_modules/lodash/fp/assignAllWith.js +5 -0
  766. node_ui/node_modules/lodash/fp/assignIn.js +5 -0
  767. node_ui/node_modules/lodash/fp/assignInAll.js +5 -0
  768. node_ui/node_modules/lodash/fp/assignInAllWith.js +5 -0
  769. node_ui/node_modules/lodash/fp/assignInWith.js +5 -0
  770. node_ui/node_modules/lodash/fp/assignWith.js +5 -0
  771. node_ui/node_modules/lodash/fp/assoc.js +1 -0
  772. node_ui/node_modules/lodash/fp/assocPath.js +1 -0
  773. node_ui/node_modules/lodash/fp/at.js +5 -0
  774. node_ui/node_modules/lodash/fp/attempt.js +5 -0
  775. node_ui/node_modules/lodash/fp/before.js +5 -0
  776. node_ui/node_modules/lodash/fp/bind.js +5 -0
  777. node_ui/node_modules/lodash/fp/bindAll.js +5 -0
  778. node_ui/node_modules/lodash/fp/bindKey.js +5 -0
  779. node_ui/node_modules/lodash/fp/camelCase.js +5 -0
  780. node_ui/node_modules/lodash/fp/capitalize.js +5 -0
  781. node_ui/node_modules/lodash/fp/castArray.js +5 -0
  782. node_ui/node_modules/lodash/fp/ceil.js +5 -0
  783. node_ui/node_modules/lodash/fp/chain.js +5 -0
  784. node_ui/node_modules/lodash/fp/chunk.js +5 -0
  785. node_ui/node_modules/lodash/fp/clamp.js +5 -0
  786. node_ui/node_modules/lodash/fp/clone.js +5 -0
  787. node_ui/node_modules/lodash/fp/cloneDeep.js +5 -0
  788. node_ui/node_modules/lodash/fp/cloneDeepWith.js +5 -0
  789. node_ui/node_modules/lodash/fp/cloneWith.js +5 -0
  790. node_ui/node_modules/lodash/fp/collection.js +2 -0
  791. node_ui/node_modules/lodash/fp/commit.js +5 -0
  792. node_ui/node_modules/lodash/fp/compact.js +5 -0
  793. node_ui/node_modules/lodash/fp/complement.js +1 -0
  794. node_ui/node_modules/lodash/fp/compose.js +1 -0
  795. node_ui/node_modules/lodash/fp/concat.js +5 -0
  796. node_ui/node_modules/lodash/fp/cond.js +5 -0
  797. node_ui/node_modules/lodash/fp/conforms.js +1 -0
  798. node_ui/node_modules/lodash/fp/conformsTo.js +5 -0
  799. node_ui/node_modules/lodash/fp/constant.js +5 -0
  800. node_ui/node_modules/lodash/fp/contains.js +1 -0
  801. node_ui/node_modules/lodash/fp/convert.js +18 -0
  802. node_ui/node_modules/lodash/fp/countBy.js +5 -0
  803. node_ui/node_modules/lodash/fp/create.js +5 -0
  804. node_ui/node_modules/lodash/fp/curry.js +5 -0
  805. node_ui/node_modules/lodash/fp/curryN.js +5 -0
  806. node_ui/node_modules/lodash/fp/curryRight.js +5 -0
  807. node_ui/node_modules/lodash/fp/curryRightN.js +5 -0
  808. node_ui/node_modules/lodash/fp/date.js +2 -0
  809. node_ui/node_modules/lodash/fp/debounce.js +5 -0
  810. node_ui/node_modules/lodash/fp/deburr.js +5 -0
  811. node_ui/node_modules/lodash/fp/defaultTo.js +5 -0
  812. node_ui/node_modules/lodash/fp/defaults.js +5 -0
  813. node_ui/node_modules/lodash/fp/defaultsAll.js +5 -0
  814. node_ui/node_modules/lodash/fp/defaultsDeep.js +5 -0
  815. node_ui/node_modules/lodash/fp/defaultsDeepAll.js +5 -0
  816. node_ui/node_modules/lodash/fp/defer.js +5 -0
  817. node_ui/node_modules/lodash/fp/delay.js +5 -0
  818. node_ui/node_modules/lodash/fp/difference.js +5 -0
  819. node_ui/node_modules/lodash/fp/differenceBy.js +5 -0
  820. node_ui/node_modules/lodash/fp/differenceWith.js +5 -0
  821. node_ui/node_modules/lodash/fp/dissoc.js +1 -0
  822. node_ui/node_modules/lodash/fp/dissocPath.js +1 -0
  823. node_ui/node_modules/lodash/fp/divide.js +5 -0
  824. node_ui/node_modules/lodash/fp/drop.js +5 -0
  825. node_ui/node_modules/lodash/fp/dropLast.js +1 -0
  826. node_ui/node_modules/lodash/fp/dropLastWhile.js +1 -0
  827. node_ui/node_modules/lodash/fp/dropRight.js +5 -0
  828. node_ui/node_modules/lodash/fp/dropRightWhile.js +5 -0
  829. node_ui/node_modules/lodash/fp/dropWhile.js +5 -0
  830. node_ui/node_modules/lodash/fp/each.js +1 -0
  831. node_ui/node_modules/lodash/fp/eachRight.js +1 -0
  832. node_ui/node_modules/lodash/fp/endsWith.js +5 -0
  833. node_ui/node_modules/lodash/fp/entries.js +1 -0
  834. node_ui/node_modules/lodash/fp/entriesIn.js +1 -0
  835. node_ui/node_modules/lodash/fp/eq.js +5 -0
  836. node_ui/node_modules/lodash/fp/equals.js +1 -0
  837. node_ui/node_modules/lodash/fp/escape.js +5 -0
  838. node_ui/node_modules/lodash/fp/escapeRegExp.js +5 -0
  839. node_ui/node_modules/lodash/fp/every.js +5 -0
  840. node_ui/node_modules/lodash/fp/extend.js +1 -0
  841. node_ui/node_modules/lodash/fp/extendAll.js +1 -0
  842. node_ui/node_modules/lodash/fp/extendAllWith.js +1 -0
  843. node_ui/node_modules/lodash/fp/extendWith.js +1 -0
  844. node_ui/node_modules/lodash/fp/fill.js +5 -0
  845. node_ui/node_modules/lodash/fp/filter.js +5 -0
  846. node_ui/node_modules/lodash/fp/find.js +5 -0
  847. node_ui/node_modules/lodash/fp/findFrom.js +5 -0
  848. node_ui/node_modules/lodash/fp/findIndex.js +5 -0
  849. node_ui/node_modules/lodash/fp/findIndexFrom.js +5 -0
  850. node_ui/node_modules/lodash/fp/findKey.js +5 -0
  851. node_ui/node_modules/lodash/fp/findLast.js +5 -0
  852. node_ui/node_modules/lodash/fp/findLastFrom.js +5 -0
  853. node_ui/node_modules/lodash/fp/findLastIndex.js +5 -0
  854. node_ui/node_modules/lodash/fp/findLastIndexFrom.js +5 -0
  855. node_ui/node_modules/lodash/fp/findLastKey.js +5 -0
  856. node_ui/node_modules/lodash/fp/first.js +1 -0
  857. node_ui/node_modules/lodash/fp/flatMap.js +5 -0
  858. node_ui/node_modules/lodash/fp/flatMapDeep.js +5 -0
  859. node_ui/node_modules/lodash/fp/flatMapDepth.js +5 -0
  860. node_ui/node_modules/lodash/fp/flatten.js +5 -0
  861. node_ui/node_modules/lodash/fp/flattenDeep.js +5 -0
  862. node_ui/node_modules/lodash/fp/flattenDepth.js +5 -0
  863. node_ui/node_modules/lodash/fp/flip.js +5 -0
  864. node_ui/node_modules/lodash/fp/floor.js +5 -0
  865. node_ui/node_modules/lodash/fp/flow.js +5 -0
  866. node_ui/node_modules/lodash/fp/flowRight.js +5 -0
  867. node_ui/node_modules/lodash/fp/forEach.js +5 -0
  868. node_ui/node_modules/lodash/fp/forEachRight.js +5 -0
  869. node_ui/node_modules/lodash/fp/forIn.js +5 -0
  870. node_ui/node_modules/lodash/fp/forInRight.js +5 -0
  871. node_ui/node_modules/lodash/fp/forOwn.js +5 -0
  872. node_ui/node_modules/lodash/fp/forOwnRight.js +5 -0
  873. node_ui/node_modules/lodash/fp/fromPairs.js +5 -0
  874. node_ui/node_modules/lodash/fp/function.js +2 -0
  875. node_ui/node_modules/lodash/fp/functions.js +5 -0
  876. node_ui/node_modules/lodash/fp/functionsIn.js +5 -0
  877. node_ui/node_modules/lodash/fp/get.js +5 -0
  878. node_ui/node_modules/lodash/fp/getOr.js +5 -0
  879. node_ui/node_modules/lodash/fp/groupBy.js +5 -0
  880. node_ui/node_modules/lodash/fp/gt.js +5 -0
  881. node_ui/node_modules/lodash/fp/gte.js +5 -0
  882. node_ui/node_modules/lodash/fp/has.js +5 -0
  883. node_ui/node_modules/lodash/fp/hasIn.js +5 -0
  884. node_ui/node_modules/lodash/fp/head.js +5 -0
  885. node_ui/node_modules/lodash/fp/identical.js +1 -0
  886. node_ui/node_modules/lodash/fp/identity.js +5 -0
  887. node_ui/node_modules/lodash/fp/inRange.js +5 -0
  888. node_ui/node_modules/lodash/fp/includes.js +5 -0
  889. node_ui/node_modules/lodash/fp/includesFrom.js +5 -0
  890. node_ui/node_modules/lodash/fp/indexBy.js +1 -0
  891. node_ui/node_modules/lodash/fp/indexOf.js +5 -0
  892. node_ui/node_modules/lodash/fp/indexOfFrom.js +5 -0
  893. node_ui/node_modules/lodash/fp/init.js +1 -0
  894. node_ui/node_modules/lodash/fp/initial.js +5 -0
  895. node_ui/node_modules/lodash/fp/intersection.js +5 -0
  896. node_ui/node_modules/lodash/fp/intersectionBy.js +5 -0
  897. node_ui/node_modules/lodash/fp/intersectionWith.js +5 -0
  898. node_ui/node_modules/lodash/fp/invert.js +5 -0
  899. node_ui/node_modules/lodash/fp/invertBy.js +5 -0
  900. node_ui/node_modules/lodash/fp/invertObj.js +1 -0
  901. node_ui/node_modules/lodash/fp/invoke.js +5 -0
  902. node_ui/node_modules/lodash/fp/invokeArgs.js +5 -0
  903. node_ui/node_modules/lodash/fp/invokeArgsMap.js +5 -0
  904. node_ui/node_modules/lodash/fp/invokeMap.js +5 -0
  905. node_ui/node_modules/lodash/fp/isArguments.js +5 -0
  906. node_ui/node_modules/lodash/fp/isArray.js +5 -0
  907. node_ui/node_modules/lodash/fp/isArrayBuffer.js +5 -0
  908. node_ui/node_modules/lodash/fp/isArrayLike.js +5 -0
  909. node_ui/node_modules/lodash/fp/isArrayLikeObject.js +5 -0
  910. node_ui/node_modules/lodash/fp/isBoolean.js +5 -0
  911. node_ui/node_modules/lodash/fp/isBuffer.js +5 -0
  912. node_ui/node_modules/lodash/fp/isDate.js +5 -0
  913. node_ui/node_modules/lodash/fp/isElement.js +5 -0
  914. node_ui/node_modules/lodash/fp/isEmpty.js +5 -0
  915. node_ui/node_modules/lodash/fp/isEqual.js +5 -0
  916. node_ui/node_modules/lodash/fp/isEqualWith.js +5 -0
  917. node_ui/node_modules/lodash/fp/isError.js +5 -0
  918. node_ui/node_modules/lodash/fp/isFinite.js +5 -0
  919. node_ui/node_modules/lodash/fp/isFunction.js +5 -0
  920. node_ui/node_modules/lodash/fp/isInteger.js +5 -0
  921. node_ui/node_modules/lodash/fp/isLength.js +5 -0
  922. node_ui/node_modules/lodash/fp/isMap.js +5 -0
  923. node_ui/node_modules/lodash/fp/isMatch.js +5 -0
  924. node_ui/node_modules/lodash/fp/isMatchWith.js +5 -0
  925. node_ui/node_modules/lodash/fp/isNaN.js +5 -0
  926. node_ui/node_modules/lodash/fp/isNative.js +5 -0
  927. node_ui/node_modules/lodash/fp/isNil.js +5 -0
  928. node_ui/node_modules/lodash/fp/isNull.js +5 -0
  929. node_ui/node_modules/lodash/fp/isNumber.js +5 -0
  930. node_ui/node_modules/lodash/fp/isObject.js +5 -0
  931. node_ui/node_modules/lodash/fp/isObjectLike.js +5 -0
  932. node_ui/node_modules/lodash/fp/isPlainObject.js +5 -0
  933. node_ui/node_modules/lodash/fp/isRegExp.js +5 -0
  934. node_ui/node_modules/lodash/fp/isSafeInteger.js +5 -0
  935. node_ui/node_modules/lodash/fp/isSet.js +5 -0
  936. node_ui/node_modules/lodash/fp/isString.js +5 -0
  937. node_ui/node_modules/lodash/fp/isSymbol.js +5 -0
  938. node_ui/node_modules/lodash/fp/isTypedArray.js +5 -0
  939. node_ui/node_modules/lodash/fp/isUndefined.js +5 -0
  940. node_ui/node_modules/lodash/fp/isWeakMap.js +5 -0
  941. node_ui/node_modules/lodash/fp/isWeakSet.js +5 -0
  942. node_ui/node_modules/lodash/fp/iteratee.js +5 -0
  943. node_ui/node_modules/lodash/fp/join.js +5 -0
  944. node_ui/node_modules/lodash/fp/juxt.js +1 -0
  945. node_ui/node_modules/lodash/fp/kebabCase.js +5 -0
  946. node_ui/node_modules/lodash/fp/keyBy.js +5 -0
  947. node_ui/node_modules/lodash/fp/keys.js +5 -0
  948. node_ui/node_modules/lodash/fp/keysIn.js +5 -0
  949. node_ui/node_modules/lodash/fp/lang.js +2 -0
  950. node_ui/node_modules/lodash/fp/last.js +5 -0
  951. node_ui/node_modules/lodash/fp/lastIndexOf.js +5 -0
  952. node_ui/node_modules/lodash/fp/lastIndexOfFrom.js +5 -0
  953. node_ui/node_modules/lodash/fp/lowerCase.js +5 -0
  954. node_ui/node_modules/lodash/fp/lowerFirst.js +5 -0
  955. node_ui/node_modules/lodash/fp/lt.js +5 -0
  956. node_ui/node_modules/lodash/fp/lte.js +5 -0
  957. node_ui/node_modules/lodash/fp/map.js +5 -0
  958. node_ui/node_modules/lodash/fp/mapKeys.js +5 -0
  959. node_ui/node_modules/lodash/fp/mapValues.js +5 -0
  960. node_ui/node_modules/lodash/fp/matches.js +1 -0
  961. node_ui/node_modules/lodash/fp/matchesProperty.js +5 -0
  962. node_ui/node_modules/lodash/fp/math.js +2 -0
  963. node_ui/node_modules/lodash/fp/max.js +5 -0
  964. node_ui/node_modules/lodash/fp/maxBy.js +5 -0
  965. node_ui/node_modules/lodash/fp/mean.js +5 -0
  966. node_ui/node_modules/lodash/fp/meanBy.js +5 -0
  967. node_ui/node_modules/lodash/fp/memoize.js +5 -0
  968. node_ui/node_modules/lodash/fp/merge.js +5 -0
  969. node_ui/node_modules/lodash/fp/mergeAll.js +5 -0
  970. node_ui/node_modules/lodash/fp/mergeAllWith.js +5 -0
  971. node_ui/node_modules/lodash/fp/mergeWith.js +5 -0
  972. node_ui/node_modules/lodash/fp/method.js +5 -0
  973. node_ui/node_modules/lodash/fp/methodOf.js +5 -0
  974. node_ui/node_modules/lodash/fp/min.js +5 -0
  975. node_ui/node_modules/lodash/fp/minBy.js +5 -0
  976. node_ui/node_modules/lodash/fp/mixin.js +5 -0
  977. node_ui/node_modules/lodash/fp/multiply.js +5 -0
  978. node_ui/node_modules/lodash/fp/nAry.js +1 -0
  979. node_ui/node_modules/lodash/fp/negate.js +5 -0
  980. node_ui/node_modules/lodash/fp/next.js +5 -0
  981. node_ui/node_modules/lodash/fp/noop.js +5 -0
  982. node_ui/node_modules/lodash/fp/now.js +5 -0
  983. node_ui/node_modules/lodash/fp/nth.js +5 -0
  984. node_ui/node_modules/lodash/fp/nthArg.js +5 -0
  985. node_ui/node_modules/lodash/fp/number.js +2 -0
  986. node_ui/node_modules/lodash/fp/object.js +2 -0
  987. node_ui/node_modules/lodash/fp/omit.js +5 -0
  988. node_ui/node_modules/lodash/fp/omitAll.js +1 -0
  989. node_ui/node_modules/lodash/fp/omitBy.js +5 -0
  990. node_ui/node_modules/lodash/fp/once.js +5 -0
  991. node_ui/node_modules/lodash/fp/orderBy.js +5 -0
  992. node_ui/node_modules/lodash/fp/over.js +5 -0
  993. node_ui/node_modules/lodash/fp/overArgs.js +5 -0
  994. node_ui/node_modules/lodash/fp/overEvery.js +5 -0
  995. node_ui/node_modules/lodash/fp/overSome.js +5 -0
  996. node_ui/node_modules/lodash/fp/pad.js +5 -0
  997. node_ui/node_modules/lodash/fp/padChars.js +5 -0
  998. node_ui/node_modules/lodash/fp/padCharsEnd.js +5 -0
  999. node_ui/node_modules/lodash/fp/padCharsStart.js +5 -0
  1000. node_ui/node_modules/lodash/fp/padEnd.js +5 -0
  1001. node_ui/node_modules/lodash/fp/padStart.js +5 -0
  1002. node_ui/node_modules/lodash/fp/parseInt.js +5 -0
  1003. node_ui/node_modules/lodash/fp/partial.js +5 -0
  1004. node_ui/node_modules/lodash/fp/partialRight.js +5 -0
  1005. node_ui/node_modules/lodash/fp/partition.js +5 -0
  1006. node_ui/node_modules/lodash/fp/path.js +1 -0
  1007. node_ui/node_modules/lodash/fp/pathEq.js +1 -0
  1008. node_ui/node_modules/lodash/fp/pathOr.js +1 -0
  1009. node_ui/node_modules/lodash/fp/paths.js +1 -0
  1010. node_ui/node_modules/lodash/fp/pick.js +5 -0
  1011. node_ui/node_modules/lodash/fp/pickAll.js +1 -0
  1012. node_ui/node_modules/lodash/fp/pickBy.js +5 -0
  1013. node_ui/node_modules/lodash/fp/pipe.js +1 -0
  1014. node_ui/node_modules/lodash/fp/placeholder.js +6 -0
  1015. node_ui/node_modules/lodash/fp/plant.js +5 -0
  1016. node_ui/node_modules/lodash/fp/pluck.js +1 -0
  1017. node_ui/node_modules/lodash/fp/prop.js +1 -0
  1018. node_ui/node_modules/lodash/fp/propEq.js +1 -0
  1019. node_ui/node_modules/lodash/fp/propOr.js +1 -0
  1020. node_ui/node_modules/lodash/fp/property.js +1 -0
  1021. node_ui/node_modules/lodash/fp/propertyOf.js +5 -0
  1022. node_ui/node_modules/lodash/fp/props.js +1 -0
  1023. node_ui/node_modules/lodash/fp/pull.js +5 -0
  1024. node_ui/node_modules/lodash/fp/pullAll.js +5 -0
  1025. node_ui/node_modules/lodash/fp/pullAllBy.js +5 -0
  1026. node_ui/node_modules/lodash/fp/pullAllWith.js +5 -0
  1027. node_ui/node_modules/lodash/fp/pullAt.js +5 -0
  1028. node_ui/node_modules/lodash/fp/random.js +5 -0
  1029. node_ui/node_modules/lodash/fp/range.js +5 -0
  1030. node_ui/node_modules/lodash/fp/rangeRight.js +5 -0
  1031. node_ui/node_modules/lodash/fp/rangeStep.js +5 -0
  1032. node_ui/node_modules/lodash/fp/rangeStepRight.js +5 -0
  1033. node_ui/node_modules/lodash/fp/rearg.js +5 -0
  1034. node_ui/node_modules/lodash/fp/reduce.js +5 -0
  1035. node_ui/node_modules/lodash/fp/reduceRight.js +5 -0
  1036. node_ui/node_modules/lodash/fp/reject.js +5 -0
  1037. node_ui/node_modules/lodash/fp/remove.js +5 -0
  1038. node_ui/node_modules/lodash/fp/repeat.js +5 -0
  1039. node_ui/node_modules/lodash/fp/replace.js +5 -0
  1040. node_ui/node_modules/lodash/fp/rest.js +5 -0
  1041. node_ui/node_modules/lodash/fp/restFrom.js +5 -0
  1042. node_ui/node_modules/lodash/fp/result.js +5 -0
  1043. node_ui/node_modules/lodash/fp/reverse.js +5 -0
  1044. node_ui/node_modules/lodash/fp/round.js +5 -0
  1045. node_ui/node_modules/lodash/fp/sample.js +5 -0
  1046. node_ui/node_modules/lodash/fp/sampleSize.js +5 -0
  1047. node_ui/node_modules/lodash/fp/seq.js +2 -0
  1048. node_ui/node_modules/lodash/fp/set.js +5 -0
  1049. node_ui/node_modules/lodash/fp/setWith.js +5 -0
  1050. node_ui/node_modules/lodash/fp/shuffle.js +5 -0
  1051. node_ui/node_modules/lodash/fp/size.js +5 -0
  1052. node_ui/node_modules/lodash/fp/slice.js +5 -0
  1053. node_ui/node_modules/lodash/fp/snakeCase.js +5 -0
  1054. node_ui/node_modules/lodash/fp/some.js +5 -0
  1055. node_ui/node_modules/lodash/fp/sortBy.js +5 -0
  1056. node_ui/node_modules/lodash/fp/sortedIndex.js +5 -0
  1057. node_ui/node_modules/lodash/fp/sortedIndexBy.js +5 -0
  1058. node_ui/node_modules/lodash/fp/sortedIndexOf.js +5 -0
  1059. node_ui/node_modules/lodash/fp/sortedLastIndex.js +5 -0
  1060. node_ui/node_modules/lodash/fp/sortedLastIndexBy.js +5 -0
  1061. node_ui/node_modules/lodash/fp/sortedLastIndexOf.js +5 -0
  1062. node_ui/node_modules/lodash/fp/sortedUniq.js +5 -0
  1063. node_ui/node_modules/lodash/fp/sortedUniqBy.js +5 -0
  1064. node_ui/node_modules/lodash/fp/split.js +5 -0
  1065. node_ui/node_modules/lodash/fp/spread.js +5 -0
  1066. node_ui/node_modules/lodash/fp/spreadFrom.js +5 -0
  1067. node_ui/node_modules/lodash/fp/startCase.js +5 -0
  1068. node_ui/node_modules/lodash/fp/startsWith.js +5 -0
  1069. node_ui/node_modules/lodash/fp/string.js +2 -0
  1070. node_ui/node_modules/lodash/fp/stubArray.js +5 -0
  1071. node_ui/node_modules/lodash/fp/stubFalse.js +5 -0
  1072. node_ui/node_modules/lodash/fp/stubObject.js +5 -0
  1073. node_ui/node_modules/lodash/fp/stubString.js +5 -0
  1074. node_ui/node_modules/lodash/fp/stubTrue.js +5 -0
  1075. node_ui/node_modules/lodash/fp/subtract.js +5 -0
  1076. node_ui/node_modules/lodash/fp/sum.js +5 -0
  1077. node_ui/node_modules/lodash/fp/sumBy.js +5 -0
  1078. node_ui/node_modules/lodash/fp/symmetricDifference.js +1 -0
  1079. node_ui/node_modules/lodash/fp/symmetricDifferenceBy.js +1 -0
  1080. node_ui/node_modules/lodash/fp/symmetricDifferenceWith.js +1 -0
  1081. node_ui/node_modules/lodash/fp/tail.js +5 -0
  1082. node_ui/node_modules/lodash/fp/take.js +5 -0
  1083. node_ui/node_modules/lodash/fp/takeLast.js +1 -0
  1084. node_ui/node_modules/lodash/fp/takeLastWhile.js +1 -0
  1085. node_ui/node_modules/lodash/fp/takeRight.js +5 -0
  1086. node_ui/node_modules/lodash/fp/takeRightWhile.js +5 -0
  1087. node_ui/node_modules/lodash/fp/takeWhile.js +5 -0
  1088. node_ui/node_modules/lodash/fp/tap.js +5 -0
  1089. node_ui/node_modules/lodash/fp/template.js +5 -0
  1090. node_ui/node_modules/lodash/fp/templateSettings.js +5 -0
  1091. node_ui/node_modules/lodash/fp/throttle.js +5 -0
  1092. node_ui/node_modules/lodash/fp/thru.js +5 -0
  1093. node_ui/node_modules/lodash/fp/times.js +5 -0
  1094. node_ui/node_modules/lodash/fp/toArray.js +5 -0
  1095. node_ui/node_modules/lodash/fp/toFinite.js +5 -0
  1096. node_ui/node_modules/lodash/fp/toInteger.js +5 -0
  1097. node_ui/node_modules/lodash/fp/toIterator.js +5 -0
  1098. node_ui/node_modules/lodash/fp/toJSON.js +5 -0
  1099. node_ui/node_modules/lodash/fp/toLength.js +5 -0
  1100. node_ui/node_modules/lodash/fp/toLower.js +5 -0
  1101. node_ui/node_modules/lodash/fp/toNumber.js +5 -0
  1102. node_ui/node_modules/lodash/fp/toPairs.js +5 -0
  1103. node_ui/node_modules/lodash/fp/toPairsIn.js +5 -0
  1104. node_ui/node_modules/lodash/fp/toPath.js +5 -0
  1105. node_ui/node_modules/lodash/fp/toPlainObject.js +5 -0
  1106. node_ui/node_modules/lodash/fp/toSafeInteger.js +5 -0
  1107. node_ui/node_modules/lodash/fp/toString.js +5 -0
  1108. node_ui/node_modules/lodash/fp/toUpper.js +5 -0
  1109. node_ui/node_modules/lodash/fp/transform.js +5 -0
  1110. node_ui/node_modules/lodash/fp/trim.js +5 -0
  1111. node_ui/node_modules/lodash/fp/trimChars.js +5 -0
  1112. node_ui/node_modules/lodash/fp/trimCharsEnd.js +5 -0
  1113. node_ui/node_modules/lodash/fp/trimCharsStart.js +5 -0
  1114. node_ui/node_modules/lodash/fp/trimEnd.js +5 -0
  1115. node_ui/node_modules/lodash/fp/trimStart.js +5 -0
  1116. node_ui/node_modules/lodash/fp/truncate.js +5 -0
  1117. node_ui/node_modules/lodash/fp/unapply.js +1 -0
  1118. node_ui/node_modules/lodash/fp/unary.js +5 -0
  1119. node_ui/node_modules/lodash/fp/unescape.js +5 -0
  1120. node_ui/node_modules/lodash/fp/union.js +5 -0
  1121. node_ui/node_modules/lodash/fp/unionBy.js +5 -0
  1122. node_ui/node_modules/lodash/fp/unionWith.js +5 -0
  1123. node_ui/node_modules/lodash/fp/uniq.js +5 -0
  1124. node_ui/node_modules/lodash/fp/uniqBy.js +5 -0
  1125. node_ui/node_modules/lodash/fp/uniqWith.js +5 -0
  1126. node_ui/node_modules/lodash/fp/uniqueId.js +5 -0
  1127. node_ui/node_modules/lodash/fp/unnest.js +1 -0
  1128. node_ui/node_modules/lodash/fp/unset.js +5 -0
  1129. node_ui/node_modules/lodash/fp/unzip.js +5 -0
  1130. node_ui/node_modules/lodash/fp/unzipWith.js +5 -0
  1131. node_ui/node_modules/lodash/fp/update.js +5 -0
  1132. node_ui/node_modules/lodash/fp/updateWith.js +5 -0
  1133. node_ui/node_modules/lodash/fp/upperCase.js +5 -0
  1134. node_ui/node_modules/lodash/fp/upperFirst.js +5 -0
  1135. node_ui/node_modules/lodash/fp/useWith.js +1 -0
  1136. node_ui/node_modules/lodash/fp/util.js +2 -0
  1137. node_ui/node_modules/lodash/fp/value.js +5 -0
  1138. node_ui/node_modules/lodash/fp/valueOf.js +5 -0
  1139. node_ui/node_modules/lodash/fp/values.js +5 -0
  1140. node_ui/node_modules/lodash/fp/valuesIn.js +5 -0
  1141. node_ui/node_modules/lodash/fp/where.js +1 -0
  1142. node_ui/node_modules/lodash/fp/whereEq.js +1 -0
  1143. node_ui/node_modules/lodash/fp/without.js +5 -0
  1144. node_ui/node_modules/lodash/fp/words.js +5 -0
  1145. node_ui/node_modules/lodash/fp/wrap.js +5 -0
  1146. node_ui/node_modules/lodash/fp/wrapperAt.js +5 -0
  1147. node_ui/node_modules/lodash/fp/wrapperChain.js +5 -0
  1148. node_ui/node_modules/lodash/fp/wrapperLodash.js +5 -0
  1149. node_ui/node_modules/lodash/fp/wrapperReverse.js +5 -0
  1150. node_ui/node_modules/lodash/fp/wrapperValue.js +5 -0
  1151. node_ui/node_modules/lodash/fp/xor.js +5 -0
  1152. node_ui/node_modules/lodash/fp/xorBy.js +5 -0
  1153. node_ui/node_modules/lodash/fp/xorWith.js +5 -0
  1154. node_ui/node_modules/lodash/fp/zip.js +5 -0
  1155. node_ui/node_modules/lodash/fp/zipAll.js +5 -0
  1156. node_ui/node_modules/lodash/fp/zipObj.js +1 -0
  1157. node_ui/node_modules/lodash/fp/zipObject.js +5 -0
  1158. node_ui/node_modules/lodash/fp/zipObjectDeep.js +5 -0
  1159. node_ui/node_modules/lodash/fp/zipWith.js +5 -0
  1160. node_ui/node_modules/lodash/fp.js +2 -0
  1161. node_ui/node_modules/lodash/fromPairs.js +28 -0
  1162. node_ui/node_modules/lodash/function.js +25 -0
  1163. node_ui/node_modules/lodash/functions.js +31 -0
  1164. node_ui/node_modules/lodash/functionsIn.js +31 -0
  1165. node_ui/node_modules/lodash/get.js +33 -0
  1166. node_ui/node_modules/lodash/groupBy.js +41 -0
  1167. node_ui/node_modules/lodash/gt.js +29 -0
  1168. node_ui/node_modules/lodash/gte.js +30 -0
  1169. node_ui/node_modules/lodash/has.js +35 -0
  1170. node_ui/node_modules/lodash/hasIn.js +34 -0
  1171. node_ui/node_modules/lodash/head.js +23 -0
  1172. node_ui/node_modules/lodash/identity.js +21 -0
  1173. node_ui/node_modules/lodash/inRange.js +55 -0
  1174. node_ui/node_modules/lodash/includes.js +53 -0
  1175. node_ui/node_modules/lodash/index.js +1 -0
  1176. node_ui/node_modules/lodash/indexOf.js +42 -0
  1177. node_ui/node_modules/lodash/initial.js +22 -0
  1178. node_ui/node_modules/lodash/intersection.js +30 -0
  1179. node_ui/node_modules/lodash/intersectionBy.js +45 -0
  1180. node_ui/node_modules/lodash/intersectionWith.js +41 -0
  1181. node_ui/node_modules/lodash/invert.js +42 -0
  1182. node_ui/node_modules/lodash/invertBy.js +56 -0
  1183. node_ui/node_modules/lodash/invoke.js +24 -0
  1184. node_ui/node_modules/lodash/invokeMap.js +41 -0
  1185. node_ui/node_modules/lodash/isArguments.js +36 -0
  1186. node_ui/node_modules/lodash/isArray.js +26 -0
  1187. node_ui/node_modules/lodash/isArrayBuffer.js +27 -0
  1188. node_ui/node_modules/lodash/isArrayLike.js +33 -0
  1189. node_ui/node_modules/lodash/isArrayLikeObject.js +33 -0
  1190. node_ui/node_modules/lodash/isBoolean.js +29 -0
  1191. node_ui/node_modules/lodash/isBuffer.js +38 -0
  1192. node_ui/node_modules/lodash/isDate.js +27 -0
  1193. node_ui/node_modules/lodash/isElement.js +25 -0
  1194. node_ui/node_modules/lodash/isEmpty.js +77 -0
  1195. node_ui/node_modules/lodash/isEqual.js +35 -0
  1196. node_ui/node_modules/lodash/isEqualWith.js +41 -0
  1197. node_ui/node_modules/lodash/isError.js +36 -0
  1198. node_ui/node_modules/lodash/isFinite.js +36 -0
  1199. node_ui/node_modules/lodash/isFunction.js +37 -0
  1200. node_ui/node_modules/lodash/isInteger.js +33 -0
  1201. node_ui/node_modules/lodash/isLength.js +35 -0
  1202. node_ui/node_modules/lodash/isMap.js +27 -0
  1203. node_ui/node_modules/lodash/isMatch.js +36 -0
  1204. node_ui/node_modules/lodash/isMatchWith.js +41 -0
  1205. node_ui/node_modules/lodash/isNaN.js +38 -0
  1206. node_ui/node_modules/lodash/isNative.js +40 -0
  1207. node_ui/node_modules/lodash/isNil.js +25 -0
  1208. node_ui/node_modules/lodash/isNull.js +22 -0
  1209. node_ui/node_modules/lodash/isNumber.js +38 -0
  1210. node_ui/node_modules/lodash/isObject.js +31 -0
  1211. node_ui/node_modules/lodash/isObjectLike.js +29 -0
  1212. node_ui/node_modules/lodash/isPlainObject.js +62 -0
  1213. node_ui/node_modules/lodash/isRegExp.js +27 -0
  1214. node_ui/node_modules/lodash/isSafeInteger.js +37 -0
  1215. node_ui/node_modules/lodash/isSet.js +27 -0
  1216. node_ui/node_modules/lodash/isString.js +30 -0
  1217. node_ui/node_modules/lodash/isSymbol.js +29 -0
  1218. node_ui/node_modules/lodash/isTypedArray.js +27 -0
  1219. node_ui/node_modules/lodash/isUndefined.js +22 -0
  1220. node_ui/node_modules/lodash/isWeakMap.js +28 -0
  1221. node_ui/node_modules/lodash/isWeakSet.js +28 -0
  1222. node_ui/node_modules/lodash/iteratee.js +53 -0
  1223. node_ui/node_modules/lodash/join.js +26 -0
  1224. node_ui/node_modules/lodash/kebabCase.js +28 -0
  1225. node_ui/node_modules/lodash/keyBy.js +36 -0
  1226. node_ui/node_modules/lodash/keys.js +37 -0
  1227. node_ui/node_modules/lodash/keysIn.js +32 -0
  1228. node_ui/node_modules/lodash/lang.js +58 -0
  1229. node_ui/node_modules/lodash/last.js +20 -0
  1230. node_ui/node_modules/lodash/lastIndexOf.js +46 -0
  1231. node_ui/node_modules/lodash/lodash.js +17209 -0
  1232. node_ui/node_modules/lodash/lodash.min.js +140 -0
  1233. node_ui/node_modules/lodash/lowerCase.js +27 -0
  1234. node_ui/node_modules/lodash/lowerFirst.js +22 -0
  1235. node_ui/node_modules/lodash/lt.js +29 -0
  1236. node_ui/node_modules/lodash/lte.js +30 -0
  1237. node_ui/node_modules/lodash/map.js +53 -0
  1238. node_ui/node_modules/lodash/mapKeys.js +36 -0
  1239. node_ui/node_modules/lodash/mapValues.js +43 -0
  1240. node_ui/node_modules/lodash/matches.js +46 -0
  1241. node_ui/node_modules/lodash/matchesProperty.js +44 -0
  1242. node_ui/node_modules/lodash/math.js +17 -0
  1243. node_ui/node_modules/lodash/max.js +29 -0
  1244. node_ui/node_modules/lodash/maxBy.js +34 -0
  1245. node_ui/node_modules/lodash/mean.js +22 -0
  1246. node_ui/node_modules/lodash/meanBy.js +31 -0
  1247. node_ui/node_modules/lodash/memoize.js +73 -0
  1248. node_ui/node_modules/lodash/merge.js +39 -0
  1249. node_ui/node_modules/lodash/mergeWith.js +39 -0
  1250. node_ui/node_modules/lodash/method.js +34 -0
  1251. node_ui/node_modules/lodash/methodOf.js +33 -0
  1252. node_ui/node_modules/lodash/min.js +29 -0
  1253. node_ui/node_modules/lodash/minBy.js +34 -0
  1254. node_ui/node_modules/lodash/mixin.js +74 -0
  1255. node_ui/node_modules/lodash/multiply.js +22 -0
  1256. node_ui/node_modules/lodash/negate.js +40 -0
  1257. node_ui/node_modules/lodash/next.js +35 -0
  1258. node_ui/node_modules/lodash/noop.js +17 -0
  1259. node_ui/node_modules/lodash/now.js +23 -0
  1260. node_ui/node_modules/lodash/nth.js +29 -0
  1261. node_ui/node_modules/lodash/nthArg.js +32 -0
  1262. node_ui/node_modules/lodash/number.js +5 -0
  1263. node_ui/node_modules/lodash/object.js +49 -0
  1264. node_ui/node_modules/lodash/omit.js +57 -0
  1265. node_ui/node_modules/lodash/omitBy.js +29 -0
  1266. node_ui/node_modules/lodash/once.js +25 -0
  1267. node_ui/node_modules/lodash/orderBy.js +47 -0
  1268. node_ui/node_modules/lodash/over.js +24 -0
  1269. node_ui/node_modules/lodash/overArgs.js +61 -0
  1270. node_ui/node_modules/lodash/overEvery.js +34 -0
  1271. node_ui/node_modules/lodash/overSome.js +37 -0
  1272. node_ui/node_modules/lodash/package.json +17 -0
  1273. node_ui/node_modules/lodash/pad.js +49 -0
  1274. node_ui/node_modules/lodash/padEnd.js +39 -0
  1275. node_ui/node_modules/lodash/padStart.js +39 -0
  1276. node_ui/node_modules/lodash/parseInt.js +43 -0
  1277. node_ui/node_modules/lodash/partial.js +50 -0
  1278. node_ui/node_modules/lodash/partialRight.js +49 -0
  1279. node_ui/node_modules/lodash/partition.js +43 -0
  1280. node_ui/node_modules/lodash/pick.js +25 -0
  1281. node_ui/node_modules/lodash/pickBy.js +37 -0
  1282. node_ui/node_modules/lodash/plant.js +48 -0
  1283. node_ui/node_modules/lodash/property.js +32 -0
  1284. node_ui/node_modules/lodash/propertyOf.js +30 -0
  1285. node_ui/node_modules/lodash/pull.js +29 -0
  1286. node_ui/node_modules/lodash/pullAll.js +29 -0
  1287. node_ui/node_modules/lodash/pullAllBy.js +33 -0
  1288. node_ui/node_modules/lodash/pullAllWith.js +32 -0
  1289. node_ui/node_modules/lodash/pullAt.js +43 -0
  1290. node_ui/node_modules/lodash/random.js +82 -0
  1291. node_ui/node_modules/lodash/range.js +46 -0
  1292. node_ui/node_modules/lodash/rangeRight.js +41 -0
  1293. node_ui/node_modules/lodash/rearg.js +33 -0
  1294. node_ui/node_modules/lodash/reduce.js +51 -0
  1295. node_ui/node_modules/lodash/reduceRight.js +36 -0
  1296. node_ui/node_modules/lodash/reject.js +46 -0
  1297. node_ui/node_modules/lodash/release.md +48 -0
  1298. node_ui/node_modules/lodash/remove.js +53 -0
  1299. node_ui/node_modules/lodash/repeat.js +37 -0
  1300. node_ui/node_modules/lodash/replace.js +29 -0
  1301. node_ui/node_modules/lodash/rest.js +40 -0
  1302. node_ui/node_modules/lodash/result.js +56 -0
  1303. node_ui/node_modules/lodash/reverse.js +34 -0
  1304. node_ui/node_modules/lodash/round.js +26 -0
  1305. node_ui/node_modules/lodash/sample.js +24 -0
  1306. node_ui/node_modules/lodash/sampleSize.js +37 -0
  1307. node_ui/node_modules/lodash/seq.js +16 -0
  1308. node_ui/node_modules/lodash/set.js +35 -0
  1309. node_ui/node_modules/lodash/setWith.js +32 -0
  1310. node_ui/node_modules/lodash/shuffle.js +25 -0
  1311. node_ui/node_modules/lodash/size.js +46 -0
  1312. node_ui/node_modules/lodash/slice.js +37 -0
  1313. node_ui/node_modules/lodash/snakeCase.js +28 -0
  1314. node_ui/node_modules/lodash/some.js +51 -0
  1315. node_ui/node_modules/lodash/sortBy.js +48 -0
  1316. node_ui/node_modules/lodash/sortedIndex.js +24 -0
  1317. node_ui/node_modules/lodash/sortedIndexBy.js +33 -0
  1318. node_ui/node_modules/lodash/sortedIndexOf.js +31 -0
  1319. node_ui/node_modules/lodash/sortedLastIndex.js +25 -0
  1320. node_ui/node_modules/lodash/sortedLastIndexBy.js +33 -0
  1321. node_ui/node_modules/lodash/sortedLastIndexOf.js +31 -0
  1322. node_ui/node_modules/lodash/sortedUniq.js +24 -0
  1323. node_ui/node_modules/lodash/sortedUniqBy.js +26 -0
  1324. node_ui/node_modules/lodash/split.js +52 -0
  1325. node_ui/node_modules/lodash/spread.js +63 -0
  1326. node_ui/node_modules/lodash/startCase.js +29 -0
  1327. node_ui/node_modules/lodash/startsWith.js +39 -0
  1328. node_ui/node_modules/lodash/string.js +33 -0
  1329. node_ui/node_modules/lodash/stubArray.js +23 -0
  1330. node_ui/node_modules/lodash/stubFalse.js +18 -0
  1331. node_ui/node_modules/lodash/stubObject.js +23 -0
  1332. node_ui/node_modules/lodash/stubString.js +18 -0
  1333. node_ui/node_modules/lodash/stubTrue.js +18 -0
  1334. node_ui/node_modules/lodash/subtract.js +22 -0
  1335. node_ui/node_modules/lodash/sum.js +24 -0
  1336. node_ui/node_modules/lodash/sumBy.js +33 -0
  1337. node_ui/node_modules/lodash/tail.js +22 -0
  1338. node_ui/node_modules/lodash/take.js +37 -0
  1339. node_ui/node_modules/lodash/takeRight.js +39 -0
  1340. node_ui/node_modules/lodash/takeRightWhile.js +45 -0
  1341. node_ui/node_modules/lodash/takeWhile.js +45 -0
  1342. node_ui/node_modules/lodash/tap.js +29 -0
  1343. node_ui/node_modules/lodash/template.js +272 -0
  1344. node_ui/node_modules/lodash/templateSettings.js +67 -0
  1345. node_ui/node_modules/lodash/throttle.js +69 -0
  1346. node_ui/node_modules/lodash/thru.js +28 -0
  1347. node_ui/node_modules/lodash/times.js +51 -0
  1348. node_ui/node_modules/lodash/toArray.js +58 -0
  1349. node_ui/node_modules/lodash/toFinite.js +42 -0
  1350. node_ui/node_modules/lodash/toInteger.js +36 -0
  1351. node_ui/node_modules/lodash/toIterator.js +23 -0
  1352. node_ui/node_modules/lodash/toJSON.js +1 -0
  1353. node_ui/node_modules/lodash/toLength.js +38 -0
  1354. node_ui/node_modules/lodash/toLower.js +28 -0
  1355. node_ui/node_modules/lodash/toNumber.js +64 -0
  1356. node_ui/node_modules/lodash/toPairs.js +30 -0
  1357. node_ui/node_modules/lodash/toPairsIn.js +30 -0
  1358. node_ui/node_modules/lodash/toPath.js +33 -0
  1359. node_ui/node_modules/lodash/toPlainObject.js +32 -0
  1360. node_ui/node_modules/lodash/toSafeInteger.js +37 -0
  1361. node_ui/node_modules/lodash/toString.js +28 -0
  1362. node_ui/node_modules/lodash/toUpper.js +28 -0
  1363. node_ui/node_modules/lodash/transform.js +65 -0
  1364. node_ui/node_modules/lodash/trim.js +47 -0
  1365. node_ui/node_modules/lodash/trimEnd.js +41 -0
  1366. node_ui/node_modules/lodash/trimStart.js +43 -0
  1367. node_ui/node_modules/lodash/truncate.js +111 -0
  1368. node_ui/node_modules/lodash/unary.js +22 -0
  1369. node_ui/node_modules/lodash/unescape.js +34 -0
  1370. node_ui/node_modules/lodash/union.js +26 -0
  1371. node_ui/node_modules/lodash/unionBy.js +39 -0
  1372. node_ui/node_modules/lodash/unionWith.js +34 -0
  1373. node_ui/node_modules/lodash/uniq.js +25 -0
  1374. node_ui/node_modules/lodash/uniqBy.js +31 -0
  1375. node_ui/node_modules/lodash/uniqWith.js +28 -0
  1376. node_ui/node_modules/lodash/uniqueId.js +28 -0
  1377. node_ui/node_modules/lodash/unset.js +34 -0
  1378. node_ui/node_modules/lodash/unzip.js +45 -0
  1379. node_ui/node_modules/lodash/unzipWith.js +39 -0
  1380. node_ui/node_modules/lodash/update.js +35 -0
  1381. node_ui/node_modules/lodash/updateWith.js +33 -0
  1382. node_ui/node_modules/lodash/upperCase.js +27 -0
  1383. node_ui/node_modules/lodash/upperFirst.js +22 -0
  1384. node_ui/node_modules/lodash/util.js +34 -0
  1385. node_ui/node_modules/lodash/value.js +1 -0
  1386. node_ui/node_modules/lodash/valueOf.js +1 -0
  1387. node_ui/node_modules/lodash/values.js +34 -0
  1388. node_ui/node_modules/lodash/valuesIn.js +32 -0
  1389. node_ui/node_modules/lodash/without.js +31 -0
  1390. node_ui/node_modules/lodash/words.js +35 -0
  1391. node_ui/node_modules/lodash/wrap.js +30 -0
  1392. node_ui/node_modules/lodash/wrapperAt.js +48 -0
  1393. node_ui/node_modules/lodash/wrapperChain.js +34 -0
  1394. node_ui/node_modules/lodash/wrapperLodash.js +147 -0
  1395. node_ui/node_modules/lodash/wrapperReverse.js +44 -0
  1396. node_ui/node_modules/lodash/wrapperValue.js +21 -0
  1397. node_ui/node_modules/lodash/xor.js +28 -0
  1398. node_ui/node_modules/lodash/xorBy.js +39 -0
  1399. node_ui/node_modules/lodash/xorWith.js +34 -0
  1400. node_ui/node_modules/lodash/zip.js +22 -0
  1401. node_ui/node_modules/lodash/zipObject.js +24 -0
  1402. node_ui/node_modules/lodash/zipObjectDeep.js +23 -0
  1403. node_ui/node_modules/lodash/zipWith.js +32 -0
  1404. node_ui/node_modules/lodash.isequal/LICENSE +47 -0
  1405. node_ui/node_modules/lodash.isequal/README.md +18 -0
  1406. node_ui/node_modules/lodash.isequal/index.js +1848 -0
  1407. node_ui/node_modules/lodash.isequal/package.json +16 -0
  1408. node_ui/node_modules/loose-envify/LICENSE +21 -0
  1409. node_ui/node_modules/loose-envify/README.md +45 -0
  1410. node_ui/node_modules/loose-envify/cli.js +16 -0
  1411. node_ui/node_modules/loose-envify/custom.js +4 -0
  1412. node_ui/node_modules/loose-envify/index.js +3 -0
  1413. node_ui/node_modules/loose-envify/loose-envify.js +36 -0
  1414. node_ui/node_modules/loose-envify/package.json +36 -0
  1415. node_ui/node_modules/loose-envify/replace.js +65 -0
  1416. node_ui/node_modules/meow/build/dependencies.js +8828 -0
  1417. node_ui/node_modules/meow/build/index.d.ts +1425 -0
  1418. node_ui/node_modules/meow/build/index.js +95 -0
  1419. node_ui/node_modules/meow/build/licenses.md +1620 -0
  1420. node_ui/node_modules/meow/build/options.js +92 -0
  1421. node_ui/node_modules/meow/build/parser.js +84 -0
  1422. node_ui/node_modules/meow/build/utils.js +7 -0
  1423. node_ui/node_modules/meow/build/validate.js +122 -0
  1424. node_ui/node_modules/meow/license +9 -0
  1425. node_ui/node_modules/meow/package.json +105 -0
  1426. node_ui/node_modules/meow/readme.md +314 -0
  1427. node_ui/node_modules/mimic-fn/index.d.ts +54 -0
  1428. node_ui/node_modules/mimic-fn/index.js +13 -0
  1429. node_ui/node_modules/mimic-fn/license +9 -0
  1430. node_ui/node_modules/mimic-fn/package.json +42 -0
  1431. node_ui/node_modules/mimic-fn/readme.md +69 -0
  1432. node_ui/node_modules/onetime/index.d.ts +64 -0
  1433. node_ui/node_modules/onetime/index.js +44 -0
  1434. node_ui/node_modules/onetime/license +9 -0
  1435. node_ui/node_modules/onetime/package.json +43 -0
  1436. node_ui/node_modules/onetime/readme.md +94 -0
  1437. node_ui/node_modules/patch-console/dist/index.d.ts +4 -0
  1438. node_ui/node_modules/patch-console/dist/index.js +45 -0
  1439. node_ui/node_modules/patch-console/dist/index.js.map +1 -0
  1440. node_ui/node_modules/patch-console/license +9 -0
  1441. node_ui/node_modules/patch-console/package.json +53 -0
  1442. node_ui/node_modules/patch-console/readme.md +62 -0
  1443. node_ui/node_modules/react/LICENSE +21 -0
  1444. node_ui/node_modules/react/README.md +37 -0
  1445. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.development.js +1315 -0
  1446. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
  1447. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
  1448. node_ui/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
  1449. node_ui/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
  1450. node_ui/node_modules/react/cjs/react-jsx-runtime.profiling.min.js +11 -0
  1451. node_ui/node_modules/react/cjs/react.development.js +2740 -0
  1452. node_ui/node_modules/react/cjs/react.production.min.js +26 -0
  1453. node_ui/node_modules/react/cjs/react.shared-subset.development.js +20 -0
  1454. node_ui/node_modules/react/cjs/react.shared-subset.production.min.js +10 -0
  1455. node_ui/node_modules/react/index.js +7 -0
  1456. node_ui/node_modules/react/jsx-dev-runtime.js +7 -0
  1457. node_ui/node_modules/react/jsx-runtime.js +7 -0
  1458. node_ui/node_modules/react/package.json +47 -0
  1459. node_ui/node_modules/react/react.shared-subset.js +7 -0
  1460. node_ui/node_modules/react/umd/react.development.js +3343 -0
  1461. node_ui/node_modules/react/umd/react.production.min.js +31 -0
  1462. node_ui/node_modules/react/umd/react.profiling.min.js +31 -0
  1463. node_ui/node_modules/react-devtools-core/README.md +131 -0
  1464. node_ui/node_modules/react-devtools-core/backend.js +1 -0
  1465. node_ui/node_modules/react-devtools-core/dist/backend.js +16888 -0
  1466. node_ui/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  1467. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  1468. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  1469. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js +2 -0
  1470. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js.map +1 -0
  1471. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +2 -0
  1472. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  1473. node_ui/node_modules/react-devtools-core/dist/standalone.js +3 -0
  1474. node_ui/node_modules/react-devtools-core/dist/standalone.js.LICENSE.txt +41 -0
  1475. node_ui/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  1476. node_ui/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  1477. node_ui/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  1478. node_ui/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  1479. node_ui/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  1480. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  1481. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  1482. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  1483. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  1484. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  1485. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  1486. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  1487. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  1488. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  1489. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  1490. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  1491. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  1492. node_ui/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  1493. node_ui/node_modules/react-devtools-core/package.json +38 -0
  1494. node_ui/node_modules/react-devtools-core/standalone.js +1 -0
  1495. node_ui/node_modules/react-reconciler/LICENSE +21 -0
  1496. node_ui/node_modules/react-reconciler/README.md +337 -0
  1497. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.development.js +45 -0
  1498. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js +10 -0
  1499. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +660 -0
  1500. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +15 -0
  1501. node_ui/node_modules/react-reconciler/cjs/react-reconciler.development.js +21531 -0
  1502. node_ui/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +234 -0
  1503. node_ui/node_modules/react-reconciler/cjs/react-reconciler.profiling.min.js +255 -0
  1504. node_ui/node_modules/react-reconciler/constants.js +7 -0
  1505. node_ui/node_modules/react-reconciler/index.js +7 -0
  1506. node_ui/node_modules/react-reconciler/package.json +40 -0
  1507. node_ui/node_modules/react-reconciler/reflection.js +7 -0
  1508. node_ui/node_modules/restore-cursor/index.d.ts +11 -0
  1509. node_ui/node_modules/restore-cursor/index.js +11 -0
  1510. node_ui/node_modules/restore-cursor/license +9 -0
  1511. node_ui/node_modules/restore-cursor/package.json +55 -0
  1512. node_ui/node_modules/restore-cursor/readme.md +31 -0
  1513. node_ui/node_modules/scheduler/LICENSE +21 -0
  1514. node_ui/node_modules/scheduler/README.md +9 -0
  1515. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +700 -0
  1516. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.production.min.js +20 -0
  1517. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +207 -0
  1518. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.min.js +14 -0
  1519. node_ui/node_modules/scheduler/cjs/scheduler.development.js +634 -0
  1520. node_ui/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
  1521. node_ui/node_modules/scheduler/index.js +7 -0
  1522. node_ui/node_modules/scheduler/package.json +36 -0
  1523. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.development.js +699 -0
  1524. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.production.min.js +19 -0
  1525. node_ui/node_modules/scheduler/umd/scheduler.development.js +152 -0
  1526. node_ui/node_modules/scheduler/umd/scheduler.production.min.js +146 -0
  1527. node_ui/node_modules/scheduler/umd/scheduler.profiling.min.js +146 -0
  1528. node_ui/node_modules/scheduler/unstable_mock.js +7 -0
  1529. node_ui/node_modules/scheduler/unstable_post_task.js +7 -0
  1530. node_ui/node_modules/shell-quote/.eslintrc +30 -0
  1531. node_ui/node_modules/shell-quote/.github/FUNDING.yml +12 -0
  1532. node_ui/node_modules/shell-quote/.nycrc +14 -0
  1533. node_ui/node_modules/shell-quote/LICENSE +24 -0
  1534. node_ui/node_modules/shell-quote/README.md +161 -0
  1535. node_ui/node_modules/shell-quote/index.js +4 -0
  1536. node_ui/node_modules/shell-quote/package.json +72 -0
  1537. node_ui/node_modules/shell-quote/parse.js +226 -0
  1538. node_ui/node_modules/shell-quote/print.py +3 -0
  1539. node_ui/node_modules/shell-quote/quote.js +19 -0
  1540. node_ui/node_modules/shell-quote/security.md +11 -0
  1541. node_ui/node_modules/shell-quote/test/comment.js +16 -0
  1542. node_ui/node_modules/shell-quote/test/env.js +52 -0
  1543. node_ui/node_modules/shell-quote/test/env_fn.js +21 -0
  1544. node_ui/node_modules/shell-quote/test/op.js +102 -0
  1545. node_ui/node_modules/shell-quote/test/parse.js +44 -0
  1546. node_ui/node_modules/shell-quote/test/quote.js +60 -0
  1547. node_ui/node_modules/shell-quote/test/set.js +31 -0
  1548. node_ui/node_modules/signal-exit/LICENSE.txt +16 -0
  1549. node_ui/node_modules/signal-exit/README.md +39 -0
  1550. node_ui/node_modules/signal-exit/index.js +202 -0
  1551. node_ui/node_modules/signal-exit/package.json +38 -0
  1552. node_ui/node_modules/signal-exit/signals.js +53 -0
  1553. node_ui/node_modules/slice-ansi/index.d.ts +19 -0
  1554. node_ui/node_modules/slice-ansi/index.js +169 -0
  1555. node_ui/node_modules/slice-ansi/license +10 -0
  1556. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  1557. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js +12 -0
  1558. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/license +9 -0
  1559. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/package.json +53 -0
  1560. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/readme.md +31 -0
  1561. node_ui/node_modules/slice-ansi/package.json +58 -0
  1562. node_ui/node_modules/slice-ansi/readme.md +54 -0
  1563. node_ui/node_modules/stack-utils/LICENSE.md +21 -0
  1564. node_ui/node_modules/stack-utils/index.js +344 -0
  1565. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.d.ts +18 -0
  1566. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.js +11 -0
  1567. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/license +9 -0
  1568. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/package.json +43 -0
  1569. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/readme.md +29 -0
  1570. node_ui/node_modules/stack-utils/package.json +39 -0
  1571. node_ui/node_modules/stack-utils/readme.md +143 -0
  1572. node_ui/node_modules/string-width/index.d.ts +39 -0
  1573. node_ui/node_modules/string-width/index.js +82 -0
  1574. node_ui/node_modules/string-width/license +9 -0
  1575. node_ui/node_modules/string-width/package.json +64 -0
  1576. node_ui/node_modules/string-width/readme.md +66 -0
  1577. node_ui/node_modules/strip-ansi/index.d.ts +15 -0
  1578. node_ui/node_modules/strip-ansi/index.js +14 -0
  1579. node_ui/node_modules/strip-ansi/license +9 -0
  1580. node_ui/node_modules/strip-ansi/package.json +59 -0
  1581. node_ui/node_modules/strip-ansi/readme.md +37 -0
  1582. node_ui/node_modules/to-rotated/index.d.ts +18 -0
  1583. node_ui/node_modules/to-rotated/index.js +24 -0
  1584. node_ui/node_modules/to-rotated/license +9 -0
  1585. node_ui/node_modules/to-rotated/package.json +46 -0
  1586. node_ui/node_modules/to-rotated/readme.md +29 -0
  1587. node_ui/node_modules/type-fest/index.d.ts +178 -0
  1588. node_ui/node_modules/type-fest/license-cc0 +121 -0
  1589. node_ui/node_modules/type-fest/license-mit +9 -0
  1590. node_ui/node_modules/type-fest/package.json +91 -0
  1591. node_ui/node_modules/type-fest/readme.md +1060 -0
  1592. node_ui/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
  1593. node_ui/node_modules/type-fest/source/and.d.ts +25 -0
  1594. node_ui/node_modules/type-fest/source/array-indices.d.ts +23 -0
  1595. node_ui/node_modules/type-fest/source/array-slice.d.ts +109 -0
  1596. node_ui/node_modules/type-fest/source/array-splice.d.ts +99 -0
  1597. node_ui/node_modules/type-fest/source/array-tail.d.ts +76 -0
  1598. node_ui/node_modules/type-fest/source/array-values.d.ts +22 -0
  1599. node_ui/node_modules/type-fest/source/arrayable.d.ts +29 -0
  1600. node_ui/node_modules/type-fest/source/async-return-type.d.ts +23 -0
  1601. node_ui/node_modules/type-fest/source/asyncify.d.ts +32 -0
  1602. node_ui/node_modules/type-fest/source/basic.d.ts +68 -0
  1603. node_ui/node_modules/type-fest/source/camel-case.d.ts +89 -0
  1604. node_ui/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
  1605. node_ui/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
  1606. node_ui/node_modules/type-fest/source/conditional-except.d.ts +45 -0
  1607. node_ui/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
  1608. node_ui/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
  1609. node_ui/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
  1610. node_ui/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
  1611. node_ui/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
  1612. node_ui/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
  1613. node_ui/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
  1614. node_ui/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
  1615. node_ui/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
  1616. node_ui/node_modules/type-fest/source/empty-object.d.ts +46 -0
  1617. node_ui/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
  1618. node_ui/node_modules/type-fest/source/entries.d.ts +62 -0
  1619. node_ui/node_modules/type-fest/source/entry.d.ts +65 -0
  1620. node_ui/node_modules/type-fest/source/exact.d.ts +68 -0
  1621. node_ui/node_modules/type-fest/source/except.d.ts +108 -0
  1622. node_ui/node_modules/type-fest/source/find-global-type.d.ts +64 -0
  1623. node_ui/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
  1624. node_ui/node_modules/type-fest/source/get.d.ts +219 -0
  1625. node_ui/node_modules/type-fest/source/global-this.d.ts +21 -0
  1626. node_ui/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
  1627. node_ui/node_modules/type-fest/source/greater-than.d.ts +56 -0
  1628. node_ui/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
  1629. node_ui/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
  1630. node_ui/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
  1631. node_ui/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
  1632. node_ui/node_modules/type-fest/source/if-any.d.ts +24 -0
  1633. node_ui/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
  1634. node_ui/node_modules/type-fest/source/if-never.d.ts +24 -0
  1635. node_ui/node_modules/type-fest/source/if-null.d.ts +24 -0
  1636. node_ui/node_modules/type-fest/source/if-unknown.d.ts +24 -0
  1637. node_ui/node_modules/type-fest/source/includes.d.ts +22 -0
  1638. node_ui/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
  1639. node_ui/node_modules/type-fest/source/int-range.d.ts +55 -0
  1640. node_ui/node_modules/type-fest/source/internal/array.d.ts +126 -0
  1641. node_ui/node_modules/type-fest/source/internal/characters.d.ts +67 -0
  1642. node_ui/node_modules/type-fest/source/internal/index.d.ts +8 -0
  1643. node_ui/node_modules/type-fest/source/internal/keys.d.ts +97 -0
  1644. node_ui/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
  1645. node_ui/node_modules/type-fest/source/internal/object.d.ts +236 -0
  1646. node_ui/node_modules/type-fest/source/internal/string.d.ts +210 -0
  1647. node_ui/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
  1648. node_ui/node_modules/type-fest/source/internal/type.d.ts +139 -0
  1649. node_ui/node_modules/type-fest/source/invariant-of.d.ts +76 -0
  1650. node_ui/node_modules/type-fest/source/is-any.d.ts +33 -0
  1651. node_ui/node_modules/type-fest/source/is-equal.d.ts +31 -0
  1652. node_ui/node_modules/type-fest/source/is-float.d.ts +41 -0
  1653. node_ui/node_modules/type-fest/source/is-integer.d.ts +58 -0
  1654. node_ui/node_modules/type-fest/source/is-literal.d.ts +296 -0
  1655. node_ui/node_modules/type-fest/source/is-never.d.ts +42 -0
  1656. node_ui/node_modules/type-fest/source/is-null.d.ts +20 -0
  1657. node_ui/node_modules/type-fest/source/is-tuple.d.ts +89 -0
  1658. node_ui/node_modules/type-fest/source/is-unknown.d.ts +52 -0
  1659. node_ui/node_modules/type-fest/source/iterable-element.d.ts +64 -0
  1660. node_ui/node_modules/type-fest/source/join.d.ts +68 -0
  1661. node_ui/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
  1662. node_ui/node_modules/type-fest/source/jsonify.d.ts +122 -0
  1663. node_ui/node_modules/type-fest/source/kebab-case.d.ts +44 -0
  1664. node_ui/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
  1665. node_ui/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
  1666. node_ui/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
  1667. node_ui/node_modules/type-fest/source/last-array-element.d.ts +38 -0
  1668. node_ui/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
  1669. node_ui/node_modules/type-fest/source/less-than.d.ts +26 -0
  1670. node_ui/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
  1671. node_ui/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
  1672. node_ui/node_modules/type-fest/source/literal-union.d.ts +37 -0
  1673. node_ui/node_modules/type-fest/source/merge-deep.d.ts +486 -0
  1674. node_ui/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
  1675. node_ui/node_modules/type-fest/source/merge.d.ts +48 -0
  1676. node_ui/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
  1677. node_ui/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
  1678. node_ui/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
  1679. node_ui/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
  1680. node_ui/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
  1681. node_ui/node_modules/type-fest/source/numeric.d.ts +222 -0
  1682. node_ui/node_modules/type-fest/source/observable-like.d.ts +63 -0
  1683. node_ui/node_modules/type-fest/source/omit-deep.d.ts +167 -0
  1684. node_ui/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
  1685. node_ui/node_modules/type-fest/source/opaque.d.ts +1 -0
  1686. node_ui/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
  1687. node_ui/node_modules/type-fest/source/or.d.ts +25 -0
  1688. node_ui/node_modules/type-fest/source/override-properties.d.ts +36 -0
  1689. node_ui/node_modules/type-fest/source/package-json.d.ts +676 -0
  1690. node_ui/node_modules/type-fest/source/partial-deep.d.ts +151 -0
  1691. node_ui/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
  1692. node_ui/node_modules/type-fest/source/pascal-case.d.ts +42 -0
  1693. node_ui/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
  1694. node_ui/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
  1695. node_ui/node_modules/type-fest/source/paths.d.ts +262 -0
  1696. node_ui/node_modules/type-fest/source/pick-deep.d.ts +149 -0
  1697. node_ui/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
  1698. node_ui/node_modules/type-fest/source/primitive.d.ts +13 -0
  1699. node_ui/node_modules/type-fest/source/promisable.d.ts +25 -0
  1700. node_ui/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
  1701. node_ui/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
  1702. node_ui/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
  1703. node_ui/node_modules/type-fest/source/replace.d.ts +85 -0
  1704. node_ui/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
  1705. node_ui/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
  1706. node_ui/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
  1707. node_ui/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
  1708. node_ui/node_modules/type-fest/source/required-deep.d.ts +78 -0
  1709. node_ui/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
  1710. node_ui/node_modules/type-fest/source/schema.d.ts +114 -0
  1711. node_ui/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
  1712. node_ui/node_modules/type-fest/source/set-field-type.d.ts +65 -0
  1713. node_ui/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
  1714. node_ui/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
  1715. node_ui/node_modules/type-fest/source/set-optional.d.ts +38 -0
  1716. node_ui/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
  1717. node_ui/node_modules/type-fest/source/set-readonly.d.ts +39 -0
  1718. node_ui/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
  1719. node_ui/node_modules/type-fest/source/set-required.d.ts +70 -0
  1720. node_ui/node_modules/type-fest/source/set-return-type.d.ts +29 -0
  1721. node_ui/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
  1722. node_ui/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
  1723. node_ui/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  1724. node_ui/node_modules/type-fest/source/simplify.d.ts +58 -0
  1725. node_ui/node_modules/type-fest/source/single-key-object.d.ts +29 -0
  1726. node_ui/node_modules/type-fest/source/snake-case.d.ts +45 -0
  1727. node_ui/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
  1728. node_ui/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
  1729. node_ui/node_modules/type-fest/source/split.d.ts +88 -0
  1730. node_ui/node_modules/type-fest/source/spread.d.ts +84 -0
  1731. node_ui/node_modules/type-fest/source/string-key-of.d.ts +25 -0
  1732. node_ui/node_modules/type-fest/source/string-repeat.d.ts +47 -0
  1733. node_ui/node_modules/type-fest/source/string-slice.d.ts +37 -0
  1734. node_ui/node_modules/type-fest/source/stringified.d.ts +23 -0
  1735. node_ui/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
  1736. node_ui/node_modules/type-fest/source/subtract.d.ts +83 -0
  1737. node_ui/node_modules/type-fest/source/sum.d.ts +78 -0
  1738. node_ui/node_modules/type-fest/source/tagged-union.d.ts +51 -0
  1739. node_ui/node_modules/type-fest/source/tagged.d.ts +256 -0
  1740. node_ui/node_modules/type-fest/source/trim.d.ts +27 -0
  1741. node_ui/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
  1742. node_ui/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
  1743. node_ui/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
  1744. node_ui/node_modules/type-fest/source/typed-array.d.ts +17 -0
  1745. node_ui/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
  1746. node_ui/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
  1747. node_ui/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
  1748. node_ui/node_modules/type-fest/source/unknown-array.d.ts +25 -0
  1749. node_ui/node_modules/type-fest/source/unknown-map.d.ts +24 -0
  1750. node_ui/node_modules/type-fest/source/unknown-record.d.ts +31 -0
  1751. node_ui/node_modules/type-fest/source/unknown-set.d.ts +24 -0
  1752. node_ui/node_modules/type-fest/source/value-of.d.ts +42 -0
  1753. node_ui/node_modules/type-fest/source/words.d.ts +118 -0
  1754. node_ui/node_modules/type-fest/source/writable-deep.d.ts +83 -0
  1755. node_ui/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
  1756. node_ui/node_modules/type-fest/source/writable.d.ts +68 -0
  1757. node_ui/node_modules/widest-line/index.d.ts +12 -0
  1758. node_ui/node_modules/widest-line/index.js +11 -0
  1759. node_ui/node_modules/widest-line/license +9 -0
  1760. node_ui/node_modules/widest-line/package.json +60 -0
  1761. node_ui/node_modules/widest-line/readme.md +26 -0
  1762. node_ui/node_modules/wrap-ansi/index.d.ts +41 -0
  1763. node_ui/node_modules/wrap-ansi/index.js +222 -0
  1764. node_ui/node_modules/wrap-ansi/license +9 -0
  1765. node_ui/node_modules/wrap-ansi/package.json +69 -0
  1766. node_ui/node_modules/wrap-ansi/readme.md +75 -0
  1767. node_ui/node_modules/ws/LICENSE +20 -0
  1768. node_ui/node_modules/ws/README.md +548 -0
  1769. node_ui/node_modules/ws/browser.js +8 -0
  1770. node_ui/node_modules/ws/index.js +13 -0
  1771. node_ui/node_modules/ws/lib/buffer-util.js +131 -0
  1772. node_ui/node_modules/ws/lib/constants.js +18 -0
  1773. node_ui/node_modules/ws/lib/event-target.js +292 -0
  1774. node_ui/node_modules/ws/lib/extension.js +203 -0
  1775. node_ui/node_modules/ws/lib/limiter.js +55 -0
  1776. node_ui/node_modules/ws/lib/permessage-deflate.js +528 -0
  1777. node_ui/node_modules/ws/lib/receiver.js +706 -0
  1778. node_ui/node_modules/ws/lib/sender.js +602 -0
  1779. node_ui/node_modules/ws/lib/stream.js +161 -0
  1780. node_ui/node_modules/ws/lib/subprotocol.js +62 -0
  1781. node_ui/node_modules/ws/lib/validation.js +152 -0
  1782. node_ui/node_modules/ws/lib/websocket-server.js +550 -0
  1783. node_ui/node_modules/ws/lib/websocket.js +1388 -0
  1784. node_ui/node_modules/ws/package.json +69 -0
  1785. node_ui/node_modules/ws/wrapper.mjs +8 -0
  1786. node_ui/node_modules/yoga-wasm-web/LICENSE +21 -0
  1787. node_ui/node_modules/yoga-wasm-web/README.md +70 -0
  1788. node_ui/node_modules/yoga-wasm-web/dist/asm.d.ts +6 -0
  1789. node_ui/node_modules/yoga-wasm-web/dist/asm.js +1 -0
  1790. node_ui/node_modules/yoga-wasm-web/dist/auto.d.ts +7 -0
  1791. node_ui/node_modules/yoga-wasm-web/dist/browser.js +1 -0
  1792. node_ui/node_modules/yoga-wasm-web/dist/generated/YGEnums.d.ts +328 -0
  1793. node_ui/node_modules/yoga-wasm-web/dist/index.d.ts +7 -0
  1794. node_ui/node_modules/yoga-wasm-web/dist/index.js +1 -0
  1795. node_ui/node_modules/yoga-wasm-web/dist/node.js +1 -0
  1796. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-57389177.js +1 -0
  1797. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js +1 -0
  1798. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm.d.ts +176 -0
  1799. node_ui/node_modules/yoga-wasm-web/dist/yoga.wasm +0 -0
  1800. node_ui/node_modules/yoga-wasm-web/package.json +56 -0
  1801. node_ui/package.json +21 -0
  1802. claude_code_tools/codex_bridge_mcp.py +0 -333
  1803. claude_code_tools-0.2.0.dist-info/METADATA +0 -495
  1804. claude_code_tools-0.2.0.dist-info/RECORD +0 -22
  1805. {claude_code_tools-0.2.0.dist-info → claude_code_tools-1.4.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1321 @@
1
+ """Tantivy-based search index for session exports."""
2
+
3
+ import json
4
+ import math
5
+ import shutil
6
+ import sys
7
+ from dataclasses import dataclass
8
+ from datetime import datetime
9
+ from importlib.metadata import version as get_pkg_version
10
+ from pathlib import Path
11
+ from typing import Any, Optional
12
+
13
+ from claude_code_tools.session_utils import is_valid_session
14
+
15
+
16
+ def _get_package_version() -> str:
17
+ """Get installed package version for automatic index rebuilding."""
18
+ try:
19
+ return get_pkg_version("claude-code-tools")
20
+ except Exception:
21
+ return "unknown"
22
+
23
+ # Lazy imports to allow module to load even if deps not installed
24
+ try:
25
+ import yaml
26
+ YAML_AVAILABLE = True
27
+ except ImportError:
28
+ yaml = None # type: ignore
29
+ YAML_AVAILABLE = False
30
+
31
+ try:
32
+ import tantivy
33
+ TANTIVY_AVAILABLE = True
34
+ except ImportError:
35
+ tantivy = None # type: ignore
36
+ TANTIVY_AVAILABLE = False
37
+
38
+
39
+ def _require_deps():
40
+ """Raise helpful error if required dependencies are not installed."""
41
+ missing = []
42
+ if not YAML_AVAILABLE:
43
+ missing.append("pyyaml")
44
+ if not TANTIVY_AVAILABLE:
45
+ missing.append("tantivy")
46
+
47
+ if missing:
48
+ raise ImportError(
49
+ f"Missing dependencies for search indexing: {', '.join(missing)}\n"
50
+ f"Install with: pip install {' '.join(missing)}\n"
51
+ "Or reinstall claude-code-tools: uv tool install claude-code-tools"
52
+ )
53
+
54
+
55
+ def _iso_to_epoch_ms(iso_str: str) -> int:
56
+ """Convert ISO timestamp string to epoch milliseconds.
57
+
58
+ Args:
59
+ iso_str: ISO format timestamp (e.g., "2025-12-08T18:22:59.582Z")
60
+
61
+ Returns:
62
+ Epoch time in milliseconds, or 0 if parsing fails
63
+ """
64
+ if not iso_str:
65
+ return 0
66
+ try:
67
+ # Handle both Z suffix and +00:00 timezone formats
68
+ if "T" in iso_str:
69
+ dt = datetime.fromisoformat(iso_str.replace("Z", "+00:00"))
70
+ else:
71
+ dt = datetime.fromisoformat(iso_str)
72
+ return int(dt.timestamp() * 1000)
73
+ except (ValueError, TypeError):
74
+ return 0
75
+
76
+
77
+ @dataclass
78
+ class SearchResult:
79
+ """A search result with metadata and snippet."""
80
+
81
+ session_id: str
82
+ agent: str
83
+ project: str
84
+ branch: Optional[str]
85
+ cwd: Optional[str]
86
+ modified: str
87
+ lines: int
88
+ snippet: str
89
+ score: float
90
+ export_path: str
91
+
92
+
93
+ class IndexState:
94
+ """Track which files have been indexed to enable incremental updates."""
95
+
96
+ def __init__(self, state_path: Path):
97
+ self.state_path = state_path
98
+ self.indexed_files: dict[str, dict[str, Any]] = {}
99
+ self._load()
100
+
101
+ def _load(self):
102
+ """Load state from disk."""
103
+ if self.state_path.exists():
104
+ try:
105
+ with open(self.state_path, "r") as f:
106
+ self.indexed_files = json.load(f)
107
+ except (json.JSONDecodeError, IOError):
108
+ self.indexed_files = {}
109
+
110
+ def save(self):
111
+ """Save state to disk."""
112
+ self.state_path.parent.mkdir(parents=True, exist_ok=True)
113
+ with open(self.state_path, "w") as f:
114
+ json.dump(self.indexed_files, f)
115
+
116
+ def needs_reindex(self, file_path: Path) -> bool:
117
+ """Check if file needs to be (re-)indexed."""
118
+ key = str(file_path)
119
+ if key not in self.indexed_files:
120
+ return True
121
+
122
+ stat = file_path.stat()
123
+ stored = self.indexed_files[key]
124
+
125
+ # Reindex if mtime or size changed
126
+ return (
127
+ stat.st_mtime != stored.get("mtime")
128
+ or stat.st_size != stored.get("size")
129
+ )
130
+
131
+ def mark_indexed(self, file_path: Path):
132
+ """Mark file as indexed with current metadata."""
133
+ stat = file_path.stat()
134
+ self.indexed_files[str(file_path)] = {
135
+ "mtime": stat.st_mtime,
136
+ "size": stat.st_size,
137
+ }
138
+
139
+
140
+ class SessionIndex:
141
+ """Tantivy-based full-text search index for sessions."""
142
+
143
+ def __init__(self, index_path: Path):
144
+ """
145
+ Initialize or open a session index.
146
+
147
+ Args:
148
+ index_path: Directory for the Tantivy index
149
+
150
+ Raises:
151
+ ImportError: If tantivy or pyyaml is not installed
152
+ """
153
+ _require_deps()
154
+
155
+ self.index_path = Path(index_path)
156
+ self.state = IndexState(self.index_path / "index_state.json")
157
+
158
+ # Define schema
159
+ self.schema_builder = tantivy.SchemaBuilder()
160
+
161
+ # Stored fields (retrieved but not searched)
162
+ self.schema_builder.add_text_field("session_id", stored=True)
163
+ self.schema_builder.add_text_field("agent", stored=True)
164
+ self.schema_builder.add_text_field("project", stored=True)
165
+ self.schema_builder.add_text_field("branch", stored=True)
166
+ self.schema_builder.add_text_field("cwd", stored=True)
167
+ self.schema_builder.add_text_field("created", stored=True)
168
+ self.schema_builder.add_text_field("modified", stored=True)
169
+ # Fast field for sorting by modification time (epoch milliseconds)
170
+ self.schema_builder.add_unsigned_field("modified_ts", stored=True, fast=True)
171
+ self.schema_builder.add_integer_field("lines", stored=True)
172
+ # export_path needs "raw" tokenizer for exact match deletion
173
+ self.schema_builder.add_text_field("export_path", stored=True, tokenizer_name="raw")
174
+
175
+ # First and last message fields (for preview in TUI)
176
+ self.schema_builder.add_text_field("first_msg_role", stored=True)
177
+ self.schema_builder.add_text_field("first_msg_content", stored=True)
178
+ self.schema_builder.add_text_field("last_msg_role", stored=True)
179
+ self.schema_builder.add_text_field("last_msg_content", stored=True)
180
+
181
+ # Session type fields (for filtering in TUI)
182
+ self.schema_builder.add_text_field("derivation_type", stored=True)
183
+ self.schema_builder.add_text_field("is_sidechain", stored=True) # "true"/"false"
184
+
185
+ # Claude home field (for filtering by source Claude home directory)
186
+ # Use "raw" tokenizer so paths are indexed as single tokens for exact matching
187
+ self.schema_builder.add_text_field("claude_home", stored=True, tokenizer_name="raw")
188
+
189
+ # Custom title field (from /rename command)
190
+ self.schema_builder.add_text_field("custom_title", stored=True)
191
+
192
+ # Searchable content field
193
+ self.schema_builder.add_text_field("content", stored=True)
194
+
195
+ self.schema = self.schema_builder.build()
196
+
197
+ # Create or open index
198
+ self.index_path.mkdir(parents=True, exist_ok=True)
199
+
200
+ # Check index version - rebuild if package version changed
201
+ version_file = self.index_path / "VERSION"
202
+ current_version = _get_package_version()
203
+ needs_rebuild = False
204
+
205
+ if version_file.exists():
206
+ try:
207
+ stored_version = version_file.read_text().strip()
208
+ if stored_version != current_version:
209
+ needs_rebuild = True
210
+ print(
211
+ f"Package version changed ({stored_version} -> {current_version}), "
212
+ "rebuilding index..."
213
+ )
214
+ except IOError:
215
+ needs_rebuild = True
216
+ print("Index version file corrupted, rebuilding...")
217
+ elif (self.index_path / "meta.json").exists():
218
+ # Index exists but no VERSION file - legacy index, rebuild
219
+ needs_rebuild = True
220
+ print("Upgrading index to versioned format, rebuilding...")
221
+
222
+ if needs_rebuild:
223
+ # Clear index directory contents (but keep the directory itself)
224
+ for item in self.index_path.iterdir():
225
+ if item.is_file():
226
+ item.unlink()
227
+ elif item.is_dir():
228
+ shutil.rmtree(item)
229
+ # Reset state tracker
230
+ self.state = IndexState(self.index_path / "index_state.json")
231
+
232
+ # Create or open index
233
+ self.index = tantivy.Index(self.schema, path=str(self.index_path))
234
+
235
+ # Write current version
236
+ version_file.write_text(current_version)
237
+
238
+ def _parse_export_file(self, export_path: Path) -> Optional[dict[str, Any]]:
239
+ """
240
+ Parse an exported session file with YAML front matter.
241
+
242
+ Returns:
243
+ Dict with metadata and content, or None if parsing fails
244
+ """
245
+ try:
246
+ content = export_path.read_text(encoding="utf-8")
247
+
248
+ if not content.startswith("---\n"):
249
+ return None
250
+
251
+ end_idx = content.find("\n---\n", 4)
252
+ if end_idx == -1:
253
+ return None
254
+
255
+ yaml_str = content[4:end_idx]
256
+ metadata = yaml.safe_load(yaml_str)
257
+
258
+ conversation = content[end_idx + 5:]
259
+
260
+ return {
261
+ "metadata": metadata,
262
+ "content": conversation,
263
+ "export_path": str(export_path),
264
+ }
265
+ except Exception:
266
+ return None
267
+
268
+ def build_from_exports(
269
+ self, exports_dir: Path, incremental: bool = True
270
+ ) -> dict[str, int]:
271
+ """
272
+ Build or update index from exported session files.
273
+
274
+ Args:
275
+ exports_dir: Directory containing exported .txt files
276
+ (expects subdirs: claude/, codex/)
277
+ incremental: If True, only index new/modified files
278
+
279
+ Returns:
280
+ Stats dict: {indexed, skipped, failed}
281
+ """
282
+ stats = {"indexed": 0, "skipped": 0, "failed": 0}
283
+
284
+ writer = self.index.writer()
285
+
286
+ # Find all export files
287
+ export_files = []
288
+ for subdir in ["claude", "codex"]:
289
+ subdir_path = exports_dir / subdir
290
+ if subdir_path.exists():
291
+ export_files.extend(subdir_path.glob("*.txt"))
292
+
293
+ for export_path in export_files:
294
+ # Check if needs indexing
295
+ if incremental and not self.state.needs_reindex(export_path):
296
+ stats["skipped"] += 1
297
+ continue
298
+
299
+ # Parse export file
300
+ parsed = self._parse_export_file(export_path)
301
+ if parsed is None:
302
+ stats["failed"] += 1
303
+ continue
304
+
305
+ metadata = parsed["metadata"]
306
+
307
+ # Create document
308
+ doc = tantivy.Document()
309
+ doc.add_text("session_id", metadata.get("session_id", ""))
310
+ doc.add_text("agent", metadata.get("agent", ""))
311
+ doc.add_text("project", metadata.get("project", ""))
312
+ doc.add_text("branch", metadata.get("branch", "") or "")
313
+ doc.add_text("cwd", metadata.get("cwd", "") or "")
314
+ doc.add_text("created", metadata.get("created", "") or "")
315
+ modified_str = metadata.get("modified", "")
316
+ doc.add_text("modified", modified_str)
317
+ doc.add_unsigned("modified_ts", _iso_to_epoch_ms(modified_str))
318
+ doc.add_integer("lines", metadata.get("lines", 0))
319
+ doc.add_text("export_path", parsed["export_path"])
320
+
321
+ # First and last message fields
322
+ first_msg = metadata.get("first_msg", {}) or {}
323
+ last_msg = metadata.get("last_msg", {}) or {}
324
+ doc.add_text("first_msg_role", first_msg.get("role", ""))
325
+ doc.add_text("first_msg_content", first_msg.get("content", ""))
326
+ doc.add_text("last_msg_role", last_msg.get("role", ""))
327
+ doc.add_text("last_msg_content", last_msg.get("content", ""))
328
+
329
+ # Session type fields
330
+ doc.add_text("derivation_type", metadata.get("derivation_type", "") or "")
331
+ doc.add_text(
332
+ "is_sidechain",
333
+ "true" if metadata.get("is_sidechain") else "false"
334
+ )
335
+
336
+ # Custom title (from /rename command)
337
+ doc.add_text("custom_title", metadata.get("customTitle", "") or "")
338
+
339
+ doc.add_text("content", parsed["content"])
340
+
341
+ writer.add_document(doc)
342
+ self.state.mark_indexed(export_path)
343
+ stats["indexed"] += 1
344
+
345
+ writer.commit()
346
+ self.state.save()
347
+ self.index.reload()
348
+
349
+ return stats
350
+
351
+ def index_single_file(
352
+ self, export_path: Path, writer, incremental: bool = True
353
+ ) -> dict:
354
+ """
355
+ Index a single export file.
356
+
357
+ Args:
358
+ export_path: Path to exported .txt file
359
+ writer: Tantivy index writer
360
+ incremental: If True, skip if already indexed
361
+
362
+ Returns:
363
+ Dict with result: {status, error}
364
+ status: 'indexed', 'skipped', 'failed'
365
+ """
366
+ result: dict = {"status": "failed", "error": None}
367
+
368
+ if not export_path.exists():
369
+ result["error"] = "file not found"
370
+ return result
371
+
372
+ # Check if needs indexing
373
+ if incremental and not self.state.needs_reindex(export_path):
374
+ result["status"] = "skipped"
375
+ return result
376
+
377
+ # Parse export file
378
+ try:
379
+ parsed = self._parse_export_file(export_path)
380
+ except Exception as e:
381
+ result["error"] = f"parse error: {e}"
382
+ return result
383
+
384
+ if parsed is None:
385
+ result["error"] = "failed to parse YAML frontmatter"
386
+ return result
387
+
388
+ metadata = parsed["metadata"]
389
+
390
+ try:
391
+ # Create document
392
+ doc = tantivy.Document()
393
+ doc.add_text("session_id", metadata.get("session_id", ""))
394
+ doc.add_text("agent", metadata.get("agent", ""))
395
+ doc.add_text("project", metadata.get("project", ""))
396
+ doc.add_text("branch", metadata.get("branch", "") or "")
397
+ doc.add_text("cwd", metadata.get("cwd", "") or "")
398
+ doc.add_text("created", metadata.get("created", "") or "")
399
+ modified_str = metadata.get("modified", "")
400
+ doc.add_text("modified", modified_str)
401
+ doc.add_unsigned("modified_ts", _iso_to_epoch_ms(modified_str))
402
+ doc.add_integer("lines", metadata.get("lines", 0))
403
+ doc.add_text("export_path", parsed["export_path"])
404
+
405
+ # First and last message fields
406
+ first_msg = metadata.get("first_msg", {}) or {}
407
+ last_msg = metadata.get("last_msg", {}) or {}
408
+ doc.add_text("first_msg_role", first_msg.get("role", ""))
409
+ doc.add_text("first_msg_content", first_msg.get("content", ""))
410
+ doc.add_text("last_msg_role", last_msg.get("role", ""))
411
+ doc.add_text("last_msg_content", last_msg.get("content", ""))
412
+
413
+ # Session type fields
414
+ doc.add_text(
415
+ "derivation_type", metadata.get("derivation_type", "") or ""
416
+ )
417
+ doc.add_text(
418
+ "is_sidechain",
419
+ "true" if metadata.get("is_sidechain") else "false"
420
+ )
421
+
422
+ # Custom title (from /rename command)
423
+ doc.add_text("custom_title", metadata.get("customTitle", "") or "")
424
+
425
+ doc.add_text("content", parsed["content"])
426
+
427
+ writer.add_document(doc)
428
+ self.state.mark_indexed(export_path)
429
+ result["status"] = "indexed"
430
+ except Exception as e:
431
+ result["error"] = f"index error: {e}"
432
+
433
+ return result
434
+
435
+ def get_writer(self):
436
+ """Get a writer for batch indexing."""
437
+ return self.index.writer()
438
+
439
+ def commit_and_reload(self, writer):
440
+ """Commit writer changes and reload index."""
441
+ writer.commit()
442
+ self.state.save()
443
+ self.index.reload()
444
+
445
+ def build_from_files(
446
+ self, export_files: list[Path], incremental: bool = True
447
+ ) -> dict[str, int]:
448
+ """
449
+ Build or update index from a list of exported session files.
450
+
451
+ This is the per-project alternative to build_from_exports().
452
+ Instead of expecting a single directory, it accepts a list of
453
+ export file paths from multiple project directories.
454
+
455
+ Args:
456
+ export_files: List of paths to exported .txt files
457
+ incremental: If True, only index new/modified files
458
+
459
+ Returns:
460
+ Stats dict: {indexed, skipped, failed}
461
+ """
462
+ stats = {"indexed": 0, "skipped": 0, "failed": 0}
463
+
464
+ writer = self.get_writer()
465
+
466
+ for export_path in export_files:
467
+ result = self.index_single_file(export_path, writer, incremental)
468
+ if result["status"] == "indexed":
469
+ stats["indexed"] += 1
470
+ elif result["status"] == "skipped":
471
+ stats["skipped"] += 1
472
+ else:
473
+ stats["failed"] += 1
474
+
475
+ self.commit_and_reload(writer)
476
+
477
+ return stats
478
+
479
+ def _extract_session_content(
480
+ self, jsonl_path: Path, agent: str
481
+ ) -> tuple[str, int, str]:
482
+ """
483
+ Extract searchable content from a session file.
484
+
485
+ Handles both Claude and Codex JSONL formats.
486
+
487
+ Args:
488
+ jsonl_path: Path to session JSONL file
489
+ agent: Agent type ('claude' or 'codex')
490
+
491
+ Returns:
492
+ Tuple of (content_string, user_message_count, custom_title)
493
+ """
494
+ messages = []
495
+ user_count = 0 # Count only user messages for the "lines" metric
496
+ custom_title = "" # Session name from /rename command
497
+
498
+ try:
499
+ with open(jsonl_path, "r", encoding="utf-8") as f:
500
+ for line in f:
501
+ line = line.strip()
502
+ if not line:
503
+ continue
504
+
505
+ try:
506
+ data = json.loads(line)
507
+ except json.JSONDecodeError:
508
+ continue
509
+
510
+ # Check for custom-title (from /rename command)
511
+ if data.get("type") == "custom-title":
512
+ custom_title = data.get("customTitle", "")
513
+ continue
514
+
515
+ role: Optional[str] = None
516
+ text: str = ""
517
+
518
+ if agent == "claude":
519
+ # Claude format: type is "user" or "assistant"
520
+ msg_type = data.get("type")
521
+ if msg_type not in ("user", "assistant"):
522
+ continue
523
+
524
+ role = msg_type
525
+ message = data.get("message", {})
526
+ content = message.get("content")
527
+
528
+ # Count user messages, but exclude tool results
529
+ # Tool results have content as list with {"type": "tool_result"}
530
+ # Real user messages have content as string or list with text
531
+ if role == "user":
532
+ is_tool_result = (
533
+ isinstance(content, list)
534
+ and len(content) > 0
535
+ and isinstance(content[0], dict)
536
+ and content[0].get("type") == "tool_result"
537
+ )
538
+ if not is_tool_result:
539
+ user_count += 1
540
+
541
+ if not content:
542
+ continue
543
+
544
+ # Extract text content
545
+ if isinstance(content, str):
546
+ text = content
547
+ elif isinstance(content, list):
548
+ for block in content:
549
+ if isinstance(block, str):
550
+ text += block + "\n"
551
+ elif isinstance(block, dict):
552
+ if block.get("type") == "text":
553
+ text += block.get("text", "") + "\n"
554
+ elif block.get("type") == "tool_use":
555
+ tool_name = block.get("name", "")
556
+ text += f"[Tool: {tool_name}]\n"
557
+ # Index tool input content
558
+ tool_input = block.get("input", {})
559
+ if isinstance(tool_input, dict):
560
+ for value in tool_input.values():
561
+ if isinstance(value, str) and value:
562
+ text += f"{value}\n"
563
+ elif block.get("type") == "tool_result":
564
+ result = block.get("content", "")
565
+ if isinstance(result, str):
566
+ text += result[:500] + "\n"
567
+
568
+ elif agent == "codex":
569
+ # Codex format: type is "response_item" with payload
570
+ if data.get("type") != "response_item":
571
+ continue
572
+
573
+ payload = data.get("payload", {})
574
+ if payload.get("type") != "message":
575
+ continue
576
+
577
+ role = payload.get("role")
578
+ if role == "user":
579
+ user_count += 1
580
+ content = payload.get("content", [])
581
+
582
+ if not isinstance(content, list):
583
+ continue
584
+
585
+ for block in content:
586
+ if not isinstance(block, dict):
587
+ continue
588
+ block_type = block.get("type")
589
+ # input_text (user) and output_text (assistant)
590
+ if block_type in ("input_text", "output_text"):
591
+ text += block.get("text", "") + "\n"
592
+
593
+ if role and text.strip():
594
+ messages.append(f"[{role}] {text.strip()}")
595
+
596
+ except (OSError, IOError):
597
+ pass
598
+
599
+ return "\n\n".join(messages), user_count, custom_title
600
+
601
+ def _parse_jsonl_session(self, jsonl_path: Path) -> Optional[dict[str, Any]]:
602
+ """
603
+ Parse a JSONL session file directly (no export step).
604
+
605
+ Uses extract_session_metadata() from export_session.py for metadata,
606
+ and handles both Claude and Codex JSONL formats for content.
607
+
608
+ Args:
609
+ jsonl_path: Path to the session JSONL file
610
+
611
+ Returns:
612
+ Dict with metadata and content suitable for indexing, or None on failure
613
+ """
614
+ try:
615
+ # Detect agent from path
616
+ path_str = str(jsonl_path)
617
+ agent = "codex" if ".codex" in path_str else "claude"
618
+
619
+ # Use existing helper for metadata extraction
620
+ from claude_code_tools.export_session import extract_session_metadata
621
+ metadata = extract_session_metadata(jsonl_path, agent)
622
+
623
+ # Extract content for full-text search (also extracts custom_title)
624
+ content, msg_count, custom_title = self._extract_session_content(
625
+ jsonl_path, agent
626
+ )
627
+
628
+ # Add custom_title to metadata (extracted during content scan)
629
+ if custom_title:
630
+ metadata["customTitle"] = custom_title
631
+
632
+ if msg_count == 0:
633
+ return {"_skip_reason": "empty"}
634
+
635
+ # Map metadata fields to expected format
636
+ first_msg = metadata.get("first_msg") or {"role": "", "content": ""}
637
+ last_msg = metadata.get("last_msg") or {"role": "", "content": ""}
638
+
639
+ # Always use filename-derived session_id (the canonical identifier)
640
+ # Internal sessionId field can be stale in forked sessions
641
+ # Extract UUID from filename: last 36 chars of stem (handles both
642
+ # "uuid.jsonl" and "rollout-timestamp-uuid.jsonl" formats)
643
+ stem = jsonl_path.stem
644
+ session_id = stem[-36:] if len(stem) >= 36 else stem
645
+
646
+ return {
647
+ "metadata": {
648
+ "session_id": session_id,
649
+ "agent": agent,
650
+ "project": metadata.get("project", ""),
651
+ "branch": metadata.get("branch", "") or "",
652
+ "cwd": metadata.get("cwd", "") or "",
653
+ "created": metadata.get("created", "") or "",
654
+ "modified": metadata.get("modified", "") or "",
655
+ "is_sidechain": metadata.get("is_sidechain", False),
656
+ "derivation_type": metadata.get("derivation_type", "") or "",
657
+ "session_type": metadata.get("session_type"),
658
+ "customTitle": metadata.get("customTitle", "") or "",
659
+ },
660
+ "content": content,
661
+ "first_msg": first_msg,
662
+ "last_msg": last_msg,
663
+ "lines": msg_count,
664
+ "file_path": str(jsonl_path),
665
+ }
666
+ except Exception as e:
667
+ return {"_skip_reason": "parse_error", "_error": str(e)}
668
+
669
+ def index_from_jsonl(
670
+ self,
671
+ jsonl_files: list[Path],
672
+ incremental: bool = True,
673
+ claude_home: Optional[Path] = None,
674
+ codex_home: Optional[Path] = None,
675
+ show_progress: bool = False,
676
+ ) -> dict[str, int]:
677
+ """
678
+ Build or update index directly from JSONL session files.
679
+
680
+ This is the "zero-config" approach - no export step needed.
681
+ Parses JSONL directly and indexes to Tantivy.
682
+
683
+ Args:
684
+ jsonl_files: List of paths to session JSONL files
685
+ incremental: If True, only index new/modified files
686
+ claude_home: Claude home directory (stored for filtering)
687
+ codex_home: Codex home directory (stored for filtering)
688
+ show_progress: If True, show tqdm progress bar
689
+
690
+ Returns:
691
+ Stats dict: {indexed, skipped, failed}
692
+ """
693
+ claude_home_str = str(claude_home) if claude_home else ""
694
+ codex_home_str = str(codex_home) if codex_home else str(Path.home() / ".codex")
695
+ stats = {
696
+ "indexed": 0, "skipped": 0, "failed": 0,
697
+ "empty": 0, "parse_error": 0, "index_error": 0,
698
+ }
699
+
700
+ writer = self.get_writer()
701
+
702
+ # Wrap iterator with tqdm if progress requested
703
+ file_iter: Any = jsonl_files
704
+ if show_progress:
705
+ try:
706
+ from tqdm import tqdm
707
+ file_iter = tqdm(
708
+ jsonl_files,
709
+ desc="Indexing sessions",
710
+ unit="file",
711
+ file=sys.stderr,
712
+ )
713
+ except ImportError:
714
+ print("Note: Install tqdm for progress bar (pip install tqdm)",
715
+ file=sys.stderr)
716
+
717
+ for jsonl_path in file_iter:
718
+ # Check if needs indexing
719
+ if incremental and not self.state.needs_reindex(jsonl_path):
720
+ stats["skipped"] += 1
721
+ continue
722
+
723
+ # Skip invalid sessions (metadata-only files like file-history-snapshot)
724
+ if not is_valid_session(jsonl_path):
725
+ stats["skipped"] += 1
726
+ # Mark as indexed so we don't re-check next time
727
+ self.state.mark_indexed(jsonl_path)
728
+ continue
729
+
730
+ # Parse JSONL file
731
+ parsed = self._parse_jsonl_session(jsonl_path)
732
+ if parsed is None or "_skip_reason" in parsed:
733
+ stats["failed"] += 1
734
+ if parsed:
735
+ reason = parsed.get("_skip_reason", "unknown")
736
+ if reason == "empty":
737
+ stats["empty"] += 1
738
+ elif reason == "parse_error":
739
+ stats["parse_error"] += 1
740
+ continue
741
+
742
+ metadata = parsed["metadata"]
743
+ first_msg = parsed["first_msg"]
744
+ last_msg = parsed["last_msg"]
745
+
746
+ # Skip helper sessions (SDK/headless sessions used for analysis)
747
+ if metadata.get("session_type") == "helper":
748
+ stats["skipped"] += 1
749
+ # Mark as indexed so we don't re-check next time
750
+ self.state.mark_indexed(jsonl_path)
751
+ continue
752
+
753
+ # Skip sessions run from inside claude_home or codex_home directories
754
+ cwd = metadata.get("cwd", "") or ""
755
+ if cwd and (
756
+ (claude_home_str and cwd.startswith(claude_home_str))
757
+ or (codex_home_str and cwd.startswith(codex_home_str))
758
+ ):
759
+ stats["skipped"] += 1
760
+ continue
761
+
762
+ try:
763
+ session_id = metadata.get("session_id", "")
764
+ file_path_str = str(jsonl_path)
765
+
766
+ # Delete by file path (unique), not sessionId (shared by sub-agents)
767
+ writer.delete_documents("export_path", file_path_str)
768
+
769
+ # Create document
770
+ doc = tantivy.Document()
771
+ doc.add_text("session_id", session_id)
772
+ doc.add_text("agent", metadata.get("agent", ""))
773
+ doc.add_text("project", metadata.get("project", ""))
774
+ doc.add_text("branch", metadata.get("branch", "") or "")
775
+ doc.add_text("cwd", metadata.get("cwd", "") or "")
776
+ doc.add_text("created", metadata.get("created", "") or "")
777
+ modified_str = metadata.get("modified", "")
778
+ doc.add_text("modified", modified_str)
779
+ doc.add_unsigned("modified_ts", _iso_to_epoch_ms(modified_str))
780
+ doc.add_integer("lines", parsed.get("lines", 0))
781
+ doc.add_text("export_path", parsed["file_path"]) # Store JSONL path
782
+
783
+ # First and last message fields
784
+ doc.add_text("first_msg_role", first_msg.get("role", ""))
785
+ doc.add_text("first_msg_content", first_msg.get("content", ""))
786
+ doc.add_text("last_msg_role", last_msg.get("role", ""))
787
+ doc.add_text("last_msg_content", last_msg.get("content", ""))
788
+
789
+ # Session type fields
790
+ doc.add_text(
791
+ "derivation_type", metadata.get("derivation_type", "") or ""
792
+ )
793
+ doc.add_text(
794
+ "is_sidechain",
795
+ "true" if metadata.get("is_sidechain") else "false"
796
+ )
797
+
798
+ # Custom title (from /rename command)
799
+ doc.add_text("custom_title", metadata.get("customTitle", "") or "")
800
+
801
+ # Source home (for filtering by source directory)
802
+ # Detect from path whether this is a Claude or Codex session
803
+ agent = metadata.get("agent", "")
804
+ if agent == "codex" or ".codex" in file_path_str:
805
+ # Codex session - store codex home
806
+ doc.add_text("claude_home", codex_home_str)
807
+ else:
808
+ # Claude session - store claude home
809
+ doc.add_text("claude_home", claude_home_str)
810
+
811
+ doc.add_text("content", parsed["content"])
812
+
813
+ writer.add_document(doc)
814
+ self.state.mark_indexed(jsonl_path)
815
+ stats["indexed"] += 1
816
+ except Exception:
817
+ stats["failed"] += 1
818
+ stats["index_error"] += 1
819
+
820
+ self.commit_and_reload(writer)
821
+
822
+ return stats
823
+
824
+ def prune_deleted(self) -> int:
825
+ """
826
+ Remove deleted files from the index.
827
+
828
+ Checks all files tracked in the index state and removes any that
829
+ no longer exist on disk. This handles the case where sessions are
830
+ deleted outside of the search tool.
831
+
832
+ Returns:
833
+ Number of entries pruned from the index.
834
+ """
835
+ if not self.state.indexed_files:
836
+ return 0
837
+
838
+ # First pass: identify deleted files
839
+ files_to_remove = [
840
+ file_path for file_path in self.state.indexed_files
841
+ if not Path(file_path).exists()
842
+ ]
843
+
844
+ if not files_to_remove:
845
+ return 0
846
+
847
+ # Only create writer if we have deletions
848
+ writer = self.get_writer()
849
+
850
+ for file_path in files_to_remove:
851
+ # Delete from Tantivy index
852
+ writer.delete_documents("export_path", file_path)
853
+ # Remove from state tracking
854
+ del self.state.indexed_files[file_path]
855
+
856
+ self.commit_and_reload(writer)
857
+
858
+ return len(files_to_remove)
859
+
860
+ def _generate_snippet(
861
+ self, content: str, query: str, max_len: int = 200
862
+ ) -> str:
863
+ """
864
+ Generate a snippet centered around the first match.
865
+
866
+ Args:
867
+ content: Full content text
868
+ query: Search query
869
+ max_len: Maximum snippet length
870
+
871
+ Returns:
872
+ Snippet with match context
873
+ """
874
+ if not query:
875
+ # For empty query, return start of content
876
+ return content[:max_len].strip() + "..." if len(content) > max_len else content.strip()
877
+
878
+ lower_content = content.lower()
879
+ lower_query = query.lower()
880
+
881
+ # Find first occurrence
882
+ pos = lower_content.find(lower_query)
883
+ if pos == -1:
884
+ # Try individual words
885
+ for word in query.split():
886
+ pos = lower_content.find(word.lower())
887
+ if pos != -1:
888
+ break
889
+
890
+ if pos == -1:
891
+ return content[:max_len].strip() + "..."
892
+
893
+ # Center snippet around match
894
+ half_len = max_len // 2
895
+ start = max(0, pos - half_len)
896
+ end = min(len(content), pos + len(query) + half_len)
897
+
898
+ snippet = content[start:end].strip()
899
+
900
+ # Add ellipses
901
+ if start > 0:
902
+ snippet = "..." + snippet
903
+ if end < len(content):
904
+ snippet = snippet + "..."
905
+
906
+ # Clean up newlines
907
+ snippet = " ".join(snippet.split())
908
+
909
+ return snippet
910
+
911
+ def _calculate_recency_score(
912
+ self, modified: str, base_score: float, half_life_days: float = 7.0
913
+ ) -> float:
914
+ """
915
+ Apply recency boost using exponential decay.
916
+
917
+ Args:
918
+ modified: ISO format timestamp
919
+ base_score: Original Tantivy score
920
+ half_life_days: Days for score to decay by half
921
+
922
+ Returns:
923
+ Score with recency boost (up to 2x for very recent)
924
+ """
925
+ try:
926
+ # Parse modified timestamp
927
+ if "T" in modified:
928
+ mod_time = datetime.fromisoformat(modified.replace("Z", "+00:00"))
929
+ else:
930
+ mod_time = datetime.fromisoformat(modified)
931
+
932
+ now = datetime.now(mod_time.tzinfo) if mod_time.tzinfo else datetime.now()
933
+ age_seconds = (now - mod_time).total_seconds()
934
+
935
+ half_life_secs = half_life_days * 24 * 3600
936
+ recency_boost = 1.0 + math.exp(-age_seconds / half_life_secs)
937
+
938
+ return base_score * recency_boost
939
+ except Exception:
940
+ return base_score
941
+
942
+ def search(
943
+ self,
944
+ query: str,
945
+ limit: int = 50,
946
+ project: Optional[str] = None,
947
+ ) -> list[dict[str, Any]]:
948
+ """
949
+ Search the index.
950
+
951
+ Args:
952
+ query: Search query (empty returns recent sessions)
953
+ limit: Maximum results
954
+ project: Filter to specific project
955
+
956
+ Returns:
957
+ List of result dicts with metadata and snippets
958
+ """
959
+ if not query and not project:
960
+ return self.get_recent(limit=limit)
961
+
962
+ searcher = self.index.searcher()
963
+
964
+ # Build query
965
+ if query:
966
+ # Use Index.parse_query with default fields
967
+ parsed_query = self.index.parse_query(query, ["content"])
968
+ else:
969
+ # Match all for project filter
970
+ parsed_query = self.index.parse_query("*", ["content"])
971
+
972
+ # Execute search
973
+ results = []
974
+ top_docs = searcher.search(parsed_query, limit * 2) # Fetch extra for filtering
975
+
976
+ for score, doc_address in top_docs.hits:
977
+ doc = searcher.doc(doc_address)
978
+
979
+ # Extract fields
980
+ session_id = doc.get_first("session_id")
981
+ agent = doc.get_first("agent")
982
+ doc_project = doc.get_first("project")
983
+ branch = doc.get_first("branch")
984
+ cwd = doc.get_first("cwd")
985
+ created = doc.get_first("created")
986
+ modified = doc.get_first("modified")
987
+ lines = doc.get_first("lines")
988
+ export_path = doc.get_first("export_path")
989
+ content = doc.get_first("content")
990
+
991
+ # Apply project filter
992
+ if project and doc_project != project:
993
+ continue
994
+
995
+ # Skip if session file no longer exists (deleted outside of search)
996
+ if export_path and not Path(export_path).exists():
997
+ continue
998
+
999
+ # Generate snippet
1000
+ snippet = self._generate_snippet(content, query)
1001
+
1002
+ # Apply recency scoring
1003
+ final_score = self._calculate_recency_score(modified, score)
1004
+
1005
+ # Extract first/last message fields
1006
+ first_msg_role = doc.get_first("first_msg_role") or ""
1007
+ first_msg_content = doc.get_first("first_msg_content") or ""
1008
+ last_msg_role = doc.get_first("last_msg_role") or ""
1009
+ last_msg_content = doc.get_first("last_msg_content") or ""
1010
+
1011
+ results.append({
1012
+ "session_id": session_id,
1013
+ "agent": agent,
1014
+ "project": doc_project,
1015
+ "branch": branch,
1016
+ "cwd": cwd,
1017
+ "created": created,
1018
+ "modified": modified,
1019
+ "lines": lines,
1020
+ "export_path": export_path,
1021
+ "snippet": snippet,
1022
+ "score": final_score,
1023
+ "first_msg_role": first_msg_role,
1024
+ "first_msg_content": first_msg_content,
1025
+ "last_msg_role": last_msg_role,
1026
+ "last_msg_content": last_msg_content,
1027
+ })
1028
+
1029
+ if len(results) >= limit:
1030
+ break
1031
+
1032
+ # Sort by score (recency-adjusted)
1033
+ results.sort(key=lambda x: x["score"], reverse=True)
1034
+
1035
+ return results
1036
+
1037
+ def get_recent(
1038
+ self, limit: int = 20, project: Optional[str] = None
1039
+ ) -> list[dict[str, Any]]:
1040
+ """
1041
+ Get recent sessions sorted by modification time.
1042
+
1043
+ Args:
1044
+ limit: Maximum results
1045
+ project: Filter to specific project
1046
+
1047
+ Returns:
1048
+ List of result dicts sorted by recency
1049
+ """
1050
+ searcher = self.index.searcher()
1051
+
1052
+ # Match all documents
1053
+ all_query = tantivy.Query.all_query()
1054
+ top_docs = searcher.search(all_query, limit * 3) # Fetch extra for filtering
1055
+
1056
+ results = []
1057
+ for _, doc_address in top_docs.hits:
1058
+ doc = searcher.doc(doc_address)
1059
+
1060
+ doc_project = doc.get_first("project")
1061
+ export_path = doc.get_first("export_path")
1062
+
1063
+ # Apply project filter
1064
+ if project and doc_project != project:
1065
+ continue
1066
+
1067
+ # Skip if session file no longer exists (deleted outside of search)
1068
+ if export_path and not Path(export_path).exists():
1069
+ continue
1070
+
1071
+ modified = doc.get_first("modified")
1072
+ content = doc.get_first("content")
1073
+
1074
+ results.append({
1075
+ "session_id": doc.get_first("session_id"),
1076
+ "agent": doc.get_first("agent"),
1077
+ "project": doc_project,
1078
+ "branch": doc.get_first("branch"),
1079
+ "cwd": doc.get_first("cwd"),
1080
+ "created": doc.get_first("created"),
1081
+ "modified": modified,
1082
+ "lines": doc.get_first("lines"),
1083
+ "export_path": export_path,
1084
+ "snippet": self._generate_snippet(content, ""),
1085
+ "score": 0.0,
1086
+ "first_msg_role": doc.get_first("first_msg_role") or "",
1087
+ "first_msg_content": doc.get_first("first_msg_content") or "",
1088
+ "last_msg_role": doc.get_first("last_msg_role") or "",
1089
+ "last_msg_content": doc.get_first("last_msg_content") or "",
1090
+ "claude_home": doc.get_first("claude_home") or "",
1091
+ })
1092
+
1093
+ # Sort by modified timestamp (most recent first)
1094
+ results.sort(key=lambda x: x["modified"] or "", reverse=True)
1095
+
1096
+ return results[:limit]
1097
+
1098
+ def get_latest_session(
1099
+ self,
1100
+ cwd: Optional[str] = None,
1101
+ branch: Optional[str] = None,
1102
+ agent: Optional[str] = None,
1103
+ include_sub_agents: bool = False,
1104
+ ) -> Optional[dict[str, Any]]:
1105
+ """
1106
+ Get the most recent session matching the given criteria.
1107
+
1108
+ Uses Tantivy's native sorting by modified_ts fast field for efficiency.
1109
+
1110
+ Args:
1111
+ cwd: Filter to sessions from this working directory
1112
+ branch: Filter to sessions on this git branch
1113
+ agent: Filter to specific agent ("claude" or "codex")
1114
+ include_sub_agents: If False (default), exclude sub-agent sessions
1115
+
1116
+ Returns:
1117
+ Dict with session info, or None if no matching session found
1118
+ """
1119
+ searcher = self.index.searcher()
1120
+
1121
+ # Build query string for filtering
1122
+ # Use parse_query with field:value syntax for exact matches
1123
+ query_terms = []
1124
+
1125
+ if agent:
1126
+ query_terms.append(f'agent:"{agent}"')
1127
+
1128
+ if cwd:
1129
+ # Escape special chars in cwd path
1130
+ escaped_cwd = cwd.replace('"', '\\"')
1131
+ query_terms.append(f'cwd:"{escaped_cwd}"')
1132
+
1133
+ if branch:
1134
+ query_terms.append(f'branch:"{branch}"')
1135
+
1136
+ # Combine with AND, or use match-all if no filters
1137
+ if query_terms:
1138
+ query_str = " AND ".join(query_terms)
1139
+ query = self.index.parse_query(query_str, ["content"])
1140
+ else:
1141
+ query = tantivy.Query.all_query()
1142
+
1143
+ # Search with native sorting by modified_ts descending (most recent first)
1144
+ # Fetch enough to find valid ones after filtering deleted files and sub-agents
1145
+ top_docs = searcher.search(
1146
+ query,
1147
+ limit=100,
1148
+ order_by_field="modified_ts",
1149
+ order=tantivy.Order.Desc,
1150
+ )
1151
+
1152
+ # Iterate through results (already sorted by recency) and return first valid
1153
+ for _, doc_address in top_docs.hits:
1154
+ doc = searcher.doc(doc_address)
1155
+ export_path = doc.get_first("export_path")
1156
+
1157
+ # Skip if session file no longer exists
1158
+ if export_path and not Path(export_path).exists():
1159
+ continue
1160
+
1161
+ # Filter out sub-agents unless requested
1162
+ if not include_sub_agents:
1163
+ if export_path and (
1164
+ "/agent-" in export_path or
1165
+ export_path.split("/")[-1].startswith("agent-")
1166
+ ):
1167
+ continue
1168
+
1169
+ # Found a valid session - return it
1170
+ modified = doc.get_first("modified")
1171
+ content = doc.get_first("content")
1172
+
1173
+ return {
1174
+ "session_id": doc.get_first("session_id"),
1175
+ "agent": doc.get_first("agent"),
1176
+ "project": doc.get_first("project"),
1177
+ "branch": doc.get_first("branch"),
1178
+ "cwd": doc.get_first("cwd"),
1179
+ "created": doc.get_first("created"),
1180
+ "modified": modified,
1181
+ "lines": doc.get_first("lines"),
1182
+ "export_path": export_path,
1183
+ "snippet": self._generate_snippet(content, "") if content else "",
1184
+ "score": 0.0,
1185
+ "first_msg_role": doc.get_first("first_msg_role") or "",
1186
+ "first_msg_content": doc.get_first("first_msg_content") or "",
1187
+ "last_msg_role": doc.get_first("last_msg_role") or "",
1188
+ "last_msg_content": doc.get_first("last_msg_content") or "",
1189
+ "derivation_type": doc.get_first("derivation_type") or "",
1190
+ "is_sidechain": doc.get_first("is_sidechain") or "false",
1191
+ }
1192
+
1193
+ return None
1194
+
1195
+
1196
+ def get_latest_session_from_index(
1197
+ cwd: Optional[str] = None,
1198
+ branch: Optional[str] = None,
1199
+ agent: Optional[str] = None,
1200
+ index_path: Optional[Path] = None,
1201
+ ) -> Optional[dict[str, Any]]:
1202
+ """
1203
+ Convenience function to get latest session from the index.
1204
+
1205
+ Args:
1206
+ cwd: Filter to sessions from this working directory
1207
+ branch: Filter to sessions on this git branch
1208
+ agent: Filter to specific agent ("claude" or "codex")
1209
+ index_path: Path to index (default: ~/.cctools/search-index)
1210
+
1211
+ Returns:
1212
+ Dict with session info including 'session_id' and 'export_path',
1213
+ or None if no matching session found
1214
+ """
1215
+ if index_path is None:
1216
+ index_path = Path.home() / ".cctools" / "search-index"
1217
+
1218
+ if not index_path.exists():
1219
+ return None
1220
+
1221
+ try:
1222
+ idx = SessionIndex(index_path)
1223
+ return idx.get_latest_session(cwd=cwd, branch=branch, agent=agent)
1224
+ except Exception:
1225
+ return None
1226
+
1227
+
1228
+ def auto_index(
1229
+ index_path: Optional[Path] = None,
1230
+ claude_home: Optional[Path] = None,
1231
+ codex_home: Optional[Path] = None,
1232
+ verbose: bool = False,
1233
+ silent: bool = False,
1234
+ ) -> dict[str, Any]:
1235
+ """
1236
+ Automatically index new/changed session files on launch.
1237
+
1238
+ This implements the "zero-config" Recall model approach:
1239
+ - Scans session directories for JSONL files
1240
+ - Indexes new/modified files incrementally
1241
+ - Returns quickly if nothing changed
1242
+
1243
+ Args:
1244
+ index_path: Path to Tantivy index (default: ~/.cctools/search-index)
1245
+ claude_home: Claude home directory (default: ~/.claude)
1246
+ codex_home: Codex home directory (default: ~/.codex)
1247
+ verbose: If True, print progress messages
1248
+ silent: If True, suppress ALL output including progress bars (for JSON mode)
1249
+
1250
+ Returns:
1251
+ Dict with stats: {indexed, skipped, failed, total_files}
1252
+ """
1253
+ _require_deps()
1254
+
1255
+ # Default paths
1256
+ if index_path is None:
1257
+ index_path = Path.home() / ".cctools" / "search-index"
1258
+ if claude_home is None:
1259
+ claude_home = Path.home() / ".claude"
1260
+ if codex_home is None:
1261
+ codex_home = Path.home() / ".codex"
1262
+
1263
+ # Find all JSONL session files
1264
+ jsonl_files: list[Path] = []
1265
+ claude_file_count = 0
1266
+ codex_file_count = 0
1267
+
1268
+ # Claude sessions: ~/.claude/projects/**/*.jsonl
1269
+ claude_projects = claude_home / "projects"
1270
+ if claude_projects.exists():
1271
+ claude_files = list(claude_projects.glob("**/*.jsonl"))
1272
+ claude_file_count = len(claude_files)
1273
+ jsonl_files.extend(claude_files)
1274
+
1275
+ # Codex sessions: ~/.codex/sessions/YYYY/MM/DD/*.jsonl (fixed depth)
1276
+ codex_sessions = codex_home / "sessions"
1277
+ if codex_sessions.exists():
1278
+ codex_files = list(codex_sessions.glob("????/??/??/*.jsonl"))
1279
+ codex_file_count = len(codex_files)
1280
+ jsonl_files.extend(codex_files)
1281
+
1282
+ if verbose and not silent:
1283
+ print(f"Claude home: {claude_home} ({claude_file_count} files)")
1284
+ print(f"Codex home: {codex_home} ({codex_file_count} files)")
1285
+ print(f"Total: {len(jsonl_files)} session files to check")
1286
+
1287
+ if not jsonl_files:
1288
+ return {
1289
+ "indexed": 0, "skipped": 0, "failed": 0,
1290
+ "total_files": 0, "claude_files": 0, "codex_files": 0,
1291
+ }
1292
+
1293
+ # Create/open index and run incremental indexing
1294
+ # In silent mode, suppress tqdm progress bar for clean JSON output
1295
+ index = SessionIndex(index_path)
1296
+ stats = index.index_from_jsonl(
1297
+ jsonl_files,
1298
+ incremental=True,
1299
+ claude_home=claude_home,
1300
+ codex_home=codex_home,
1301
+ show_progress=not silent,
1302
+ )
1303
+ stats["total_files"] = len(jsonl_files)
1304
+ stats["claude_files"] = claude_file_count
1305
+ stats["codex_files"] = codex_file_count
1306
+
1307
+ # Prune deleted sessions from index
1308
+ pruned = index.prune_deleted()
1309
+ stats["pruned"] = pruned
1310
+
1311
+ # Always show indexing/pruning activity (even non-verbose), but suppress in silent mode
1312
+ if not silent:
1313
+ if stats["indexed"] > 0:
1314
+ print(f"Indexed {stats['indexed']} new/modified sessions")
1315
+ if pruned > 0:
1316
+ print(f"Pruned {pruned} deleted sessions from index")
1317
+ # Only show "up to date" in verbose mode (avoid noise on every command)
1318
+ if verbose and stats["indexed"] == 0 and pruned == 0:
1319
+ print("Index up to date")
1320
+
1321
+ return stats