claude-code-tools 1.0.10__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.

Potentially problematic release.


This version of claude-code-tools might be problematic. Click here for more details.

Files changed (1807) hide show
  1. claude_code_tools/__init__.py +3 -0
  2. claude_code_tools/action_rpc.py +403 -0
  3. claude_code_tools/aichat.py +1718 -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/dotenv_vault.py +268 -0
  9. claude_code_tools/env_safe.py +235 -0
  10. claude_code_tools/export_all.py +342 -0
  11. claude_code_tools/export_claude_session.py +481 -0
  12. claude_code_tools/export_codex_session.py +466 -0
  13. claude_code_tools/export_session.py +573 -0
  14. claude_code_tools/find_claude_session.py +1741 -0
  15. claude_code_tools/find_codex_session.py +1329 -0
  16. claude_code_tools/find_original_session.py +134 -0
  17. claude_code_tools/find_session.py +1086 -0
  18. claude_code_tools/find_trimmed_sessions.py +259 -0
  19. claude_code_tools/node_menu_ui.py +406 -0
  20. claude_code_tools/search_index.py +1247 -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_tui.py +516 -0
  25. claude_code_tools/session_utils.py +1313 -0
  26. claude_code_tools/smart_trim.py +424 -0
  27. claude_code_tools/smart_trim_core.py +616 -0
  28. claude_code_tools/tmux_cli_controller.py +928 -0
  29. claude_code_tools/tmux_remote_controller.py +229 -0
  30. claude_code_tools/trim_session.py +817 -0
  31. claude_code_tools/trim_session_claude.py +319 -0
  32. claude_code_tools/trim_session_codex.py +344 -0
  33. claude_code_tools-1.0.10.dist-info/METADATA +685 -0
  34. claude_code_tools-1.0.10.dist-info/RECORD +1807 -0
  35. claude_code_tools-1.0.10.dist-info/WHEEL +4 -0
  36. claude_code_tools-1.0.10.dist-info/entry_points.txt +5 -0
  37. claude_code_tools-1.0.10.dist-info/licenses/LICENSE +21 -0
  38. docs/cc-codex-instructions.md +37 -0
  39. docs/claude-code-chutes.md +138 -0
  40. docs/claude-code-tmux-tutorials.md +105 -0
  41. docs/dot-zshrc.md +307 -0
  42. docs/find-claude-session.md +149 -0
  43. docs/lmsh.md +70 -0
  44. docs/reddit-post.md +55 -0
  45. docs/tmux-cli-instructions.md +186 -0
  46. docs/vault-documentation.md +161 -0
  47. node_ui/action_config.js +72 -0
  48. node_ui/menu.js +2367 -0
  49. node_ui/node_modules/.bin/is-in-ci +5 -0
  50. node_ui/node_modules/.bin/loose-envify +16 -0
  51. node_ui/node_modules/.package-lock.json +714 -0
  52. node_ui/node_modules/@alcalzone/ansi-tokenize/README.md +248 -0
  53. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +11 -0
  54. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +41 -0
  55. node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -0
  56. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.d.ts +6 -0
  57. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js +17 -0
  58. node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js.map +1 -0
  59. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.d.ts +6 -0
  60. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js +7 -0
  61. node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js.map +1 -0
  62. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.d.ts +5 -0
  63. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js +27 -0
  64. node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js.map +1 -0
  65. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.d.ts +6 -0
  66. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js +38 -0
  67. node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js.map +1 -0
  68. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +12 -0
  69. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +70 -0
  70. node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -0
  71. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.d.ts +3 -0
  72. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js +11 -0
  73. node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js.map +1 -0
  74. node_ui/node_modules/@alcalzone/ansi-tokenize/package.json +63 -0
  75. node_ui/node_modules/ansi-escapes/base.d.ts +292 -0
  76. node_ui/node_modules/ansi-escapes/base.js +198 -0
  77. node_ui/node_modules/ansi-escapes/index.d.ts +2 -0
  78. node_ui/node_modules/ansi-escapes/index.js +2 -0
  79. node_ui/node_modules/ansi-escapes/license +9 -0
  80. node_ui/node_modules/ansi-escapes/package.json +70 -0
  81. node_ui/node_modules/ansi-escapes/readme.md +284 -0
  82. node_ui/node_modules/ansi-regex/index.d.ts +33 -0
  83. node_ui/node_modules/ansi-regex/index.js +14 -0
  84. node_ui/node_modules/ansi-regex/license +9 -0
  85. node_ui/node_modules/ansi-regex/package.json +61 -0
  86. node_ui/node_modules/ansi-regex/readme.md +66 -0
  87. node_ui/node_modules/ansi-styles/index.d.ts +236 -0
  88. node_ui/node_modules/ansi-styles/index.js +223 -0
  89. node_ui/node_modules/ansi-styles/license +9 -0
  90. node_ui/node_modules/ansi-styles/package.json +54 -0
  91. node_ui/node_modules/ansi-styles/readme.md +173 -0
  92. node_ui/node_modules/auto-bind/index.d.ts +50 -0
  93. node_ui/node_modules/auto-bind/index.js +41 -0
  94. node_ui/node_modules/auto-bind/license +9 -0
  95. node_ui/node_modules/auto-bind/package.json +51 -0
  96. node_ui/node_modules/auto-bind/react.d.ts +26 -0
  97. node_ui/node_modules/auto-bind/react.js +28 -0
  98. node_ui/node_modules/auto-bind/readme.md +92 -0
  99. node_ui/node_modules/chalk/license +9 -0
  100. node_ui/node_modules/chalk/package.json +83 -0
  101. node_ui/node_modules/chalk/readme.md +325 -0
  102. node_ui/node_modules/chalk/source/index.d.ts +320 -0
  103. node_ui/node_modules/chalk/source/index.js +225 -0
  104. node_ui/node_modules/chalk/source/utilities.js +33 -0
  105. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  106. node_ui/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  107. node_ui/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  108. node_ui/node_modules/chalk/source/vendor/supports-color/browser.js +30 -0
  109. node_ui/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  110. node_ui/node_modules/chalk/source/vendor/supports-color/index.js +182 -0
  111. node_ui/node_modules/cli-boxes/boxes.json +82 -0
  112. node_ui/node_modules/cli-boxes/index.d.ts +127 -0
  113. node_ui/node_modules/cli-boxes/index.js +6 -0
  114. node_ui/node_modules/cli-boxes/license +9 -0
  115. node_ui/node_modules/cli-boxes/package.json +42 -0
  116. node_ui/node_modules/cli-boxes/readme.md +115 -0
  117. node_ui/node_modules/cli-cursor/index.d.ts +47 -0
  118. node_ui/node_modules/cli-cursor/index.js +39 -0
  119. node_ui/node_modules/cli-cursor/license +9 -0
  120. node_ui/node_modules/cli-cursor/package.json +49 -0
  121. node_ui/node_modules/cli-cursor/readme.md +51 -0
  122. node_ui/node_modules/cli-truncate/index.d.ts +116 -0
  123. node_ui/node_modules/cli-truncate/index.js +99 -0
  124. node_ui/node_modules/cli-truncate/license +9 -0
  125. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/index.js +105 -0
  126. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/license +10 -0
  127. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/package.json +53 -0
  128. node_ui/node_modules/cli-truncate/node_modules/slice-ansi/readme.md +66 -0
  129. node_ui/node_modules/cli-truncate/package.json +51 -0
  130. node_ui/node_modules/cli-truncate/readme.md +150 -0
  131. node_ui/node_modules/code-excerpt/dist/index.d.ts +9 -0
  132. node_ui/node_modules/code-excerpt/dist/index.js +27 -0
  133. node_ui/node_modules/code-excerpt/license +21 -0
  134. node_ui/node_modules/code-excerpt/package.json +43 -0
  135. node_ui/node_modules/code-excerpt/readme.md +65 -0
  136. node_ui/node_modules/convert-to-spaces/dist/index.d.ts +2 -0
  137. node_ui/node_modules/convert-to-spaces/dist/index.js +4 -0
  138. node_ui/node_modules/convert-to-spaces/license +21 -0
  139. node_ui/node_modules/convert-to-spaces/package.json +40 -0
  140. node_ui/node_modules/convert-to-spaces/readme.md +39 -0
  141. node_ui/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  142. node_ui/node_modules/emoji-regex/README.md +107 -0
  143. node_ui/node_modules/emoji-regex/index.d.ts +3 -0
  144. node_ui/node_modules/emoji-regex/index.js +4 -0
  145. node_ui/node_modules/emoji-regex/index.mjs +4 -0
  146. node_ui/node_modules/emoji-regex/package.json +45 -0
  147. node_ui/node_modules/environment/index.d.ts +74 -0
  148. node_ui/node_modules/environment/index.js +47 -0
  149. node_ui/node_modules/environment/license +9 -0
  150. node_ui/node_modules/environment/package.json +74 -0
  151. node_ui/node_modules/environment/readme.md +94 -0
  152. node_ui/node_modules/escape-string-regexp/index.d.ts +16 -0
  153. node_ui/node_modules/escape-string-regexp/index.js +11 -0
  154. node_ui/node_modules/escape-string-regexp/license +9 -0
  155. node_ui/node_modules/escape-string-regexp/package.json +40 -0
  156. node_ui/node_modules/escape-string-regexp/readme.md +34 -0
  157. node_ui/node_modules/figures/index.d.ts +269 -0
  158. node_ui/node_modules/figures/index.js +322 -0
  159. node_ui/node_modules/figures/license +9 -0
  160. node_ui/node_modules/figures/package.json +46 -0
  161. node_ui/node_modules/figures/readme.md +328 -0
  162. node_ui/node_modules/get-east-asian-width/index.d.ts +60 -0
  163. node_ui/node_modules/get-east-asian-width/index.js +30 -0
  164. node_ui/node_modules/get-east-asian-width/license +9 -0
  165. node_ui/node_modules/get-east-asian-width/lookup.js +403 -0
  166. node_ui/node_modules/get-east-asian-width/package.json +70 -0
  167. node_ui/node_modules/get-east-asian-width/readme.md +65 -0
  168. node_ui/node_modules/indent-string/index.d.ts +38 -0
  169. node_ui/node_modules/indent-string/index.js +38 -0
  170. node_ui/node_modules/indent-string/license +9 -0
  171. node_ui/node_modules/indent-string/package.json +40 -0
  172. node_ui/node_modules/indent-string/readme.md +73 -0
  173. node_ui/node_modules/ink/build/apply-styles.js +175 -0
  174. node_ui/node_modules/ink/build/build-layout.js +77 -0
  175. node_ui/node_modules/ink/build/calculate-wrapped-text.js +53 -0
  176. node_ui/node_modules/ink/build/colorize.d.ts +3 -0
  177. node_ui/node_modules/ink/build/colorize.js +48 -0
  178. node_ui/node_modules/ink/build/colorize.js.map +1 -0
  179. node_ui/node_modules/ink/build/components/App.d.ts +61 -0
  180. node_ui/node_modules/ink/build/components/App.js +286 -0
  181. node_ui/node_modules/ink/build/components/App.js.map +1 -0
  182. node_ui/node_modules/ink/build/components/AppContext.d.ts +12 -0
  183. node_ui/node_modules/ink/build/components/AppContext.js +11 -0
  184. node_ui/node_modules/ink/build/components/AppContext.js.map +1 -0
  185. node_ui/node_modules/ink/build/components/Box.d.ts +62 -0
  186. node_ui/node_modules/ink/build/components/Box.js +20 -0
  187. node_ui/node_modules/ink/build/components/Box.js.map +1 -0
  188. node_ui/node_modules/ink/build/components/Color.js +62 -0
  189. node_ui/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
  190. node_ui/node_modules/ink/build/components/ErrorOverview.js +79 -0
  191. node_ui/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
  192. node_ui/node_modules/ink/build/components/FocusContext.d.ts +17 -0
  193. node_ui/node_modules/ink/build/components/FocusContext.js +17 -0
  194. node_ui/node_modules/ink/build/components/FocusContext.js.map +1 -0
  195. node_ui/node_modules/ink/build/components/Newline.d.ts +13 -0
  196. node_ui/node_modules/ink/build/components/Newline.js +8 -0
  197. node_ui/node_modules/ink/build/components/Newline.js.map +1 -0
  198. node_ui/node_modules/ink/build/components/Spacer.d.ts +6 -0
  199. node_ui/node_modules/ink/build/components/Spacer.js +10 -0
  200. node_ui/node_modules/ink/build/components/Spacer.js.map +1 -0
  201. node_ui/node_modules/ink/build/components/Static.d.ts +31 -0
  202. node_ui/node_modules/ink/build/components/Static.js +33 -0
  203. node_ui/node_modules/ink/build/components/Static.js.map +1 -0
  204. node_ui/node_modules/ink/build/components/StderrContext.d.ts +19 -0
  205. node_ui/node_modules/ink/build/components/StderrContext.js +13 -0
  206. node_ui/node_modules/ink/build/components/StderrContext.js.map +1 -0
  207. node_ui/node_modules/ink/build/components/StdinContext.d.ts +26 -0
  208. node_ui/node_modules/ink/build/components/StdinContext.js +19 -0
  209. node_ui/node_modules/ink/build/components/StdinContext.js.map +1 -0
  210. node_ui/node_modules/ink/build/components/StdoutContext.d.ts +19 -0
  211. node_ui/node_modules/ink/build/components/StdoutContext.js +13 -0
  212. node_ui/node_modules/ink/build/components/StdoutContext.js.map +1 -0
  213. node_ui/node_modules/ink/build/components/Text.d.ts +49 -0
  214. node_ui/node_modules/ink/build/components/Text.js +40 -0
  215. node_ui/node_modules/ink/build/components/Text.js.map +1 -0
  216. node_ui/node_modules/ink/build/components/Transform.d.ts +15 -0
  217. node_ui/node_modules/ink/build/components/Transform.js +14 -0
  218. node_ui/node_modules/ink/build/components/Transform.js.map +1 -0
  219. node_ui/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
  220. node_ui/node_modules/ink/build/devtools-window-polyfill.js +64 -0
  221. node_ui/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
  222. node_ui/node_modules/ink/build/devtools.d.ts +1 -0
  223. node_ui/node_modules/ink/build/devtools.js +9 -0
  224. node_ui/node_modules/ink/build/devtools.js.map +1 -0
  225. node_ui/node_modules/ink/build/dom.d.ts +42 -0
  226. node_ui/node_modules/ink/build/dom.js +117 -0
  227. node_ui/node_modules/ink/build/dom.js.map +1 -0
  228. node_ui/node_modules/ink/build/experimental/apply-style.js +140 -0
  229. node_ui/node_modules/ink/build/experimental/dom.js +123 -0
  230. node_ui/node_modules/ink/build/experimental/output.js +91 -0
  231. node_ui/node_modules/ink/build/experimental/reconciler.js +141 -0
  232. node_ui/node_modules/ink/build/experimental/renderer.js +81 -0
  233. node_ui/node_modules/ink/build/get-max-width.d.ts +3 -0
  234. node_ui/node_modules/ink/build/get-max-width.js +10 -0
  235. node_ui/node_modules/ink/build/get-max-width.js.map +1 -0
  236. node_ui/node_modules/ink/build/hooks/use-app.d.ts +5 -0
  237. node_ui/node_modules/ink/build/hooks/use-app.js +8 -0
  238. node_ui/node_modules/ink/build/hooks/use-app.js.map +1 -0
  239. node_ui/node_modules/ink/build/hooks/use-focus-manager.d.ts +34 -0
  240. node_ui/node_modules/ink/build/hooks/use-focus-manager.js +18 -0
  241. node_ui/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
  242. node_ui/node_modules/ink/build/hooks/use-focus.d.ts +34 -0
  243. node_ui/node_modules/ink/build/hooks/use-focus.js +47 -0
  244. node_ui/node_modules/ink/build/hooks/use-focus.js.map +1 -0
  245. node_ui/node_modules/ink/build/hooks/use-input.d.ts +97 -0
  246. node_ui/node_modules/ink/build/hooks/use-input.js +96 -0
  247. node_ui/node_modules/ink/build/hooks/use-input.js.map +1 -0
  248. node_ui/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
  249. node_ui/node_modules/ink/build/hooks/use-stderr.js +8 -0
  250. node_ui/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
  251. node_ui/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
  252. node_ui/node_modules/ink/build/hooks/use-stdin.js +8 -0
  253. node_ui/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
  254. node_ui/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
  255. node_ui/node_modules/ink/build/hooks/use-stdout.js +8 -0
  256. node_ui/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
  257. node_ui/node_modules/ink/build/hooks/useInput.js +38 -0
  258. node_ui/node_modules/ink/build/index.d.ts +27 -0
  259. node_ui/node_modules/ink/build/index.js +16 -0
  260. node_ui/node_modules/ink/build/index.js.map +1 -0
  261. node_ui/node_modules/ink/build/ink.d.ts +38 -0
  262. node_ui/node_modules/ink/build/ink.js +235 -0
  263. node_ui/node_modules/ink/build/ink.js.map +1 -0
  264. node_ui/node_modules/ink/build/instance.js +205 -0
  265. node_ui/node_modules/ink/build/instances.d.ts +4 -0
  266. node_ui/node_modules/ink/build/instances.js +8 -0
  267. node_ui/node_modules/ink/build/instances.js.map +1 -0
  268. node_ui/node_modules/ink/build/log-update.d.ts +13 -0
  269. node_ui/node_modules/ink/build/log-update.js +37 -0
  270. node_ui/node_modules/ink/build/log-update.js.map +1 -0
  271. node_ui/node_modules/ink/build/measure-element.d.ts +16 -0
  272. node_ui/node_modules/ink/build/measure-element.js +9 -0
  273. node_ui/node_modules/ink/build/measure-element.js.map +1 -0
  274. node_ui/node_modules/ink/build/measure-text.d.ts +6 -0
  275. node_ui/node_modules/ink/build/measure-text.js +20 -0
  276. node_ui/node_modules/ink/build/measure-text.js.map +1 -0
  277. node_ui/node_modules/ink/build/output.d.ts +35 -0
  278. node_ui/node_modules/ink/build/output.js +148 -0
  279. node_ui/node_modules/ink/build/output.js.map +1 -0
  280. node_ui/node_modules/ink/build/parse-keypress.d.ts +15 -0
  281. node_ui/node_modules/ink/build/parse-keypress.js +225 -0
  282. node_ui/node_modules/ink/build/parse-keypress.js.map +1 -0
  283. node_ui/node_modules/ink/build/reconciler.d.ts +4 -0
  284. node_ui/node_modules/ink/build/reconciler.js +219 -0
  285. node_ui/node_modules/ink/build/reconciler.js.map +1 -0
  286. node_ui/node_modules/ink/build/render-border.d.ts +4 -0
  287. node_ui/node_modules/ink/build/render-border.js +73 -0
  288. node_ui/node_modules/ink/build/render-border.js.map +1 -0
  289. node_ui/node_modules/ink/build/render-node-to-output.d.ts +10 -0
  290. node_ui/node_modules/ink/build/render-node-to-output.js +99 -0
  291. node_ui/node_modules/ink/build/render-node-to-output.js.map +1 -0
  292. node_ui/node_modules/ink/build/render.d.ts +68 -0
  293. node_ui/node_modules/ink/build/render.js +48 -0
  294. node_ui/node_modules/ink/build/render.js.map +1 -0
  295. node_ui/node_modules/ink/build/renderer.d.ts +8 -0
  296. node_ui/node_modules/ink/build/renderer.js +36 -0
  297. node_ui/node_modules/ink/build/renderer.js.map +1 -0
  298. node_ui/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
  299. node_ui/node_modules/ink/build/squash-text-nodes.js +35 -0
  300. node_ui/node_modules/ink/build/squash-text-nodes.js.map +1 -0
  301. node_ui/node_modules/ink/build/styles.d.ts +243 -0
  302. node_ui/node_modules/ink/build/styles.js +229 -0
  303. node_ui/node_modules/ink/build/styles.js.map +1 -0
  304. node_ui/node_modules/ink/build/wrap-text.d.ts +3 -0
  305. node_ui/node_modules/ink/build/wrap-text.js +31 -0
  306. node_ui/node_modules/ink/build/wrap-text.js.map +1 -0
  307. node_ui/node_modules/ink/license +9 -0
  308. node_ui/node_modules/ink/package.json +197 -0
  309. node_ui/node_modules/ink/readme.md +2153 -0
  310. node_ui/node_modules/ink-select-input/build/Indicator.d.ts +6 -0
  311. node_ui/node_modules/ink-select-input/build/Indicator.js +8 -0
  312. node_ui/node_modules/ink-select-input/build/Indicator.js.map +1 -0
  313. node_ui/node_modules/ink-select-input/build/Item.d.ts +7 -0
  314. node_ui/node_modules/ink-select-input/build/Item.js +7 -0
  315. node_ui/node_modules/ink-select-input/build/Item.js.map +1 -0
  316. node_ui/node_modules/ink-select-input/build/SelectInput.d.ts +49 -0
  317. node_ui/node_modules/ink-select-input/build/SelectInput.js +83 -0
  318. node_ui/node_modules/ink-select-input/build/SelectInput.js.map +1 -0
  319. node_ui/node_modules/ink-select-input/build/index.d.ts +3 -0
  320. node_ui/node_modules/ink-select-input/build/index.js +4 -0
  321. node_ui/node_modules/ink-select-input/build/index.js.map +1 -0
  322. node_ui/node_modules/ink-select-input/license +9 -0
  323. node_ui/node_modules/ink-select-input/node_modules/figures/index.d.ts +279 -0
  324. node_ui/node_modules/ink-select-input/node_modules/figures/index.js +292 -0
  325. node_ui/node_modules/ink-select-input/node_modules/figures/license +9 -0
  326. node_ui/node_modules/ink-select-input/node_modules/figures/package.json +49 -0
  327. node_ui/node_modules/ink-select-input/node_modules/figures/readme.md +337 -0
  328. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.d.ts +12 -0
  329. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.js +21 -0
  330. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/license +9 -0
  331. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/package.json +47 -0
  332. node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/readme.md +35 -0
  333. node_ui/node_modules/ink-select-input/package.json +83 -0
  334. node_ui/node_modules/ink-select-input/readme.md +98 -0
  335. node_ui/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  336. node_ui/node_modules/is-fullwidth-code-point/index.js +40 -0
  337. node_ui/node_modules/is-fullwidth-code-point/license +9 -0
  338. node_ui/node_modules/is-fullwidth-code-point/package.json +45 -0
  339. node_ui/node_modules/is-fullwidth-code-point/readme.md +43 -0
  340. node_ui/node_modules/is-in-ci/cli.js +5 -0
  341. node_ui/node_modules/is-in-ci/index.d.ts +15 -0
  342. node_ui/node_modules/is-in-ci/index.js +11 -0
  343. node_ui/node_modules/is-in-ci/license +9 -0
  344. node_ui/node_modules/is-in-ci/package.json +48 -0
  345. node_ui/node_modules/is-in-ci/readme.md +43 -0
  346. node_ui/node_modules/is-unicode-supported/index.d.ts +12 -0
  347. node_ui/node_modules/is-unicode-supported/index.js +17 -0
  348. node_ui/node_modules/is-unicode-supported/license +9 -0
  349. node_ui/node_modules/is-unicode-supported/package.json +43 -0
  350. node_ui/node_modules/is-unicode-supported/readme.md +35 -0
  351. node_ui/node_modules/js-tokens/CHANGELOG.md +151 -0
  352. node_ui/node_modules/js-tokens/LICENSE +21 -0
  353. node_ui/node_modules/js-tokens/README.md +240 -0
  354. node_ui/node_modules/js-tokens/index.js +23 -0
  355. node_ui/node_modules/js-tokens/package.json +30 -0
  356. node_ui/node_modules/lodash/LICENSE +47 -0
  357. node_ui/node_modules/lodash/README.md +39 -0
  358. node_ui/node_modules/lodash/_DataView.js +7 -0
  359. node_ui/node_modules/lodash/_Hash.js +32 -0
  360. node_ui/node_modules/lodash/_LazyWrapper.js +28 -0
  361. node_ui/node_modules/lodash/_ListCache.js +32 -0
  362. node_ui/node_modules/lodash/_LodashWrapper.js +22 -0
  363. node_ui/node_modules/lodash/_Map.js +7 -0
  364. node_ui/node_modules/lodash/_MapCache.js +32 -0
  365. node_ui/node_modules/lodash/_Promise.js +7 -0
  366. node_ui/node_modules/lodash/_Set.js +7 -0
  367. node_ui/node_modules/lodash/_SetCache.js +27 -0
  368. node_ui/node_modules/lodash/_Stack.js +27 -0
  369. node_ui/node_modules/lodash/_Symbol.js +6 -0
  370. node_ui/node_modules/lodash/_Uint8Array.js +6 -0
  371. node_ui/node_modules/lodash/_WeakMap.js +7 -0
  372. node_ui/node_modules/lodash/_apply.js +21 -0
  373. node_ui/node_modules/lodash/_arrayAggregator.js +22 -0
  374. node_ui/node_modules/lodash/_arrayEach.js +22 -0
  375. node_ui/node_modules/lodash/_arrayEachRight.js +21 -0
  376. node_ui/node_modules/lodash/_arrayEvery.js +23 -0
  377. node_ui/node_modules/lodash/_arrayFilter.js +25 -0
  378. node_ui/node_modules/lodash/_arrayIncludes.js +17 -0
  379. node_ui/node_modules/lodash/_arrayIncludesWith.js +22 -0
  380. node_ui/node_modules/lodash/_arrayLikeKeys.js +49 -0
  381. node_ui/node_modules/lodash/_arrayMap.js +21 -0
  382. node_ui/node_modules/lodash/_arrayPush.js +20 -0
  383. node_ui/node_modules/lodash/_arrayReduce.js +26 -0
  384. node_ui/node_modules/lodash/_arrayReduceRight.js +24 -0
  385. node_ui/node_modules/lodash/_arraySample.js +15 -0
  386. node_ui/node_modules/lodash/_arraySampleSize.js +17 -0
  387. node_ui/node_modules/lodash/_arrayShuffle.js +15 -0
  388. node_ui/node_modules/lodash/_arraySome.js +23 -0
  389. node_ui/node_modules/lodash/_asciiSize.js +12 -0
  390. node_ui/node_modules/lodash/_asciiToArray.js +12 -0
  391. node_ui/node_modules/lodash/_asciiWords.js +15 -0
  392. node_ui/node_modules/lodash/_assignMergeValue.js +20 -0
  393. node_ui/node_modules/lodash/_assignValue.js +28 -0
  394. node_ui/node_modules/lodash/_assocIndexOf.js +21 -0
  395. node_ui/node_modules/lodash/_baseAggregator.js +21 -0
  396. node_ui/node_modules/lodash/_baseAssign.js +17 -0
  397. node_ui/node_modules/lodash/_baseAssignIn.js +17 -0
  398. node_ui/node_modules/lodash/_baseAssignValue.js +25 -0
  399. node_ui/node_modules/lodash/_baseAt.js +23 -0
  400. node_ui/node_modules/lodash/_baseClamp.js +22 -0
  401. node_ui/node_modules/lodash/_baseClone.js +166 -0
  402. node_ui/node_modules/lodash/_baseConforms.js +18 -0
  403. node_ui/node_modules/lodash/_baseConformsTo.js +27 -0
  404. node_ui/node_modules/lodash/_baseCreate.js +30 -0
  405. node_ui/node_modules/lodash/_baseDelay.js +21 -0
  406. node_ui/node_modules/lodash/_baseDifference.js +67 -0
  407. node_ui/node_modules/lodash/_baseEach.js +14 -0
  408. node_ui/node_modules/lodash/_baseEachRight.js +14 -0
  409. node_ui/node_modules/lodash/_baseEvery.js +21 -0
  410. node_ui/node_modules/lodash/_baseExtremum.js +32 -0
  411. node_ui/node_modules/lodash/_baseFill.js +32 -0
  412. node_ui/node_modules/lodash/_baseFilter.js +21 -0
  413. node_ui/node_modules/lodash/_baseFindIndex.js +24 -0
  414. node_ui/node_modules/lodash/_baseFindKey.js +23 -0
  415. node_ui/node_modules/lodash/_baseFlatten.js +38 -0
  416. node_ui/node_modules/lodash/_baseFor.js +16 -0
  417. node_ui/node_modules/lodash/_baseForOwn.js +16 -0
  418. node_ui/node_modules/lodash/_baseForOwnRight.js +16 -0
  419. node_ui/node_modules/lodash/_baseForRight.js +15 -0
  420. node_ui/node_modules/lodash/_baseFunctions.js +19 -0
  421. node_ui/node_modules/lodash/_baseGet.js +24 -0
  422. node_ui/node_modules/lodash/_baseGetAllKeys.js +20 -0
  423. node_ui/node_modules/lodash/_baseGetTag.js +28 -0
  424. node_ui/node_modules/lodash/_baseGt.js +14 -0
  425. node_ui/node_modules/lodash/_baseHas.js +19 -0
  426. node_ui/node_modules/lodash/_baseHasIn.js +13 -0
  427. node_ui/node_modules/lodash/_baseInRange.js +18 -0
  428. node_ui/node_modules/lodash/_baseIndexOf.js +20 -0
  429. node_ui/node_modules/lodash/_baseIndexOfWith.js +23 -0
  430. node_ui/node_modules/lodash/_baseIntersection.js +74 -0
  431. node_ui/node_modules/lodash/_baseInverter.js +21 -0
  432. node_ui/node_modules/lodash/_baseInvoke.js +24 -0
  433. node_ui/node_modules/lodash/_baseIsArguments.js +18 -0
  434. node_ui/node_modules/lodash/_baseIsArrayBuffer.js +17 -0
  435. node_ui/node_modules/lodash/_baseIsDate.js +18 -0
  436. node_ui/node_modules/lodash/_baseIsEqual.js +28 -0
  437. node_ui/node_modules/lodash/_baseIsEqualDeep.js +83 -0
  438. node_ui/node_modules/lodash/_baseIsMap.js +18 -0
  439. node_ui/node_modules/lodash/_baseIsMatch.js +62 -0
  440. node_ui/node_modules/lodash/_baseIsNaN.js +12 -0
  441. node_ui/node_modules/lodash/_baseIsNative.js +47 -0
  442. node_ui/node_modules/lodash/_baseIsRegExp.js +18 -0
  443. node_ui/node_modules/lodash/_baseIsSet.js +18 -0
  444. node_ui/node_modules/lodash/_baseIsTypedArray.js +60 -0
  445. node_ui/node_modules/lodash/_baseIteratee.js +31 -0
  446. node_ui/node_modules/lodash/_baseKeys.js +30 -0
  447. node_ui/node_modules/lodash/_baseKeysIn.js +33 -0
  448. node_ui/node_modules/lodash/_baseLodash.js +10 -0
  449. node_ui/node_modules/lodash/_baseLt.js +14 -0
  450. node_ui/node_modules/lodash/_baseMap.js +22 -0
  451. node_ui/node_modules/lodash/_baseMatches.js +22 -0
  452. node_ui/node_modules/lodash/_baseMatchesProperty.js +33 -0
  453. node_ui/node_modules/lodash/_baseMean.js +20 -0
  454. node_ui/node_modules/lodash/_baseMerge.js +42 -0
  455. node_ui/node_modules/lodash/_baseMergeDeep.js +94 -0
  456. node_ui/node_modules/lodash/_baseNth.js +20 -0
  457. node_ui/node_modules/lodash/_baseOrderBy.js +49 -0
  458. node_ui/node_modules/lodash/_basePick.js +19 -0
  459. node_ui/node_modules/lodash/_basePickBy.js +30 -0
  460. node_ui/node_modules/lodash/_baseProperty.js +14 -0
  461. node_ui/node_modules/lodash/_basePropertyDeep.js +16 -0
  462. node_ui/node_modules/lodash/_basePropertyOf.js +14 -0
  463. node_ui/node_modules/lodash/_basePullAll.js +51 -0
  464. node_ui/node_modules/lodash/_basePullAt.js +37 -0
  465. node_ui/node_modules/lodash/_baseRandom.js +18 -0
  466. node_ui/node_modules/lodash/_baseRange.js +28 -0
  467. node_ui/node_modules/lodash/_baseReduce.js +23 -0
  468. node_ui/node_modules/lodash/_baseRepeat.js +35 -0
  469. node_ui/node_modules/lodash/_baseRest.js +17 -0
  470. node_ui/node_modules/lodash/_baseSample.js +15 -0
  471. node_ui/node_modules/lodash/_baseSampleSize.js +18 -0
  472. node_ui/node_modules/lodash/_baseSet.js +51 -0
  473. node_ui/node_modules/lodash/_baseSetData.js +17 -0
  474. node_ui/node_modules/lodash/_baseSetToString.js +22 -0
  475. node_ui/node_modules/lodash/_baseShuffle.js +15 -0
  476. node_ui/node_modules/lodash/_baseSlice.js +31 -0
  477. node_ui/node_modules/lodash/_baseSome.js +22 -0
  478. node_ui/node_modules/lodash/_baseSortBy.js +21 -0
  479. node_ui/node_modules/lodash/_baseSortedIndex.js +42 -0
  480. node_ui/node_modules/lodash/_baseSortedIndexBy.js +67 -0
  481. node_ui/node_modules/lodash/_baseSortedUniq.js +30 -0
  482. node_ui/node_modules/lodash/_baseSum.js +24 -0
  483. node_ui/node_modules/lodash/_baseTimes.js +20 -0
  484. node_ui/node_modules/lodash/_baseToNumber.js +24 -0
  485. node_ui/node_modules/lodash/_baseToPairs.js +18 -0
  486. node_ui/node_modules/lodash/_baseToString.js +37 -0
  487. node_ui/node_modules/lodash/_baseTrim.js +19 -0
  488. node_ui/node_modules/lodash/_baseUnary.js +14 -0
  489. node_ui/node_modules/lodash/_baseUniq.js +72 -0
  490. node_ui/node_modules/lodash/_baseUnset.js +20 -0
  491. node_ui/node_modules/lodash/_baseUpdate.js +18 -0
  492. node_ui/node_modules/lodash/_baseValues.js +19 -0
  493. node_ui/node_modules/lodash/_baseWhile.js +26 -0
  494. node_ui/node_modules/lodash/_baseWrapperValue.js +25 -0
  495. node_ui/node_modules/lodash/_baseXor.js +36 -0
  496. node_ui/node_modules/lodash/_baseZipObject.js +23 -0
  497. node_ui/node_modules/lodash/_cacheHas.js +13 -0
  498. node_ui/node_modules/lodash/_castArrayLikeObject.js +14 -0
  499. node_ui/node_modules/lodash/_castFunction.js +14 -0
  500. node_ui/node_modules/lodash/_castPath.js +21 -0
  501. node_ui/node_modules/lodash/_castRest.js +14 -0
  502. node_ui/node_modules/lodash/_castSlice.js +18 -0
  503. node_ui/node_modules/lodash/_charsEndIndex.js +19 -0
  504. node_ui/node_modules/lodash/_charsStartIndex.js +20 -0
  505. node_ui/node_modules/lodash/_cloneArrayBuffer.js +16 -0
  506. node_ui/node_modules/lodash/_cloneBuffer.js +35 -0
  507. node_ui/node_modules/lodash/_cloneDataView.js +16 -0
  508. node_ui/node_modules/lodash/_cloneRegExp.js +17 -0
  509. node_ui/node_modules/lodash/_cloneSymbol.js +18 -0
  510. node_ui/node_modules/lodash/_cloneTypedArray.js +16 -0
  511. node_ui/node_modules/lodash/_compareAscending.js +41 -0
  512. node_ui/node_modules/lodash/_compareMultiple.js +44 -0
  513. node_ui/node_modules/lodash/_composeArgs.js +39 -0
  514. node_ui/node_modules/lodash/_composeArgsRight.js +41 -0
  515. node_ui/node_modules/lodash/_copyArray.js +20 -0
  516. node_ui/node_modules/lodash/_copyObject.js +40 -0
  517. node_ui/node_modules/lodash/_copySymbols.js +16 -0
  518. node_ui/node_modules/lodash/_copySymbolsIn.js +16 -0
  519. node_ui/node_modules/lodash/_coreJsData.js +6 -0
  520. node_ui/node_modules/lodash/_countHolders.js +21 -0
  521. node_ui/node_modules/lodash/_createAggregator.js +23 -0
  522. node_ui/node_modules/lodash/_createAssigner.js +37 -0
  523. node_ui/node_modules/lodash/_createBaseEach.js +32 -0
  524. node_ui/node_modules/lodash/_createBaseFor.js +25 -0
  525. node_ui/node_modules/lodash/_createBind.js +28 -0
  526. node_ui/node_modules/lodash/_createCaseFirst.js +33 -0
  527. node_ui/node_modules/lodash/_createCompounder.js +24 -0
  528. node_ui/node_modules/lodash/_createCtor.js +37 -0
  529. node_ui/node_modules/lodash/_createCurry.js +46 -0
  530. node_ui/node_modules/lodash/_createFind.js +25 -0
  531. node_ui/node_modules/lodash/_createFlow.js +78 -0
  532. node_ui/node_modules/lodash/_createHybrid.js +92 -0
  533. node_ui/node_modules/lodash/_createInverter.js +17 -0
  534. node_ui/node_modules/lodash/_createMathOperation.js +38 -0
  535. node_ui/node_modules/lodash/_createOver.js +27 -0
  536. node_ui/node_modules/lodash/_createPadding.js +33 -0
  537. node_ui/node_modules/lodash/_createPartial.js +43 -0
  538. node_ui/node_modules/lodash/_createRange.js +30 -0
  539. node_ui/node_modules/lodash/_createRecurry.js +56 -0
  540. node_ui/node_modules/lodash/_createRelationalOperation.js +20 -0
  541. node_ui/node_modules/lodash/_createRound.js +35 -0
  542. node_ui/node_modules/lodash/_createSet.js +19 -0
  543. node_ui/node_modules/lodash/_createToPairs.js +30 -0
  544. node_ui/node_modules/lodash/_createWrap.js +106 -0
  545. node_ui/node_modules/lodash/_customDefaultsAssignIn.js +29 -0
  546. node_ui/node_modules/lodash/_customDefaultsMerge.js +28 -0
  547. node_ui/node_modules/lodash/_customOmitClone.js +16 -0
  548. node_ui/node_modules/lodash/_deburrLetter.js +71 -0
  549. node_ui/node_modules/lodash/_defineProperty.js +11 -0
  550. node_ui/node_modules/lodash/_equalArrays.js +84 -0
  551. node_ui/node_modules/lodash/_equalByTag.js +112 -0
  552. node_ui/node_modules/lodash/_equalObjects.js +90 -0
  553. node_ui/node_modules/lodash/_escapeHtmlChar.js +21 -0
  554. node_ui/node_modules/lodash/_escapeStringChar.js +22 -0
  555. node_ui/node_modules/lodash/_flatRest.js +16 -0
  556. node_ui/node_modules/lodash/_freeGlobal.js +4 -0
  557. node_ui/node_modules/lodash/_getAllKeys.js +16 -0
  558. node_ui/node_modules/lodash/_getAllKeysIn.js +17 -0
  559. node_ui/node_modules/lodash/_getData.js +15 -0
  560. node_ui/node_modules/lodash/_getFuncName.js +31 -0
  561. node_ui/node_modules/lodash/_getHolder.js +13 -0
  562. node_ui/node_modules/lodash/_getMapData.js +18 -0
  563. node_ui/node_modules/lodash/_getMatchData.js +24 -0
  564. node_ui/node_modules/lodash/_getNative.js +17 -0
  565. node_ui/node_modules/lodash/_getPrototype.js +6 -0
  566. node_ui/node_modules/lodash/_getRawTag.js +46 -0
  567. node_ui/node_modules/lodash/_getSymbols.js +30 -0
  568. node_ui/node_modules/lodash/_getSymbolsIn.js +25 -0
  569. node_ui/node_modules/lodash/_getTag.js +58 -0
  570. node_ui/node_modules/lodash/_getValue.js +13 -0
  571. node_ui/node_modules/lodash/_getView.js +33 -0
  572. node_ui/node_modules/lodash/_getWrapDetails.js +17 -0
  573. node_ui/node_modules/lodash/_hasPath.js +39 -0
  574. node_ui/node_modules/lodash/_hasUnicode.js +26 -0
  575. node_ui/node_modules/lodash/_hasUnicodeWord.js +15 -0
  576. node_ui/node_modules/lodash/_hashClear.js +15 -0
  577. node_ui/node_modules/lodash/_hashDelete.js +17 -0
  578. node_ui/node_modules/lodash/_hashGet.js +30 -0
  579. node_ui/node_modules/lodash/_hashHas.js +23 -0
  580. node_ui/node_modules/lodash/_hashSet.js +23 -0
  581. node_ui/node_modules/lodash/_initCloneArray.js +26 -0
  582. node_ui/node_modules/lodash/_initCloneByTag.js +77 -0
  583. node_ui/node_modules/lodash/_initCloneObject.js +18 -0
  584. node_ui/node_modules/lodash/_insertWrapDetails.js +23 -0
  585. node_ui/node_modules/lodash/_isFlattenable.js +20 -0
  586. node_ui/node_modules/lodash/_isIndex.js +25 -0
  587. node_ui/node_modules/lodash/_isIterateeCall.js +30 -0
  588. node_ui/node_modules/lodash/_isKey.js +29 -0
  589. node_ui/node_modules/lodash/_isKeyable.js +15 -0
  590. node_ui/node_modules/lodash/_isLaziable.js +28 -0
  591. node_ui/node_modules/lodash/_isMaskable.js +14 -0
  592. node_ui/node_modules/lodash/_isMasked.js +20 -0
  593. node_ui/node_modules/lodash/_isPrototype.js +18 -0
  594. node_ui/node_modules/lodash/_isStrictComparable.js +15 -0
  595. node_ui/node_modules/lodash/_iteratorToArray.js +18 -0
  596. node_ui/node_modules/lodash/_lazyClone.js +23 -0
  597. node_ui/node_modules/lodash/_lazyReverse.js +23 -0
  598. node_ui/node_modules/lodash/_lazyValue.js +69 -0
  599. node_ui/node_modules/lodash/_listCacheClear.js +13 -0
  600. node_ui/node_modules/lodash/_listCacheDelete.js +35 -0
  601. node_ui/node_modules/lodash/_listCacheGet.js +19 -0
  602. node_ui/node_modules/lodash/_listCacheHas.js +16 -0
  603. node_ui/node_modules/lodash/_listCacheSet.js +26 -0
  604. node_ui/node_modules/lodash/_mapCacheClear.js +21 -0
  605. node_ui/node_modules/lodash/_mapCacheDelete.js +18 -0
  606. node_ui/node_modules/lodash/_mapCacheGet.js +16 -0
  607. node_ui/node_modules/lodash/_mapCacheHas.js +16 -0
  608. node_ui/node_modules/lodash/_mapCacheSet.js +22 -0
  609. node_ui/node_modules/lodash/_mapToArray.js +18 -0
  610. node_ui/node_modules/lodash/_matchesStrictComparable.js +20 -0
  611. node_ui/node_modules/lodash/_memoizeCapped.js +26 -0
  612. node_ui/node_modules/lodash/_mergeData.js +90 -0
  613. node_ui/node_modules/lodash/_metaMap.js +6 -0
  614. node_ui/node_modules/lodash/_nativeCreate.js +6 -0
  615. node_ui/node_modules/lodash/_nativeKeys.js +6 -0
  616. node_ui/node_modules/lodash/_nativeKeysIn.js +20 -0
  617. node_ui/node_modules/lodash/_nodeUtil.js +30 -0
  618. node_ui/node_modules/lodash/_objectToString.js +22 -0
  619. node_ui/node_modules/lodash/_overArg.js +15 -0
  620. node_ui/node_modules/lodash/_overRest.js +36 -0
  621. node_ui/node_modules/lodash/_parent.js +16 -0
  622. node_ui/node_modules/lodash/_reEscape.js +4 -0
  623. node_ui/node_modules/lodash/_reEvaluate.js +4 -0
  624. node_ui/node_modules/lodash/_reInterpolate.js +4 -0
  625. node_ui/node_modules/lodash/_realNames.js +4 -0
  626. node_ui/node_modules/lodash/_reorder.js +29 -0
  627. node_ui/node_modules/lodash/_replaceHolders.js +29 -0
  628. node_ui/node_modules/lodash/_root.js +9 -0
  629. node_ui/node_modules/lodash/_safeGet.js +21 -0
  630. node_ui/node_modules/lodash/_setCacheAdd.js +19 -0
  631. node_ui/node_modules/lodash/_setCacheHas.js +14 -0
  632. node_ui/node_modules/lodash/_setData.js +20 -0
  633. node_ui/node_modules/lodash/_setToArray.js +18 -0
  634. node_ui/node_modules/lodash/_setToPairs.js +18 -0
  635. node_ui/node_modules/lodash/_setToString.js +14 -0
  636. node_ui/node_modules/lodash/_setWrapToString.js +21 -0
  637. node_ui/node_modules/lodash/_shortOut.js +37 -0
  638. node_ui/node_modules/lodash/_shuffleSelf.js +28 -0
  639. node_ui/node_modules/lodash/_stackClear.js +15 -0
  640. node_ui/node_modules/lodash/_stackDelete.js +18 -0
  641. node_ui/node_modules/lodash/_stackGet.js +14 -0
  642. node_ui/node_modules/lodash/_stackHas.js +14 -0
  643. node_ui/node_modules/lodash/_stackSet.js +34 -0
  644. node_ui/node_modules/lodash/_strictIndexOf.js +23 -0
  645. node_ui/node_modules/lodash/_strictLastIndexOf.js +21 -0
  646. node_ui/node_modules/lodash/_stringSize.js +18 -0
  647. node_ui/node_modules/lodash/_stringToArray.js +18 -0
  648. node_ui/node_modules/lodash/_stringToPath.js +27 -0
  649. node_ui/node_modules/lodash/_toKey.js +21 -0
  650. node_ui/node_modules/lodash/_toSource.js +26 -0
  651. node_ui/node_modules/lodash/_trimmedEndIndex.js +19 -0
  652. node_ui/node_modules/lodash/_unescapeHtmlChar.js +21 -0
  653. node_ui/node_modules/lodash/_unicodeSize.js +44 -0
  654. node_ui/node_modules/lodash/_unicodeToArray.js +40 -0
  655. node_ui/node_modules/lodash/_unicodeWords.js +69 -0
  656. node_ui/node_modules/lodash/_updateWrapDetails.js +46 -0
  657. node_ui/node_modules/lodash/_wrapperClone.js +23 -0
  658. node_ui/node_modules/lodash/add.js +22 -0
  659. node_ui/node_modules/lodash/after.js +42 -0
  660. node_ui/node_modules/lodash/array.js +67 -0
  661. node_ui/node_modules/lodash/ary.js +29 -0
  662. node_ui/node_modules/lodash/assign.js +58 -0
  663. node_ui/node_modules/lodash/assignIn.js +40 -0
  664. node_ui/node_modules/lodash/assignInWith.js +38 -0
  665. node_ui/node_modules/lodash/assignWith.js +37 -0
  666. node_ui/node_modules/lodash/at.js +23 -0
  667. node_ui/node_modules/lodash/attempt.js +35 -0
  668. node_ui/node_modules/lodash/before.js +40 -0
  669. node_ui/node_modules/lodash/bind.js +57 -0
  670. node_ui/node_modules/lodash/bindAll.js +41 -0
  671. node_ui/node_modules/lodash/bindKey.js +68 -0
  672. node_ui/node_modules/lodash/camelCase.js +29 -0
  673. node_ui/node_modules/lodash/capitalize.js +23 -0
  674. node_ui/node_modules/lodash/castArray.js +44 -0
  675. node_ui/node_modules/lodash/ceil.js +26 -0
  676. node_ui/node_modules/lodash/chain.js +38 -0
  677. node_ui/node_modules/lodash/chunk.js +50 -0
  678. node_ui/node_modules/lodash/clamp.js +39 -0
  679. node_ui/node_modules/lodash/clone.js +36 -0
  680. node_ui/node_modules/lodash/cloneDeep.js +29 -0
  681. node_ui/node_modules/lodash/cloneDeepWith.js +40 -0
  682. node_ui/node_modules/lodash/cloneWith.js +42 -0
  683. node_ui/node_modules/lodash/collection.js +30 -0
  684. node_ui/node_modules/lodash/commit.js +33 -0
  685. node_ui/node_modules/lodash/compact.js +31 -0
  686. node_ui/node_modules/lodash/concat.js +43 -0
  687. node_ui/node_modules/lodash/cond.js +60 -0
  688. node_ui/node_modules/lodash/conforms.js +35 -0
  689. node_ui/node_modules/lodash/conformsTo.js +32 -0
  690. node_ui/node_modules/lodash/constant.js +26 -0
  691. node_ui/node_modules/lodash/core.js +3877 -0
  692. node_ui/node_modules/lodash/core.min.js +29 -0
  693. node_ui/node_modules/lodash/countBy.js +40 -0
  694. node_ui/node_modules/lodash/create.js +43 -0
  695. node_ui/node_modules/lodash/curry.js +57 -0
  696. node_ui/node_modules/lodash/curryRight.js +54 -0
  697. node_ui/node_modules/lodash/date.js +3 -0
  698. node_ui/node_modules/lodash/debounce.js +191 -0
  699. node_ui/node_modules/lodash/deburr.js +45 -0
  700. node_ui/node_modules/lodash/defaultTo.js +25 -0
  701. node_ui/node_modules/lodash/defaults.js +64 -0
  702. node_ui/node_modules/lodash/defaultsDeep.js +30 -0
  703. node_ui/node_modules/lodash/defer.js +26 -0
  704. node_ui/node_modules/lodash/delay.js +28 -0
  705. node_ui/node_modules/lodash/difference.js +33 -0
  706. node_ui/node_modules/lodash/differenceBy.js +44 -0
  707. node_ui/node_modules/lodash/differenceWith.js +40 -0
  708. node_ui/node_modules/lodash/divide.js +22 -0
  709. node_ui/node_modules/lodash/drop.js +38 -0
  710. node_ui/node_modules/lodash/dropRight.js +39 -0
  711. node_ui/node_modules/lodash/dropRightWhile.js +45 -0
  712. node_ui/node_modules/lodash/dropWhile.js +45 -0
  713. node_ui/node_modules/lodash/each.js +1 -0
  714. node_ui/node_modules/lodash/eachRight.js +1 -0
  715. node_ui/node_modules/lodash/endsWith.js +43 -0
  716. node_ui/node_modules/lodash/entries.js +1 -0
  717. node_ui/node_modules/lodash/entriesIn.js +1 -0
  718. node_ui/node_modules/lodash/eq.js +37 -0
  719. node_ui/node_modules/lodash/escape.js +43 -0
  720. node_ui/node_modules/lodash/escapeRegExp.js +32 -0
  721. node_ui/node_modules/lodash/every.js +56 -0
  722. node_ui/node_modules/lodash/extend.js +1 -0
  723. node_ui/node_modules/lodash/extendWith.js +1 -0
  724. node_ui/node_modules/lodash/fill.js +45 -0
  725. node_ui/node_modules/lodash/filter.js +52 -0
  726. node_ui/node_modules/lodash/find.js +42 -0
  727. node_ui/node_modules/lodash/findIndex.js +55 -0
  728. node_ui/node_modules/lodash/findKey.js +44 -0
  729. node_ui/node_modules/lodash/findLast.js +25 -0
  730. node_ui/node_modules/lodash/findLastIndex.js +59 -0
  731. node_ui/node_modules/lodash/findLastKey.js +44 -0
  732. node_ui/node_modules/lodash/first.js +1 -0
  733. node_ui/node_modules/lodash/flake.lock +40 -0
  734. node_ui/node_modules/lodash/flake.nix +20 -0
  735. node_ui/node_modules/lodash/flatMap.js +29 -0
  736. node_ui/node_modules/lodash/flatMapDeep.js +31 -0
  737. node_ui/node_modules/lodash/flatMapDepth.js +31 -0
  738. node_ui/node_modules/lodash/flatten.js +22 -0
  739. node_ui/node_modules/lodash/flattenDeep.js +25 -0
  740. node_ui/node_modules/lodash/flattenDepth.js +33 -0
  741. node_ui/node_modules/lodash/flip.js +28 -0
  742. node_ui/node_modules/lodash/floor.js +26 -0
  743. node_ui/node_modules/lodash/flow.js +27 -0
  744. node_ui/node_modules/lodash/flowRight.js +26 -0
  745. node_ui/node_modules/lodash/forEach.js +41 -0
  746. node_ui/node_modules/lodash/forEachRight.js +31 -0
  747. node_ui/node_modules/lodash/forIn.js +39 -0
  748. node_ui/node_modules/lodash/forInRight.js +37 -0
  749. node_ui/node_modules/lodash/forOwn.js +36 -0
  750. node_ui/node_modules/lodash/forOwnRight.js +34 -0
  751. node_ui/node_modules/lodash/fp/F.js +1 -0
  752. node_ui/node_modules/lodash/fp/T.js +1 -0
  753. node_ui/node_modules/lodash/fp/__.js +1 -0
  754. node_ui/node_modules/lodash/fp/_baseConvert.js +569 -0
  755. node_ui/node_modules/lodash/fp/_convertBrowser.js +18 -0
  756. node_ui/node_modules/lodash/fp/_falseOptions.js +7 -0
  757. node_ui/node_modules/lodash/fp/_mapping.js +358 -0
  758. node_ui/node_modules/lodash/fp/_util.js +16 -0
  759. node_ui/node_modules/lodash/fp/add.js +5 -0
  760. node_ui/node_modules/lodash/fp/after.js +5 -0
  761. node_ui/node_modules/lodash/fp/all.js +1 -0
  762. node_ui/node_modules/lodash/fp/allPass.js +1 -0
  763. node_ui/node_modules/lodash/fp/always.js +1 -0
  764. node_ui/node_modules/lodash/fp/any.js +1 -0
  765. node_ui/node_modules/lodash/fp/anyPass.js +1 -0
  766. node_ui/node_modules/lodash/fp/apply.js +1 -0
  767. node_ui/node_modules/lodash/fp/array.js +2 -0
  768. node_ui/node_modules/lodash/fp/ary.js +5 -0
  769. node_ui/node_modules/lodash/fp/assign.js +5 -0
  770. node_ui/node_modules/lodash/fp/assignAll.js +5 -0
  771. node_ui/node_modules/lodash/fp/assignAllWith.js +5 -0
  772. node_ui/node_modules/lodash/fp/assignIn.js +5 -0
  773. node_ui/node_modules/lodash/fp/assignInAll.js +5 -0
  774. node_ui/node_modules/lodash/fp/assignInAllWith.js +5 -0
  775. node_ui/node_modules/lodash/fp/assignInWith.js +5 -0
  776. node_ui/node_modules/lodash/fp/assignWith.js +5 -0
  777. node_ui/node_modules/lodash/fp/assoc.js +1 -0
  778. node_ui/node_modules/lodash/fp/assocPath.js +1 -0
  779. node_ui/node_modules/lodash/fp/at.js +5 -0
  780. node_ui/node_modules/lodash/fp/attempt.js +5 -0
  781. node_ui/node_modules/lodash/fp/before.js +5 -0
  782. node_ui/node_modules/lodash/fp/bind.js +5 -0
  783. node_ui/node_modules/lodash/fp/bindAll.js +5 -0
  784. node_ui/node_modules/lodash/fp/bindKey.js +5 -0
  785. node_ui/node_modules/lodash/fp/camelCase.js +5 -0
  786. node_ui/node_modules/lodash/fp/capitalize.js +5 -0
  787. node_ui/node_modules/lodash/fp/castArray.js +5 -0
  788. node_ui/node_modules/lodash/fp/ceil.js +5 -0
  789. node_ui/node_modules/lodash/fp/chain.js +5 -0
  790. node_ui/node_modules/lodash/fp/chunk.js +5 -0
  791. node_ui/node_modules/lodash/fp/clamp.js +5 -0
  792. node_ui/node_modules/lodash/fp/clone.js +5 -0
  793. node_ui/node_modules/lodash/fp/cloneDeep.js +5 -0
  794. node_ui/node_modules/lodash/fp/cloneDeepWith.js +5 -0
  795. node_ui/node_modules/lodash/fp/cloneWith.js +5 -0
  796. node_ui/node_modules/lodash/fp/collection.js +2 -0
  797. node_ui/node_modules/lodash/fp/commit.js +5 -0
  798. node_ui/node_modules/lodash/fp/compact.js +5 -0
  799. node_ui/node_modules/lodash/fp/complement.js +1 -0
  800. node_ui/node_modules/lodash/fp/compose.js +1 -0
  801. node_ui/node_modules/lodash/fp/concat.js +5 -0
  802. node_ui/node_modules/lodash/fp/cond.js +5 -0
  803. node_ui/node_modules/lodash/fp/conforms.js +1 -0
  804. node_ui/node_modules/lodash/fp/conformsTo.js +5 -0
  805. node_ui/node_modules/lodash/fp/constant.js +5 -0
  806. node_ui/node_modules/lodash/fp/contains.js +1 -0
  807. node_ui/node_modules/lodash/fp/convert.js +18 -0
  808. node_ui/node_modules/lodash/fp/countBy.js +5 -0
  809. node_ui/node_modules/lodash/fp/create.js +5 -0
  810. node_ui/node_modules/lodash/fp/curry.js +5 -0
  811. node_ui/node_modules/lodash/fp/curryN.js +5 -0
  812. node_ui/node_modules/lodash/fp/curryRight.js +5 -0
  813. node_ui/node_modules/lodash/fp/curryRightN.js +5 -0
  814. node_ui/node_modules/lodash/fp/date.js +2 -0
  815. node_ui/node_modules/lodash/fp/debounce.js +5 -0
  816. node_ui/node_modules/lodash/fp/deburr.js +5 -0
  817. node_ui/node_modules/lodash/fp/defaultTo.js +5 -0
  818. node_ui/node_modules/lodash/fp/defaults.js +5 -0
  819. node_ui/node_modules/lodash/fp/defaultsAll.js +5 -0
  820. node_ui/node_modules/lodash/fp/defaultsDeep.js +5 -0
  821. node_ui/node_modules/lodash/fp/defaultsDeepAll.js +5 -0
  822. node_ui/node_modules/lodash/fp/defer.js +5 -0
  823. node_ui/node_modules/lodash/fp/delay.js +5 -0
  824. node_ui/node_modules/lodash/fp/difference.js +5 -0
  825. node_ui/node_modules/lodash/fp/differenceBy.js +5 -0
  826. node_ui/node_modules/lodash/fp/differenceWith.js +5 -0
  827. node_ui/node_modules/lodash/fp/dissoc.js +1 -0
  828. node_ui/node_modules/lodash/fp/dissocPath.js +1 -0
  829. node_ui/node_modules/lodash/fp/divide.js +5 -0
  830. node_ui/node_modules/lodash/fp/drop.js +5 -0
  831. node_ui/node_modules/lodash/fp/dropLast.js +1 -0
  832. node_ui/node_modules/lodash/fp/dropLastWhile.js +1 -0
  833. node_ui/node_modules/lodash/fp/dropRight.js +5 -0
  834. node_ui/node_modules/lodash/fp/dropRightWhile.js +5 -0
  835. node_ui/node_modules/lodash/fp/dropWhile.js +5 -0
  836. node_ui/node_modules/lodash/fp/each.js +1 -0
  837. node_ui/node_modules/lodash/fp/eachRight.js +1 -0
  838. node_ui/node_modules/lodash/fp/endsWith.js +5 -0
  839. node_ui/node_modules/lodash/fp/entries.js +1 -0
  840. node_ui/node_modules/lodash/fp/entriesIn.js +1 -0
  841. node_ui/node_modules/lodash/fp/eq.js +5 -0
  842. node_ui/node_modules/lodash/fp/equals.js +1 -0
  843. node_ui/node_modules/lodash/fp/escape.js +5 -0
  844. node_ui/node_modules/lodash/fp/escapeRegExp.js +5 -0
  845. node_ui/node_modules/lodash/fp/every.js +5 -0
  846. node_ui/node_modules/lodash/fp/extend.js +1 -0
  847. node_ui/node_modules/lodash/fp/extendAll.js +1 -0
  848. node_ui/node_modules/lodash/fp/extendAllWith.js +1 -0
  849. node_ui/node_modules/lodash/fp/extendWith.js +1 -0
  850. node_ui/node_modules/lodash/fp/fill.js +5 -0
  851. node_ui/node_modules/lodash/fp/filter.js +5 -0
  852. node_ui/node_modules/lodash/fp/find.js +5 -0
  853. node_ui/node_modules/lodash/fp/findFrom.js +5 -0
  854. node_ui/node_modules/lodash/fp/findIndex.js +5 -0
  855. node_ui/node_modules/lodash/fp/findIndexFrom.js +5 -0
  856. node_ui/node_modules/lodash/fp/findKey.js +5 -0
  857. node_ui/node_modules/lodash/fp/findLast.js +5 -0
  858. node_ui/node_modules/lodash/fp/findLastFrom.js +5 -0
  859. node_ui/node_modules/lodash/fp/findLastIndex.js +5 -0
  860. node_ui/node_modules/lodash/fp/findLastIndexFrom.js +5 -0
  861. node_ui/node_modules/lodash/fp/findLastKey.js +5 -0
  862. node_ui/node_modules/lodash/fp/first.js +1 -0
  863. node_ui/node_modules/lodash/fp/flatMap.js +5 -0
  864. node_ui/node_modules/lodash/fp/flatMapDeep.js +5 -0
  865. node_ui/node_modules/lodash/fp/flatMapDepth.js +5 -0
  866. node_ui/node_modules/lodash/fp/flatten.js +5 -0
  867. node_ui/node_modules/lodash/fp/flattenDeep.js +5 -0
  868. node_ui/node_modules/lodash/fp/flattenDepth.js +5 -0
  869. node_ui/node_modules/lodash/fp/flip.js +5 -0
  870. node_ui/node_modules/lodash/fp/floor.js +5 -0
  871. node_ui/node_modules/lodash/fp/flow.js +5 -0
  872. node_ui/node_modules/lodash/fp/flowRight.js +5 -0
  873. node_ui/node_modules/lodash/fp/forEach.js +5 -0
  874. node_ui/node_modules/lodash/fp/forEachRight.js +5 -0
  875. node_ui/node_modules/lodash/fp/forIn.js +5 -0
  876. node_ui/node_modules/lodash/fp/forInRight.js +5 -0
  877. node_ui/node_modules/lodash/fp/forOwn.js +5 -0
  878. node_ui/node_modules/lodash/fp/forOwnRight.js +5 -0
  879. node_ui/node_modules/lodash/fp/fromPairs.js +5 -0
  880. node_ui/node_modules/lodash/fp/function.js +2 -0
  881. node_ui/node_modules/lodash/fp/functions.js +5 -0
  882. node_ui/node_modules/lodash/fp/functionsIn.js +5 -0
  883. node_ui/node_modules/lodash/fp/get.js +5 -0
  884. node_ui/node_modules/lodash/fp/getOr.js +5 -0
  885. node_ui/node_modules/lodash/fp/groupBy.js +5 -0
  886. node_ui/node_modules/lodash/fp/gt.js +5 -0
  887. node_ui/node_modules/lodash/fp/gte.js +5 -0
  888. node_ui/node_modules/lodash/fp/has.js +5 -0
  889. node_ui/node_modules/lodash/fp/hasIn.js +5 -0
  890. node_ui/node_modules/lodash/fp/head.js +5 -0
  891. node_ui/node_modules/lodash/fp/identical.js +1 -0
  892. node_ui/node_modules/lodash/fp/identity.js +5 -0
  893. node_ui/node_modules/lodash/fp/inRange.js +5 -0
  894. node_ui/node_modules/lodash/fp/includes.js +5 -0
  895. node_ui/node_modules/lodash/fp/includesFrom.js +5 -0
  896. node_ui/node_modules/lodash/fp/indexBy.js +1 -0
  897. node_ui/node_modules/lodash/fp/indexOf.js +5 -0
  898. node_ui/node_modules/lodash/fp/indexOfFrom.js +5 -0
  899. node_ui/node_modules/lodash/fp/init.js +1 -0
  900. node_ui/node_modules/lodash/fp/initial.js +5 -0
  901. node_ui/node_modules/lodash/fp/intersection.js +5 -0
  902. node_ui/node_modules/lodash/fp/intersectionBy.js +5 -0
  903. node_ui/node_modules/lodash/fp/intersectionWith.js +5 -0
  904. node_ui/node_modules/lodash/fp/invert.js +5 -0
  905. node_ui/node_modules/lodash/fp/invertBy.js +5 -0
  906. node_ui/node_modules/lodash/fp/invertObj.js +1 -0
  907. node_ui/node_modules/lodash/fp/invoke.js +5 -0
  908. node_ui/node_modules/lodash/fp/invokeArgs.js +5 -0
  909. node_ui/node_modules/lodash/fp/invokeArgsMap.js +5 -0
  910. node_ui/node_modules/lodash/fp/invokeMap.js +5 -0
  911. node_ui/node_modules/lodash/fp/isArguments.js +5 -0
  912. node_ui/node_modules/lodash/fp/isArray.js +5 -0
  913. node_ui/node_modules/lodash/fp/isArrayBuffer.js +5 -0
  914. node_ui/node_modules/lodash/fp/isArrayLike.js +5 -0
  915. node_ui/node_modules/lodash/fp/isArrayLikeObject.js +5 -0
  916. node_ui/node_modules/lodash/fp/isBoolean.js +5 -0
  917. node_ui/node_modules/lodash/fp/isBuffer.js +5 -0
  918. node_ui/node_modules/lodash/fp/isDate.js +5 -0
  919. node_ui/node_modules/lodash/fp/isElement.js +5 -0
  920. node_ui/node_modules/lodash/fp/isEmpty.js +5 -0
  921. node_ui/node_modules/lodash/fp/isEqual.js +5 -0
  922. node_ui/node_modules/lodash/fp/isEqualWith.js +5 -0
  923. node_ui/node_modules/lodash/fp/isError.js +5 -0
  924. node_ui/node_modules/lodash/fp/isFinite.js +5 -0
  925. node_ui/node_modules/lodash/fp/isFunction.js +5 -0
  926. node_ui/node_modules/lodash/fp/isInteger.js +5 -0
  927. node_ui/node_modules/lodash/fp/isLength.js +5 -0
  928. node_ui/node_modules/lodash/fp/isMap.js +5 -0
  929. node_ui/node_modules/lodash/fp/isMatch.js +5 -0
  930. node_ui/node_modules/lodash/fp/isMatchWith.js +5 -0
  931. node_ui/node_modules/lodash/fp/isNaN.js +5 -0
  932. node_ui/node_modules/lodash/fp/isNative.js +5 -0
  933. node_ui/node_modules/lodash/fp/isNil.js +5 -0
  934. node_ui/node_modules/lodash/fp/isNull.js +5 -0
  935. node_ui/node_modules/lodash/fp/isNumber.js +5 -0
  936. node_ui/node_modules/lodash/fp/isObject.js +5 -0
  937. node_ui/node_modules/lodash/fp/isObjectLike.js +5 -0
  938. node_ui/node_modules/lodash/fp/isPlainObject.js +5 -0
  939. node_ui/node_modules/lodash/fp/isRegExp.js +5 -0
  940. node_ui/node_modules/lodash/fp/isSafeInteger.js +5 -0
  941. node_ui/node_modules/lodash/fp/isSet.js +5 -0
  942. node_ui/node_modules/lodash/fp/isString.js +5 -0
  943. node_ui/node_modules/lodash/fp/isSymbol.js +5 -0
  944. node_ui/node_modules/lodash/fp/isTypedArray.js +5 -0
  945. node_ui/node_modules/lodash/fp/isUndefined.js +5 -0
  946. node_ui/node_modules/lodash/fp/isWeakMap.js +5 -0
  947. node_ui/node_modules/lodash/fp/isWeakSet.js +5 -0
  948. node_ui/node_modules/lodash/fp/iteratee.js +5 -0
  949. node_ui/node_modules/lodash/fp/join.js +5 -0
  950. node_ui/node_modules/lodash/fp/juxt.js +1 -0
  951. node_ui/node_modules/lodash/fp/kebabCase.js +5 -0
  952. node_ui/node_modules/lodash/fp/keyBy.js +5 -0
  953. node_ui/node_modules/lodash/fp/keys.js +5 -0
  954. node_ui/node_modules/lodash/fp/keysIn.js +5 -0
  955. node_ui/node_modules/lodash/fp/lang.js +2 -0
  956. node_ui/node_modules/lodash/fp/last.js +5 -0
  957. node_ui/node_modules/lodash/fp/lastIndexOf.js +5 -0
  958. node_ui/node_modules/lodash/fp/lastIndexOfFrom.js +5 -0
  959. node_ui/node_modules/lodash/fp/lowerCase.js +5 -0
  960. node_ui/node_modules/lodash/fp/lowerFirst.js +5 -0
  961. node_ui/node_modules/lodash/fp/lt.js +5 -0
  962. node_ui/node_modules/lodash/fp/lte.js +5 -0
  963. node_ui/node_modules/lodash/fp/map.js +5 -0
  964. node_ui/node_modules/lodash/fp/mapKeys.js +5 -0
  965. node_ui/node_modules/lodash/fp/mapValues.js +5 -0
  966. node_ui/node_modules/lodash/fp/matches.js +1 -0
  967. node_ui/node_modules/lodash/fp/matchesProperty.js +5 -0
  968. node_ui/node_modules/lodash/fp/math.js +2 -0
  969. node_ui/node_modules/lodash/fp/max.js +5 -0
  970. node_ui/node_modules/lodash/fp/maxBy.js +5 -0
  971. node_ui/node_modules/lodash/fp/mean.js +5 -0
  972. node_ui/node_modules/lodash/fp/meanBy.js +5 -0
  973. node_ui/node_modules/lodash/fp/memoize.js +5 -0
  974. node_ui/node_modules/lodash/fp/merge.js +5 -0
  975. node_ui/node_modules/lodash/fp/mergeAll.js +5 -0
  976. node_ui/node_modules/lodash/fp/mergeAllWith.js +5 -0
  977. node_ui/node_modules/lodash/fp/mergeWith.js +5 -0
  978. node_ui/node_modules/lodash/fp/method.js +5 -0
  979. node_ui/node_modules/lodash/fp/methodOf.js +5 -0
  980. node_ui/node_modules/lodash/fp/min.js +5 -0
  981. node_ui/node_modules/lodash/fp/minBy.js +5 -0
  982. node_ui/node_modules/lodash/fp/mixin.js +5 -0
  983. node_ui/node_modules/lodash/fp/multiply.js +5 -0
  984. node_ui/node_modules/lodash/fp/nAry.js +1 -0
  985. node_ui/node_modules/lodash/fp/negate.js +5 -0
  986. node_ui/node_modules/lodash/fp/next.js +5 -0
  987. node_ui/node_modules/lodash/fp/noop.js +5 -0
  988. node_ui/node_modules/lodash/fp/now.js +5 -0
  989. node_ui/node_modules/lodash/fp/nth.js +5 -0
  990. node_ui/node_modules/lodash/fp/nthArg.js +5 -0
  991. node_ui/node_modules/lodash/fp/number.js +2 -0
  992. node_ui/node_modules/lodash/fp/object.js +2 -0
  993. node_ui/node_modules/lodash/fp/omit.js +5 -0
  994. node_ui/node_modules/lodash/fp/omitAll.js +1 -0
  995. node_ui/node_modules/lodash/fp/omitBy.js +5 -0
  996. node_ui/node_modules/lodash/fp/once.js +5 -0
  997. node_ui/node_modules/lodash/fp/orderBy.js +5 -0
  998. node_ui/node_modules/lodash/fp/over.js +5 -0
  999. node_ui/node_modules/lodash/fp/overArgs.js +5 -0
  1000. node_ui/node_modules/lodash/fp/overEvery.js +5 -0
  1001. node_ui/node_modules/lodash/fp/overSome.js +5 -0
  1002. node_ui/node_modules/lodash/fp/pad.js +5 -0
  1003. node_ui/node_modules/lodash/fp/padChars.js +5 -0
  1004. node_ui/node_modules/lodash/fp/padCharsEnd.js +5 -0
  1005. node_ui/node_modules/lodash/fp/padCharsStart.js +5 -0
  1006. node_ui/node_modules/lodash/fp/padEnd.js +5 -0
  1007. node_ui/node_modules/lodash/fp/padStart.js +5 -0
  1008. node_ui/node_modules/lodash/fp/parseInt.js +5 -0
  1009. node_ui/node_modules/lodash/fp/partial.js +5 -0
  1010. node_ui/node_modules/lodash/fp/partialRight.js +5 -0
  1011. node_ui/node_modules/lodash/fp/partition.js +5 -0
  1012. node_ui/node_modules/lodash/fp/path.js +1 -0
  1013. node_ui/node_modules/lodash/fp/pathEq.js +1 -0
  1014. node_ui/node_modules/lodash/fp/pathOr.js +1 -0
  1015. node_ui/node_modules/lodash/fp/paths.js +1 -0
  1016. node_ui/node_modules/lodash/fp/pick.js +5 -0
  1017. node_ui/node_modules/lodash/fp/pickAll.js +1 -0
  1018. node_ui/node_modules/lodash/fp/pickBy.js +5 -0
  1019. node_ui/node_modules/lodash/fp/pipe.js +1 -0
  1020. node_ui/node_modules/lodash/fp/placeholder.js +6 -0
  1021. node_ui/node_modules/lodash/fp/plant.js +5 -0
  1022. node_ui/node_modules/lodash/fp/pluck.js +1 -0
  1023. node_ui/node_modules/lodash/fp/prop.js +1 -0
  1024. node_ui/node_modules/lodash/fp/propEq.js +1 -0
  1025. node_ui/node_modules/lodash/fp/propOr.js +1 -0
  1026. node_ui/node_modules/lodash/fp/property.js +1 -0
  1027. node_ui/node_modules/lodash/fp/propertyOf.js +5 -0
  1028. node_ui/node_modules/lodash/fp/props.js +1 -0
  1029. node_ui/node_modules/lodash/fp/pull.js +5 -0
  1030. node_ui/node_modules/lodash/fp/pullAll.js +5 -0
  1031. node_ui/node_modules/lodash/fp/pullAllBy.js +5 -0
  1032. node_ui/node_modules/lodash/fp/pullAllWith.js +5 -0
  1033. node_ui/node_modules/lodash/fp/pullAt.js +5 -0
  1034. node_ui/node_modules/lodash/fp/random.js +5 -0
  1035. node_ui/node_modules/lodash/fp/range.js +5 -0
  1036. node_ui/node_modules/lodash/fp/rangeRight.js +5 -0
  1037. node_ui/node_modules/lodash/fp/rangeStep.js +5 -0
  1038. node_ui/node_modules/lodash/fp/rangeStepRight.js +5 -0
  1039. node_ui/node_modules/lodash/fp/rearg.js +5 -0
  1040. node_ui/node_modules/lodash/fp/reduce.js +5 -0
  1041. node_ui/node_modules/lodash/fp/reduceRight.js +5 -0
  1042. node_ui/node_modules/lodash/fp/reject.js +5 -0
  1043. node_ui/node_modules/lodash/fp/remove.js +5 -0
  1044. node_ui/node_modules/lodash/fp/repeat.js +5 -0
  1045. node_ui/node_modules/lodash/fp/replace.js +5 -0
  1046. node_ui/node_modules/lodash/fp/rest.js +5 -0
  1047. node_ui/node_modules/lodash/fp/restFrom.js +5 -0
  1048. node_ui/node_modules/lodash/fp/result.js +5 -0
  1049. node_ui/node_modules/lodash/fp/reverse.js +5 -0
  1050. node_ui/node_modules/lodash/fp/round.js +5 -0
  1051. node_ui/node_modules/lodash/fp/sample.js +5 -0
  1052. node_ui/node_modules/lodash/fp/sampleSize.js +5 -0
  1053. node_ui/node_modules/lodash/fp/seq.js +2 -0
  1054. node_ui/node_modules/lodash/fp/set.js +5 -0
  1055. node_ui/node_modules/lodash/fp/setWith.js +5 -0
  1056. node_ui/node_modules/lodash/fp/shuffle.js +5 -0
  1057. node_ui/node_modules/lodash/fp/size.js +5 -0
  1058. node_ui/node_modules/lodash/fp/slice.js +5 -0
  1059. node_ui/node_modules/lodash/fp/snakeCase.js +5 -0
  1060. node_ui/node_modules/lodash/fp/some.js +5 -0
  1061. node_ui/node_modules/lodash/fp/sortBy.js +5 -0
  1062. node_ui/node_modules/lodash/fp/sortedIndex.js +5 -0
  1063. node_ui/node_modules/lodash/fp/sortedIndexBy.js +5 -0
  1064. node_ui/node_modules/lodash/fp/sortedIndexOf.js +5 -0
  1065. node_ui/node_modules/lodash/fp/sortedLastIndex.js +5 -0
  1066. node_ui/node_modules/lodash/fp/sortedLastIndexBy.js +5 -0
  1067. node_ui/node_modules/lodash/fp/sortedLastIndexOf.js +5 -0
  1068. node_ui/node_modules/lodash/fp/sortedUniq.js +5 -0
  1069. node_ui/node_modules/lodash/fp/sortedUniqBy.js +5 -0
  1070. node_ui/node_modules/lodash/fp/split.js +5 -0
  1071. node_ui/node_modules/lodash/fp/spread.js +5 -0
  1072. node_ui/node_modules/lodash/fp/spreadFrom.js +5 -0
  1073. node_ui/node_modules/lodash/fp/startCase.js +5 -0
  1074. node_ui/node_modules/lodash/fp/startsWith.js +5 -0
  1075. node_ui/node_modules/lodash/fp/string.js +2 -0
  1076. node_ui/node_modules/lodash/fp/stubArray.js +5 -0
  1077. node_ui/node_modules/lodash/fp/stubFalse.js +5 -0
  1078. node_ui/node_modules/lodash/fp/stubObject.js +5 -0
  1079. node_ui/node_modules/lodash/fp/stubString.js +5 -0
  1080. node_ui/node_modules/lodash/fp/stubTrue.js +5 -0
  1081. node_ui/node_modules/lodash/fp/subtract.js +5 -0
  1082. node_ui/node_modules/lodash/fp/sum.js +5 -0
  1083. node_ui/node_modules/lodash/fp/sumBy.js +5 -0
  1084. node_ui/node_modules/lodash/fp/symmetricDifference.js +1 -0
  1085. node_ui/node_modules/lodash/fp/symmetricDifferenceBy.js +1 -0
  1086. node_ui/node_modules/lodash/fp/symmetricDifferenceWith.js +1 -0
  1087. node_ui/node_modules/lodash/fp/tail.js +5 -0
  1088. node_ui/node_modules/lodash/fp/take.js +5 -0
  1089. node_ui/node_modules/lodash/fp/takeLast.js +1 -0
  1090. node_ui/node_modules/lodash/fp/takeLastWhile.js +1 -0
  1091. node_ui/node_modules/lodash/fp/takeRight.js +5 -0
  1092. node_ui/node_modules/lodash/fp/takeRightWhile.js +5 -0
  1093. node_ui/node_modules/lodash/fp/takeWhile.js +5 -0
  1094. node_ui/node_modules/lodash/fp/tap.js +5 -0
  1095. node_ui/node_modules/lodash/fp/template.js +5 -0
  1096. node_ui/node_modules/lodash/fp/templateSettings.js +5 -0
  1097. node_ui/node_modules/lodash/fp/throttle.js +5 -0
  1098. node_ui/node_modules/lodash/fp/thru.js +5 -0
  1099. node_ui/node_modules/lodash/fp/times.js +5 -0
  1100. node_ui/node_modules/lodash/fp/toArray.js +5 -0
  1101. node_ui/node_modules/lodash/fp/toFinite.js +5 -0
  1102. node_ui/node_modules/lodash/fp/toInteger.js +5 -0
  1103. node_ui/node_modules/lodash/fp/toIterator.js +5 -0
  1104. node_ui/node_modules/lodash/fp/toJSON.js +5 -0
  1105. node_ui/node_modules/lodash/fp/toLength.js +5 -0
  1106. node_ui/node_modules/lodash/fp/toLower.js +5 -0
  1107. node_ui/node_modules/lodash/fp/toNumber.js +5 -0
  1108. node_ui/node_modules/lodash/fp/toPairs.js +5 -0
  1109. node_ui/node_modules/lodash/fp/toPairsIn.js +5 -0
  1110. node_ui/node_modules/lodash/fp/toPath.js +5 -0
  1111. node_ui/node_modules/lodash/fp/toPlainObject.js +5 -0
  1112. node_ui/node_modules/lodash/fp/toSafeInteger.js +5 -0
  1113. node_ui/node_modules/lodash/fp/toString.js +5 -0
  1114. node_ui/node_modules/lodash/fp/toUpper.js +5 -0
  1115. node_ui/node_modules/lodash/fp/transform.js +5 -0
  1116. node_ui/node_modules/lodash/fp/trim.js +5 -0
  1117. node_ui/node_modules/lodash/fp/trimChars.js +5 -0
  1118. node_ui/node_modules/lodash/fp/trimCharsEnd.js +5 -0
  1119. node_ui/node_modules/lodash/fp/trimCharsStart.js +5 -0
  1120. node_ui/node_modules/lodash/fp/trimEnd.js +5 -0
  1121. node_ui/node_modules/lodash/fp/trimStart.js +5 -0
  1122. node_ui/node_modules/lodash/fp/truncate.js +5 -0
  1123. node_ui/node_modules/lodash/fp/unapply.js +1 -0
  1124. node_ui/node_modules/lodash/fp/unary.js +5 -0
  1125. node_ui/node_modules/lodash/fp/unescape.js +5 -0
  1126. node_ui/node_modules/lodash/fp/union.js +5 -0
  1127. node_ui/node_modules/lodash/fp/unionBy.js +5 -0
  1128. node_ui/node_modules/lodash/fp/unionWith.js +5 -0
  1129. node_ui/node_modules/lodash/fp/uniq.js +5 -0
  1130. node_ui/node_modules/lodash/fp/uniqBy.js +5 -0
  1131. node_ui/node_modules/lodash/fp/uniqWith.js +5 -0
  1132. node_ui/node_modules/lodash/fp/uniqueId.js +5 -0
  1133. node_ui/node_modules/lodash/fp/unnest.js +1 -0
  1134. node_ui/node_modules/lodash/fp/unset.js +5 -0
  1135. node_ui/node_modules/lodash/fp/unzip.js +5 -0
  1136. node_ui/node_modules/lodash/fp/unzipWith.js +5 -0
  1137. node_ui/node_modules/lodash/fp/update.js +5 -0
  1138. node_ui/node_modules/lodash/fp/updateWith.js +5 -0
  1139. node_ui/node_modules/lodash/fp/upperCase.js +5 -0
  1140. node_ui/node_modules/lodash/fp/upperFirst.js +5 -0
  1141. node_ui/node_modules/lodash/fp/useWith.js +1 -0
  1142. node_ui/node_modules/lodash/fp/util.js +2 -0
  1143. node_ui/node_modules/lodash/fp/value.js +5 -0
  1144. node_ui/node_modules/lodash/fp/valueOf.js +5 -0
  1145. node_ui/node_modules/lodash/fp/values.js +5 -0
  1146. node_ui/node_modules/lodash/fp/valuesIn.js +5 -0
  1147. node_ui/node_modules/lodash/fp/where.js +1 -0
  1148. node_ui/node_modules/lodash/fp/whereEq.js +1 -0
  1149. node_ui/node_modules/lodash/fp/without.js +5 -0
  1150. node_ui/node_modules/lodash/fp/words.js +5 -0
  1151. node_ui/node_modules/lodash/fp/wrap.js +5 -0
  1152. node_ui/node_modules/lodash/fp/wrapperAt.js +5 -0
  1153. node_ui/node_modules/lodash/fp/wrapperChain.js +5 -0
  1154. node_ui/node_modules/lodash/fp/wrapperLodash.js +5 -0
  1155. node_ui/node_modules/lodash/fp/wrapperReverse.js +5 -0
  1156. node_ui/node_modules/lodash/fp/wrapperValue.js +5 -0
  1157. node_ui/node_modules/lodash/fp/xor.js +5 -0
  1158. node_ui/node_modules/lodash/fp/xorBy.js +5 -0
  1159. node_ui/node_modules/lodash/fp/xorWith.js +5 -0
  1160. node_ui/node_modules/lodash/fp/zip.js +5 -0
  1161. node_ui/node_modules/lodash/fp/zipAll.js +5 -0
  1162. node_ui/node_modules/lodash/fp/zipObj.js +1 -0
  1163. node_ui/node_modules/lodash/fp/zipObject.js +5 -0
  1164. node_ui/node_modules/lodash/fp/zipObjectDeep.js +5 -0
  1165. node_ui/node_modules/lodash/fp/zipWith.js +5 -0
  1166. node_ui/node_modules/lodash/fp.js +2 -0
  1167. node_ui/node_modules/lodash/fromPairs.js +28 -0
  1168. node_ui/node_modules/lodash/function.js +25 -0
  1169. node_ui/node_modules/lodash/functions.js +31 -0
  1170. node_ui/node_modules/lodash/functionsIn.js +31 -0
  1171. node_ui/node_modules/lodash/get.js +33 -0
  1172. node_ui/node_modules/lodash/groupBy.js +41 -0
  1173. node_ui/node_modules/lodash/gt.js +29 -0
  1174. node_ui/node_modules/lodash/gte.js +30 -0
  1175. node_ui/node_modules/lodash/has.js +35 -0
  1176. node_ui/node_modules/lodash/hasIn.js +34 -0
  1177. node_ui/node_modules/lodash/head.js +23 -0
  1178. node_ui/node_modules/lodash/identity.js +21 -0
  1179. node_ui/node_modules/lodash/inRange.js +55 -0
  1180. node_ui/node_modules/lodash/includes.js +53 -0
  1181. node_ui/node_modules/lodash/index.js +1 -0
  1182. node_ui/node_modules/lodash/indexOf.js +42 -0
  1183. node_ui/node_modules/lodash/initial.js +22 -0
  1184. node_ui/node_modules/lodash/intersection.js +30 -0
  1185. node_ui/node_modules/lodash/intersectionBy.js +45 -0
  1186. node_ui/node_modules/lodash/intersectionWith.js +41 -0
  1187. node_ui/node_modules/lodash/invert.js +42 -0
  1188. node_ui/node_modules/lodash/invertBy.js +56 -0
  1189. node_ui/node_modules/lodash/invoke.js +24 -0
  1190. node_ui/node_modules/lodash/invokeMap.js +41 -0
  1191. node_ui/node_modules/lodash/isArguments.js +36 -0
  1192. node_ui/node_modules/lodash/isArray.js +26 -0
  1193. node_ui/node_modules/lodash/isArrayBuffer.js +27 -0
  1194. node_ui/node_modules/lodash/isArrayLike.js +33 -0
  1195. node_ui/node_modules/lodash/isArrayLikeObject.js +33 -0
  1196. node_ui/node_modules/lodash/isBoolean.js +29 -0
  1197. node_ui/node_modules/lodash/isBuffer.js +38 -0
  1198. node_ui/node_modules/lodash/isDate.js +27 -0
  1199. node_ui/node_modules/lodash/isElement.js +25 -0
  1200. node_ui/node_modules/lodash/isEmpty.js +77 -0
  1201. node_ui/node_modules/lodash/isEqual.js +35 -0
  1202. node_ui/node_modules/lodash/isEqualWith.js +41 -0
  1203. node_ui/node_modules/lodash/isError.js +36 -0
  1204. node_ui/node_modules/lodash/isFinite.js +36 -0
  1205. node_ui/node_modules/lodash/isFunction.js +37 -0
  1206. node_ui/node_modules/lodash/isInteger.js +33 -0
  1207. node_ui/node_modules/lodash/isLength.js +35 -0
  1208. node_ui/node_modules/lodash/isMap.js +27 -0
  1209. node_ui/node_modules/lodash/isMatch.js +36 -0
  1210. node_ui/node_modules/lodash/isMatchWith.js +41 -0
  1211. node_ui/node_modules/lodash/isNaN.js +38 -0
  1212. node_ui/node_modules/lodash/isNative.js +40 -0
  1213. node_ui/node_modules/lodash/isNil.js +25 -0
  1214. node_ui/node_modules/lodash/isNull.js +22 -0
  1215. node_ui/node_modules/lodash/isNumber.js +38 -0
  1216. node_ui/node_modules/lodash/isObject.js +31 -0
  1217. node_ui/node_modules/lodash/isObjectLike.js +29 -0
  1218. node_ui/node_modules/lodash/isPlainObject.js +62 -0
  1219. node_ui/node_modules/lodash/isRegExp.js +27 -0
  1220. node_ui/node_modules/lodash/isSafeInteger.js +37 -0
  1221. node_ui/node_modules/lodash/isSet.js +27 -0
  1222. node_ui/node_modules/lodash/isString.js +30 -0
  1223. node_ui/node_modules/lodash/isSymbol.js +29 -0
  1224. node_ui/node_modules/lodash/isTypedArray.js +27 -0
  1225. node_ui/node_modules/lodash/isUndefined.js +22 -0
  1226. node_ui/node_modules/lodash/isWeakMap.js +28 -0
  1227. node_ui/node_modules/lodash/isWeakSet.js +28 -0
  1228. node_ui/node_modules/lodash/iteratee.js +53 -0
  1229. node_ui/node_modules/lodash/join.js +26 -0
  1230. node_ui/node_modules/lodash/kebabCase.js +28 -0
  1231. node_ui/node_modules/lodash/keyBy.js +36 -0
  1232. node_ui/node_modules/lodash/keys.js +37 -0
  1233. node_ui/node_modules/lodash/keysIn.js +32 -0
  1234. node_ui/node_modules/lodash/lang.js +58 -0
  1235. node_ui/node_modules/lodash/last.js +20 -0
  1236. node_ui/node_modules/lodash/lastIndexOf.js +46 -0
  1237. node_ui/node_modules/lodash/lodash.js +17209 -0
  1238. node_ui/node_modules/lodash/lodash.min.js +140 -0
  1239. node_ui/node_modules/lodash/lowerCase.js +27 -0
  1240. node_ui/node_modules/lodash/lowerFirst.js +22 -0
  1241. node_ui/node_modules/lodash/lt.js +29 -0
  1242. node_ui/node_modules/lodash/lte.js +30 -0
  1243. node_ui/node_modules/lodash/map.js +53 -0
  1244. node_ui/node_modules/lodash/mapKeys.js +36 -0
  1245. node_ui/node_modules/lodash/mapValues.js +43 -0
  1246. node_ui/node_modules/lodash/matches.js +46 -0
  1247. node_ui/node_modules/lodash/matchesProperty.js +44 -0
  1248. node_ui/node_modules/lodash/math.js +17 -0
  1249. node_ui/node_modules/lodash/max.js +29 -0
  1250. node_ui/node_modules/lodash/maxBy.js +34 -0
  1251. node_ui/node_modules/lodash/mean.js +22 -0
  1252. node_ui/node_modules/lodash/meanBy.js +31 -0
  1253. node_ui/node_modules/lodash/memoize.js +73 -0
  1254. node_ui/node_modules/lodash/merge.js +39 -0
  1255. node_ui/node_modules/lodash/mergeWith.js +39 -0
  1256. node_ui/node_modules/lodash/method.js +34 -0
  1257. node_ui/node_modules/lodash/methodOf.js +33 -0
  1258. node_ui/node_modules/lodash/min.js +29 -0
  1259. node_ui/node_modules/lodash/minBy.js +34 -0
  1260. node_ui/node_modules/lodash/mixin.js +74 -0
  1261. node_ui/node_modules/lodash/multiply.js +22 -0
  1262. node_ui/node_modules/lodash/negate.js +40 -0
  1263. node_ui/node_modules/lodash/next.js +35 -0
  1264. node_ui/node_modules/lodash/noop.js +17 -0
  1265. node_ui/node_modules/lodash/now.js +23 -0
  1266. node_ui/node_modules/lodash/nth.js +29 -0
  1267. node_ui/node_modules/lodash/nthArg.js +32 -0
  1268. node_ui/node_modules/lodash/number.js +5 -0
  1269. node_ui/node_modules/lodash/object.js +49 -0
  1270. node_ui/node_modules/lodash/omit.js +57 -0
  1271. node_ui/node_modules/lodash/omitBy.js +29 -0
  1272. node_ui/node_modules/lodash/once.js +25 -0
  1273. node_ui/node_modules/lodash/orderBy.js +47 -0
  1274. node_ui/node_modules/lodash/over.js +24 -0
  1275. node_ui/node_modules/lodash/overArgs.js +61 -0
  1276. node_ui/node_modules/lodash/overEvery.js +34 -0
  1277. node_ui/node_modules/lodash/overSome.js +37 -0
  1278. node_ui/node_modules/lodash/package.json +17 -0
  1279. node_ui/node_modules/lodash/pad.js +49 -0
  1280. node_ui/node_modules/lodash/padEnd.js +39 -0
  1281. node_ui/node_modules/lodash/padStart.js +39 -0
  1282. node_ui/node_modules/lodash/parseInt.js +43 -0
  1283. node_ui/node_modules/lodash/partial.js +50 -0
  1284. node_ui/node_modules/lodash/partialRight.js +49 -0
  1285. node_ui/node_modules/lodash/partition.js +43 -0
  1286. node_ui/node_modules/lodash/pick.js +25 -0
  1287. node_ui/node_modules/lodash/pickBy.js +37 -0
  1288. node_ui/node_modules/lodash/plant.js +48 -0
  1289. node_ui/node_modules/lodash/property.js +32 -0
  1290. node_ui/node_modules/lodash/propertyOf.js +30 -0
  1291. node_ui/node_modules/lodash/pull.js +29 -0
  1292. node_ui/node_modules/lodash/pullAll.js +29 -0
  1293. node_ui/node_modules/lodash/pullAllBy.js +33 -0
  1294. node_ui/node_modules/lodash/pullAllWith.js +32 -0
  1295. node_ui/node_modules/lodash/pullAt.js +43 -0
  1296. node_ui/node_modules/lodash/random.js +82 -0
  1297. node_ui/node_modules/lodash/range.js +46 -0
  1298. node_ui/node_modules/lodash/rangeRight.js +41 -0
  1299. node_ui/node_modules/lodash/rearg.js +33 -0
  1300. node_ui/node_modules/lodash/reduce.js +51 -0
  1301. node_ui/node_modules/lodash/reduceRight.js +36 -0
  1302. node_ui/node_modules/lodash/reject.js +46 -0
  1303. node_ui/node_modules/lodash/release.md +48 -0
  1304. node_ui/node_modules/lodash/remove.js +53 -0
  1305. node_ui/node_modules/lodash/repeat.js +37 -0
  1306. node_ui/node_modules/lodash/replace.js +29 -0
  1307. node_ui/node_modules/lodash/rest.js +40 -0
  1308. node_ui/node_modules/lodash/result.js +56 -0
  1309. node_ui/node_modules/lodash/reverse.js +34 -0
  1310. node_ui/node_modules/lodash/round.js +26 -0
  1311. node_ui/node_modules/lodash/sample.js +24 -0
  1312. node_ui/node_modules/lodash/sampleSize.js +37 -0
  1313. node_ui/node_modules/lodash/seq.js +16 -0
  1314. node_ui/node_modules/lodash/set.js +35 -0
  1315. node_ui/node_modules/lodash/setWith.js +32 -0
  1316. node_ui/node_modules/lodash/shuffle.js +25 -0
  1317. node_ui/node_modules/lodash/size.js +46 -0
  1318. node_ui/node_modules/lodash/slice.js +37 -0
  1319. node_ui/node_modules/lodash/snakeCase.js +28 -0
  1320. node_ui/node_modules/lodash/some.js +51 -0
  1321. node_ui/node_modules/lodash/sortBy.js +48 -0
  1322. node_ui/node_modules/lodash/sortedIndex.js +24 -0
  1323. node_ui/node_modules/lodash/sortedIndexBy.js +33 -0
  1324. node_ui/node_modules/lodash/sortedIndexOf.js +31 -0
  1325. node_ui/node_modules/lodash/sortedLastIndex.js +25 -0
  1326. node_ui/node_modules/lodash/sortedLastIndexBy.js +33 -0
  1327. node_ui/node_modules/lodash/sortedLastIndexOf.js +31 -0
  1328. node_ui/node_modules/lodash/sortedUniq.js +24 -0
  1329. node_ui/node_modules/lodash/sortedUniqBy.js +26 -0
  1330. node_ui/node_modules/lodash/split.js +52 -0
  1331. node_ui/node_modules/lodash/spread.js +63 -0
  1332. node_ui/node_modules/lodash/startCase.js +29 -0
  1333. node_ui/node_modules/lodash/startsWith.js +39 -0
  1334. node_ui/node_modules/lodash/string.js +33 -0
  1335. node_ui/node_modules/lodash/stubArray.js +23 -0
  1336. node_ui/node_modules/lodash/stubFalse.js +18 -0
  1337. node_ui/node_modules/lodash/stubObject.js +23 -0
  1338. node_ui/node_modules/lodash/stubString.js +18 -0
  1339. node_ui/node_modules/lodash/stubTrue.js +18 -0
  1340. node_ui/node_modules/lodash/subtract.js +22 -0
  1341. node_ui/node_modules/lodash/sum.js +24 -0
  1342. node_ui/node_modules/lodash/sumBy.js +33 -0
  1343. node_ui/node_modules/lodash/tail.js +22 -0
  1344. node_ui/node_modules/lodash/take.js +37 -0
  1345. node_ui/node_modules/lodash/takeRight.js +39 -0
  1346. node_ui/node_modules/lodash/takeRightWhile.js +45 -0
  1347. node_ui/node_modules/lodash/takeWhile.js +45 -0
  1348. node_ui/node_modules/lodash/tap.js +29 -0
  1349. node_ui/node_modules/lodash/template.js +272 -0
  1350. node_ui/node_modules/lodash/templateSettings.js +67 -0
  1351. node_ui/node_modules/lodash/throttle.js +69 -0
  1352. node_ui/node_modules/lodash/thru.js +28 -0
  1353. node_ui/node_modules/lodash/times.js +51 -0
  1354. node_ui/node_modules/lodash/toArray.js +58 -0
  1355. node_ui/node_modules/lodash/toFinite.js +42 -0
  1356. node_ui/node_modules/lodash/toInteger.js +36 -0
  1357. node_ui/node_modules/lodash/toIterator.js +23 -0
  1358. node_ui/node_modules/lodash/toJSON.js +1 -0
  1359. node_ui/node_modules/lodash/toLength.js +38 -0
  1360. node_ui/node_modules/lodash/toLower.js +28 -0
  1361. node_ui/node_modules/lodash/toNumber.js +64 -0
  1362. node_ui/node_modules/lodash/toPairs.js +30 -0
  1363. node_ui/node_modules/lodash/toPairsIn.js +30 -0
  1364. node_ui/node_modules/lodash/toPath.js +33 -0
  1365. node_ui/node_modules/lodash/toPlainObject.js +32 -0
  1366. node_ui/node_modules/lodash/toSafeInteger.js +37 -0
  1367. node_ui/node_modules/lodash/toString.js +28 -0
  1368. node_ui/node_modules/lodash/toUpper.js +28 -0
  1369. node_ui/node_modules/lodash/transform.js +65 -0
  1370. node_ui/node_modules/lodash/trim.js +47 -0
  1371. node_ui/node_modules/lodash/trimEnd.js +41 -0
  1372. node_ui/node_modules/lodash/trimStart.js +43 -0
  1373. node_ui/node_modules/lodash/truncate.js +111 -0
  1374. node_ui/node_modules/lodash/unary.js +22 -0
  1375. node_ui/node_modules/lodash/unescape.js +34 -0
  1376. node_ui/node_modules/lodash/union.js +26 -0
  1377. node_ui/node_modules/lodash/unionBy.js +39 -0
  1378. node_ui/node_modules/lodash/unionWith.js +34 -0
  1379. node_ui/node_modules/lodash/uniq.js +25 -0
  1380. node_ui/node_modules/lodash/uniqBy.js +31 -0
  1381. node_ui/node_modules/lodash/uniqWith.js +28 -0
  1382. node_ui/node_modules/lodash/uniqueId.js +28 -0
  1383. node_ui/node_modules/lodash/unset.js +34 -0
  1384. node_ui/node_modules/lodash/unzip.js +45 -0
  1385. node_ui/node_modules/lodash/unzipWith.js +39 -0
  1386. node_ui/node_modules/lodash/update.js +35 -0
  1387. node_ui/node_modules/lodash/updateWith.js +33 -0
  1388. node_ui/node_modules/lodash/upperCase.js +27 -0
  1389. node_ui/node_modules/lodash/upperFirst.js +22 -0
  1390. node_ui/node_modules/lodash/util.js +34 -0
  1391. node_ui/node_modules/lodash/value.js +1 -0
  1392. node_ui/node_modules/lodash/valueOf.js +1 -0
  1393. node_ui/node_modules/lodash/values.js +34 -0
  1394. node_ui/node_modules/lodash/valuesIn.js +32 -0
  1395. node_ui/node_modules/lodash/without.js +31 -0
  1396. node_ui/node_modules/lodash/words.js +35 -0
  1397. node_ui/node_modules/lodash/wrap.js +30 -0
  1398. node_ui/node_modules/lodash/wrapperAt.js +48 -0
  1399. node_ui/node_modules/lodash/wrapperChain.js +34 -0
  1400. node_ui/node_modules/lodash/wrapperLodash.js +147 -0
  1401. node_ui/node_modules/lodash/wrapperReverse.js +44 -0
  1402. node_ui/node_modules/lodash/wrapperValue.js +21 -0
  1403. node_ui/node_modules/lodash/xor.js +28 -0
  1404. node_ui/node_modules/lodash/xorBy.js +39 -0
  1405. node_ui/node_modules/lodash/xorWith.js +34 -0
  1406. node_ui/node_modules/lodash/zip.js +22 -0
  1407. node_ui/node_modules/lodash/zipObject.js +24 -0
  1408. node_ui/node_modules/lodash/zipObjectDeep.js +23 -0
  1409. node_ui/node_modules/lodash/zipWith.js +32 -0
  1410. node_ui/node_modules/lodash.isequal/LICENSE +47 -0
  1411. node_ui/node_modules/lodash.isequal/README.md +18 -0
  1412. node_ui/node_modules/lodash.isequal/index.js +1848 -0
  1413. node_ui/node_modules/lodash.isequal/package.json +16 -0
  1414. node_ui/node_modules/loose-envify/LICENSE +21 -0
  1415. node_ui/node_modules/loose-envify/README.md +45 -0
  1416. node_ui/node_modules/loose-envify/cli.js +16 -0
  1417. node_ui/node_modules/loose-envify/custom.js +4 -0
  1418. node_ui/node_modules/loose-envify/index.js +3 -0
  1419. node_ui/node_modules/loose-envify/loose-envify.js +36 -0
  1420. node_ui/node_modules/loose-envify/package.json +36 -0
  1421. node_ui/node_modules/loose-envify/replace.js +65 -0
  1422. node_ui/node_modules/meow/build/dependencies.js +8828 -0
  1423. node_ui/node_modules/meow/build/index.d.ts +1425 -0
  1424. node_ui/node_modules/meow/build/index.js +95 -0
  1425. node_ui/node_modules/meow/build/licenses.md +1620 -0
  1426. node_ui/node_modules/meow/build/options.js +92 -0
  1427. node_ui/node_modules/meow/build/parser.js +84 -0
  1428. node_ui/node_modules/meow/build/utils.js +7 -0
  1429. node_ui/node_modules/meow/build/validate.js +122 -0
  1430. node_ui/node_modules/meow/license +9 -0
  1431. node_ui/node_modules/meow/package.json +105 -0
  1432. node_ui/node_modules/meow/readme.md +314 -0
  1433. node_ui/node_modules/mimic-fn/index.d.ts +54 -0
  1434. node_ui/node_modules/mimic-fn/index.js +13 -0
  1435. node_ui/node_modules/mimic-fn/license +9 -0
  1436. node_ui/node_modules/mimic-fn/package.json +42 -0
  1437. node_ui/node_modules/mimic-fn/readme.md +69 -0
  1438. node_ui/node_modules/onetime/index.d.ts +64 -0
  1439. node_ui/node_modules/onetime/index.js +44 -0
  1440. node_ui/node_modules/onetime/license +9 -0
  1441. node_ui/node_modules/onetime/package.json +43 -0
  1442. node_ui/node_modules/onetime/readme.md +94 -0
  1443. node_ui/node_modules/patch-console/dist/index.d.ts +4 -0
  1444. node_ui/node_modules/patch-console/dist/index.js +45 -0
  1445. node_ui/node_modules/patch-console/dist/index.js.map +1 -0
  1446. node_ui/node_modules/patch-console/license +9 -0
  1447. node_ui/node_modules/patch-console/package.json +53 -0
  1448. node_ui/node_modules/patch-console/readme.md +62 -0
  1449. node_ui/node_modules/react/LICENSE +21 -0
  1450. node_ui/node_modules/react/README.md +37 -0
  1451. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.development.js +1315 -0
  1452. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
  1453. node_ui/node_modules/react/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
  1454. node_ui/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
  1455. node_ui/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
  1456. node_ui/node_modules/react/cjs/react-jsx-runtime.profiling.min.js +11 -0
  1457. node_ui/node_modules/react/cjs/react.development.js +2740 -0
  1458. node_ui/node_modules/react/cjs/react.production.min.js +26 -0
  1459. node_ui/node_modules/react/cjs/react.shared-subset.development.js +20 -0
  1460. node_ui/node_modules/react/cjs/react.shared-subset.production.min.js +10 -0
  1461. node_ui/node_modules/react/index.js +7 -0
  1462. node_ui/node_modules/react/jsx-dev-runtime.js +7 -0
  1463. node_ui/node_modules/react/jsx-runtime.js +7 -0
  1464. node_ui/node_modules/react/package.json +47 -0
  1465. node_ui/node_modules/react/react.shared-subset.js +7 -0
  1466. node_ui/node_modules/react/umd/react.development.js +3343 -0
  1467. node_ui/node_modules/react/umd/react.production.min.js +31 -0
  1468. node_ui/node_modules/react/umd/react.profiling.min.js +31 -0
  1469. node_ui/node_modules/react-devtools-core/README.md +131 -0
  1470. node_ui/node_modules/react-devtools-core/backend.js +1 -0
  1471. node_ui/node_modules/react-devtools-core/dist/backend.js +16888 -0
  1472. node_ui/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  1473. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  1474. node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  1475. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js +2 -0
  1476. node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js.map +1 -0
  1477. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +2 -0
  1478. node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  1479. node_ui/node_modules/react-devtools-core/dist/standalone.js +3 -0
  1480. node_ui/node_modules/react-devtools-core/dist/standalone.js.LICENSE.txt +41 -0
  1481. node_ui/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  1482. node_ui/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  1483. node_ui/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  1484. node_ui/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  1485. node_ui/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  1486. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  1487. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  1488. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  1489. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  1490. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  1491. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  1492. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  1493. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  1494. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  1495. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  1496. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  1497. node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  1498. node_ui/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  1499. node_ui/node_modules/react-devtools-core/package.json +38 -0
  1500. node_ui/node_modules/react-devtools-core/standalone.js +1 -0
  1501. node_ui/node_modules/react-reconciler/LICENSE +21 -0
  1502. node_ui/node_modules/react-reconciler/README.md +337 -0
  1503. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.development.js +45 -0
  1504. node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js +10 -0
  1505. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +660 -0
  1506. node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +15 -0
  1507. node_ui/node_modules/react-reconciler/cjs/react-reconciler.development.js +21531 -0
  1508. node_ui/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +234 -0
  1509. node_ui/node_modules/react-reconciler/cjs/react-reconciler.profiling.min.js +255 -0
  1510. node_ui/node_modules/react-reconciler/constants.js +7 -0
  1511. node_ui/node_modules/react-reconciler/index.js +7 -0
  1512. node_ui/node_modules/react-reconciler/package.json +40 -0
  1513. node_ui/node_modules/react-reconciler/reflection.js +7 -0
  1514. node_ui/node_modules/restore-cursor/index.d.ts +11 -0
  1515. node_ui/node_modules/restore-cursor/index.js +11 -0
  1516. node_ui/node_modules/restore-cursor/license +9 -0
  1517. node_ui/node_modules/restore-cursor/package.json +55 -0
  1518. node_ui/node_modules/restore-cursor/readme.md +31 -0
  1519. node_ui/node_modules/scheduler/LICENSE +21 -0
  1520. node_ui/node_modules/scheduler/README.md +9 -0
  1521. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +700 -0
  1522. node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.production.min.js +20 -0
  1523. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +207 -0
  1524. node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.min.js +14 -0
  1525. node_ui/node_modules/scheduler/cjs/scheduler.development.js +634 -0
  1526. node_ui/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
  1527. node_ui/node_modules/scheduler/index.js +7 -0
  1528. node_ui/node_modules/scheduler/package.json +36 -0
  1529. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.development.js +699 -0
  1530. node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.production.min.js +19 -0
  1531. node_ui/node_modules/scheduler/umd/scheduler.development.js +152 -0
  1532. node_ui/node_modules/scheduler/umd/scheduler.production.min.js +146 -0
  1533. node_ui/node_modules/scheduler/umd/scheduler.profiling.min.js +146 -0
  1534. node_ui/node_modules/scheduler/unstable_mock.js +7 -0
  1535. node_ui/node_modules/scheduler/unstable_post_task.js +7 -0
  1536. node_ui/node_modules/shell-quote/.eslintrc +30 -0
  1537. node_ui/node_modules/shell-quote/.github/FUNDING.yml +12 -0
  1538. node_ui/node_modules/shell-quote/.nycrc +14 -0
  1539. node_ui/node_modules/shell-quote/LICENSE +24 -0
  1540. node_ui/node_modules/shell-quote/README.md +161 -0
  1541. node_ui/node_modules/shell-quote/index.js +4 -0
  1542. node_ui/node_modules/shell-quote/package.json +72 -0
  1543. node_ui/node_modules/shell-quote/parse.js +226 -0
  1544. node_ui/node_modules/shell-quote/print.py +3 -0
  1545. node_ui/node_modules/shell-quote/quote.js +19 -0
  1546. node_ui/node_modules/shell-quote/security.md +11 -0
  1547. node_ui/node_modules/shell-quote/test/comment.js +16 -0
  1548. node_ui/node_modules/shell-quote/test/env.js +52 -0
  1549. node_ui/node_modules/shell-quote/test/env_fn.js +21 -0
  1550. node_ui/node_modules/shell-quote/test/op.js +102 -0
  1551. node_ui/node_modules/shell-quote/test/parse.js +44 -0
  1552. node_ui/node_modules/shell-quote/test/quote.js +60 -0
  1553. node_ui/node_modules/shell-quote/test/set.js +31 -0
  1554. node_ui/node_modules/signal-exit/LICENSE.txt +16 -0
  1555. node_ui/node_modules/signal-exit/README.md +39 -0
  1556. node_ui/node_modules/signal-exit/index.js +202 -0
  1557. node_ui/node_modules/signal-exit/package.json +38 -0
  1558. node_ui/node_modules/signal-exit/signals.js +53 -0
  1559. node_ui/node_modules/slice-ansi/index.d.ts +19 -0
  1560. node_ui/node_modules/slice-ansi/index.js +169 -0
  1561. node_ui/node_modules/slice-ansi/license +10 -0
  1562. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  1563. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js +12 -0
  1564. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/license +9 -0
  1565. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/package.json +53 -0
  1566. node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/readme.md +31 -0
  1567. node_ui/node_modules/slice-ansi/package.json +58 -0
  1568. node_ui/node_modules/slice-ansi/readme.md +54 -0
  1569. node_ui/node_modules/stack-utils/LICENSE.md +21 -0
  1570. node_ui/node_modules/stack-utils/index.js +344 -0
  1571. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.d.ts +18 -0
  1572. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.js +11 -0
  1573. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/license +9 -0
  1574. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/package.json +43 -0
  1575. node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/readme.md +29 -0
  1576. node_ui/node_modules/stack-utils/package.json +39 -0
  1577. node_ui/node_modules/stack-utils/readme.md +143 -0
  1578. node_ui/node_modules/string-width/index.d.ts +39 -0
  1579. node_ui/node_modules/string-width/index.js +82 -0
  1580. node_ui/node_modules/string-width/license +9 -0
  1581. node_ui/node_modules/string-width/package.json +64 -0
  1582. node_ui/node_modules/string-width/readme.md +66 -0
  1583. node_ui/node_modules/strip-ansi/index.d.ts +15 -0
  1584. node_ui/node_modules/strip-ansi/index.js +14 -0
  1585. node_ui/node_modules/strip-ansi/license +9 -0
  1586. node_ui/node_modules/strip-ansi/package.json +59 -0
  1587. node_ui/node_modules/strip-ansi/readme.md +37 -0
  1588. node_ui/node_modules/to-rotated/index.d.ts +18 -0
  1589. node_ui/node_modules/to-rotated/index.js +24 -0
  1590. node_ui/node_modules/to-rotated/license +9 -0
  1591. node_ui/node_modules/to-rotated/package.json +46 -0
  1592. node_ui/node_modules/to-rotated/readme.md +29 -0
  1593. node_ui/node_modules/type-fest/index.d.ts +178 -0
  1594. node_ui/node_modules/type-fest/license-cc0 +121 -0
  1595. node_ui/node_modules/type-fest/license-mit +9 -0
  1596. node_ui/node_modules/type-fest/package.json +91 -0
  1597. node_ui/node_modules/type-fest/readme.md +1060 -0
  1598. node_ui/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
  1599. node_ui/node_modules/type-fest/source/and.d.ts +25 -0
  1600. node_ui/node_modules/type-fest/source/array-indices.d.ts +23 -0
  1601. node_ui/node_modules/type-fest/source/array-slice.d.ts +109 -0
  1602. node_ui/node_modules/type-fest/source/array-splice.d.ts +99 -0
  1603. node_ui/node_modules/type-fest/source/array-tail.d.ts +76 -0
  1604. node_ui/node_modules/type-fest/source/array-values.d.ts +22 -0
  1605. node_ui/node_modules/type-fest/source/arrayable.d.ts +29 -0
  1606. node_ui/node_modules/type-fest/source/async-return-type.d.ts +23 -0
  1607. node_ui/node_modules/type-fest/source/asyncify.d.ts +32 -0
  1608. node_ui/node_modules/type-fest/source/basic.d.ts +68 -0
  1609. node_ui/node_modules/type-fest/source/camel-case.d.ts +89 -0
  1610. node_ui/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
  1611. node_ui/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
  1612. node_ui/node_modules/type-fest/source/conditional-except.d.ts +45 -0
  1613. node_ui/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
  1614. node_ui/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
  1615. node_ui/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
  1616. node_ui/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
  1617. node_ui/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
  1618. node_ui/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
  1619. node_ui/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
  1620. node_ui/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
  1621. node_ui/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
  1622. node_ui/node_modules/type-fest/source/empty-object.d.ts +46 -0
  1623. node_ui/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
  1624. node_ui/node_modules/type-fest/source/entries.d.ts +62 -0
  1625. node_ui/node_modules/type-fest/source/entry.d.ts +65 -0
  1626. node_ui/node_modules/type-fest/source/exact.d.ts +68 -0
  1627. node_ui/node_modules/type-fest/source/except.d.ts +108 -0
  1628. node_ui/node_modules/type-fest/source/find-global-type.d.ts +64 -0
  1629. node_ui/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
  1630. node_ui/node_modules/type-fest/source/get.d.ts +219 -0
  1631. node_ui/node_modules/type-fest/source/global-this.d.ts +21 -0
  1632. node_ui/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
  1633. node_ui/node_modules/type-fest/source/greater-than.d.ts +56 -0
  1634. node_ui/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
  1635. node_ui/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
  1636. node_ui/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
  1637. node_ui/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
  1638. node_ui/node_modules/type-fest/source/if-any.d.ts +24 -0
  1639. node_ui/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
  1640. node_ui/node_modules/type-fest/source/if-never.d.ts +24 -0
  1641. node_ui/node_modules/type-fest/source/if-null.d.ts +24 -0
  1642. node_ui/node_modules/type-fest/source/if-unknown.d.ts +24 -0
  1643. node_ui/node_modules/type-fest/source/includes.d.ts +22 -0
  1644. node_ui/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
  1645. node_ui/node_modules/type-fest/source/int-range.d.ts +55 -0
  1646. node_ui/node_modules/type-fest/source/internal/array.d.ts +126 -0
  1647. node_ui/node_modules/type-fest/source/internal/characters.d.ts +67 -0
  1648. node_ui/node_modules/type-fest/source/internal/index.d.ts +8 -0
  1649. node_ui/node_modules/type-fest/source/internal/keys.d.ts +97 -0
  1650. node_ui/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
  1651. node_ui/node_modules/type-fest/source/internal/object.d.ts +236 -0
  1652. node_ui/node_modules/type-fest/source/internal/string.d.ts +210 -0
  1653. node_ui/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
  1654. node_ui/node_modules/type-fest/source/internal/type.d.ts +139 -0
  1655. node_ui/node_modules/type-fest/source/invariant-of.d.ts +76 -0
  1656. node_ui/node_modules/type-fest/source/is-any.d.ts +33 -0
  1657. node_ui/node_modules/type-fest/source/is-equal.d.ts +31 -0
  1658. node_ui/node_modules/type-fest/source/is-float.d.ts +41 -0
  1659. node_ui/node_modules/type-fest/source/is-integer.d.ts +58 -0
  1660. node_ui/node_modules/type-fest/source/is-literal.d.ts +296 -0
  1661. node_ui/node_modules/type-fest/source/is-never.d.ts +42 -0
  1662. node_ui/node_modules/type-fest/source/is-null.d.ts +20 -0
  1663. node_ui/node_modules/type-fest/source/is-tuple.d.ts +89 -0
  1664. node_ui/node_modules/type-fest/source/is-unknown.d.ts +52 -0
  1665. node_ui/node_modules/type-fest/source/iterable-element.d.ts +64 -0
  1666. node_ui/node_modules/type-fest/source/join.d.ts +68 -0
  1667. node_ui/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
  1668. node_ui/node_modules/type-fest/source/jsonify.d.ts +122 -0
  1669. node_ui/node_modules/type-fest/source/kebab-case.d.ts +44 -0
  1670. node_ui/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
  1671. node_ui/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
  1672. node_ui/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
  1673. node_ui/node_modules/type-fest/source/last-array-element.d.ts +38 -0
  1674. node_ui/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
  1675. node_ui/node_modules/type-fest/source/less-than.d.ts +26 -0
  1676. node_ui/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
  1677. node_ui/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
  1678. node_ui/node_modules/type-fest/source/literal-union.d.ts +37 -0
  1679. node_ui/node_modules/type-fest/source/merge-deep.d.ts +486 -0
  1680. node_ui/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
  1681. node_ui/node_modules/type-fest/source/merge.d.ts +48 -0
  1682. node_ui/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
  1683. node_ui/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
  1684. node_ui/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
  1685. node_ui/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
  1686. node_ui/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
  1687. node_ui/node_modules/type-fest/source/numeric.d.ts +222 -0
  1688. node_ui/node_modules/type-fest/source/observable-like.d.ts +63 -0
  1689. node_ui/node_modules/type-fest/source/omit-deep.d.ts +167 -0
  1690. node_ui/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
  1691. node_ui/node_modules/type-fest/source/opaque.d.ts +1 -0
  1692. node_ui/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
  1693. node_ui/node_modules/type-fest/source/or.d.ts +25 -0
  1694. node_ui/node_modules/type-fest/source/override-properties.d.ts +36 -0
  1695. node_ui/node_modules/type-fest/source/package-json.d.ts +676 -0
  1696. node_ui/node_modules/type-fest/source/partial-deep.d.ts +151 -0
  1697. node_ui/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
  1698. node_ui/node_modules/type-fest/source/pascal-case.d.ts +42 -0
  1699. node_ui/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
  1700. node_ui/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
  1701. node_ui/node_modules/type-fest/source/paths.d.ts +262 -0
  1702. node_ui/node_modules/type-fest/source/pick-deep.d.ts +149 -0
  1703. node_ui/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
  1704. node_ui/node_modules/type-fest/source/primitive.d.ts +13 -0
  1705. node_ui/node_modules/type-fest/source/promisable.d.ts +25 -0
  1706. node_ui/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
  1707. node_ui/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
  1708. node_ui/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
  1709. node_ui/node_modules/type-fest/source/replace.d.ts +85 -0
  1710. node_ui/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
  1711. node_ui/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
  1712. node_ui/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
  1713. node_ui/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
  1714. node_ui/node_modules/type-fest/source/required-deep.d.ts +78 -0
  1715. node_ui/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
  1716. node_ui/node_modules/type-fest/source/schema.d.ts +114 -0
  1717. node_ui/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
  1718. node_ui/node_modules/type-fest/source/set-field-type.d.ts +65 -0
  1719. node_ui/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
  1720. node_ui/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
  1721. node_ui/node_modules/type-fest/source/set-optional.d.ts +38 -0
  1722. node_ui/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
  1723. node_ui/node_modules/type-fest/source/set-readonly.d.ts +39 -0
  1724. node_ui/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
  1725. node_ui/node_modules/type-fest/source/set-required.d.ts +70 -0
  1726. node_ui/node_modules/type-fest/source/set-return-type.d.ts +29 -0
  1727. node_ui/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
  1728. node_ui/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
  1729. node_ui/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  1730. node_ui/node_modules/type-fest/source/simplify.d.ts +58 -0
  1731. node_ui/node_modules/type-fest/source/single-key-object.d.ts +29 -0
  1732. node_ui/node_modules/type-fest/source/snake-case.d.ts +45 -0
  1733. node_ui/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
  1734. node_ui/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
  1735. node_ui/node_modules/type-fest/source/split.d.ts +88 -0
  1736. node_ui/node_modules/type-fest/source/spread.d.ts +84 -0
  1737. node_ui/node_modules/type-fest/source/string-key-of.d.ts +25 -0
  1738. node_ui/node_modules/type-fest/source/string-repeat.d.ts +47 -0
  1739. node_ui/node_modules/type-fest/source/string-slice.d.ts +37 -0
  1740. node_ui/node_modules/type-fest/source/stringified.d.ts +23 -0
  1741. node_ui/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
  1742. node_ui/node_modules/type-fest/source/subtract.d.ts +83 -0
  1743. node_ui/node_modules/type-fest/source/sum.d.ts +78 -0
  1744. node_ui/node_modules/type-fest/source/tagged-union.d.ts +51 -0
  1745. node_ui/node_modules/type-fest/source/tagged.d.ts +256 -0
  1746. node_ui/node_modules/type-fest/source/trim.d.ts +27 -0
  1747. node_ui/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
  1748. node_ui/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
  1749. node_ui/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
  1750. node_ui/node_modules/type-fest/source/typed-array.d.ts +17 -0
  1751. node_ui/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
  1752. node_ui/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
  1753. node_ui/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
  1754. node_ui/node_modules/type-fest/source/unknown-array.d.ts +25 -0
  1755. node_ui/node_modules/type-fest/source/unknown-map.d.ts +24 -0
  1756. node_ui/node_modules/type-fest/source/unknown-record.d.ts +31 -0
  1757. node_ui/node_modules/type-fest/source/unknown-set.d.ts +24 -0
  1758. node_ui/node_modules/type-fest/source/value-of.d.ts +42 -0
  1759. node_ui/node_modules/type-fest/source/words.d.ts +118 -0
  1760. node_ui/node_modules/type-fest/source/writable-deep.d.ts +83 -0
  1761. node_ui/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
  1762. node_ui/node_modules/type-fest/source/writable.d.ts +68 -0
  1763. node_ui/node_modules/widest-line/index.d.ts +12 -0
  1764. node_ui/node_modules/widest-line/index.js +11 -0
  1765. node_ui/node_modules/widest-line/license +9 -0
  1766. node_ui/node_modules/widest-line/package.json +60 -0
  1767. node_ui/node_modules/widest-line/readme.md +26 -0
  1768. node_ui/node_modules/wrap-ansi/index.d.ts +41 -0
  1769. node_ui/node_modules/wrap-ansi/index.js +222 -0
  1770. node_ui/node_modules/wrap-ansi/license +9 -0
  1771. node_ui/node_modules/wrap-ansi/package.json +69 -0
  1772. node_ui/node_modules/wrap-ansi/readme.md +75 -0
  1773. node_ui/node_modules/ws/LICENSE +20 -0
  1774. node_ui/node_modules/ws/README.md +548 -0
  1775. node_ui/node_modules/ws/browser.js +8 -0
  1776. node_ui/node_modules/ws/index.js +13 -0
  1777. node_ui/node_modules/ws/lib/buffer-util.js +131 -0
  1778. node_ui/node_modules/ws/lib/constants.js +18 -0
  1779. node_ui/node_modules/ws/lib/event-target.js +292 -0
  1780. node_ui/node_modules/ws/lib/extension.js +203 -0
  1781. node_ui/node_modules/ws/lib/limiter.js +55 -0
  1782. node_ui/node_modules/ws/lib/permessage-deflate.js +528 -0
  1783. node_ui/node_modules/ws/lib/receiver.js +706 -0
  1784. node_ui/node_modules/ws/lib/sender.js +602 -0
  1785. node_ui/node_modules/ws/lib/stream.js +161 -0
  1786. node_ui/node_modules/ws/lib/subprotocol.js +62 -0
  1787. node_ui/node_modules/ws/lib/validation.js +152 -0
  1788. node_ui/node_modules/ws/lib/websocket-server.js +550 -0
  1789. node_ui/node_modules/ws/lib/websocket.js +1388 -0
  1790. node_ui/node_modules/ws/package.json +69 -0
  1791. node_ui/node_modules/ws/wrapper.mjs +8 -0
  1792. node_ui/node_modules/yoga-wasm-web/LICENSE +21 -0
  1793. node_ui/node_modules/yoga-wasm-web/README.md +70 -0
  1794. node_ui/node_modules/yoga-wasm-web/dist/asm.d.ts +6 -0
  1795. node_ui/node_modules/yoga-wasm-web/dist/asm.js +1 -0
  1796. node_ui/node_modules/yoga-wasm-web/dist/auto.d.ts +7 -0
  1797. node_ui/node_modules/yoga-wasm-web/dist/browser.js +1 -0
  1798. node_ui/node_modules/yoga-wasm-web/dist/generated/YGEnums.d.ts +328 -0
  1799. node_ui/node_modules/yoga-wasm-web/dist/index.d.ts +7 -0
  1800. node_ui/node_modules/yoga-wasm-web/dist/index.js +1 -0
  1801. node_ui/node_modules/yoga-wasm-web/dist/node.js +1 -0
  1802. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-57389177.js +1 -0
  1803. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js +1 -0
  1804. node_ui/node_modules/yoga-wasm-web/dist/wrapAsm.d.ts +176 -0
  1805. node_ui/node_modules/yoga-wasm-web/dist/yoga.wasm +0 -0
  1806. node_ui/node_modules/yoga-wasm-web/package.json +56 -0
  1807. node_ui/package.json +21 -0
@@ -0,0 +1,1313 @@
1
+ """Utility functions for working with Claude Code and Codex sessions."""
2
+
3
+ import json
4
+ import os
5
+ import re
6
+ import shutil
7
+ import sys
8
+ from datetime import datetime
9
+ from pathlib import Path
10
+ from typing import Optional, List, Tuple
11
+
12
+
13
+ def parse_flexible_timestamp(ts_str: str, is_upper_bound: bool = False) -> float:
14
+ """
15
+ Parse a flexible timestamp string into a Unix timestamp.
16
+
17
+ Supports date formats:
18
+ 20251120 - YYYYMMDD
19
+ 2025-11-20 - YYYY-MM-DD (ISO)
20
+ 11/20/25 - MM/DD/YY
21
+ 11/20/2025 - MM/DD/YYYY
22
+
23
+ Supports optional time suffix (T or space separator):
24
+ ...T16:45:23 or ... 16:45:23 - full time
25
+ ...T16:45 or ... 16:45 - without seconds
26
+ ...T16 or ... 16 - hour only
27
+
28
+ Args:
29
+ ts_str: Timestamp string in one of the supported formats
30
+ is_upper_bound: If True (for --before), fill missing parts with max values
31
+ (23:59:59). If False (for --after), fill with min values
32
+ (00:00:00).
33
+
34
+ Returns:
35
+ Unix timestamp (float)
36
+
37
+ Raises:
38
+ ValueError: If the timestamp format is invalid
39
+ """
40
+ ts_str = ts_str.strip()
41
+
42
+ # Split date and time parts (separator: T or space)
43
+ time_part = None
44
+ if 'T' in ts_str:
45
+ date_str, time_part = ts_str.split('T', 1)
46
+ elif ' ' in ts_str:
47
+ date_str, time_part = ts_str.split(' ', 1)
48
+ else:
49
+ date_str = ts_str
50
+
51
+ # Parse date part - try multiple formats
52
+ year, month, day = None, None, None
53
+
54
+ # YYYYMMDD
55
+ if re.match(r'^\d{8}$', date_str):
56
+ year = int(date_str[:4])
57
+ month = int(date_str[4:6])
58
+ day = int(date_str[6:8])
59
+ # YYYY-MM-DD (ISO)
60
+ elif re.match(r'^\d{4}-\d{1,2}-\d{1,2}$', date_str):
61
+ parts = date_str.split('-')
62
+ year, month, day = int(parts[0]), int(parts[1]), int(parts[2])
63
+ # MM/DD/YY or MM/DD/YYYY
64
+ elif re.match(r'^\d{1,2}/\d{1,2}/\d{2,4}$', date_str):
65
+ parts = date_str.split('/')
66
+ month, day, year = int(parts[0]), int(parts[1]), int(parts[2])
67
+ if year < 100:
68
+ year += 2000 # 25 -> 2025
69
+ else:
70
+ raise ValueError(
71
+ f"Invalid date format: {date_str}. "
72
+ "Expected: YYYYMMDD, YYYY-MM-DD, MM/DD/YY, or MM/DD/YYYY"
73
+ )
74
+
75
+ # Parse time part if present
76
+ hour, minute, second = None, None, None
77
+ if time_part:
78
+ time_match = re.match(r'^(\d{1,2})(?::(\d{2})(?::(\d{2}))?)?$', time_part)
79
+ if not time_match:
80
+ raise ValueError(
81
+ f"Invalid time format: {time_part}. "
82
+ "Expected: HH, HH:MM, or HH:MM:SS"
83
+ )
84
+ hour = int(time_match.group(1))
85
+ minute = int(time_match.group(2)) if time_match.group(2) else None
86
+ second = int(time_match.group(3)) if time_match.group(3) else None
87
+
88
+ # Fill missing time components based on bound type
89
+ if hour is None:
90
+ hour = 23 if is_upper_bound else 0
91
+ minute = 59 if is_upper_bound else 0
92
+ second = 59 if is_upper_bound else 0
93
+ else:
94
+ if minute is None:
95
+ minute = 59 if is_upper_bound else 0
96
+ second = 59 if is_upper_bound else 0
97
+ elif second is None:
98
+ second = 59 if is_upper_bound else 0
99
+
100
+ dt = datetime(year, month, day, hour, minute, second)
101
+ return dt.timestamp()
102
+
103
+
104
+ def filter_sessions_by_time(
105
+ sessions: list,
106
+ before: Optional[str] = None,
107
+ after: Optional[str] = None,
108
+ time_key: str = "mod_time",
109
+ time_index: Optional[int] = None,
110
+ ) -> list:
111
+ """
112
+ Filter sessions by time bounds.
113
+
114
+ Args:
115
+ sessions: List of sessions (dicts or tuples)
116
+ before: Upper bound timestamp string (inclusive)
117
+ after: Lower bound timestamp string (inclusive)
118
+ time_key: Key to use for dict sessions (default: "mod_time")
119
+ time_index: Index to use for tuple sessions (if None, uses time_key for dicts)
120
+
121
+ Returns:
122
+ Filtered list of sessions
123
+ """
124
+ if not before and not after:
125
+ return sessions
126
+
127
+ before_ts = parse_flexible_timestamp(before, is_upper_bound=True) if before else None
128
+ after_ts = parse_flexible_timestamp(after, is_upper_bound=False) if after else None
129
+
130
+ def get_time(session):
131
+ if time_index is not None:
132
+ return session[time_index]
133
+ return session.get(time_key, 0)
134
+
135
+ result = []
136
+ for s in sessions:
137
+ t = get_time(s)
138
+ if before_ts is not None and t > before_ts:
139
+ continue
140
+ if after_ts is not None and t < after_ts:
141
+ continue
142
+ result.append(s)
143
+
144
+ return result
145
+
146
+
147
+ def is_agent_available(agent: str) -> bool:
148
+ """
149
+ Check if a coding agent is available on this system.
150
+
151
+ Checks two conditions (either one is sufficient):
152
+ 1. The agent command exists in PATH (e.g., 'claude' or 'codex')
153
+ 2. The agent config directory exists (e.g., ~/.claude or ~/.codex)
154
+
155
+ Args:
156
+ agent: Agent name ('claude' or 'codex')
157
+
158
+ Returns:
159
+ True if the agent is available, False otherwise
160
+ """
161
+ agent = agent.lower()
162
+
163
+ # Check if command exists in PATH
164
+ command = "claude" if agent == "claude" else "codex"
165
+ if shutil.which(command):
166
+ return True
167
+
168
+ # Check if config directory exists
169
+ config_dir = Path.home() / f".{agent}"
170
+ if config_dir.exists() and config_dir.is_dir():
171
+ return True
172
+
173
+ return False
174
+
175
+
176
+ def get_claude_home(cli_arg: Optional[str] = None) -> Path:
177
+ """
178
+ Get Claude home directory with proper precedence.
179
+
180
+ Precedence order:
181
+ 1. CLI argument (if provided)
182
+ 2. CLAUDE_CONFIG_DIR environment variable (if set)
183
+ 3. Default ~/.claude
184
+
185
+ Args:
186
+ cli_arg: Optional CLI argument value for --claude-home
187
+
188
+ Returns:
189
+ Path to Claude home directory
190
+ """
191
+ # CLI argument has highest priority
192
+ if cli_arg:
193
+ return Path(cli_arg).expanduser()
194
+
195
+ # Check environment variable
196
+ env_var = os.environ.get('CLAUDE_CONFIG_DIR')
197
+ if env_var:
198
+ return Path(env_var).expanduser()
199
+
200
+ # Default fallback
201
+ return Path.home() / ".claude"
202
+
203
+
204
+ def get_codex_home(cli_arg: Optional[str] = None) -> Path:
205
+ """
206
+ Get Codex home directory.
207
+
208
+ Args:
209
+ cli_arg: Optional CLI argument value for --codex-home
210
+
211
+ Returns:
212
+ Path to Codex home directory (default: ~/.codex)
213
+ """
214
+ if cli_arg:
215
+ return Path(cli_arg).expanduser()
216
+ return Path.home() / ".codex"
217
+
218
+
219
+ def encode_claude_project_path(project_path: str) -> str:
220
+ """
221
+ Encode a project path to Claude's directory naming format.
222
+
223
+ Claude Code replaces certain characters when creating project directories.
224
+ This function replicates that encoding to ensure path reconstruction matches.
225
+
226
+ Known character replacements:
227
+ - '/' → '-' (path separators)
228
+ - '_' → '-' (underscores, common in temp directories)
229
+ - '.' → '-' (dots, e.g., .claude-trace directories)
230
+
231
+ Args:
232
+ project_path: Absolute path to project directory
233
+ (e.g., /Users/foo/Git/my_project)
234
+
235
+ Returns:
236
+ Encoded path suitable for Claude's projects directory
237
+ (e.g., -Users-foo-Git-my-project)
238
+ """
239
+ return project_path.replace("/", "-").replace("_", "-").replace(".", "-")
240
+
241
+
242
+ def resolve_session_path(
243
+ session_id_or_path: str, claude_home: Optional[str] = None
244
+ ) -> Path:
245
+ """
246
+ Resolve a session ID or path to a full file path.
247
+
248
+ Supports partial session ID matching. If multiple sessions match a partial
249
+ ID, shows an error message with all matches.
250
+
251
+ Args:
252
+ session_id_or_path: Either a full path, full session ID, or partial
253
+ session ID
254
+ claude_home: Optional custom Claude home directory (defaults to
255
+ ~/.claude or $CLAUDE_CONFIG_DIR)
256
+
257
+ Returns:
258
+ Resolved Path object
259
+
260
+ Raises:
261
+ FileNotFoundError: If session cannot be found
262
+ ValueError: If partial ID matches multiple sessions
263
+ SystemExit: If multiple matches found (exits with error message)
264
+ """
265
+ path = Path(session_id_or_path)
266
+
267
+ # If it's already a valid path, use it
268
+ if path.exists():
269
+ return path
270
+
271
+ # Otherwise, treat it as a session ID (full or partial) and try to find it
272
+ session_id = session_id_or_path.strip()
273
+
274
+ # Search ALL Claude project directories globally
275
+ base_dir = get_claude_home(claude_home)
276
+ projects_dir = base_dir / "projects"
277
+
278
+ claude_matches: List[Path] = []
279
+ if projects_dir.exists():
280
+ for project_dir in projects_dir.iterdir():
281
+ if not project_dir.is_dir():
282
+ continue
283
+ # Look for exact match first (fast path)
284
+ exact_path = project_dir / f"{session_id}.jsonl"
285
+ if exact_path.exists():
286
+ return exact_path
287
+ # Collect partial matches
288
+ for jsonl_file in project_dir.glob("*.jsonl"):
289
+ if session_id in jsonl_file.stem:
290
+ claude_matches.append(jsonl_file)
291
+
292
+ # Try Codex path - search through sessions directory
293
+ codex_home = Path.home() / ".codex"
294
+ sessions_dir = codex_home / "sessions"
295
+
296
+ codex_matches: List[Path] = []
297
+ if sessions_dir.exists():
298
+ for jsonl_file in sessions_dir.rglob("*.jsonl"):
299
+ # Extract session ID from Codex filename (format: rollout-...-UUID.jsonl)
300
+ if session_id in jsonl_file.stem:
301
+ codex_matches.append(jsonl_file)
302
+
303
+ # Combine all matches
304
+ all_matches = claude_matches + codex_matches
305
+
306
+ if len(all_matches) == 0:
307
+ # Not found anywhere
308
+ raise FileNotFoundError(
309
+ f"Session '{session_id}' not found in Claude Code "
310
+ f"({projects_dir}) or Codex ({sessions_dir}) directories"
311
+ )
312
+ elif len(all_matches) == 1:
313
+ # Single match - perfect!
314
+ return all_matches[0]
315
+ else:
316
+ # Multiple matches - show user the options
317
+ print(
318
+ f"Error: Multiple sessions match '{session_id}':",
319
+ file=sys.stderr
320
+ )
321
+ print(file=sys.stderr)
322
+ for i, match in enumerate(all_matches, 1):
323
+ print(f" {i}. {match.stem}", file=sys.stderr)
324
+ print(file=sys.stderr)
325
+ print(
326
+ "Please use a more specific session ID to uniquely identify the session.",
327
+ file=sys.stderr
328
+ )
329
+ sys.exit(1)
330
+
331
+
332
+ def get_current_session_id(claude_home: Optional[str] = None) -> Optional[str]:
333
+ """
334
+ Get the session ID of the currently active Claude Code or Codex session.
335
+
336
+ Uses the Tantivy search index to find the most recently modified session
337
+ for the current working directory.
338
+
339
+ Args:
340
+ claude_home: Optional custom Claude home directory (default: ~/.claude)
341
+
342
+ Returns:
343
+ Session ID (UUID or timestamped name) if found, None otherwise
344
+ """
345
+ from claude_code_tools.search_index import get_latest_session_from_index
346
+
347
+ cwd = os.getcwd()
348
+
349
+ # Query the index for the latest session in this cwd
350
+ result = get_latest_session_from_index(cwd=cwd)
351
+ if result:
352
+ return result.get("session_id")
353
+
354
+ return None
355
+
356
+
357
+ def get_latest_session_for_cwd(
358
+ cwd: Optional[str] = None,
359
+ branch: Optional[str] = None,
360
+ agent: Optional[str] = None,
361
+ ) -> Optional[dict]:
362
+ """
363
+ Get the latest session for the given cwd/branch/agent from the index.
364
+
365
+ Args:
366
+ cwd: Working directory to filter by (default: current directory)
367
+ branch: Git branch to filter by (optional)
368
+ agent: Agent type to filter by ("claude" or "codex", optional)
369
+
370
+ Returns:
371
+ Dict with session info including 'session_id', 'export_path', etc.
372
+ or None if no matching session found
373
+ """
374
+ from claude_code_tools.search_index import get_latest_session_from_index
375
+
376
+ if cwd is None:
377
+ cwd = os.getcwd()
378
+
379
+ return get_latest_session_from_index(cwd=cwd, branch=branch, agent=agent)
380
+
381
+
382
+ def display_lineage(
383
+ session_file: Path,
384
+ agent_type: str,
385
+ claude_home: Optional[str] = None,
386
+ codex_home: Optional[str] = None,
387
+ verbose: bool = False,
388
+ ) -> List[Path]:
389
+ """
390
+ Trace and display continuation lineage for a session.
391
+
392
+ This function:
393
+ 1. Traces the continuation lineage (all parent sessions)
394
+ 2. Displays the lineage chain to the user
395
+ 3. Returns session file paths for use by continue functions
396
+
397
+ Args:
398
+ session_file: Path to the session file to analyze
399
+ agent_type: 'claude' or 'codex' (kept for compatibility, not used)
400
+ claude_home: Optional custom Claude home directory (not used)
401
+ codex_home: Optional custom Codex home directory (not used)
402
+ verbose: If True, show detailed progress
403
+
404
+ Returns:
405
+ List of session file paths in chronological order (oldest first),
406
+ including the current session at the end.
407
+ """
408
+ from claude_code_tools.session_lineage import get_full_lineage_chain
409
+
410
+ # Get and display continuation lineage
411
+ print("Step 1: Tracing session lineage...")
412
+
413
+ try:
414
+ # Get full lineage chain (newest first, ending with original)
415
+ lineage_chain = get_full_lineage_chain(session_file)
416
+
417
+ if len(lineage_chain) > 1:
418
+ print(f"✅ Found {len(lineage_chain)} session(s) in lineage:")
419
+ # Use shared formatter (expects chronological order)
420
+ chronological = list(reversed(lineage_chain))
421
+ print(build_session_file_list(chronological))
422
+ print()
423
+ else:
424
+ print("✅ This is the original session (no parent chain)")
425
+ print()
426
+
427
+ # Collect all session files in chronological order (oldest first)
428
+ # lineage_chain is newest-first, so reverse it
429
+ all_session_files = [path for path, _ in reversed(lineage_chain)]
430
+ return all_session_files
431
+
432
+ except Exception as e:
433
+ print(f"⚠️ Warning: Could not trace lineage: {e}", file=sys.stderr)
434
+ # Fall back to just the current session
435
+ return [session_file]
436
+
437
+
438
+ def continue_with_options(
439
+ session_file_path: str,
440
+ current_agent: str,
441
+ claude_home: Optional[str] = None,
442
+ codex_home: Optional[str] = None,
443
+ preset_agent: Optional[str] = None,
444
+ preset_prompt: Optional[str] = None,
445
+ rollover_type: str = "context",
446
+ ) -> None:
447
+ """
448
+ Unified continue flow with proper timing.
449
+
450
+ This function provides the complete continue experience:
451
+ 1. Export current session
452
+ 2. Display lineage (so user sees full history)
453
+ 3. Prompt for agent choice (unless preset_agent provided)
454
+ 4. Prompt for custom instructions (unless preset_prompt provided)
455
+ 5. Execute continuation with chosen options
456
+
457
+ Args:
458
+ session_file_path: Path to the session file to continue
459
+ current_agent: Agent type of the session ('claude' or 'codex')
460
+ claude_home: Optional custom Claude home directory
461
+ codex_home: Optional custom Codex home directory
462
+ preset_agent: If provided, skip agent choice prompt and use this agent
463
+ preset_prompt: If provided, skip custom prompt and use this
464
+ rollover_type: "quick" for fast resume (just lineage), "context" for
465
+ full context recovery with sub-agents (default)
466
+ """
467
+ session_file = Path(session_file_path)
468
+
469
+ print("\n🔄 Starting rollover to fresh session...")
470
+ print()
471
+
472
+ # Step 1: Display lineage and collect session files
473
+ # This allows user to make informed decisions
474
+ all_session_files = display_lineage(
475
+ session_file,
476
+ current_agent,
477
+ claude_home=claude_home,
478
+ codex_home=codex_home,
479
+ )
480
+
481
+ # Step 3: Prompt for agent choice (unless preset or other agent unavailable)
482
+ other_agent_name = "codex" if current_agent == "claude" else "claude"
483
+
484
+ if preset_agent:
485
+ continue_agent = preset_agent.lower()
486
+ print(f"ℹ️ Using specified agent: {continue_agent.upper()}")
487
+ elif not is_agent_available(other_agent_name):
488
+ # Other agent not available, use current agent without prompting
489
+ continue_agent = current_agent
490
+ print(f"ℹ️ Rolling over with {current_agent.upper()}")
491
+ else:
492
+ # Both agents available, offer choice
493
+ print(f"Current session is from: {current_agent.upper()}")
494
+ print("Which agent should take over the work?")
495
+ print(f"1. {current_agent.upper()} (default - same agent)")
496
+ print(f"2. {other_agent_name.upper()} (cross-agent)")
497
+ print()
498
+
499
+ try:
500
+ choice = input(
501
+ f"Enter choice [1-2] (or Enter for {current_agent.upper()}): "
502
+ ).strip()
503
+ if not choice or choice == "1":
504
+ continue_agent = current_agent
505
+ elif choice == "2":
506
+ continue_agent = other_agent_name
507
+ else:
508
+ print("Invalid choice, using default.")
509
+ continue_agent = current_agent
510
+ except (KeyboardInterrupt, EOFError):
511
+ print("\nCancelled.")
512
+ return
513
+
514
+ print(f"\nℹ️ Rolling over with {continue_agent.upper()}")
515
+
516
+ # Step 4: Prompt for custom instructions (unless preset provided)
517
+ # preset_prompt can be:
518
+ # None - not from Node UI, so prompt the user
519
+ # "" (empty string) - from Node UI, user chose to skip, don't prompt
520
+ # "some text" - from Node UI, user provided custom prompt
521
+ if preset_prompt is not None:
522
+ # From Node UI - use whatever was provided (even empty means skip)
523
+ custom_prompt = preset_prompt if preset_prompt else None
524
+ if custom_prompt:
525
+ print(f"ℹ️ Using custom prompt: {custom_prompt[:50]}...")
526
+ else:
527
+ print("ℹ️ No custom summarization instructions")
528
+ else:
529
+ # Not from Node UI - prompt the user
530
+ print("\nEnter custom summarization instructions (or press Enter to skip):")
531
+ try:
532
+ custom_prompt = input("> ").strip() or None
533
+ except (KeyboardInterrupt, EOFError):
534
+ print("\nCancelled.")
535
+ return
536
+
537
+ # Step 5: Execute continuation with precomputed session files
538
+ quick_rollover = rollover_type == "quick"
539
+ if continue_agent == "claude":
540
+ from claude_code_tools.claude_continue import claude_continue
541
+ claude_continue(
542
+ str(session_file),
543
+ claude_home=claude_home,
544
+ verbose=False,
545
+ custom_prompt=custom_prompt,
546
+ precomputed_session_files=all_session_files,
547
+ quick_rollover=quick_rollover,
548
+ )
549
+ else:
550
+ from claude_code_tools.codex_continue import codex_continue
551
+ codex_continue(
552
+ str(session_file),
553
+ codex_home=codex_home,
554
+ verbose=False,
555
+ custom_prompt=custom_prompt,
556
+ precomputed_session_files=all_session_files,
557
+ quick_rollover=quick_rollover,
558
+ )
559
+
560
+
561
+ def detect_agent_from_path(file_path: Path) -> Optional[str]:
562
+ """
563
+ Auto-detect agent type from file path.
564
+
565
+ Args:
566
+ file_path: Path to session file
567
+
568
+ Returns:
569
+ 'claude', 'codex', or None if cannot detect
570
+ """
571
+ path_str = str(file_path.absolute())
572
+
573
+ if "/.claude/" in path_str or path_str.startswith(
574
+ str(Path.home() / ".claude")
575
+ ):
576
+ return "claude"
577
+ elif "/.codex/" in path_str or path_str.startswith(
578
+ str(Path.home() / ".codex")
579
+ ):
580
+ return "codex"
581
+
582
+ return None
583
+
584
+
585
+ def is_valid_session(filepath: Path) -> bool:
586
+ """
587
+ Check if a session file is a valid resumable session (WHITELIST approach).
588
+
589
+ Supports both Claude Code and Codex session formats:
590
+ - Claude: user, assistant, tool_result, tool_use (with sessionId)
591
+ - Codex: event_msg, response_item, turn_context (with session_meta)
592
+
593
+ Sessions containing ONLY metadata types (file-history-snapshot, queue-operation,
594
+ session_meta alone) are invalid.
595
+
596
+ Args:
597
+ filepath: Path to session JSONL file.
598
+
599
+ Returns:
600
+ True if session contains at least one resumable message, False otherwise.
601
+ """
602
+ if not filepath.exists():
603
+ return False
604
+
605
+ # Whitelist of resumable message types
606
+ # Claude Code types (require sessionId)
607
+ claude_valid_types = {"user", "assistant", "tool_result", "tool_use", "system"}
608
+ # Codex types (conversation content types)
609
+ codex_valid_types = {"event_msg", "response_item", "turn_context"}
610
+
611
+ try:
612
+ with open(filepath, 'r', encoding='utf-8') as f:
613
+ has_any_content = False
614
+
615
+ for line in f:
616
+ line = line.strip()
617
+ if not line:
618
+ continue
619
+
620
+ has_any_content = True
621
+
622
+ try:
623
+ data = json.loads(line)
624
+ entry_type = data.get("type", "")
625
+
626
+ # Claude Code: valid type with non-null sessionId
627
+ session_id = data.get("sessionId")
628
+ if entry_type in claude_valid_types and session_id is not None:
629
+ return True
630
+
631
+ # Codex: valid conversation content type
632
+ if entry_type in codex_valid_types:
633
+ return True
634
+
635
+ except json.JSONDecodeError:
636
+ # Skip malformed JSON lines, continue checking other lines
637
+ continue
638
+
639
+ # If we scanned entire file and found no valid message types
640
+ # (only metadata or empty), session is invalid
641
+ return False if has_any_content else False # Empty file is invalid
642
+
643
+ except (OSError, IOError):
644
+ return False # File read errors indicate invalid file
645
+
646
+
647
+ def is_malformed_session(filepath: Path) -> bool:
648
+ """
649
+ Deprecated: Use is_valid_session() instead.
650
+ Kept for backward compatibility - returns inverse of is_valid_session().
651
+
652
+ Returns:
653
+ True if session is malformed/invalid, False if valid.
654
+ """
655
+ return not is_valid_session(filepath)
656
+
657
+
658
+ def extract_cwd_from_session(session_file: Path) -> Optional[str]:
659
+ """
660
+ Extract the working directory (cwd) from a session file.
661
+
662
+ Delegates to extract_session_metadata() from export_session.py which properly
663
+ scans the entire file until it finds a valid cwd (handles compacted sessions
664
+ where cwd may not appear until line 20+).
665
+
666
+ Args:
667
+ session_file: Path to the session JSONL file
668
+
669
+ Returns:
670
+ The cwd string if found, None otherwise
671
+ """
672
+ try:
673
+ from claude_code_tools.export_session import extract_session_metadata
674
+
675
+ # Detect agent from path
676
+ path_str = str(session_file)
677
+ agent = "codex" if ".codex" in path_str else "claude"
678
+
679
+ metadata = extract_session_metadata(session_file, agent)
680
+ return metadata.get("cwd")
681
+ except Exception:
682
+ return None
683
+
684
+
685
+ def extract_git_branch_claude(session_file: Path) -> Optional[str]:
686
+ """
687
+ Extract git branch from Claude session file.
688
+
689
+ Delegates to extract_session_metadata() which properly scans the entire file.
690
+ """
691
+ try:
692
+ from claude_code_tools.export_session import extract_session_metadata
693
+
694
+ metadata = extract_session_metadata(session_file, "claude")
695
+ return metadata.get("branch")
696
+ except Exception:
697
+ return None
698
+
699
+
700
+ def extract_session_metadata_codex(session_file: Path) -> Optional[dict]:
701
+ """
702
+ Extract metadata from Codex session file.
703
+
704
+ Delegates to extract_session_metadata() for consistency.
705
+ Returns dict with 'cwd' and 'branch' keys for backwards compatibility.
706
+ """
707
+ try:
708
+ from claude_code_tools.export_session import extract_session_metadata
709
+
710
+ metadata = extract_session_metadata(session_file, "codex")
711
+ return {
712
+ "cwd": metadata.get("cwd"),
713
+ "branch": metadata.get("branch"),
714
+ }
715
+ except Exception:
716
+ return None
717
+
718
+
719
+ def find_session_file(
720
+ session_id: str,
721
+ claude_home: Optional[str] = None,
722
+ codex_home: Optional[str] = None,
723
+ ) -> Optional[Tuple[str, Path, str, Optional[str]]]:
724
+ """
725
+ Search for session file by ID in both Claude and Codex homes.
726
+
727
+ Args:
728
+ session_id: Session identifier
729
+ claude_home: Optional custom Claude home directory
730
+ codex_home: Optional custom Codex home directory
731
+
732
+ Returns:
733
+ Tuple of (agent, file_path, project_path, git_branch) or None
734
+ Note: project_path is the full working directory path, not just the name
735
+ """
736
+ # Try Claude first
737
+ claude_base = get_claude_home(claude_home)
738
+ if claude_base.exists():
739
+ projects_dir = claude_base / "projects"
740
+ if projects_dir.exists():
741
+ for project_dir in projects_dir.iterdir():
742
+ if project_dir.is_dir():
743
+ # Support partial session ID matching
744
+ for session_file in project_dir.glob(f"*{session_id}*.jsonl"):
745
+ # Skip malformed/invalid sessions
746
+ if is_malformed_session(session_file):
747
+ continue
748
+ # Extract actual cwd from session file
749
+ actual_cwd = extract_cwd_from_session(session_file)
750
+ if not actual_cwd:
751
+ # Skip sessions without cwd
752
+ continue
753
+ # Try to get git branch from session file
754
+ git_branch = extract_git_branch_claude(session_file)
755
+ return ("claude", session_file, actual_cwd, git_branch)
756
+
757
+ # Try Codex next
758
+ codex_base = get_codex_home(codex_home)
759
+ if codex_base.exists():
760
+ sessions_dir = codex_base / "sessions"
761
+ if sessions_dir.exists():
762
+ # Search through date directories
763
+ for year_dir in sessions_dir.iterdir():
764
+ if not year_dir.is_dir():
765
+ continue
766
+ for month_dir in year_dir.iterdir():
767
+ if not month_dir.is_dir():
768
+ continue
769
+ for day_dir in month_dir.iterdir():
770
+ if not day_dir.is_dir():
771
+ continue
772
+ # Look for session files matching the ID
773
+ for session_file in day_dir.glob(f"*{session_id}*.jsonl"):
774
+ # Extract metadata from file
775
+ metadata = extract_session_metadata_codex(session_file)
776
+ if metadata:
777
+ project_path = metadata.get("cwd", "")
778
+ git_branch = metadata.get("branch")
779
+ return (
780
+ "codex",
781
+ session_file,
782
+ project_path,
783
+ git_branch,
784
+ )
785
+
786
+ return None
787
+
788
+
789
+ def format_session_id_display(
790
+ session_id: str,
791
+ is_trimmed: bool = False,
792
+ is_continued: bool = False,
793
+ is_sidechain: bool = False,
794
+ truncate_length: int = 8,
795
+ ) -> str:
796
+ """
797
+ Format session ID with annotations for display in find commands.
798
+
799
+ Provides consistent session ID formatting across all find commands
800
+ (find, find-claude, find-codex) with standard annotations.
801
+
802
+ Args:
803
+ session_id: Full session ID string
804
+ is_trimmed: Whether session is trimmed (adds "(t)")
805
+ is_continued: Whether session is continued (adds "(c)")
806
+ is_sidechain: Whether session is a sub-agent (adds "(sub)")
807
+ truncate_length: Number of characters to show before "..." (default 8)
808
+
809
+ Returns:
810
+ Formatted string like "abc123... (t) (sub)"
811
+
812
+ Examples:
813
+ >>> format_session_id_display("abc123-def456", is_trimmed=True)
814
+ 'abc123... (t)'
815
+ >>> format_session_id_display("abc123-def456", is_sidechain=True, truncate_length=16)
816
+ 'abc123-def456... (sub)'
817
+ """
818
+ display = session_id[:truncate_length] + "..."
819
+
820
+ if is_trimmed:
821
+ display += " (t)"
822
+ if is_continued:
823
+ display += " (c)"
824
+ if is_sidechain:
825
+ display += " (sub)"
826
+
827
+ return display
828
+
829
+
830
+ def mark_session_as_helper(session_file: Path) -> bool:
831
+ """
832
+ Mark a session file as a helper session by adding sessionType metadata.
833
+
834
+ Helper sessions are created by programmatic tools (smart-trim, query, etc.)
835
+ and should be excluded from search indexing.
836
+
837
+ This adds/updates `"sessionType": "helper"` in the first JSON line of the
838
+ session file.
839
+
840
+ Args:
841
+ session_file: Path to the session JSONL file
842
+
843
+ Returns:
844
+ True if successfully marked, False otherwise
845
+ """
846
+ if not session_file.exists():
847
+ return False
848
+
849
+ try:
850
+ with open(session_file, 'r', encoding='utf-8') as f:
851
+ lines = f.readlines()
852
+
853
+ if not lines:
854
+ return False
855
+
856
+ # Parse and modify first line
857
+ first_line = lines[0].strip()
858
+ if not first_line:
859
+ return False
860
+
861
+ try:
862
+ data = json.loads(first_line)
863
+ data["sessionType"] = "helper"
864
+ lines[0] = json.dumps(data) + "\n"
865
+ except json.JSONDecodeError:
866
+ return False
867
+
868
+ # Write back
869
+ with open(session_file, 'w', encoding='utf-8') as f:
870
+ f.writelines(lines)
871
+
872
+ return True
873
+
874
+ except (OSError, IOError):
875
+ return False
876
+
877
+
878
+ def default_export_path(
879
+ session_file: Path,
880
+ agent: str,
881
+ base_dir: Optional[Path] = None,
882
+ ) -> Path:
883
+ """
884
+ Generate default export path for a session.
885
+
886
+ Path format: {base_dir}/exported-sessions/{agent}/{session_filename}.txt
887
+
888
+ Args:
889
+ session_file: Path to the session file
890
+ agent: Agent type ('claude' or 'codex')
891
+ base_dir: Base directory (defaults to session's project dir, then cwd)
892
+
893
+ Returns:
894
+ Path to the export file
895
+ """
896
+ if base_dir is None:
897
+ # Infer base_dir from session file metadata
898
+ if agent == "codex":
899
+ metadata = extract_session_metadata_codex(session_file)
900
+ if metadata and metadata.get("cwd"):
901
+ base_dir = Path(metadata["cwd"])
902
+ else: # claude
903
+ cwd = extract_cwd_from_session(session_file)
904
+ if cwd:
905
+ base_dir = Path(cwd)
906
+
907
+ # Fall back to cwd if inference fails
908
+ if base_dir is None:
909
+ base_dir = Path.cwd()
910
+
911
+ agent_dir = "codex" if agent == "codex" else "claude"
912
+ filename = session_file.stem + ".txt"
913
+
914
+ return base_dir / "exported-sessions" / agent_dir / filename
915
+
916
+
917
+ def get_session_uuid(filename_or_stem: str) -> str:
918
+ """
919
+ Extract the UUID portion from a session filename or stem.
920
+
921
+ Works for both Claude and Codex session filenames:
922
+ - Claude: "abc123de-f456-7890-abcd-ef1234567890.jsonl" -> UUID is the stem
923
+ - Codex: "rollout-2025-01-01T12-00-00-abc123de-f456-7890-abcd-ef1234567890.jsonl"
924
+ -> UUID is the last 36 characters
925
+
926
+ Args:
927
+ filename_or_stem: Session filename or stem (with or without .jsonl)
928
+
929
+ Returns:
930
+ The UUID portion (36 characters for standard UUIDs, or full stem if shorter)
931
+ """
932
+ # Remove .jsonl extension if present
933
+ stem = filename_or_stem
934
+ if stem.endswith(".jsonl"):
935
+ stem = stem[:-6]
936
+
937
+ # UUID is always last 36 chars (format: 8-4-4-4-12 = 36 with dashes)
938
+ # This handles both Claude (stem IS the UUID) and Codex (rollout-timestamp-UUID)
939
+ if len(stem) >= 36:
940
+ return stem[-36:]
941
+ return stem
942
+
943
+
944
+ # =============================================================================
945
+ # Rollover Prompt Building Utilities
946
+ # =============================================================================
947
+ # These functions consolidate the prompt-building logic shared between
948
+ # claude_continue.py and codex_continue.py to avoid code duplication.
949
+
950
+
951
+ def friendly_derivation_type(dtype: str) -> str:
952
+ """
953
+ Convert derivation type to user-friendly display string.
954
+
955
+ Args:
956
+ dtype: Derivation type from lineage chain (e.g., "continued", "trimmed")
957
+
958
+ Returns:
959
+ User-friendly string (e.g., "rollover" instead of "continued")
960
+ """
961
+ if dtype == "continued":
962
+ return "rollover"
963
+ return dtype
964
+
965
+
966
+ def _get_session_timestamps(session_path: Path) -> Tuple[Optional[str], Optional[str]]:
967
+ """
968
+ Extract created and modified timestamps from a session file.
969
+
970
+ Args:
971
+ session_path: Path to the JSONL session file
972
+
973
+ Returns:
974
+ Tuple of (created_iso, modified_iso) strings, or None if not found
975
+ """
976
+ created = None
977
+ modified = None
978
+
979
+ try:
980
+ with open(session_path, "r", encoding="utf-8") as f:
981
+ for line in f:
982
+ line = line.strip()
983
+ if not line:
984
+ continue
985
+
986
+ try:
987
+ data = json.loads(line)
988
+
989
+ # Get timestamp from message entries (user/assistant types)
990
+ # These have timestamp at top level
991
+ ts = data.get("timestamp") or data.get("isoTimestamp")
992
+
993
+ # Also check nested snapshot.timestamp for file-history entries
994
+ if not ts and isinstance(data.get("snapshot"), dict):
995
+ ts = data["snapshot"].get("timestamp")
996
+
997
+ if ts:
998
+ if created is None:
999
+ created = ts
1000
+ modified = ts # Keep updating to get the last one
1001
+
1002
+ except json.JSONDecodeError:
1003
+ pass
1004
+
1005
+ except (OSError, IOError):
1006
+ pass
1007
+
1008
+ # Fallback to file mtime if no modified timestamp found
1009
+ if not modified and session_path.exists():
1010
+ mtime = session_path.stat().st_mtime
1011
+ modified = datetime.fromtimestamp(mtime).strftime("%Y-%m-%dT%H:%M:%S")
1012
+
1013
+ return created, modified
1014
+
1015
+
1016
+ def _format_time_span(created: Optional[str], modified: Optional[str]) -> str:
1017
+ """
1018
+ Format the time span between created and modified timestamps.
1019
+
1020
+ Args:
1021
+ created: ISO timestamp string for session start
1022
+ modified: ISO timestamp string for session end
1023
+
1024
+ Returns:
1025
+ Formatted string like "spanning 2 days, last modified 2025-12-10 11:45"
1026
+ """
1027
+ if not modified:
1028
+ return ""
1029
+
1030
+ # Parse modified timestamp for display (convert to local time)
1031
+ try:
1032
+ # Handle various ISO formats
1033
+ mod_str = modified.replace("Z", "+00:00")
1034
+ mod_dt = datetime.fromisoformat(mod_str)
1035
+ # Convert to local time if timezone-aware
1036
+ if mod_dt.tzinfo is not None:
1037
+ mod_dt = mod_dt.astimezone() # Convert to local timezone
1038
+ mod_display = mod_dt.strftime("%Y-%m-%d %H:%M")
1039
+ except (ValueError, TypeError):
1040
+ mod_display = modified[:16] if len(modified) >= 16 else modified
1041
+
1042
+ # Calculate span if we have both timestamps
1043
+ span_str = ""
1044
+ if created and modified:
1045
+ try:
1046
+ cre_str = created.replace("Z", "+00:00")
1047
+ mod_str = modified.replace("Z", "+00:00")
1048
+ cre_dt = datetime.fromisoformat(cre_str)
1049
+ mod_dt = datetime.fromisoformat(mod_str)
1050
+
1051
+ delta = mod_dt - cre_dt
1052
+ total_minutes = int(delta.total_seconds() // 60)
1053
+ days = delta.days
1054
+ hours = delta.seconds // 3600
1055
+ minutes = (delta.seconds % 3600) // 60
1056
+
1057
+ if days >= 1:
1058
+ span_str = f"{days}d"
1059
+ elif hours >= 1:
1060
+ span_str = f"{hours}h"
1061
+ elif total_minutes >= 1:
1062
+ span_str = f"{total_minutes}m"
1063
+ else:
1064
+ span_str = "<1m"
1065
+ except (ValueError, TypeError):
1066
+ pass
1067
+
1068
+ if span_str:
1069
+ return f"{span_str}, {mod_display}"
1070
+ else:
1071
+ return mod_display
1072
+
1073
+
1074
+ def build_session_file_list(
1075
+ chronological_chain: List[Tuple[Path, str]],
1076
+ ) -> str:
1077
+ """
1078
+ Build a numbered list of session files with derivation relationships.
1079
+
1080
+ Args:
1081
+ chronological_chain: List of (path, derivation_type) tuples in
1082
+ chronological order (oldest first)
1083
+
1084
+ Returns:
1085
+ Formatted string with numbered file list, e.g.:
1086
+ 1. /path/to/session1.jsonl (original, spanning 2 days, last modified 2025-12-10 11:45)
1087
+ 2. /path/to/session2.jsonl (rollover from 1, spanning 1 day, last modified 2025-12-10 15:30)
1088
+ """
1089
+ file_lines = []
1090
+ for i, (path, derivation_type) in enumerate(chronological_chain):
1091
+ # Get timestamps and format span
1092
+ created, modified = _get_session_timestamps(path)
1093
+ time_info = _format_time_span(created, modified)
1094
+
1095
+ if derivation_type == "original":
1096
+ if time_info:
1097
+ file_lines.append(f"{i+1}. {path} (original, {time_info})")
1098
+ else:
1099
+ file_lines.append(f"{i+1}. {path} (original)")
1100
+ else:
1101
+ parent_num = i # previous item in 1-indexed
1102
+ friendly = friendly_derivation_type(derivation_type)
1103
+ if time_info:
1104
+ file_lines.append(f"{i+1}. {path} ({friendly} from {parent_num}, {time_info})")
1105
+ else:
1106
+ file_lines.append(f"{i+1}. {path} ({friendly} from {parent_num})")
1107
+ return "\n".join(file_lines)
1108
+
1109
+
1110
+ def build_rollover_prompt(
1111
+ all_session_files: List[Path],
1112
+ chronological_chain: List[Tuple[Path, str]],
1113
+ quick_rollover: bool = False,
1114
+ custom_prompt: Optional[str] = None,
1115
+ subagent_instruction: Optional[str] = None,
1116
+ ) -> str:
1117
+ """
1118
+ Build the rollover prompt for continuing a session.
1119
+
1120
+ This function consolidates the prompt-building logic for both quick rollover
1121
+ (just present lineage) and context rollover (use sub-agents to extract
1122
+ context). It handles both single-session and multi-session lineage chains.
1123
+
1124
+ Args:
1125
+ all_session_files: List of session file paths in chronological order
1126
+ chronological_chain: List of (path, derivation_type) tuples in
1127
+ chronological order (oldest first)
1128
+ quick_rollover: If True, just present lineage without context recovery.
1129
+ If False, include instructions for sub-agent context recovery.
1130
+ custom_prompt: Optional custom instructions for context recovery.
1131
+ Only used when quick_rollover=False.
1132
+ subagent_instruction: Instructions for sub-agent usage, e.g.:
1133
+ - "PARALLEL HAIKU SUB-AGENTS" (for Claude)
1134
+ - "parallel sub-agents (if available)" (for Codex)
1135
+ Only used when quick_rollover=False.
1136
+
1137
+ Returns:
1138
+ The formatted rollover prompt string
1139
+ """
1140
+ is_single = len(all_session_files) == 1
1141
+
1142
+ if quick_rollover:
1143
+ return _build_quick_rollover_prompt(
1144
+ all_session_files, chronological_chain, is_single
1145
+ )
1146
+ else:
1147
+ return _build_context_rollover_prompt(
1148
+ all_session_files,
1149
+ chronological_chain,
1150
+ is_single,
1151
+ custom_prompt,
1152
+ subagent_instruction,
1153
+ )
1154
+
1155
+
1156
+ def _build_quick_rollover_prompt(
1157
+ all_session_files: List[Path],
1158
+ chronological_chain: List[Tuple[Path, str]],
1159
+ is_single: bool,
1160
+ ) -> str:
1161
+ """Build prompt for quick rollover (just present lineage)."""
1162
+ if is_single:
1163
+ session_file = all_session_files[0]
1164
+ return f"""[SESSION LINEAGE]
1165
+
1166
+ This session continues from a previous conversation. The prior session log is:
1167
+
1168
+ {session_file}
1169
+
1170
+ The file is in JSONL format. Since it can be large, use appropriate strategies (such as sub-agents if available) to carefully explore it if you need context.
1171
+
1172
+ Do not do anything yet. Simply greet the user and await instructions on how they want to continue the work based on the above session."""
1173
+ else:
1174
+ file_list = build_session_file_list(chronological_chain)
1175
+ return f"""[SESSION LINEAGE]
1176
+
1177
+ This session continues from a chain of prior conversations. Here are the JSONL session files in CHRONOLOGICAL ORDER (oldest to newest):
1178
+
1179
+ {file_list}
1180
+
1181
+ **Terminology:**
1182
+ - "trimmed" = Long messages were truncated to free up context. Full content in parent session.
1183
+ - "rolled over" = Work handed off to fresh session.
1184
+
1185
+ Since these files can be large, use appropriate strategies (such as sub-agents if available) to carefully explore them if you need context.
1186
+
1187
+ Do not do anything yet. Simply greet the user and await instructions on how they want to continue the work based on the above sessions."""
1188
+
1189
+
1190
+ def _build_context_rollover_prompt(
1191
+ all_session_files: List[Path],
1192
+ chronological_chain: List[Tuple[Path, str]],
1193
+ is_single: bool,
1194
+ custom_prompt: Optional[str],
1195
+ subagent_instruction: Optional[str],
1196
+ ) -> str:
1197
+ """Build prompt for context rollover (sub-agent context recovery)."""
1198
+ # Default context recovery instructions
1199
+ default_instructions = """Recover context from the session(s) above:
1200
+ 1. Get a rough overview of what happened throughout the session(s)
1201
+ 2. Extract detailed context of the LAST task being worked on, in the MOST RECENT session-file, so work can continue smoothly.
1202
+
1203
+ When done, state your understanding of the task history and current state to me."""
1204
+
1205
+ context_instructions = custom_prompt if custom_prompt else default_instructions
1206
+
1207
+ # Default sub-agent instruction if not provided
1208
+ if subagent_instruction is None:
1209
+ subagent_instruction = "parallel sub-agents"
1210
+
1211
+ if is_single:
1212
+ session_file = all_session_files[0]
1213
+ return f"""[SESSION LINEAGE]
1214
+
1215
+ This session continues from a previous conversation. The prior session log is:
1216
+
1217
+ {session_file}
1218
+
1219
+ The file is in JSONL format (one JSON object per line). Each line represents a message with fields like 'type' (user/assistant), 'message.content', etc.
1220
+
1221
+ ---
1222
+
1223
+ Strategically use {subagent_instruction} to recover context as instructed below. Do NOT read the file yourself - use sub-agents to preserve your context window.
1224
+
1225
+ === CONTEXT RECOVERY INSTRUCTIONS ===
1226
+ {context_instructions}
1227
+ === END CONTEXT RECOVERY INSTRUCTIONS ==="""
1228
+ else:
1229
+ file_list = build_session_file_list(chronological_chain)
1230
+ return f"""[SESSION LINEAGE]
1231
+
1232
+ This session continues from a chain of prior conversations. Here are the JSONL session files in CHRONOLOGICAL ORDER (oldest to newest):
1233
+
1234
+ {file_list}
1235
+
1236
+ **Terminology:**
1237
+ - "trimmed" = Long messages were truncated to free up context. Full content in parent session.
1238
+ - "rolled over" = Work handed off to fresh session.
1239
+
1240
+ Each file is in JSONL format. The LAST file ({all_session_files[-1]}) is the most recent session.
1241
+
1242
+ ---
1243
+
1244
+ Strategically use {subagent_instruction} to recover context as instructed below. Do NOT read these files yourself - use sub-agents to preserve your context window.
1245
+
1246
+ === CONTEXT RECOVERY INSTRUCTIONS ===
1247
+ {context_instructions}
1248
+ === END CONTEXT RECOVERY INSTRUCTIONS ==="""
1249
+
1250
+
1251
+ def count_user_messages(session_file: Path, agent: str) -> int:
1252
+ """
1253
+ Count user messages in a session file.
1254
+
1255
+ Only counts actual user messages, not tool results or system messages.
1256
+ This is the "lines" metric shown in the UI (e.g., "43L" in search results).
1257
+
1258
+ Args:
1259
+ session_file: Path to session JSONL file
1260
+ agent: Agent type ('claude' or 'codex')
1261
+
1262
+ Returns:
1263
+ Number of user messages in the session
1264
+ """
1265
+ user_count = 0
1266
+
1267
+ try:
1268
+ with open(session_file, "r", encoding="utf-8") as f:
1269
+ for line in f:
1270
+ line = line.strip()
1271
+ if not line:
1272
+ continue
1273
+
1274
+ try:
1275
+ data = json.loads(line)
1276
+ except json.JSONDecodeError:
1277
+ continue
1278
+
1279
+ if agent == "claude":
1280
+ # Claude format: type is "user" or "assistant"
1281
+ msg_type = data.get("type")
1282
+ if msg_type != "user":
1283
+ continue
1284
+
1285
+ # Exclude tool results - they have content as list with
1286
+ # {"type": "tool_result"}
1287
+ message = data.get("message", {})
1288
+ content = message.get("content")
1289
+ is_tool_result = (
1290
+ isinstance(content, list)
1291
+ and len(content) > 0
1292
+ and isinstance(content[0], dict)
1293
+ and content[0].get("type") == "tool_result"
1294
+ )
1295
+ if not is_tool_result:
1296
+ user_count += 1
1297
+
1298
+ elif agent == "codex":
1299
+ # Codex format: type is "response_item" with payload
1300
+ if data.get("type") != "response_item":
1301
+ continue
1302
+
1303
+ payload = data.get("payload", {})
1304
+ if payload.get("type") != "message":
1305
+ continue
1306
+
1307
+ if payload.get("role") == "user":
1308
+ user_count += 1
1309
+
1310
+ except (OSError, IOError):
1311
+ pass
1312
+
1313
+ return user_count