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.
- claude_code_tools/__init__.py +3 -0
- claude_code_tools/action_rpc.py +403 -0
- claude_code_tools/aichat.py +1718 -0
- claude_code_tools/claude_continue.py +299 -0
- claude_code_tools/codex_continue.py +309 -0
- claude_code_tools/config.py +93 -0
- claude_code_tools/delete_session.py +194 -0
- claude_code_tools/dotenv_vault.py +268 -0
- claude_code_tools/env_safe.py +235 -0
- claude_code_tools/export_all.py +342 -0
- claude_code_tools/export_claude_session.py +481 -0
- claude_code_tools/export_codex_session.py +466 -0
- claude_code_tools/export_session.py +573 -0
- claude_code_tools/find_claude_session.py +1741 -0
- claude_code_tools/find_codex_session.py +1329 -0
- claude_code_tools/find_original_session.py +134 -0
- claude_code_tools/find_session.py +1086 -0
- claude_code_tools/find_trimmed_sessions.py +259 -0
- claude_code_tools/node_menu_ui.py +406 -0
- claude_code_tools/search_index.py +1247 -0
- claude_code_tools/session_lineage.py +260 -0
- claude_code_tools/session_menu.py +187 -0
- claude_code_tools/session_menu_cli.py +448 -0
- claude_code_tools/session_tui.py +516 -0
- claude_code_tools/session_utils.py +1313 -0
- claude_code_tools/smart_trim.py +424 -0
- claude_code_tools/smart_trim_core.py +616 -0
- claude_code_tools/tmux_cli_controller.py +928 -0
- claude_code_tools/tmux_remote_controller.py +229 -0
- claude_code_tools/trim_session.py +817 -0
- claude_code_tools/trim_session_claude.py +319 -0
- claude_code_tools/trim_session_codex.py +344 -0
- claude_code_tools-1.0.10.dist-info/METADATA +685 -0
- claude_code_tools-1.0.10.dist-info/RECORD +1807 -0
- claude_code_tools-1.0.10.dist-info/WHEEL +4 -0
- claude_code_tools-1.0.10.dist-info/entry_points.txt +5 -0
- claude_code_tools-1.0.10.dist-info/licenses/LICENSE +21 -0
- docs/cc-codex-instructions.md +37 -0
- docs/claude-code-chutes.md +138 -0
- docs/claude-code-tmux-tutorials.md +105 -0
- docs/dot-zshrc.md +307 -0
- docs/find-claude-session.md +149 -0
- docs/lmsh.md +70 -0
- docs/reddit-post.md +55 -0
- docs/tmux-cli-instructions.md +186 -0
- docs/vault-documentation.md +161 -0
- node_ui/action_config.js +72 -0
- node_ui/menu.js +2367 -0
- node_ui/node_modules/.bin/is-in-ci +5 -0
- node_ui/node_modules/.bin/loose-envify +16 -0
- node_ui/node_modules/.package-lock.json +714 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/README.md +248 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.d.ts +11 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js +41 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/ansiCodes.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.d.ts +6 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js +17 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/diff.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.d.ts +6 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js +7 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/index.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.d.ts +5 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js +27 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/reduce.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.d.ts +6 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js +38 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/styledChars.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.d.ts +12 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js +70 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/tokenize.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.d.ts +3 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js +11 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/build/undo.js.map +1 -0
- node_ui/node_modules/@alcalzone/ansi-tokenize/package.json +63 -0
- node_ui/node_modules/ansi-escapes/base.d.ts +292 -0
- node_ui/node_modules/ansi-escapes/base.js +198 -0
- node_ui/node_modules/ansi-escapes/index.d.ts +2 -0
- node_ui/node_modules/ansi-escapes/index.js +2 -0
- node_ui/node_modules/ansi-escapes/license +9 -0
- node_ui/node_modules/ansi-escapes/package.json +70 -0
- node_ui/node_modules/ansi-escapes/readme.md +284 -0
- node_ui/node_modules/ansi-regex/index.d.ts +33 -0
- node_ui/node_modules/ansi-regex/index.js +14 -0
- node_ui/node_modules/ansi-regex/license +9 -0
- node_ui/node_modules/ansi-regex/package.json +61 -0
- node_ui/node_modules/ansi-regex/readme.md +66 -0
- node_ui/node_modules/ansi-styles/index.d.ts +236 -0
- node_ui/node_modules/ansi-styles/index.js +223 -0
- node_ui/node_modules/ansi-styles/license +9 -0
- node_ui/node_modules/ansi-styles/package.json +54 -0
- node_ui/node_modules/ansi-styles/readme.md +173 -0
- node_ui/node_modules/auto-bind/index.d.ts +50 -0
- node_ui/node_modules/auto-bind/index.js +41 -0
- node_ui/node_modules/auto-bind/license +9 -0
- node_ui/node_modules/auto-bind/package.json +51 -0
- node_ui/node_modules/auto-bind/react.d.ts +26 -0
- node_ui/node_modules/auto-bind/react.js +28 -0
- node_ui/node_modules/auto-bind/readme.md +92 -0
- node_ui/node_modules/chalk/license +9 -0
- node_ui/node_modules/chalk/package.json +83 -0
- node_ui/node_modules/chalk/readme.md +325 -0
- node_ui/node_modules/chalk/source/index.d.ts +320 -0
- node_ui/node_modules/chalk/source/index.js +225 -0
- node_ui/node_modules/chalk/source/utilities.js +33 -0
- node_ui/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- node_ui/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- node_ui/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- node_ui/node_modules/chalk/source/vendor/supports-color/browser.js +30 -0
- node_ui/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- node_ui/node_modules/chalk/source/vendor/supports-color/index.js +182 -0
- node_ui/node_modules/cli-boxes/boxes.json +82 -0
- node_ui/node_modules/cli-boxes/index.d.ts +127 -0
- node_ui/node_modules/cli-boxes/index.js +6 -0
- node_ui/node_modules/cli-boxes/license +9 -0
- node_ui/node_modules/cli-boxes/package.json +42 -0
- node_ui/node_modules/cli-boxes/readme.md +115 -0
- node_ui/node_modules/cli-cursor/index.d.ts +47 -0
- node_ui/node_modules/cli-cursor/index.js +39 -0
- node_ui/node_modules/cli-cursor/license +9 -0
- node_ui/node_modules/cli-cursor/package.json +49 -0
- node_ui/node_modules/cli-cursor/readme.md +51 -0
- node_ui/node_modules/cli-truncate/index.d.ts +116 -0
- node_ui/node_modules/cli-truncate/index.js +99 -0
- node_ui/node_modules/cli-truncate/license +9 -0
- node_ui/node_modules/cli-truncate/node_modules/slice-ansi/index.js +105 -0
- node_ui/node_modules/cli-truncate/node_modules/slice-ansi/license +10 -0
- node_ui/node_modules/cli-truncate/node_modules/slice-ansi/package.json +53 -0
- node_ui/node_modules/cli-truncate/node_modules/slice-ansi/readme.md +66 -0
- node_ui/node_modules/cli-truncate/package.json +51 -0
- node_ui/node_modules/cli-truncate/readme.md +150 -0
- node_ui/node_modules/code-excerpt/dist/index.d.ts +9 -0
- node_ui/node_modules/code-excerpt/dist/index.js +27 -0
- node_ui/node_modules/code-excerpt/license +21 -0
- node_ui/node_modules/code-excerpt/package.json +43 -0
- node_ui/node_modules/code-excerpt/readme.md +65 -0
- node_ui/node_modules/convert-to-spaces/dist/index.d.ts +2 -0
- node_ui/node_modules/convert-to-spaces/dist/index.js +4 -0
- node_ui/node_modules/convert-to-spaces/license +21 -0
- node_ui/node_modules/convert-to-spaces/package.json +40 -0
- node_ui/node_modules/convert-to-spaces/readme.md +39 -0
- node_ui/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
- node_ui/node_modules/emoji-regex/README.md +107 -0
- node_ui/node_modules/emoji-regex/index.d.ts +3 -0
- node_ui/node_modules/emoji-regex/index.js +4 -0
- node_ui/node_modules/emoji-regex/index.mjs +4 -0
- node_ui/node_modules/emoji-regex/package.json +45 -0
- node_ui/node_modules/environment/index.d.ts +74 -0
- node_ui/node_modules/environment/index.js +47 -0
- node_ui/node_modules/environment/license +9 -0
- node_ui/node_modules/environment/package.json +74 -0
- node_ui/node_modules/environment/readme.md +94 -0
- node_ui/node_modules/escape-string-regexp/index.d.ts +16 -0
- node_ui/node_modules/escape-string-regexp/index.js +11 -0
- node_ui/node_modules/escape-string-regexp/license +9 -0
- node_ui/node_modules/escape-string-regexp/package.json +40 -0
- node_ui/node_modules/escape-string-regexp/readme.md +34 -0
- node_ui/node_modules/figures/index.d.ts +269 -0
- node_ui/node_modules/figures/index.js +322 -0
- node_ui/node_modules/figures/license +9 -0
- node_ui/node_modules/figures/package.json +46 -0
- node_ui/node_modules/figures/readme.md +328 -0
- node_ui/node_modules/get-east-asian-width/index.d.ts +60 -0
- node_ui/node_modules/get-east-asian-width/index.js +30 -0
- node_ui/node_modules/get-east-asian-width/license +9 -0
- node_ui/node_modules/get-east-asian-width/lookup.js +403 -0
- node_ui/node_modules/get-east-asian-width/package.json +70 -0
- node_ui/node_modules/get-east-asian-width/readme.md +65 -0
- node_ui/node_modules/indent-string/index.d.ts +38 -0
- node_ui/node_modules/indent-string/index.js +38 -0
- node_ui/node_modules/indent-string/license +9 -0
- node_ui/node_modules/indent-string/package.json +40 -0
- node_ui/node_modules/indent-string/readme.md +73 -0
- node_ui/node_modules/ink/build/apply-styles.js +175 -0
- node_ui/node_modules/ink/build/build-layout.js +77 -0
- node_ui/node_modules/ink/build/calculate-wrapped-text.js +53 -0
- node_ui/node_modules/ink/build/colorize.d.ts +3 -0
- node_ui/node_modules/ink/build/colorize.js +48 -0
- node_ui/node_modules/ink/build/colorize.js.map +1 -0
- node_ui/node_modules/ink/build/components/App.d.ts +61 -0
- node_ui/node_modules/ink/build/components/App.js +286 -0
- node_ui/node_modules/ink/build/components/App.js.map +1 -0
- node_ui/node_modules/ink/build/components/AppContext.d.ts +12 -0
- node_ui/node_modules/ink/build/components/AppContext.js +11 -0
- node_ui/node_modules/ink/build/components/AppContext.js.map +1 -0
- node_ui/node_modules/ink/build/components/Box.d.ts +62 -0
- node_ui/node_modules/ink/build/components/Box.js +20 -0
- node_ui/node_modules/ink/build/components/Box.js.map +1 -0
- node_ui/node_modules/ink/build/components/Color.js +62 -0
- node_ui/node_modules/ink/build/components/ErrorOverview.d.ts +6 -0
- node_ui/node_modules/ink/build/components/ErrorOverview.js +79 -0
- node_ui/node_modules/ink/build/components/ErrorOverview.js.map +1 -0
- node_ui/node_modules/ink/build/components/FocusContext.d.ts +17 -0
- node_ui/node_modules/ink/build/components/FocusContext.js +17 -0
- node_ui/node_modules/ink/build/components/FocusContext.js.map +1 -0
- node_ui/node_modules/ink/build/components/Newline.d.ts +13 -0
- node_ui/node_modules/ink/build/components/Newline.js +8 -0
- node_ui/node_modules/ink/build/components/Newline.js.map +1 -0
- node_ui/node_modules/ink/build/components/Spacer.d.ts +6 -0
- node_ui/node_modules/ink/build/components/Spacer.js +10 -0
- node_ui/node_modules/ink/build/components/Spacer.js.map +1 -0
- node_ui/node_modules/ink/build/components/Static.d.ts +31 -0
- node_ui/node_modules/ink/build/components/Static.js +33 -0
- node_ui/node_modules/ink/build/components/Static.js.map +1 -0
- node_ui/node_modules/ink/build/components/StderrContext.d.ts +19 -0
- node_ui/node_modules/ink/build/components/StderrContext.js +13 -0
- node_ui/node_modules/ink/build/components/StderrContext.js.map +1 -0
- node_ui/node_modules/ink/build/components/StdinContext.d.ts +26 -0
- node_ui/node_modules/ink/build/components/StdinContext.js +19 -0
- node_ui/node_modules/ink/build/components/StdinContext.js.map +1 -0
- node_ui/node_modules/ink/build/components/StdoutContext.d.ts +19 -0
- node_ui/node_modules/ink/build/components/StdoutContext.js +13 -0
- node_ui/node_modules/ink/build/components/StdoutContext.js.map +1 -0
- node_ui/node_modules/ink/build/components/Text.d.ts +49 -0
- node_ui/node_modules/ink/build/components/Text.js +40 -0
- node_ui/node_modules/ink/build/components/Text.js.map +1 -0
- node_ui/node_modules/ink/build/components/Transform.d.ts +15 -0
- node_ui/node_modules/ink/build/components/Transform.js +14 -0
- node_ui/node_modules/ink/build/components/Transform.js.map +1 -0
- node_ui/node_modules/ink/build/devtools-window-polyfill.d.ts +1 -0
- node_ui/node_modules/ink/build/devtools-window-polyfill.js +64 -0
- node_ui/node_modules/ink/build/devtools-window-polyfill.js.map +1 -0
- node_ui/node_modules/ink/build/devtools.d.ts +1 -0
- node_ui/node_modules/ink/build/devtools.js +9 -0
- node_ui/node_modules/ink/build/devtools.js.map +1 -0
- node_ui/node_modules/ink/build/dom.d.ts +42 -0
- node_ui/node_modules/ink/build/dom.js +117 -0
- node_ui/node_modules/ink/build/dom.js.map +1 -0
- node_ui/node_modules/ink/build/experimental/apply-style.js +140 -0
- node_ui/node_modules/ink/build/experimental/dom.js +123 -0
- node_ui/node_modules/ink/build/experimental/output.js +91 -0
- node_ui/node_modules/ink/build/experimental/reconciler.js +141 -0
- node_ui/node_modules/ink/build/experimental/renderer.js +81 -0
- node_ui/node_modules/ink/build/get-max-width.d.ts +3 -0
- node_ui/node_modules/ink/build/get-max-width.js +10 -0
- node_ui/node_modules/ink/build/get-max-width.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-app.d.ts +5 -0
- node_ui/node_modules/ink/build/hooks/use-app.js +8 -0
- node_ui/node_modules/ink/build/hooks/use-app.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-focus-manager.d.ts +34 -0
- node_ui/node_modules/ink/build/hooks/use-focus-manager.js +18 -0
- node_ui/node_modules/ink/build/hooks/use-focus-manager.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-focus.d.ts +34 -0
- node_ui/node_modules/ink/build/hooks/use-focus.js +47 -0
- node_ui/node_modules/ink/build/hooks/use-focus.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-input.d.ts +97 -0
- node_ui/node_modules/ink/build/hooks/use-input.js +96 -0
- node_ui/node_modules/ink/build/hooks/use-input.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-stderr.d.ts +5 -0
- node_ui/node_modules/ink/build/hooks/use-stderr.js +8 -0
- node_ui/node_modules/ink/build/hooks/use-stderr.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-stdin.d.ts +5 -0
- node_ui/node_modules/ink/build/hooks/use-stdin.js +8 -0
- node_ui/node_modules/ink/build/hooks/use-stdin.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/use-stdout.d.ts +5 -0
- node_ui/node_modules/ink/build/hooks/use-stdout.js +8 -0
- node_ui/node_modules/ink/build/hooks/use-stdout.js.map +1 -0
- node_ui/node_modules/ink/build/hooks/useInput.js +38 -0
- node_ui/node_modules/ink/build/index.d.ts +27 -0
- node_ui/node_modules/ink/build/index.js +16 -0
- node_ui/node_modules/ink/build/index.js.map +1 -0
- node_ui/node_modules/ink/build/ink.d.ts +38 -0
- node_ui/node_modules/ink/build/ink.js +235 -0
- node_ui/node_modules/ink/build/ink.js.map +1 -0
- node_ui/node_modules/ink/build/instance.js +205 -0
- node_ui/node_modules/ink/build/instances.d.ts +4 -0
- node_ui/node_modules/ink/build/instances.js +8 -0
- node_ui/node_modules/ink/build/instances.js.map +1 -0
- node_ui/node_modules/ink/build/log-update.d.ts +13 -0
- node_ui/node_modules/ink/build/log-update.js +37 -0
- node_ui/node_modules/ink/build/log-update.js.map +1 -0
- node_ui/node_modules/ink/build/measure-element.d.ts +16 -0
- node_ui/node_modules/ink/build/measure-element.js +9 -0
- node_ui/node_modules/ink/build/measure-element.js.map +1 -0
- node_ui/node_modules/ink/build/measure-text.d.ts +6 -0
- node_ui/node_modules/ink/build/measure-text.js +20 -0
- node_ui/node_modules/ink/build/measure-text.js.map +1 -0
- node_ui/node_modules/ink/build/output.d.ts +35 -0
- node_ui/node_modules/ink/build/output.js +148 -0
- node_ui/node_modules/ink/build/output.js.map +1 -0
- node_ui/node_modules/ink/build/parse-keypress.d.ts +15 -0
- node_ui/node_modules/ink/build/parse-keypress.js +225 -0
- node_ui/node_modules/ink/build/parse-keypress.js.map +1 -0
- node_ui/node_modules/ink/build/reconciler.d.ts +4 -0
- node_ui/node_modules/ink/build/reconciler.js +219 -0
- node_ui/node_modules/ink/build/reconciler.js.map +1 -0
- node_ui/node_modules/ink/build/render-border.d.ts +4 -0
- node_ui/node_modules/ink/build/render-border.js +73 -0
- node_ui/node_modules/ink/build/render-border.js.map +1 -0
- node_ui/node_modules/ink/build/render-node-to-output.d.ts +10 -0
- node_ui/node_modules/ink/build/render-node-to-output.js +99 -0
- node_ui/node_modules/ink/build/render-node-to-output.js.map +1 -0
- node_ui/node_modules/ink/build/render.d.ts +68 -0
- node_ui/node_modules/ink/build/render.js +48 -0
- node_ui/node_modules/ink/build/render.js.map +1 -0
- node_ui/node_modules/ink/build/renderer.d.ts +8 -0
- node_ui/node_modules/ink/build/renderer.js +36 -0
- node_ui/node_modules/ink/build/renderer.js.map +1 -0
- node_ui/node_modules/ink/build/squash-text-nodes.d.ts +3 -0
- node_ui/node_modules/ink/build/squash-text-nodes.js +35 -0
- node_ui/node_modules/ink/build/squash-text-nodes.js.map +1 -0
- node_ui/node_modules/ink/build/styles.d.ts +243 -0
- node_ui/node_modules/ink/build/styles.js +229 -0
- node_ui/node_modules/ink/build/styles.js.map +1 -0
- node_ui/node_modules/ink/build/wrap-text.d.ts +3 -0
- node_ui/node_modules/ink/build/wrap-text.js +31 -0
- node_ui/node_modules/ink/build/wrap-text.js.map +1 -0
- node_ui/node_modules/ink/license +9 -0
- node_ui/node_modules/ink/package.json +197 -0
- node_ui/node_modules/ink/readme.md +2153 -0
- node_ui/node_modules/ink-select-input/build/Indicator.d.ts +6 -0
- node_ui/node_modules/ink-select-input/build/Indicator.js +8 -0
- node_ui/node_modules/ink-select-input/build/Indicator.js.map +1 -0
- node_ui/node_modules/ink-select-input/build/Item.d.ts +7 -0
- node_ui/node_modules/ink-select-input/build/Item.js +7 -0
- node_ui/node_modules/ink-select-input/build/Item.js.map +1 -0
- node_ui/node_modules/ink-select-input/build/SelectInput.d.ts +49 -0
- node_ui/node_modules/ink-select-input/build/SelectInput.js +83 -0
- node_ui/node_modules/ink-select-input/build/SelectInput.js.map +1 -0
- node_ui/node_modules/ink-select-input/build/index.d.ts +3 -0
- node_ui/node_modules/ink-select-input/build/index.js +4 -0
- node_ui/node_modules/ink-select-input/build/index.js.map +1 -0
- node_ui/node_modules/ink-select-input/license +9 -0
- node_ui/node_modules/ink-select-input/node_modules/figures/index.d.ts +279 -0
- node_ui/node_modules/ink-select-input/node_modules/figures/index.js +292 -0
- node_ui/node_modules/ink-select-input/node_modules/figures/license +9 -0
- node_ui/node_modules/ink-select-input/node_modules/figures/package.json +49 -0
- node_ui/node_modules/ink-select-input/node_modules/figures/readme.md +337 -0
- node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.d.ts +12 -0
- node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/index.js +21 -0
- node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/license +9 -0
- node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/package.json +47 -0
- node_ui/node_modules/ink-select-input/node_modules/is-unicode-supported/readme.md +35 -0
- node_ui/node_modules/ink-select-input/package.json +83 -0
- node_ui/node_modules/ink-select-input/readme.md +98 -0
- node_ui/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
- node_ui/node_modules/is-fullwidth-code-point/index.js +40 -0
- node_ui/node_modules/is-fullwidth-code-point/license +9 -0
- node_ui/node_modules/is-fullwidth-code-point/package.json +45 -0
- node_ui/node_modules/is-fullwidth-code-point/readme.md +43 -0
- node_ui/node_modules/is-in-ci/cli.js +5 -0
- node_ui/node_modules/is-in-ci/index.d.ts +15 -0
- node_ui/node_modules/is-in-ci/index.js +11 -0
- node_ui/node_modules/is-in-ci/license +9 -0
- node_ui/node_modules/is-in-ci/package.json +48 -0
- node_ui/node_modules/is-in-ci/readme.md +43 -0
- node_ui/node_modules/is-unicode-supported/index.d.ts +12 -0
- node_ui/node_modules/is-unicode-supported/index.js +17 -0
- node_ui/node_modules/is-unicode-supported/license +9 -0
- node_ui/node_modules/is-unicode-supported/package.json +43 -0
- node_ui/node_modules/is-unicode-supported/readme.md +35 -0
- node_ui/node_modules/js-tokens/CHANGELOG.md +151 -0
- node_ui/node_modules/js-tokens/LICENSE +21 -0
- node_ui/node_modules/js-tokens/README.md +240 -0
- node_ui/node_modules/js-tokens/index.js +23 -0
- node_ui/node_modules/js-tokens/package.json +30 -0
- node_ui/node_modules/lodash/LICENSE +47 -0
- node_ui/node_modules/lodash/README.md +39 -0
- node_ui/node_modules/lodash/_DataView.js +7 -0
- node_ui/node_modules/lodash/_Hash.js +32 -0
- node_ui/node_modules/lodash/_LazyWrapper.js +28 -0
- node_ui/node_modules/lodash/_ListCache.js +32 -0
- node_ui/node_modules/lodash/_LodashWrapper.js +22 -0
- node_ui/node_modules/lodash/_Map.js +7 -0
- node_ui/node_modules/lodash/_MapCache.js +32 -0
- node_ui/node_modules/lodash/_Promise.js +7 -0
- node_ui/node_modules/lodash/_Set.js +7 -0
- node_ui/node_modules/lodash/_SetCache.js +27 -0
- node_ui/node_modules/lodash/_Stack.js +27 -0
- node_ui/node_modules/lodash/_Symbol.js +6 -0
- node_ui/node_modules/lodash/_Uint8Array.js +6 -0
- node_ui/node_modules/lodash/_WeakMap.js +7 -0
- node_ui/node_modules/lodash/_apply.js +21 -0
- node_ui/node_modules/lodash/_arrayAggregator.js +22 -0
- node_ui/node_modules/lodash/_arrayEach.js +22 -0
- node_ui/node_modules/lodash/_arrayEachRight.js +21 -0
- node_ui/node_modules/lodash/_arrayEvery.js +23 -0
- node_ui/node_modules/lodash/_arrayFilter.js +25 -0
- node_ui/node_modules/lodash/_arrayIncludes.js +17 -0
- node_ui/node_modules/lodash/_arrayIncludesWith.js +22 -0
- node_ui/node_modules/lodash/_arrayLikeKeys.js +49 -0
- node_ui/node_modules/lodash/_arrayMap.js +21 -0
- node_ui/node_modules/lodash/_arrayPush.js +20 -0
- node_ui/node_modules/lodash/_arrayReduce.js +26 -0
- node_ui/node_modules/lodash/_arrayReduceRight.js +24 -0
- node_ui/node_modules/lodash/_arraySample.js +15 -0
- node_ui/node_modules/lodash/_arraySampleSize.js +17 -0
- node_ui/node_modules/lodash/_arrayShuffle.js +15 -0
- node_ui/node_modules/lodash/_arraySome.js +23 -0
- node_ui/node_modules/lodash/_asciiSize.js +12 -0
- node_ui/node_modules/lodash/_asciiToArray.js +12 -0
- node_ui/node_modules/lodash/_asciiWords.js +15 -0
- node_ui/node_modules/lodash/_assignMergeValue.js +20 -0
- node_ui/node_modules/lodash/_assignValue.js +28 -0
- node_ui/node_modules/lodash/_assocIndexOf.js +21 -0
- node_ui/node_modules/lodash/_baseAggregator.js +21 -0
- node_ui/node_modules/lodash/_baseAssign.js +17 -0
- node_ui/node_modules/lodash/_baseAssignIn.js +17 -0
- node_ui/node_modules/lodash/_baseAssignValue.js +25 -0
- node_ui/node_modules/lodash/_baseAt.js +23 -0
- node_ui/node_modules/lodash/_baseClamp.js +22 -0
- node_ui/node_modules/lodash/_baseClone.js +166 -0
- node_ui/node_modules/lodash/_baseConforms.js +18 -0
- node_ui/node_modules/lodash/_baseConformsTo.js +27 -0
- node_ui/node_modules/lodash/_baseCreate.js +30 -0
- node_ui/node_modules/lodash/_baseDelay.js +21 -0
- node_ui/node_modules/lodash/_baseDifference.js +67 -0
- node_ui/node_modules/lodash/_baseEach.js +14 -0
- node_ui/node_modules/lodash/_baseEachRight.js +14 -0
- node_ui/node_modules/lodash/_baseEvery.js +21 -0
- node_ui/node_modules/lodash/_baseExtremum.js +32 -0
- node_ui/node_modules/lodash/_baseFill.js +32 -0
- node_ui/node_modules/lodash/_baseFilter.js +21 -0
- node_ui/node_modules/lodash/_baseFindIndex.js +24 -0
- node_ui/node_modules/lodash/_baseFindKey.js +23 -0
- node_ui/node_modules/lodash/_baseFlatten.js +38 -0
- node_ui/node_modules/lodash/_baseFor.js +16 -0
- node_ui/node_modules/lodash/_baseForOwn.js +16 -0
- node_ui/node_modules/lodash/_baseForOwnRight.js +16 -0
- node_ui/node_modules/lodash/_baseForRight.js +15 -0
- node_ui/node_modules/lodash/_baseFunctions.js +19 -0
- node_ui/node_modules/lodash/_baseGet.js +24 -0
- node_ui/node_modules/lodash/_baseGetAllKeys.js +20 -0
- node_ui/node_modules/lodash/_baseGetTag.js +28 -0
- node_ui/node_modules/lodash/_baseGt.js +14 -0
- node_ui/node_modules/lodash/_baseHas.js +19 -0
- node_ui/node_modules/lodash/_baseHasIn.js +13 -0
- node_ui/node_modules/lodash/_baseInRange.js +18 -0
- node_ui/node_modules/lodash/_baseIndexOf.js +20 -0
- node_ui/node_modules/lodash/_baseIndexOfWith.js +23 -0
- node_ui/node_modules/lodash/_baseIntersection.js +74 -0
- node_ui/node_modules/lodash/_baseInverter.js +21 -0
- node_ui/node_modules/lodash/_baseInvoke.js +24 -0
- node_ui/node_modules/lodash/_baseIsArguments.js +18 -0
- node_ui/node_modules/lodash/_baseIsArrayBuffer.js +17 -0
- node_ui/node_modules/lodash/_baseIsDate.js +18 -0
- node_ui/node_modules/lodash/_baseIsEqual.js +28 -0
- node_ui/node_modules/lodash/_baseIsEqualDeep.js +83 -0
- node_ui/node_modules/lodash/_baseIsMap.js +18 -0
- node_ui/node_modules/lodash/_baseIsMatch.js +62 -0
- node_ui/node_modules/lodash/_baseIsNaN.js +12 -0
- node_ui/node_modules/lodash/_baseIsNative.js +47 -0
- node_ui/node_modules/lodash/_baseIsRegExp.js +18 -0
- node_ui/node_modules/lodash/_baseIsSet.js +18 -0
- node_ui/node_modules/lodash/_baseIsTypedArray.js +60 -0
- node_ui/node_modules/lodash/_baseIteratee.js +31 -0
- node_ui/node_modules/lodash/_baseKeys.js +30 -0
- node_ui/node_modules/lodash/_baseKeysIn.js +33 -0
- node_ui/node_modules/lodash/_baseLodash.js +10 -0
- node_ui/node_modules/lodash/_baseLt.js +14 -0
- node_ui/node_modules/lodash/_baseMap.js +22 -0
- node_ui/node_modules/lodash/_baseMatches.js +22 -0
- node_ui/node_modules/lodash/_baseMatchesProperty.js +33 -0
- node_ui/node_modules/lodash/_baseMean.js +20 -0
- node_ui/node_modules/lodash/_baseMerge.js +42 -0
- node_ui/node_modules/lodash/_baseMergeDeep.js +94 -0
- node_ui/node_modules/lodash/_baseNth.js +20 -0
- node_ui/node_modules/lodash/_baseOrderBy.js +49 -0
- node_ui/node_modules/lodash/_basePick.js +19 -0
- node_ui/node_modules/lodash/_basePickBy.js +30 -0
- node_ui/node_modules/lodash/_baseProperty.js +14 -0
- node_ui/node_modules/lodash/_basePropertyDeep.js +16 -0
- node_ui/node_modules/lodash/_basePropertyOf.js +14 -0
- node_ui/node_modules/lodash/_basePullAll.js +51 -0
- node_ui/node_modules/lodash/_basePullAt.js +37 -0
- node_ui/node_modules/lodash/_baseRandom.js +18 -0
- node_ui/node_modules/lodash/_baseRange.js +28 -0
- node_ui/node_modules/lodash/_baseReduce.js +23 -0
- node_ui/node_modules/lodash/_baseRepeat.js +35 -0
- node_ui/node_modules/lodash/_baseRest.js +17 -0
- node_ui/node_modules/lodash/_baseSample.js +15 -0
- node_ui/node_modules/lodash/_baseSampleSize.js +18 -0
- node_ui/node_modules/lodash/_baseSet.js +51 -0
- node_ui/node_modules/lodash/_baseSetData.js +17 -0
- node_ui/node_modules/lodash/_baseSetToString.js +22 -0
- node_ui/node_modules/lodash/_baseShuffle.js +15 -0
- node_ui/node_modules/lodash/_baseSlice.js +31 -0
- node_ui/node_modules/lodash/_baseSome.js +22 -0
- node_ui/node_modules/lodash/_baseSortBy.js +21 -0
- node_ui/node_modules/lodash/_baseSortedIndex.js +42 -0
- node_ui/node_modules/lodash/_baseSortedIndexBy.js +67 -0
- node_ui/node_modules/lodash/_baseSortedUniq.js +30 -0
- node_ui/node_modules/lodash/_baseSum.js +24 -0
- node_ui/node_modules/lodash/_baseTimes.js +20 -0
- node_ui/node_modules/lodash/_baseToNumber.js +24 -0
- node_ui/node_modules/lodash/_baseToPairs.js +18 -0
- node_ui/node_modules/lodash/_baseToString.js +37 -0
- node_ui/node_modules/lodash/_baseTrim.js +19 -0
- node_ui/node_modules/lodash/_baseUnary.js +14 -0
- node_ui/node_modules/lodash/_baseUniq.js +72 -0
- node_ui/node_modules/lodash/_baseUnset.js +20 -0
- node_ui/node_modules/lodash/_baseUpdate.js +18 -0
- node_ui/node_modules/lodash/_baseValues.js +19 -0
- node_ui/node_modules/lodash/_baseWhile.js +26 -0
- node_ui/node_modules/lodash/_baseWrapperValue.js +25 -0
- node_ui/node_modules/lodash/_baseXor.js +36 -0
- node_ui/node_modules/lodash/_baseZipObject.js +23 -0
- node_ui/node_modules/lodash/_cacheHas.js +13 -0
- node_ui/node_modules/lodash/_castArrayLikeObject.js +14 -0
- node_ui/node_modules/lodash/_castFunction.js +14 -0
- node_ui/node_modules/lodash/_castPath.js +21 -0
- node_ui/node_modules/lodash/_castRest.js +14 -0
- node_ui/node_modules/lodash/_castSlice.js +18 -0
- node_ui/node_modules/lodash/_charsEndIndex.js +19 -0
- node_ui/node_modules/lodash/_charsStartIndex.js +20 -0
- node_ui/node_modules/lodash/_cloneArrayBuffer.js +16 -0
- node_ui/node_modules/lodash/_cloneBuffer.js +35 -0
- node_ui/node_modules/lodash/_cloneDataView.js +16 -0
- node_ui/node_modules/lodash/_cloneRegExp.js +17 -0
- node_ui/node_modules/lodash/_cloneSymbol.js +18 -0
- node_ui/node_modules/lodash/_cloneTypedArray.js +16 -0
- node_ui/node_modules/lodash/_compareAscending.js +41 -0
- node_ui/node_modules/lodash/_compareMultiple.js +44 -0
- node_ui/node_modules/lodash/_composeArgs.js +39 -0
- node_ui/node_modules/lodash/_composeArgsRight.js +41 -0
- node_ui/node_modules/lodash/_copyArray.js +20 -0
- node_ui/node_modules/lodash/_copyObject.js +40 -0
- node_ui/node_modules/lodash/_copySymbols.js +16 -0
- node_ui/node_modules/lodash/_copySymbolsIn.js +16 -0
- node_ui/node_modules/lodash/_coreJsData.js +6 -0
- node_ui/node_modules/lodash/_countHolders.js +21 -0
- node_ui/node_modules/lodash/_createAggregator.js +23 -0
- node_ui/node_modules/lodash/_createAssigner.js +37 -0
- node_ui/node_modules/lodash/_createBaseEach.js +32 -0
- node_ui/node_modules/lodash/_createBaseFor.js +25 -0
- node_ui/node_modules/lodash/_createBind.js +28 -0
- node_ui/node_modules/lodash/_createCaseFirst.js +33 -0
- node_ui/node_modules/lodash/_createCompounder.js +24 -0
- node_ui/node_modules/lodash/_createCtor.js +37 -0
- node_ui/node_modules/lodash/_createCurry.js +46 -0
- node_ui/node_modules/lodash/_createFind.js +25 -0
- node_ui/node_modules/lodash/_createFlow.js +78 -0
- node_ui/node_modules/lodash/_createHybrid.js +92 -0
- node_ui/node_modules/lodash/_createInverter.js +17 -0
- node_ui/node_modules/lodash/_createMathOperation.js +38 -0
- node_ui/node_modules/lodash/_createOver.js +27 -0
- node_ui/node_modules/lodash/_createPadding.js +33 -0
- node_ui/node_modules/lodash/_createPartial.js +43 -0
- node_ui/node_modules/lodash/_createRange.js +30 -0
- node_ui/node_modules/lodash/_createRecurry.js +56 -0
- node_ui/node_modules/lodash/_createRelationalOperation.js +20 -0
- node_ui/node_modules/lodash/_createRound.js +35 -0
- node_ui/node_modules/lodash/_createSet.js +19 -0
- node_ui/node_modules/lodash/_createToPairs.js +30 -0
- node_ui/node_modules/lodash/_createWrap.js +106 -0
- node_ui/node_modules/lodash/_customDefaultsAssignIn.js +29 -0
- node_ui/node_modules/lodash/_customDefaultsMerge.js +28 -0
- node_ui/node_modules/lodash/_customOmitClone.js +16 -0
- node_ui/node_modules/lodash/_deburrLetter.js +71 -0
- node_ui/node_modules/lodash/_defineProperty.js +11 -0
- node_ui/node_modules/lodash/_equalArrays.js +84 -0
- node_ui/node_modules/lodash/_equalByTag.js +112 -0
- node_ui/node_modules/lodash/_equalObjects.js +90 -0
- node_ui/node_modules/lodash/_escapeHtmlChar.js +21 -0
- node_ui/node_modules/lodash/_escapeStringChar.js +22 -0
- node_ui/node_modules/lodash/_flatRest.js +16 -0
- node_ui/node_modules/lodash/_freeGlobal.js +4 -0
- node_ui/node_modules/lodash/_getAllKeys.js +16 -0
- node_ui/node_modules/lodash/_getAllKeysIn.js +17 -0
- node_ui/node_modules/lodash/_getData.js +15 -0
- node_ui/node_modules/lodash/_getFuncName.js +31 -0
- node_ui/node_modules/lodash/_getHolder.js +13 -0
- node_ui/node_modules/lodash/_getMapData.js +18 -0
- node_ui/node_modules/lodash/_getMatchData.js +24 -0
- node_ui/node_modules/lodash/_getNative.js +17 -0
- node_ui/node_modules/lodash/_getPrototype.js +6 -0
- node_ui/node_modules/lodash/_getRawTag.js +46 -0
- node_ui/node_modules/lodash/_getSymbols.js +30 -0
- node_ui/node_modules/lodash/_getSymbolsIn.js +25 -0
- node_ui/node_modules/lodash/_getTag.js +58 -0
- node_ui/node_modules/lodash/_getValue.js +13 -0
- node_ui/node_modules/lodash/_getView.js +33 -0
- node_ui/node_modules/lodash/_getWrapDetails.js +17 -0
- node_ui/node_modules/lodash/_hasPath.js +39 -0
- node_ui/node_modules/lodash/_hasUnicode.js +26 -0
- node_ui/node_modules/lodash/_hasUnicodeWord.js +15 -0
- node_ui/node_modules/lodash/_hashClear.js +15 -0
- node_ui/node_modules/lodash/_hashDelete.js +17 -0
- node_ui/node_modules/lodash/_hashGet.js +30 -0
- node_ui/node_modules/lodash/_hashHas.js +23 -0
- node_ui/node_modules/lodash/_hashSet.js +23 -0
- node_ui/node_modules/lodash/_initCloneArray.js +26 -0
- node_ui/node_modules/lodash/_initCloneByTag.js +77 -0
- node_ui/node_modules/lodash/_initCloneObject.js +18 -0
- node_ui/node_modules/lodash/_insertWrapDetails.js +23 -0
- node_ui/node_modules/lodash/_isFlattenable.js +20 -0
- node_ui/node_modules/lodash/_isIndex.js +25 -0
- node_ui/node_modules/lodash/_isIterateeCall.js +30 -0
- node_ui/node_modules/lodash/_isKey.js +29 -0
- node_ui/node_modules/lodash/_isKeyable.js +15 -0
- node_ui/node_modules/lodash/_isLaziable.js +28 -0
- node_ui/node_modules/lodash/_isMaskable.js +14 -0
- node_ui/node_modules/lodash/_isMasked.js +20 -0
- node_ui/node_modules/lodash/_isPrototype.js +18 -0
- node_ui/node_modules/lodash/_isStrictComparable.js +15 -0
- node_ui/node_modules/lodash/_iteratorToArray.js +18 -0
- node_ui/node_modules/lodash/_lazyClone.js +23 -0
- node_ui/node_modules/lodash/_lazyReverse.js +23 -0
- node_ui/node_modules/lodash/_lazyValue.js +69 -0
- node_ui/node_modules/lodash/_listCacheClear.js +13 -0
- node_ui/node_modules/lodash/_listCacheDelete.js +35 -0
- node_ui/node_modules/lodash/_listCacheGet.js +19 -0
- node_ui/node_modules/lodash/_listCacheHas.js +16 -0
- node_ui/node_modules/lodash/_listCacheSet.js +26 -0
- node_ui/node_modules/lodash/_mapCacheClear.js +21 -0
- node_ui/node_modules/lodash/_mapCacheDelete.js +18 -0
- node_ui/node_modules/lodash/_mapCacheGet.js +16 -0
- node_ui/node_modules/lodash/_mapCacheHas.js +16 -0
- node_ui/node_modules/lodash/_mapCacheSet.js +22 -0
- node_ui/node_modules/lodash/_mapToArray.js +18 -0
- node_ui/node_modules/lodash/_matchesStrictComparable.js +20 -0
- node_ui/node_modules/lodash/_memoizeCapped.js +26 -0
- node_ui/node_modules/lodash/_mergeData.js +90 -0
- node_ui/node_modules/lodash/_metaMap.js +6 -0
- node_ui/node_modules/lodash/_nativeCreate.js +6 -0
- node_ui/node_modules/lodash/_nativeKeys.js +6 -0
- node_ui/node_modules/lodash/_nativeKeysIn.js +20 -0
- node_ui/node_modules/lodash/_nodeUtil.js +30 -0
- node_ui/node_modules/lodash/_objectToString.js +22 -0
- node_ui/node_modules/lodash/_overArg.js +15 -0
- node_ui/node_modules/lodash/_overRest.js +36 -0
- node_ui/node_modules/lodash/_parent.js +16 -0
- node_ui/node_modules/lodash/_reEscape.js +4 -0
- node_ui/node_modules/lodash/_reEvaluate.js +4 -0
- node_ui/node_modules/lodash/_reInterpolate.js +4 -0
- node_ui/node_modules/lodash/_realNames.js +4 -0
- node_ui/node_modules/lodash/_reorder.js +29 -0
- node_ui/node_modules/lodash/_replaceHolders.js +29 -0
- node_ui/node_modules/lodash/_root.js +9 -0
- node_ui/node_modules/lodash/_safeGet.js +21 -0
- node_ui/node_modules/lodash/_setCacheAdd.js +19 -0
- node_ui/node_modules/lodash/_setCacheHas.js +14 -0
- node_ui/node_modules/lodash/_setData.js +20 -0
- node_ui/node_modules/lodash/_setToArray.js +18 -0
- node_ui/node_modules/lodash/_setToPairs.js +18 -0
- node_ui/node_modules/lodash/_setToString.js +14 -0
- node_ui/node_modules/lodash/_setWrapToString.js +21 -0
- node_ui/node_modules/lodash/_shortOut.js +37 -0
- node_ui/node_modules/lodash/_shuffleSelf.js +28 -0
- node_ui/node_modules/lodash/_stackClear.js +15 -0
- node_ui/node_modules/lodash/_stackDelete.js +18 -0
- node_ui/node_modules/lodash/_stackGet.js +14 -0
- node_ui/node_modules/lodash/_stackHas.js +14 -0
- node_ui/node_modules/lodash/_stackSet.js +34 -0
- node_ui/node_modules/lodash/_strictIndexOf.js +23 -0
- node_ui/node_modules/lodash/_strictLastIndexOf.js +21 -0
- node_ui/node_modules/lodash/_stringSize.js +18 -0
- node_ui/node_modules/lodash/_stringToArray.js +18 -0
- node_ui/node_modules/lodash/_stringToPath.js +27 -0
- node_ui/node_modules/lodash/_toKey.js +21 -0
- node_ui/node_modules/lodash/_toSource.js +26 -0
- node_ui/node_modules/lodash/_trimmedEndIndex.js +19 -0
- node_ui/node_modules/lodash/_unescapeHtmlChar.js +21 -0
- node_ui/node_modules/lodash/_unicodeSize.js +44 -0
- node_ui/node_modules/lodash/_unicodeToArray.js +40 -0
- node_ui/node_modules/lodash/_unicodeWords.js +69 -0
- node_ui/node_modules/lodash/_updateWrapDetails.js +46 -0
- node_ui/node_modules/lodash/_wrapperClone.js +23 -0
- node_ui/node_modules/lodash/add.js +22 -0
- node_ui/node_modules/lodash/after.js +42 -0
- node_ui/node_modules/lodash/array.js +67 -0
- node_ui/node_modules/lodash/ary.js +29 -0
- node_ui/node_modules/lodash/assign.js +58 -0
- node_ui/node_modules/lodash/assignIn.js +40 -0
- node_ui/node_modules/lodash/assignInWith.js +38 -0
- node_ui/node_modules/lodash/assignWith.js +37 -0
- node_ui/node_modules/lodash/at.js +23 -0
- node_ui/node_modules/lodash/attempt.js +35 -0
- node_ui/node_modules/lodash/before.js +40 -0
- node_ui/node_modules/lodash/bind.js +57 -0
- node_ui/node_modules/lodash/bindAll.js +41 -0
- node_ui/node_modules/lodash/bindKey.js +68 -0
- node_ui/node_modules/lodash/camelCase.js +29 -0
- node_ui/node_modules/lodash/capitalize.js +23 -0
- node_ui/node_modules/lodash/castArray.js +44 -0
- node_ui/node_modules/lodash/ceil.js +26 -0
- node_ui/node_modules/lodash/chain.js +38 -0
- node_ui/node_modules/lodash/chunk.js +50 -0
- node_ui/node_modules/lodash/clamp.js +39 -0
- node_ui/node_modules/lodash/clone.js +36 -0
- node_ui/node_modules/lodash/cloneDeep.js +29 -0
- node_ui/node_modules/lodash/cloneDeepWith.js +40 -0
- node_ui/node_modules/lodash/cloneWith.js +42 -0
- node_ui/node_modules/lodash/collection.js +30 -0
- node_ui/node_modules/lodash/commit.js +33 -0
- node_ui/node_modules/lodash/compact.js +31 -0
- node_ui/node_modules/lodash/concat.js +43 -0
- node_ui/node_modules/lodash/cond.js +60 -0
- node_ui/node_modules/lodash/conforms.js +35 -0
- node_ui/node_modules/lodash/conformsTo.js +32 -0
- node_ui/node_modules/lodash/constant.js +26 -0
- node_ui/node_modules/lodash/core.js +3877 -0
- node_ui/node_modules/lodash/core.min.js +29 -0
- node_ui/node_modules/lodash/countBy.js +40 -0
- node_ui/node_modules/lodash/create.js +43 -0
- node_ui/node_modules/lodash/curry.js +57 -0
- node_ui/node_modules/lodash/curryRight.js +54 -0
- node_ui/node_modules/lodash/date.js +3 -0
- node_ui/node_modules/lodash/debounce.js +191 -0
- node_ui/node_modules/lodash/deburr.js +45 -0
- node_ui/node_modules/lodash/defaultTo.js +25 -0
- node_ui/node_modules/lodash/defaults.js +64 -0
- node_ui/node_modules/lodash/defaultsDeep.js +30 -0
- node_ui/node_modules/lodash/defer.js +26 -0
- node_ui/node_modules/lodash/delay.js +28 -0
- node_ui/node_modules/lodash/difference.js +33 -0
- node_ui/node_modules/lodash/differenceBy.js +44 -0
- node_ui/node_modules/lodash/differenceWith.js +40 -0
- node_ui/node_modules/lodash/divide.js +22 -0
- node_ui/node_modules/lodash/drop.js +38 -0
- node_ui/node_modules/lodash/dropRight.js +39 -0
- node_ui/node_modules/lodash/dropRightWhile.js +45 -0
- node_ui/node_modules/lodash/dropWhile.js +45 -0
- node_ui/node_modules/lodash/each.js +1 -0
- node_ui/node_modules/lodash/eachRight.js +1 -0
- node_ui/node_modules/lodash/endsWith.js +43 -0
- node_ui/node_modules/lodash/entries.js +1 -0
- node_ui/node_modules/lodash/entriesIn.js +1 -0
- node_ui/node_modules/lodash/eq.js +37 -0
- node_ui/node_modules/lodash/escape.js +43 -0
- node_ui/node_modules/lodash/escapeRegExp.js +32 -0
- node_ui/node_modules/lodash/every.js +56 -0
- node_ui/node_modules/lodash/extend.js +1 -0
- node_ui/node_modules/lodash/extendWith.js +1 -0
- node_ui/node_modules/lodash/fill.js +45 -0
- node_ui/node_modules/lodash/filter.js +52 -0
- node_ui/node_modules/lodash/find.js +42 -0
- node_ui/node_modules/lodash/findIndex.js +55 -0
- node_ui/node_modules/lodash/findKey.js +44 -0
- node_ui/node_modules/lodash/findLast.js +25 -0
- node_ui/node_modules/lodash/findLastIndex.js +59 -0
- node_ui/node_modules/lodash/findLastKey.js +44 -0
- node_ui/node_modules/lodash/first.js +1 -0
- node_ui/node_modules/lodash/flake.lock +40 -0
- node_ui/node_modules/lodash/flake.nix +20 -0
- node_ui/node_modules/lodash/flatMap.js +29 -0
- node_ui/node_modules/lodash/flatMapDeep.js +31 -0
- node_ui/node_modules/lodash/flatMapDepth.js +31 -0
- node_ui/node_modules/lodash/flatten.js +22 -0
- node_ui/node_modules/lodash/flattenDeep.js +25 -0
- node_ui/node_modules/lodash/flattenDepth.js +33 -0
- node_ui/node_modules/lodash/flip.js +28 -0
- node_ui/node_modules/lodash/floor.js +26 -0
- node_ui/node_modules/lodash/flow.js +27 -0
- node_ui/node_modules/lodash/flowRight.js +26 -0
- node_ui/node_modules/lodash/forEach.js +41 -0
- node_ui/node_modules/lodash/forEachRight.js +31 -0
- node_ui/node_modules/lodash/forIn.js +39 -0
- node_ui/node_modules/lodash/forInRight.js +37 -0
- node_ui/node_modules/lodash/forOwn.js +36 -0
- node_ui/node_modules/lodash/forOwnRight.js +34 -0
- node_ui/node_modules/lodash/fp/F.js +1 -0
- node_ui/node_modules/lodash/fp/T.js +1 -0
- node_ui/node_modules/lodash/fp/__.js +1 -0
- node_ui/node_modules/lodash/fp/_baseConvert.js +569 -0
- node_ui/node_modules/lodash/fp/_convertBrowser.js +18 -0
- node_ui/node_modules/lodash/fp/_falseOptions.js +7 -0
- node_ui/node_modules/lodash/fp/_mapping.js +358 -0
- node_ui/node_modules/lodash/fp/_util.js +16 -0
- node_ui/node_modules/lodash/fp/add.js +5 -0
- node_ui/node_modules/lodash/fp/after.js +5 -0
- node_ui/node_modules/lodash/fp/all.js +1 -0
- node_ui/node_modules/lodash/fp/allPass.js +1 -0
- node_ui/node_modules/lodash/fp/always.js +1 -0
- node_ui/node_modules/lodash/fp/any.js +1 -0
- node_ui/node_modules/lodash/fp/anyPass.js +1 -0
- node_ui/node_modules/lodash/fp/apply.js +1 -0
- node_ui/node_modules/lodash/fp/array.js +2 -0
- node_ui/node_modules/lodash/fp/ary.js +5 -0
- node_ui/node_modules/lodash/fp/assign.js +5 -0
- node_ui/node_modules/lodash/fp/assignAll.js +5 -0
- node_ui/node_modules/lodash/fp/assignAllWith.js +5 -0
- node_ui/node_modules/lodash/fp/assignIn.js +5 -0
- node_ui/node_modules/lodash/fp/assignInAll.js +5 -0
- node_ui/node_modules/lodash/fp/assignInAllWith.js +5 -0
- node_ui/node_modules/lodash/fp/assignInWith.js +5 -0
- node_ui/node_modules/lodash/fp/assignWith.js +5 -0
- node_ui/node_modules/lodash/fp/assoc.js +1 -0
- node_ui/node_modules/lodash/fp/assocPath.js +1 -0
- node_ui/node_modules/lodash/fp/at.js +5 -0
- node_ui/node_modules/lodash/fp/attempt.js +5 -0
- node_ui/node_modules/lodash/fp/before.js +5 -0
- node_ui/node_modules/lodash/fp/bind.js +5 -0
- node_ui/node_modules/lodash/fp/bindAll.js +5 -0
- node_ui/node_modules/lodash/fp/bindKey.js +5 -0
- node_ui/node_modules/lodash/fp/camelCase.js +5 -0
- node_ui/node_modules/lodash/fp/capitalize.js +5 -0
- node_ui/node_modules/lodash/fp/castArray.js +5 -0
- node_ui/node_modules/lodash/fp/ceil.js +5 -0
- node_ui/node_modules/lodash/fp/chain.js +5 -0
- node_ui/node_modules/lodash/fp/chunk.js +5 -0
- node_ui/node_modules/lodash/fp/clamp.js +5 -0
- node_ui/node_modules/lodash/fp/clone.js +5 -0
- node_ui/node_modules/lodash/fp/cloneDeep.js +5 -0
- node_ui/node_modules/lodash/fp/cloneDeepWith.js +5 -0
- node_ui/node_modules/lodash/fp/cloneWith.js +5 -0
- node_ui/node_modules/lodash/fp/collection.js +2 -0
- node_ui/node_modules/lodash/fp/commit.js +5 -0
- node_ui/node_modules/lodash/fp/compact.js +5 -0
- node_ui/node_modules/lodash/fp/complement.js +1 -0
- node_ui/node_modules/lodash/fp/compose.js +1 -0
- node_ui/node_modules/lodash/fp/concat.js +5 -0
- node_ui/node_modules/lodash/fp/cond.js +5 -0
- node_ui/node_modules/lodash/fp/conforms.js +1 -0
- node_ui/node_modules/lodash/fp/conformsTo.js +5 -0
- node_ui/node_modules/lodash/fp/constant.js +5 -0
- node_ui/node_modules/lodash/fp/contains.js +1 -0
- node_ui/node_modules/lodash/fp/convert.js +18 -0
- node_ui/node_modules/lodash/fp/countBy.js +5 -0
- node_ui/node_modules/lodash/fp/create.js +5 -0
- node_ui/node_modules/lodash/fp/curry.js +5 -0
- node_ui/node_modules/lodash/fp/curryN.js +5 -0
- node_ui/node_modules/lodash/fp/curryRight.js +5 -0
- node_ui/node_modules/lodash/fp/curryRightN.js +5 -0
- node_ui/node_modules/lodash/fp/date.js +2 -0
- node_ui/node_modules/lodash/fp/debounce.js +5 -0
- node_ui/node_modules/lodash/fp/deburr.js +5 -0
- node_ui/node_modules/lodash/fp/defaultTo.js +5 -0
- node_ui/node_modules/lodash/fp/defaults.js +5 -0
- node_ui/node_modules/lodash/fp/defaultsAll.js +5 -0
- node_ui/node_modules/lodash/fp/defaultsDeep.js +5 -0
- node_ui/node_modules/lodash/fp/defaultsDeepAll.js +5 -0
- node_ui/node_modules/lodash/fp/defer.js +5 -0
- node_ui/node_modules/lodash/fp/delay.js +5 -0
- node_ui/node_modules/lodash/fp/difference.js +5 -0
- node_ui/node_modules/lodash/fp/differenceBy.js +5 -0
- node_ui/node_modules/lodash/fp/differenceWith.js +5 -0
- node_ui/node_modules/lodash/fp/dissoc.js +1 -0
- node_ui/node_modules/lodash/fp/dissocPath.js +1 -0
- node_ui/node_modules/lodash/fp/divide.js +5 -0
- node_ui/node_modules/lodash/fp/drop.js +5 -0
- node_ui/node_modules/lodash/fp/dropLast.js +1 -0
- node_ui/node_modules/lodash/fp/dropLastWhile.js +1 -0
- node_ui/node_modules/lodash/fp/dropRight.js +5 -0
- node_ui/node_modules/lodash/fp/dropRightWhile.js +5 -0
- node_ui/node_modules/lodash/fp/dropWhile.js +5 -0
- node_ui/node_modules/lodash/fp/each.js +1 -0
- node_ui/node_modules/lodash/fp/eachRight.js +1 -0
- node_ui/node_modules/lodash/fp/endsWith.js +5 -0
- node_ui/node_modules/lodash/fp/entries.js +1 -0
- node_ui/node_modules/lodash/fp/entriesIn.js +1 -0
- node_ui/node_modules/lodash/fp/eq.js +5 -0
- node_ui/node_modules/lodash/fp/equals.js +1 -0
- node_ui/node_modules/lodash/fp/escape.js +5 -0
- node_ui/node_modules/lodash/fp/escapeRegExp.js +5 -0
- node_ui/node_modules/lodash/fp/every.js +5 -0
- node_ui/node_modules/lodash/fp/extend.js +1 -0
- node_ui/node_modules/lodash/fp/extendAll.js +1 -0
- node_ui/node_modules/lodash/fp/extendAllWith.js +1 -0
- node_ui/node_modules/lodash/fp/extendWith.js +1 -0
- node_ui/node_modules/lodash/fp/fill.js +5 -0
- node_ui/node_modules/lodash/fp/filter.js +5 -0
- node_ui/node_modules/lodash/fp/find.js +5 -0
- node_ui/node_modules/lodash/fp/findFrom.js +5 -0
- node_ui/node_modules/lodash/fp/findIndex.js +5 -0
- node_ui/node_modules/lodash/fp/findIndexFrom.js +5 -0
- node_ui/node_modules/lodash/fp/findKey.js +5 -0
- node_ui/node_modules/lodash/fp/findLast.js +5 -0
- node_ui/node_modules/lodash/fp/findLastFrom.js +5 -0
- node_ui/node_modules/lodash/fp/findLastIndex.js +5 -0
- node_ui/node_modules/lodash/fp/findLastIndexFrom.js +5 -0
- node_ui/node_modules/lodash/fp/findLastKey.js +5 -0
- node_ui/node_modules/lodash/fp/first.js +1 -0
- node_ui/node_modules/lodash/fp/flatMap.js +5 -0
- node_ui/node_modules/lodash/fp/flatMapDeep.js +5 -0
- node_ui/node_modules/lodash/fp/flatMapDepth.js +5 -0
- node_ui/node_modules/lodash/fp/flatten.js +5 -0
- node_ui/node_modules/lodash/fp/flattenDeep.js +5 -0
- node_ui/node_modules/lodash/fp/flattenDepth.js +5 -0
- node_ui/node_modules/lodash/fp/flip.js +5 -0
- node_ui/node_modules/lodash/fp/floor.js +5 -0
- node_ui/node_modules/lodash/fp/flow.js +5 -0
- node_ui/node_modules/lodash/fp/flowRight.js +5 -0
- node_ui/node_modules/lodash/fp/forEach.js +5 -0
- node_ui/node_modules/lodash/fp/forEachRight.js +5 -0
- node_ui/node_modules/lodash/fp/forIn.js +5 -0
- node_ui/node_modules/lodash/fp/forInRight.js +5 -0
- node_ui/node_modules/lodash/fp/forOwn.js +5 -0
- node_ui/node_modules/lodash/fp/forOwnRight.js +5 -0
- node_ui/node_modules/lodash/fp/fromPairs.js +5 -0
- node_ui/node_modules/lodash/fp/function.js +2 -0
- node_ui/node_modules/lodash/fp/functions.js +5 -0
- node_ui/node_modules/lodash/fp/functionsIn.js +5 -0
- node_ui/node_modules/lodash/fp/get.js +5 -0
- node_ui/node_modules/lodash/fp/getOr.js +5 -0
- node_ui/node_modules/lodash/fp/groupBy.js +5 -0
- node_ui/node_modules/lodash/fp/gt.js +5 -0
- node_ui/node_modules/lodash/fp/gte.js +5 -0
- node_ui/node_modules/lodash/fp/has.js +5 -0
- node_ui/node_modules/lodash/fp/hasIn.js +5 -0
- node_ui/node_modules/lodash/fp/head.js +5 -0
- node_ui/node_modules/lodash/fp/identical.js +1 -0
- node_ui/node_modules/lodash/fp/identity.js +5 -0
- node_ui/node_modules/lodash/fp/inRange.js +5 -0
- node_ui/node_modules/lodash/fp/includes.js +5 -0
- node_ui/node_modules/lodash/fp/includesFrom.js +5 -0
- node_ui/node_modules/lodash/fp/indexBy.js +1 -0
- node_ui/node_modules/lodash/fp/indexOf.js +5 -0
- node_ui/node_modules/lodash/fp/indexOfFrom.js +5 -0
- node_ui/node_modules/lodash/fp/init.js +1 -0
- node_ui/node_modules/lodash/fp/initial.js +5 -0
- node_ui/node_modules/lodash/fp/intersection.js +5 -0
- node_ui/node_modules/lodash/fp/intersectionBy.js +5 -0
- node_ui/node_modules/lodash/fp/intersectionWith.js +5 -0
- node_ui/node_modules/lodash/fp/invert.js +5 -0
- node_ui/node_modules/lodash/fp/invertBy.js +5 -0
- node_ui/node_modules/lodash/fp/invertObj.js +1 -0
- node_ui/node_modules/lodash/fp/invoke.js +5 -0
- node_ui/node_modules/lodash/fp/invokeArgs.js +5 -0
- node_ui/node_modules/lodash/fp/invokeArgsMap.js +5 -0
- node_ui/node_modules/lodash/fp/invokeMap.js +5 -0
- node_ui/node_modules/lodash/fp/isArguments.js +5 -0
- node_ui/node_modules/lodash/fp/isArray.js +5 -0
- node_ui/node_modules/lodash/fp/isArrayBuffer.js +5 -0
- node_ui/node_modules/lodash/fp/isArrayLike.js +5 -0
- node_ui/node_modules/lodash/fp/isArrayLikeObject.js +5 -0
- node_ui/node_modules/lodash/fp/isBoolean.js +5 -0
- node_ui/node_modules/lodash/fp/isBuffer.js +5 -0
- node_ui/node_modules/lodash/fp/isDate.js +5 -0
- node_ui/node_modules/lodash/fp/isElement.js +5 -0
- node_ui/node_modules/lodash/fp/isEmpty.js +5 -0
- node_ui/node_modules/lodash/fp/isEqual.js +5 -0
- node_ui/node_modules/lodash/fp/isEqualWith.js +5 -0
- node_ui/node_modules/lodash/fp/isError.js +5 -0
- node_ui/node_modules/lodash/fp/isFinite.js +5 -0
- node_ui/node_modules/lodash/fp/isFunction.js +5 -0
- node_ui/node_modules/lodash/fp/isInteger.js +5 -0
- node_ui/node_modules/lodash/fp/isLength.js +5 -0
- node_ui/node_modules/lodash/fp/isMap.js +5 -0
- node_ui/node_modules/lodash/fp/isMatch.js +5 -0
- node_ui/node_modules/lodash/fp/isMatchWith.js +5 -0
- node_ui/node_modules/lodash/fp/isNaN.js +5 -0
- node_ui/node_modules/lodash/fp/isNative.js +5 -0
- node_ui/node_modules/lodash/fp/isNil.js +5 -0
- node_ui/node_modules/lodash/fp/isNull.js +5 -0
- node_ui/node_modules/lodash/fp/isNumber.js +5 -0
- node_ui/node_modules/lodash/fp/isObject.js +5 -0
- node_ui/node_modules/lodash/fp/isObjectLike.js +5 -0
- node_ui/node_modules/lodash/fp/isPlainObject.js +5 -0
- node_ui/node_modules/lodash/fp/isRegExp.js +5 -0
- node_ui/node_modules/lodash/fp/isSafeInteger.js +5 -0
- node_ui/node_modules/lodash/fp/isSet.js +5 -0
- node_ui/node_modules/lodash/fp/isString.js +5 -0
- node_ui/node_modules/lodash/fp/isSymbol.js +5 -0
- node_ui/node_modules/lodash/fp/isTypedArray.js +5 -0
- node_ui/node_modules/lodash/fp/isUndefined.js +5 -0
- node_ui/node_modules/lodash/fp/isWeakMap.js +5 -0
- node_ui/node_modules/lodash/fp/isWeakSet.js +5 -0
- node_ui/node_modules/lodash/fp/iteratee.js +5 -0
- node_ui/node_modules/lodash/fp/join.js +5 -0
- node_ui/node_modules/lodash/fp/juxt.js +1 -0
- node_ui/node_modules/lodash/fp/kebabCase.js +5 -0
- node_ui/node_modules/lodash/fp/keyBy.js +5 -0
- node_ui/node_modules/lodash/fp/keys.js +5 -0
- node_ui/node_modules/lodash/fp/keysIn.js +5 -0
- node_ui/node_modules/lodash/fp/lang.js +2 -0
- node_ui/node_modules/lodash/fp/last.js +5 -0
- node_ui/node_modules/lodash/fp/lastIndexOf.js +5 -0
- node_ui/node_modules/lodash/fp/lastIndexOfFrom.js +5 -0
- node_ui/node_modules/lodash/fp/lowerCase.js +5 -0
- node_ui/node_modules/lodash/fp/lowerFirst.js +5 -0
- node_ui/node_modules/lodash/fp/lt.js +5 -0
- node_ui/node_modules/lodash/fp/lte.js +5 -0
- node_ui/node_modules/lodash/fp/map.js +5 -0
- node_ui/node_modules/lodash/fp/mapKeys.js +5 -0
- node_ui/node_modules/lodash/fp/mapValues.js +5 -0
- node_ui/node_modules/lodash/fp/matches.js +1 -0
- node_ui/node_modules/lodash/fp/matchesProperty.js +5 -0
- node_ui/node_modules/lodash/fp/math.js +2 -0
- node_ui/node_modules/lodash/fp/max.js +5 -0
- node_ui/node_modules/lodash/fp/maxBy.js +5 -0
- node_ui/node_modules/lodash/fp/mean.js +5 -0
- node_ui/node_modules/lodash/fp/meanBy.js +5 -0
- node_ui/node_modules/lodash/fp/memoize.js +5 -0
- node_ui/node_modules/lodash/fp/merge.js +5 -0
- node_ui/node_modules/lodash/fp/mergeAll.js +5 -0
- node_ui/node_modules/lodash/fp/mergeAllWith.js +5 -0
- node_ui/node_modules/lodash/fp/mergeWith.js +5 -0
- node_ui/node_modules/lodash/fp/method.js +5 -0
- node_ui/node_modules/lodash/fp/methodOf.js +5 -0
- node_ui/node_modules/lodash/fp/min.js +5 -0
- node_ui/node_modules/lodash/fp/minBy.js +5 -0
- node_ui/node_modules/lodash/fp/mixin.js +5 -0
- node_ui/node_modules/lodash/fp/multiply.js +5 -0
- node_ui/node_modules/lodash/fp/nAry.js +1 -0
- node_ui/node_modules/lodash/fp/negate.js +5 -0
- node_ui/node_modules/lodash/fp/next.js +5 -0
- node_ui/node_modules/lodash/fp/noop.js +5 -0
- node_ui/node_modules/lodash/fp/now.js +5 -0
- node_ui/node_modules/lodash/fp/nth.js +5 -0
- node_ui/node_modules/lodash/fp/nthArg.js +5 -0
- node_ui/node_modules/lodash/fp/number.js +2 -0
- node_ui/node_modules/lodash/fp/object.js +2 -0
- node_ui/node_modules/lodash/fp/omit.js +5 -0
- node_ui/node_modules/lodash/fp/omitAll.js +1 -0
- node_ui/node_modules/lodash/fp/omitBy.js +5 -0
- node_ui/node_modules/lodash/fp/once.js +5 -0
- node_ui/node_modules/lodash/fp/orderBy.js +5 -0
- node_ui/node_modules/lodash/fp/over.js +5 -0
- node_ui/node_modules/lodash/fp/overArgs.js +5 -0
- node_ui/node_modules/lodash/fp/overEvery.js +5 -0
- node_ui/node_modules/lodash/fp/overSome.js +5 -0
- node_ui/node_modules/lodash/fp/pad.js +5 -0
- node_ui/node_modules/lodash/fp/padChars.js +5 -0
- node_ui/node_modules/lodash/fp/padCharsEnd.js +5 -0
- node_ui/node_modules/lodash/fp/padCharsStart.js +5 -0
- node_ui/node_modules/lodash/fp/padEnd.js +5 -0
- node_ui/node_modules/lodash/fp/padStart.js +5 -0
- node_ui/node_modules/lodash/fp/parseInt.js +5 -0
- node_ui/node_modules/lodash/fp/partial.js +5 -0
- node_ui/node_modules/lodash/fp/partialRight.js +5 -0
- node_ui/node_modules/lodash/fp/partition.js +5 -0
- node_ui/node_modules/lodash/fp/path.js +1 -0
- node_ui/node_modules/lodash/fp/pathEq.js +1 -0
- node_ui/node_modules/lodash/fp/pathOr.js +1 -0
- node_ui/node_modules/lodash/fp/paths.js +1 -0
- node_ui/node_modules/lodash/fp/pick.js +5 -0
- node_ui/node_modules/lodash/fp/pickAll.js +1 -0
- node_ui/node_modules/lodash/fp/pickBy.js +5 -0
- node_ui/node_modules/lodash/fp/pipe.js +1 -0
- node_ui/node_modules/lodash/fp/placeholder.js +6 -0
- node_ui/node_modules/lodash/fp/plant.js +5 -0
- node_ui/node_modules/lodash/fp/pluck.js +1 -0
- node_ui/node_modules/lodash/fp/prop.js +1 -0
- node_ui/node_modules/lodash/fp/propEq.js +1 -0
- node_ui/node_modules/lodash/fp/propOr.js +1 -0
- node_ui/node_modules/lodash/fp/property.js +1 -0
- node_ui/node_modules/lodash/fp/propertyOf.js +5 -0
- node_ui/node_modules/lodash/fp/props.js +1 -0
- node_ui/node_modules/lodash/fp/pull.js +5 -0
- node_ui/node_modules/lodash/fp/pullAll.js +5 -0
- node_ui/node_modules/lodash/fp/pullAllBy.js +5 -0
- node_ui/node_modules/lodash/fp/pullAllWith.js +5 -0
- node_ui/node_modules/lodash/fp/pullAt.js +5 -0
- node_ui/node_modules/lodash/fp/random.js +5 -0
- node_ui/node_modules/lodash/fp/range.js +5 -0
- node_ui/node_modules/lodash/fp/rangeRight.js +5 -0
- node_ui/node_modules/lodash/fp/rangeStep.js +5 -0
- node_ui/node_modules/lodash/fp/rangeStepRight.js +5 -0
- node_ui/node_modules/lodash/fp/rearg.js +5 -0
- node_ui/node_modules/lodash/fp/reduce.js +5 -0
- node_ui/node_modules/lodash/fp/reduceRight.js +5 -0
- node_ui/node_modules/lodash/fp/reject.js +5 -0
- node_ui/node_modules/lodash/fp/remove.js +5 -0
- node_ui/node_modules/lodash/fp/repeat.js +5 -0
- node_ui/node_modules/lodash/fp/replace.js +5 -0
- node_ui/node_modules/lodash/fp/rest.js +5 -0
- node_ui/node_modules/lodash/fp/restFrom.js +5 -0
- node_ui/node_modules/lodash/fp/result.js +5 -0
- node_ui/node_modules/lodash/fp/reverse.js +5 -0
- node_ui/node_modules/lodash/fp/round.js +5 -0
- node_ui/node_modules/lodash/fp/sample.js +5 -0
- node_ui/node_modules/lodash/fp/sampleSize.js +5 -0
- node_ui/node_modules/lodash/fp/seq.js +2 -0
- node_ui/node_modules/lodash/fp/set.js +5 -0
- node_ui/node_modules/lodash/fp/setWith.js +5 -0
- node_ui/node_modules/lodash/fp/shuffle.js +5 -0
- node_ui/node_modules/lodash/fp/size.js +5 -0
- node_ui/node_modules/lodash/fp/slice.js +5 -0
- node_ui/node_modules/lodash/fp/snakeCase.js +5 -0
- node_ui/node_modules/lodash/fp/some.js +5 -0
- node_ui/node_modules/lodash/fp/sortBy.js +5 -0
- node_ui/node_modules/lodash/fp/sortedIndex.js +5 -0
- node_ui/node_modules/lodash/fp/sortedIndexBy.js +5 -0
- node_ui/node_modules/lodash/fp/sortedIndexOf.js +5 -0
- node_ui/node_modules/lodash/fp/sortedLastIndex.js +5 -0
- node_ui/node_modules/lodash/fp/sortedLastIndexBy.js +5 -0
- node_ui/node_modules/lodash/fp/sortedLastIndexOf.js +5 -0
- node_ui/node_modules/lodash/fp/sortedUniq.js +5 -0
- node_ui/node_modules/lodash/fp/sortedUniqBy.js +5 -0
- node_ui/node_modules/lodash/fp/split.js +5 -0
- node_ui/node_modules/lodash/fp/spread.js +5 -0
- node_ui/node_modules/lodash/fp/spreadFrom.js +5 -0
- node_ui/node_modules/lodash/fp/startCase.js +5 -0
- node_ui/node_modules/lodash/fp/startsWith.js +5 -0
- node_ui/node_modules/lodash/fp/string.js +2 -0
- node_ui/node_modules/lodash/fp/stubArray.js +5 -0
- node_ui/node_modules/lodash/fp/stubFalse.js +5 -0
- node_ui/node_modules/lodash/fp/stubObject.js +5 -0
- node_ui/node_modules/lodash/fp/stubString.js +5 -0
- node_ui/node_modules/lodash/fp/stubTrue.js +5 -0
- node_ui/node_modules/lodash/fp/subtract.js +5 -0
- node_ui/node_modules/lodash/fp/sum.js +5 -0
- node_ui/node_modules/lodash/fp/sumBy.js +5 -0
- node_ui/node_modules/lodash/fp/symmetricDifference.js +1 -0
- node_ui/node_modules/lodash/fp/symmetricDifferenceBy.js +1 -0
- node_ui/node_modules/lodash/fp/symmetricDifferenceWith.js +1 -0
- node_ui/node_modules/lodash/fp/tail.js +5 -0
- node_ui/node_modules/lodash/fp/take.js +5 -0
- node_ui/node_modules/lodash/fp/takeLast.js +1 -0
- node_ui/node_modules/lodash/fp/takeLastWhile.js +1 -0
- node_ui/node_modules/lodash/fp/takeRight.js +5 -0
- node_ui/node_modules/lodash/fp/takeRightWhile.js +5 -0
- node_ui/node_modules/lodash/fp/takeWhile.js +5 -0
- node_ui/node_modules/lodash/fp/tap.js +5 -0
- node_ui/node_modules/lodash/fp/template.js +5 -0
- node_ui/node_modules/lodash/fp/templateSettings.js +5 -0
- node_ui/node_modules/lodash/fp/throttle.js +5 -0
- node_ui/node_modules/lodash/fp/thru.js +5 -0
- node_ui/node_modules/lodash/fp/times.js +5 -0
- node_ui/node_modules/lodash/fp/toArray.js +5 -0
- node_ui/node_modules/lodash/fp/toFinite.js +5 -0
- node_ui/node_modules/lodash/fp/toInteger.js +5 -0
- node_ui/node_modules/lodash/fp/toIterator.js +5 -0
- node_ui/node_modules/lodash/fp/toJSON.js +5 -0
- node_ui/node_modules/lodash/fp/toLength.js +5 -0
- node_ui/node_modules/lodash/fp/toLower.js +5 -0
- node_ui/node_modules/lodash/fp/toNumber.js +5 -0
- node_ui/node_modules/lodash/fp/toPairs.js +5 -0
- node_ui/node_modules/lodash/fp/toPairsIn.js +5 -0
- node_ui/node_modules/lodash/fp/toPath.js +5 -0
- node_ui/node_modules/lodash/fp/toPlainObject.js +5 -0
- node_ui/node_modules/lodash/fp/toSafeInteger.js +5 -0
- node_ui/node_modules/lodash/fp/toString.js +5 -0
- node_ui/node_modules/lodash/fp/toUpper.js +5 -0
- node_ui/node_modules/lodash/fp/transform.js +5 -0
- node_ui/node_modules/lodash/fp/trim.js +5 -0
- node_ui/node_modules/lodash/fp/trimChars.js +5 -0
- node_ui/node_modules/lodash/fp/trimCharsEnd.js +5 -0
- node_ui/node_modules/lodash/fp/trimCharsStart.js +5 -0
- node_ui/node_modules/lodash/fp/trimEnd.js +5 -0
- node_ui/node_modules/lodash/fp/trimStart.js +5 -0
- node_ui/node_modules/lodash/fp/truncate.js +5 -0
- node_ui/node_modules/lodash/fp/unapply.js +1 -0
- node_ui/node_modules/lodash/fp/unary.js +5 -0
- node_ui/node_modules/lodash/fp/unescape.js +5 -0
- node_ui/node_modules/lodash/fp/union.js +5 -0
- node_ui/node_modules/lodash/fp/unionBy.js +5 -0
- node_ui/node_modules/lodash/fp/unionWith.js +5 -0
- node_ui/node_modules/lodash/fp/uniq.js +5 -0
- node_ui/node_modules/lodash/fp/uniqBy.js +5 -0
- node_ui/node_modules/lodash/fp/uniqWith.js +5 -0
- node_ui/node_modules/lodash/fp/uniqueId.js +5 -0
- node_ui/node_modules/lodash/fp/unnest.js +1 -0
- node_ui/node_modules/lodash/fp/unset.js +5 -0
- node_ui/node_modules/lodash/fp/unzip.js +5 -0
- node_ui/node_modules/lodash/fp/unzipWith.js +5 -0
- node_ui/node_modules/lodash/fp/update.js +5 -0
- node_ui/node_modules/lodash/fp/updateWith.js +5 -0
- node_ui/node_modules/lodash/fp/upperCase.js +5 -0
- node_ui/node_modules/lodash/fp/upperFirst.js +5 -0
- node_ui/node_modules/lodash/fp/useWith.js +1 -0
- node_ui/node_modules/lodash/fp/util.js +2 -0
- node_ui/node_modules/lodash/fp/value.js +5 -0
- node_ui/node_modules/lodash/fp/valueOf.js +5 -0
- node_ui/node_modules/lodash/fp/values.js +5 -0
- node_ui/node_modules/lodash/fp/valuesIn.js +5 -0
- node_ui/node_modules/lodash/fp/where.js +1 -0
- node_ui/node_modules/lodash/fp/whereEq.js +1 -0
- node_ui/node_modules/lodash/fp/without.js +5 -0
- node_ui/node_modules/lodash/fp/words.js +5 -0
- node_ui/node_modules/lodash/fp/wrap.js +5 -0
- node_ui/node_modules/lodash/fp/wrapperAt.js +5 -0
- node_ui/node_modules/lodash/fp/wrapperChain.js +5 -0
- node_ui/node_modules/lodash/fp/wrapperLodash.js +5 -0
- node_ui/node_modules/lodash/fp/wrapperReverse.js +5 -0
- node_ui/node_modules/lodash/fp/wrapperValue.js +5 -0
- node_ui/node_modules/lodash/fp/xor.js +5 -0
- node_ui/node_modules/lodash/fp/xorBy.js +5 -0
- node_ui/node_modules/lodash/fp/xorWith.js +5 -0
- node_ui/node_modules/lodash/fp/zip.js +5 -0
- node_ui/node_modules/lodash/fp/zipAll.js +5 -0
- node_ui/node_modules/lodash/fp/zipObj.js +1 -0
- node_ui/node_modules/lodash/fp/zipObject.js +5 -0
- node_ui/node_modules/lodash/fp/zipObjectDeep.js +5 -0
- node_ui/node_modules/lodash/fp/zipWith.js +5 -0
- node_ui/node_modules/lodash/fp.js +2 -0
- node_ui/node_modules/lodash/fromPairs.js +28 -0
- node_ui/node_modules/lodash/function.js +25 -0
- node_ui/node_modules/lodash/functions.js +31 -0
- node_ui/node_modules/lodash/functionsIn.js +31 -0
- node_ui/node_modules/lodash/get.js +33 -0
- node_ui/node_modules/lodash/groupBy.js +41 -0
- node_ui/node_modules/lodash/gt.js +29 -0
- node_ui/node_modules/lodash/gte.js +30 -0
- node_ui/node_modules/lodash/has.js +35 -0
- node_ui/node_modules/lodash/hasIn.js +34 -0
- node_ui/node_modules/lodash/head.js +23 -0
- node_ui/node_modules/lodash/identity.js +21 -0
- node_ui/node_modules/lodash/inRange.js +55 -0
- node_ui/node_modules/lodash/includes.js +53 -0
- node_ui/node_modules/lodash/index.js +1 -0
- node_ui/node_modules/lodash/indexOf.js +42 -0
- node_ui/node_modules/lodash/initial.js +22 -0
- node_ui/node_modules/lodash/intersection.js +30 -0
- node_ui/node_modules/lodash/intersectionBy.js +45 -0
- node_ui/node_modules/lodash/intersectionWith.js +41 -0
- node_ui/node_modules/lodash/invert.js +42 -0
- node_ui/node_modules/lodash/invertBy.js +56 -0
- node_ui/node_modules/lodash/invoke.js +24 -0
- node_ui/node_modules/lodash/invokeMap.js +41 -0
- node_ui/node_modules/lodash/isArguments.js +36 -0
- node_ui/node_modules/lodash/isArray.js +26 -0
- node_ui/node_modules/lodash/isArrayBuffer.js +27 -0
- node_ui/node_modules/lodash/isArrayLike.js +33 -0
- node_ui/node_modules/lodash/isArrayLikeObject.js +33 -0
- node_ui/node_modules/lodash/isBoolean.js +29 -0
- node_ui/node_modules/lodash/isBuffer.js +38 -0
- node_ui/node_modules/lodash/isDate.js +27 -0
- node_ui/node_modules/lodash/isElement.js +25 -0
- node_ui/node_modules/lodash/isEmpty.js +77 -0
- node_ui/node_modules/lodash/isEqual.js +35 -0
- node_ui/node_modules/lodash/isEqualWith.js +41 -0
- node_ui/node_modules/lodash/isError.js +36 -0
- node_ui/node_modules/lodash/isFinite.js +36 -0
- node_ui/node_modules/lodash/isFunction.js +37 -0
- node_ui/node_modules/lodash/isInteger.js +33 -0
- node_ui/node_modules/lodash/isLength.js +35 -0
- node_ui/node_modules/lodash/isMap.js +27 -0
- node_ui/node_modules/lodash/isMatch.js +36 -0
- node_ui/node_modules/lodash/isMatchWith.js +41 -0
- node_ui/node_modules/lodash/isNaN.js +38 -0
- node_ui/node_modules/lodash/isNative.js +40 -0
- node_ui/node_modules/lodash/isNil.js +25 -0
- node_ui/node_modules/lodash/isNull.js +22 -0
- node_ui/node_modules/lodash/isNumber.js +38 -0
- node_ui/node_modules/lodash/isObject.js +31 -0
- node_ui/node_modules/lodash/isObjectLike.js +29 -0
- node_ui/node_modules/lodash/isPlainObject.js +62 -0
- node_ui/node_modules/lodash/isRegExp.js +27 -0
- node_ui/node_modules/lodash/isSafeInteger.js +37 -0
- node_ui/node_modules/lodash/isSet.js +27 -0
- node_ui/node_modules/lodash/isString.js +30 -0
- node_ui/node_modules/lodash/isSymbol.js +29 -0
- node_ui/node_modules/lodash/isTypedArray.js +27 -0
- node_ui/node_modules/lodash/isUndefined.js +22 -0
- node_ui/node_modules/lodash/isWeakMap.js +28 -0
- node_ui/node_modules/lodash/isWeakSet.js +28 -0
- node_ui/node_modules/lodash/iteratee.js +53 -0
- node_ui/node_modules/lodash/join.js +26 -0
- node_ui/node_modules/lodash/kebabCase.js +28 -0
- node_ui/node_modules/lodash/keyBy.js +36 -0
- node_ui/node_modules/lodash/keys.js +37 -0
- node_ui/node_modules/lodash/keysIn.js +32 -0
- node_ui/node_modules/lodash/lang.js +58 -0
- node_ui/node_modules/lodash/last.js +20 -0
- node_ui/node_modules/lodash/lastIndexOf.js +46 -0
- node_ui/node_modules/lodash/lodash.js +17209 -0
- node_ui/node_modules/lodash/lodash.min.js +140 -0
- node_ui/node_modules/lodash/lowerCase.js +27 -0
- node_ui/node_modules/lodash/lowerFirst.js +22 -0
- node_ui/node_modules/lodash/lt.js +29 -0
- node_ui/node_modules/lodash/lte.js +30 -0
- node_ui/node_modules/lodash/map.js +53 -0
- node_ui/node_modules/lodash/mapKeys.js +36 -0
- node_ui/node_modules/lodash/mapValues.js +43 -0
- node_ui/node_modules/lodash/matches.js +46 -0
- node_ui/node_modules/lodash/matchesProperty.js +44 -0
- node_ui/node_modules/lodash/math.js +17 -0
- node_ui/node_modules/lodash/max.js +29 -0
- node_ui/node_modules/lodash/maxBy.js +34 -0
- node_ui/node_modules/lodash/mean.js +22 -0
- node_ui/node_modules/lodash/meanBy.js +31 -0
- node_ui/node_modules/lodash/memoize.js +73 -0
- node_ui/node_modules/lodash/merge.js +39 -0
- node_ui/node_modules/lodash/mergeWith.js +39 -0
- node_ui/node_modules/lodash/method.js +34 -0
- node_ui/node_modules/lodash/methodOf.js +33 -0
- node_ui/node_modules/lodash/min.js +29 -0
- node_ui/node_modules/lodash/minBy.js +34 -0
- node_ui/node_modules/lodash/mixin.js +74 -0
- node_ui/node_modules/lodash/multiply.js +22 -0
- node_ui/node_modules/lodash/negate.js +40 -0
- node_ui/node_modules/lodash/next.js +35 -0
- node_ui/node_modules/lodash/noop.js +17 -0
- node_ui/node_modules/lodash/now.js +23 -0
- node_ui/node_modules/lodash/nth.js +29 -0
- node_ui/node_modules/lodash/nthArg.js +32 -0
- node_ui/node_modules/lodash/number.js +5 -0
- node_ui/node_modules/lodash/object.js +49 -0
- node_ui/node_modules/lodash/omit.js +57 -0
- node_ui/node_modules/lodash/omitBy.js +29 -0
- node_ui/node_modules/lodash/once.js +25 -0
- node_ui/node_modules/lodash/orderBy.js +47 -0
- node_ui/node_modules/lodash/over.js +24 -0
- node_ui/node_modules/lodash/overArgs.js +61 -0
- node_ui/node_modules/lodash/overEvery.js +34 -0
- node_ui/node_modules/lodash/overSome.js +37 -0
- node_ui/node_modules/lodash/package.json +17 -0
- node_ui/node_modules/lodash/pad.js +49 -0
- node_ui/node_modules/lodash/padEnd.js +39 -0
- node_ui/node_modules/lodash/padStart.js +39 -0
- node_ui/node_modules/lodash/parseInt.js +43 -0
- node_ui/node_modules/lodash/partial.js +50 -0
- node_ui/node_modules/lodash/partialRight.js +49 -0
- node_ui/node_modules/lodash/partition.js +43 -0
- node_ui/node_modules/lodash/pick.js +25 -0
- node_ui/node_modules/lodash/pickBy.js +37 -0
- node_ui/node_modules/lodash/plant.js +48 -0
- node_ui/node_modules/lodash/property.js +32 -0
- node_ui/node_modules/lodash/propertyOf.js +30 -0
- node_ui/node_modules/lodash/pull.js +29 -0
- node_ui/node_modules/lodash/pullAll.js +29 -0
- node_ui/node_modules/lodash/pullAllBy.js +33 -0
- node_ui/node_modules/lodash/pullAllWith.js +32 -0
- node_ui/node_modules/lodash/pullAt.js +43 -0
- node_ui/node_modules/lodash/random.js +82 -0
- node_ui/node_modules/lodash/range.js +46 -0
- node_ui/node_modules/lodash/rangeRight.js +41 -0
- node_ui/node_modules/lodash/rearg.js +33 -0
- node_ui/node_modules/lodash/reduce.js +51 -0
- node_ui/node_modules/lodash/reduceRight.js +36 -0
- node_ui/node_modules/lodash/reject.js +46 -0
- node_ui/node_modules/lodash/release.md +48 -0
- node_ui/node_modules/lodash/remove.js +53 -0
- node_ui/node_modules/lodash/repeat.js +37 -0
- node_ui/node_modules/lodash/replace.js +29 -0
- node_ui/node_modules/lodash/rest.js +40 -0
- node_ui/node_modules/lodash/result.js +56 -0
- node_ui/node_modules/lodash/reverse.js +34 -0
- node_ui/node_modules/lodash/round.js +26 -0
- node_ui/node_modules/lodash/sample.js +24 -0
- node_ui/node_modules/lodash/sampleSize.js +37 -0
- node_ui/node_modules/lodash/seq.js +16 -0
- node_ui/node_modules/lodash/set.js +35 -0
- node_ui/node_modules/lodash/setWith.js +32 -0
- node_ui/node_modules/lodash/shuffle.js +25 -0
- node_ui/node_modules/lodash/size.js +46 -0
- node_ui/node_modules/lodash/slice.js +37 -0
- node_ui/node_modules/lodash/snakeCase.js +28 -0
- node_ui/node_modules/lodash/some.js +51 -0
- node_ui/node_modules/lodash/sortBy.js +48 -0
- node_ui/node_modules/lodash/sortedIndex.js +24 -0
- node_ui/node_modules/lodash/sortedIndexBy.js +33 -0
- node_ui/node_modules/lodash/sortedIndexOf.js +31 -0
- node_ui/node_modules/lodash/sortedLastIndex.js +25 -0
- node_ui/node_modules/lodash/sortedLastIndexBy.js +33 -0
- node_ui/node_modules/lodash/sortedLastIndexOf.js +31 -0
- node_ui/node_modules/lodash/sortedUniq.js +24 -0
- node_ui/node_modules/lodash/sortedUniqBy.js +26 -0
- node_ui/node_modules/lodash/split.js +52 -0
- node_ui/node_modules/lodash/spread.js +63 -0
- node_ui/node_modules/lodash/startCase.js +29 -0
- node_ui/node_modules/lodash/startsWith.js +39 -0
- node_ui/node_modules/lodash/string.js +33 -0
- node_ui/node_modules/lodash/stubArray.js +23 -0
- node_ui/node_modules/lodash/stubFalse.js +18 -0
- node_ui/node_modules/lodash/stubObject.js +23 -0
- node_ui/node_modules/lodash/stubString.js +18 -0
- node_ui/node_modules/lodash/stubTrue.js +18 -0
- node_ui/node_modules/lodash/subtract.js +22 -0
- node_ui/node_modules/lodash/sum.js +24 -0
- node_ui/node_modules/lodash/sumBy.js +33 -0
- node_ui/node_modules/lodash/tail.js +22 -0
- node_ui/node_modules/lodash/take.js +37 -0
- node_ui/node_modules/lodash/takeRight.js +39 -0
- node_ui/node_modules/lodash/takeRightWhile.js +45 -0
- node_ui/node_modules/lodash/takeWhile.js +45 -0
- node_ui/node_modules/lodash/tap.js +29 -0
- node_ui/node_modules/lodash/template.js +272 -0
- node_ui/node_modules/lodash/templateSettings.js +67 -0
- node_ui/node_modules/lodash/throttle.js +69 -0
- node_ui/node_modules/lodash/thru.js +28 -0
- node_ui/node_modules/lodash/times.js +51 -0
- node_ui/node_modules/lodash/toArray.js +58 -0
- node_ui/node_modules/lodash/toFinite.js +42 -0
- node_ui/node_modules/lodash/toInteger.js +36 -0
- node_ui/node_modules/lodash/toIterator.js +23 -0
- node_ui/node_modules/lodash/toJSON.js +1 -0
- node_ui/node_modules/lodash/toLength.js +38 -0
- node_ui/node_modules/lodash/toLower.js +28 -0
- node_ui/node_modules/lodash/toNumber.js +64 -0
- node_ui/node_modules/lodash/toPairs.js +30 -0
- node_ui/node_modules/lodash/toPairsIn.js +30 -0
- node_ui/node_modules/lodash/toPath.js +33 -0
- node_ui/node_modules/lodash/toPlainObject.js +32 -0
- node_ui/node_modules/lodash/toSafeInteger.js +37 -0
- node_ui/node_modules/lodash/toString.js +28 -0
- node_ui/node_modules/lodash/toUpper.js +28 -0
- node_ui/node_modules/lodash/transform.js +65 -0
- node_ui/node_modules/lodash/trim.js +47 -0
- node_ui/node_modules/lodash/trimEnd.js +41 -0
- node_ui/node_modules/lodash/trimStart.js +43 -0
- node_ui/node_modules/lodash/truncate.js +111 -0
- node_ui/node_modules/lodash/unary.js +22 -0
- node_ui/node_modules/lodash/unescape.js +34 -0
- node_ui/node_modules/lodash/union.js +26 -0
- node_ui/node_modules/lodash/unionBy.js +39 -0
- node_ui/node_modules/lodash/unionWith.js +34 -0
- node_ui/node_modules/lodash/uniq.js +25 -0
- node_ui/node_modules/lodash/uniqBy.js +31 -0
- node_ui/node_modules/lodash/uniqWith.js +28 -0
- node_ui/node_modules/lodash/uniqueId.js +28 -0
- node_ui/node_modules/lodash/unset.js +34 -0
- node_ui/node_modules/lodash/unzip.js +45 -0
- node_ui/node_modules/lodash/unzipWith.js +39 -0
- node_ui/node_modules/lodash/update.js +35 -0
- node_ui/node_modules/lodash/updateWith.js +33 -0
- node_ui/node_modules/lodash/upperCase.js +27 -0
- node_ui/node_modules/lodash/upperFirst.js +22 -0
- node_ui/node_modules/lodash/util.js +34 -0
- node_ui/node_modules/lodash/value.js +1 -0
- node_ui/node_modules/lodash/valueOf.js +1 -0
- node_ui/node_modules/lodash/values.js +34 -0
- node_ui/node_modules/lodash/valuesIn.js +32 -0
- node_ui/node_modules/lodash/without.js +31 -0
- node_ui/node_modules/lodash/words.js +35 -0
- node_ui/node_modules/lodash/wrap.js +30 -0
- node_ui/node_modules/lodash/wrapperAt.js +48 -0
- node_ui/node_modules/lodash/wrapperChain.js +34 -0
- node_ui/node_modules/lodash/wrapperLodash.js +147 -0
- node_ui/node_modules/lodash/wrapperReverse.js +44 -0
- node_ui/node_modules/lodash/wrapperValue.js +21 -0
- node_ui/node_modules/lodash/xor.js +28 -0
- node_ui/node_modules/lodash/xorBy.js +39 -0
- node_ui/node_modules/lodash/xorWith.js +34 -0
- node_ui/node_modules/lodash/zip.js +22 -0
- node_ui/node_modules/lodash/zipObject.js +24 -0
- node_ui/node_modules/lodash/zipObjectDeep.js +23 -0
- node_ui/node_modules/lodash/zipWith.js +32 -0
- node_ui/node_modules/lodash.isequal/LICENSE +47 -0
- node_ui/node_modules/lodash.isequal/README.md +18 -0
- node_ui/node_modules/lodash.isequal/index.js +1848 -0
- node_ui/node_modules/lodash.isequal/package.json +16 -0
- node_ui/node_modules/loose-envify/LICENSE +21 -0
- node_ui/node_modules/loose-envify/README.md +45 -0
- node_ui/node_modules/loose-envify/cli.js +16 -0
- node_ui/node_modules/loose-envify/custom.js +4 -0
- node_ui/node_modules/loose-envify/index.js +3 -0
- node_ui/node_modules/loose-envify/loose-envify.js +36 -0
- node_ui/node_modules/loose-envify/package.json +36 -0
- node_ui/node_modules/loose-envify/replace.js +65 -0
- node_ui/node_modules/meow/build/dependencies.js +8828 -0
- node_ui/node_modules/meow/build/index.d.ts +1425 -0
- node_ui/node_modules/meow/build/index.js +95 -0
- node_ui/node_modules/meow/build/licenses.md +1620 -0
- node_ui/node_modules/meow/build/options.js +92 -0
- node_ui/node_modules/meow/build/parser.js +84 -0
- node_ui/node_modules/meow/build/utils.js +7 -0
- node_ui/node_modules/meow/build/validate.js +122 -0
- node_ui/node_modules/meow/license +9 -0
- node_ui/node_modules/meow/package.json +105 -0
- node_ui/node_modules/meow/readme.md +314 -0
- node_ui/node_modules/mimic-fn/index.d.ts +54 -0
- node_ui/node_modules/mimic-fn/index.js +13 -0
- node_ui/node_modules/mimic-fn/license +9 -0
- node_ui/node_modules/mimic-fn/package.json +42 -0
- node_ui/node_modules/mimic-fn/readme.md +69 -0
- node_ui/node_modules/onetime/index.d.ts +64 -0
- node_ui/node_modules/onetime/index.js +44 -0
- node_ui/node_modules/onetime/license +9 -0
- node_ui/node_modules/onetime/package.json +43 -0
- node_ui/node_modules/onetime/readme.md +94 -0
- node_ui/node_modules/patch-console/dist/index.d.ts +4 -0
- node_ui/node_modules/patch-console/dist/index.js +45 -0
- node_ui/node_modules/patch-console/dist/index.js.map +1 -0
- node_ui/node_modules/patch-console/license +9 -0
- node_ui/node_modules/patch-console/package.json +53 -0
- node_ui/node_modules/patch-console/readme.md +62 -0
- node_ui/node_modules/react/LICENSE +21 -0
- node_ui/node_modules/react/README.md +37 -0
- node_ui/node_modules/react/cjs/react-jsx-dev-runtime.development.js +1315 -0
- node_ui/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
- node_ui/node_modules/react/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
- node_ui/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
- node_ui/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
- node_ui/node_modules/react/cjs/react-jsx-runtime.profiling.min.js +11 -0
- node_ui/node_modules/react/cjs/react.development.js +2740 -0
- node_ui/node_modules/react/cjs/react.production.min.js +26 -0
- node_ui/node_modules/react/cjs/react.shared-subset.development.js +20 -0
- node_ui/node_modules/react/cjs/react.shared-subset.production.min.js +10 -0
- node_ui/node_modules/react/index.js +7 -0
- node_ui/node_modules/react/jsx-dev-runtime.js +7 -0
- node_ui/node_modules/react/jsx-runtime.js +7 -0
- node_ui/node_modules/react/package.json +47 -0
- node_ui/node_modules/react/react.shared-subset.js +7 -0
- node_ui/node_modules/react/umd/react.development.js +3343 -0
- node_ui/node_modules/react/umd/react.production.min.js +31 -0
- node_ui/node_modules/react/umd/react.profiling.min.js +31 -0
- node_ui/node_modules/react-devtools-core/README.md +131 -0
- node_ui/node_modules/react-devtools-core/backend.js +1 -0
- node_ui/node_modules/react-devtools-core/dist/backend.js +16888 -0
- node_ui/node_modules/react-devtools-core/dist/backend.js.map +1 -0
- node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
- node_ui/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
- node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js +2 -0
- node_ui/node_modules/react-devtools-core/dist/parseHookNames.chunk.js.map +1 -0
- node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +2 -0
- node_ui/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
- node_ui/node_modules/react-devtools-core/dist/standalone.js +3 -0
- node_ui/node_modules/react-devtools-core/dist/standalone.js.LICENSE.txt +41 -0
- node_ui/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
- node_ui/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
- node_ui/node_modules/react-devtools-core/package.json +38 -0
- node_ui/node_modules/react-devtools-core/standalone.js +1 -0
- node_ui/node_modules/react-reconciler/LICENSE +21 -0
- node_ui/node_modules/react-reconciler/README.md +337 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.development.js +45 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js +10 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.development.js +660 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler-reflection.production.min.js +15 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler.development.js +21531 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler.production.min.js +234 -0
- node_ui/node_modules/react-reconciler/cjs/react-reconciler.profiling.min.js +255 -0
- node_ui/node_modules/react-reconciler/constants.js +7 -0
- node_ui/node_modules/react-reconciler/index.js +7 -0
- node_ui/node_modules/react-reconciler/package.json +40 -0
- node_ui/node_modules/react-reconciler/reflection.js +7 -0
- node_ui/node_modules/restore-cursor/index.d.ts +11 -0
- node_ui/node_modules/restore-cursor/index.js +11 -0
- node_ui/node_modules/restore-cursor/license +9 -0
- node_ui/node_modules/restore-cursor/package.json +55 -0
- node_ui/node_modules/restore-cursor/readme.md +31 -0
- node_ui/node_modules/scheduler/LICENSE +21 -0
- node_ui/node_modules/scheduler/README.md +9 -0
- node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +700 -0
- node_ui/node_modules/scheduler/cjs/scheduler-unstable_mock.production.min.js +20 -0
- node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +207 -0
- node_ui/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.min.js +14 -0
- node_ui/node_modules/scheduler/cjs/scheduler.development.js +634 -0
- node_ui/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
- node_ui/node_modules/scheduler/index.js +7 -0
- node_ui/node_modules/scheduler/package.json +36 -0
- node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.development.js +699 -0
- node_ui/node_modules/scheduler/umd/scheduler-unstable_mock.production.min.js +19 -0
- node_ui/node_modules/scheduler/umd/scheduler.development.js +152 -0
- node_ui/node_modules/scheduler/umd/scheduler.production.min.js +146 -0
- node_ui/node_modules/scheduler/umd/scheduler.profiling.min.js +146 -0
- node_ui/node_modules/scheduler/unstable_mock.js +7 -0
- node_ui/node_modules/scheduler/unstable_post_task.js +7 -0
- node_ui/node_modules/shell-quote/.eslintrc +30 -0
- node_ui/node_modules/shell-quote/.github/FUNDING.yml +12 -0
- node_ui/node_modules/shell-quote/.nycrc +14 -0
- node_ui/node_modules/shell-quote/LICENSE +24 -0
- node_ui/node_modules/shell-quote/README.md +161 -0
- node_ui/node_modules/shell-quote/index.js +4 -0
- node_ui/node_modules/shell-quote/package.json +72 -0
- node_ui/node_modules/shell-quote/parse.js +226 -0
- node_ui/node_modules/shell-quote/print.py +3 -0
- node_ui/node_modules/shell-quote/quote.js +19 -0
- node_ui/node_modules/shell-quote/security.md +11 -0
- node_ui/node_modules/shell-quote/test/comment.js +16 -0
- node_ui/node_modules/shell-quote/test/env.js +52 -0
- node_ui/node_modules/shell-quote/test/env_fn.js +21 -0
- node_ui/node_modules/shell-quote/test/op.js +102 -0
- node_ui/node_modules/shell-quote/test/parse.js +44 -0
- node_ui/node_modules/shell-quote/test/quote.js +60 -0
- node_ui/node_modules/shell-quote/test/set.js +31 -0
- node_ui/node_modules/signal-exit/LICENSE.txt +16 -0
- node_ui/node_modules/signal-exit/README.md +39 -0
- node_ui/node_modules/signal-exit/index.js +202 -0
- node_ui/node_modules/signal-exit/package.json +38 -0
- node_ui/node_modules/signal-exit/signals.js +53 -0
- node_ui/node_modules/slice-ansi/index.d.ts +19 -0
- node_ui/node_modules/slice-ansi/index.js +169 -0
- node_ui/node_modules/slice-ansi/license +10 -0
- node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
- node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/index.js +12 -0
- node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/license +9 -0
- node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/package.json +53 -0
- node_ui/node_modules/slice-ansi/node_modules/is-fullwidth-code-point/readme.md +31 -0
- node_ui/node_modules/slice-ansi/package.json +58 -0
- node_ui/node_modules/slice-ansi/readme.md +54 -0
- node_ui/node_modules/stack-utils/LICENSE.md +21 -0
- node_ui/node_modules/stack-utils/index.js +344 -0
- node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.d.ts +18 -0
- node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/index.js +11 -0
- node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/license +9 -0
- node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/package.json +43 -0
- node_ui/node_modules/stack-utils/node_modules/escape-string-regexp/readme.md +29 -0
- node_ui/node_modules/stack-utils/package.json +39 -0
- node_ui/node_modules/stack-utils/readme.md +143 -0
- node_ui/node_modules/string-width/index.d.ts +39 -0
- node_ui/node_modules/string-width/index.js +82 -0
- node_ui/node_modules/string-width/license +9 -0
- node_ui/node_modules/string-width/package.json +64 -0
- node_ui/node_modules/string-width/readme.md +66 -0
- node_ui/node_modules/strip-ansi/index.d.ts +15 -0
- node_ui/node_modules/strip-ansi/index.js +14 -0
- node_ui/node_modules/strip-ansi/license +9 -0
- node_ui/node_modules/strip-ansi/package.json +59 -0
- node_ui/node_modules/strip-ansi/readme.md +37 -0
- node_ui/node_modules/to-rotated/index.d.ts +18 -0
- node_ui/node_modules/to-rotated/index.js +24 -0
- node_ui/node_modules/to-rotated/license +9 -0
- node_ui/node_modules/to-rotated/package.json +46 -0
- node_ui/node_modules/to-rotated/readme.md +29 -0
- node_ui/node_modules/type-fest/index.d.ts +178 -0
- node_ui/node_modules/type-fest/license-cc0 +121 -0
- node_ui/node_modules/type-fest/license-mit +9 -0
- node_ui/node_modules/type-fest/package.json +91 -0
- node_ui/node_modules/type-fest/readme.md +1060 -0
- node_ui/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
- node_ui/node_modules/type-fest/source/and.d.ts +25 -0
- node_ui/node_modules/type-fest/source/array-indices.d.ts +23 -0
- node_ui/node_modules/type-fest/source/array-slice.d.ts +109 -0
- node_ui/node_modules/type-fest/source/array-splice.d.ts +99 -0
- node_ui/node_modules/type-fest/source/array-tail.d.ts +76 -0
- node_ui/node_modules/type-fest/source/array-values.d.ts +22 -0
- node_ui/node_modules/type-fest/source/arrayable.d.ts +29 -0
- node_ui/node_modules/type-fest/source/async-return-type.d.ts +23 -0
- node_ui/node_modules/type-fest/source/asyncify.d.ts +32 -0
- node_ui/node_modules/type-fest/source/basic.d.ts +68 -0
- node_ui/node_modules/type-fest/source/camel-case.d.ts +89 -0
- node_ui/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
- node_ui/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
- node_ui/node_modules/type-fest/source/conditional-except.d.ts +45 -0
- node_ui/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
- node_ui/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
- node_ui/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
- node_ui/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
- node_ui/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
- node_ui/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
- node_ui/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
- node_ui/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
- node_ui/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
- node_ui/node_modules/type-fest/source/empty-object.d.ts +46 -0
- node_ui/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
- node_ui/node_modules/type-fest/source/entries.d.ts +62 -0
- node_ui/node_modules/type-fest/source/entry.d.ts +65 -0
- node_ui/node_modules/type-fest/source/exact.d.ts +68 -0
- node_ui/node_modules/type-fest/source/except.d.ts +108 -0
- node_ui/node_modules/type-fest/source/find-global-type.d.ts +64 -0
- node_ui/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
- node_ui/node_modules/type-fest/source/get.d.ts +219 -0
- node_ui/node_modules/type-fest/source/global-this.d.ts +21 -0
- node_ui/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
- node_ui/node_modules/type-fest/source/greater-than.d.ts +56 -0
- node_ui/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
- node_ui/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
- node_ui/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
- node_ui/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
- node_ui/node_modules/type-fest/source/if-any.d.ts +24 -0
- node_ui/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
- node_ui/node_modules/type-fest/source/if-never.d.ts +24 -0
- node_ui/node_modules/type-fest/source/if-null.d.ts +24 -0
- node_ui/node_modules/type-fest/source/if-unknown.d.ts +24 -0
- node_ui/node_modules/type-fest/source/includes.d.ts +22 -0
- node_ui/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
- node_ui/node_modules/type-fest/source/int-range.d.ts +55 -0
- node_ui/node_modules/type-fest/source/internal/array.d.ts +126 -0
- node_ui/node_modules/type-fest/source/internal/characters.d.ts +67 -0
- node_ui/node_modules/type-fest/source/internal/index.d.ts +8 -0
- node_ui/node_modules/type-fest/source/internal/keys.d.ts +97 -0
- node_ui/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
- node_ui/node_modules/type-fest/source/internal/object.d.ts +236 -0
- node_ui/node_modules/type-fest/source/internal/string.d.ts +210 -0
- node_ui/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
- node_ui/node_modules/type-fest/source/internal/type.d.ts +139 -0
- node_ui/node_modules/type-fest/source/invariant-of.d.ts +76 -0
- node_ui/node_modules/type-fest/source/is-any.d.ts +33 -0
- node_ui/node_modules/type-fest/source/is-equal.d.ts +31 -0
- node_ui/node_modules/type-fest/source/is-float.d.ts +41 -0
- node_ui/node_modules/type-fest/source/is-integer.d.ts +58 -0
- node_ui/node_modules/type-fest/source/is-literal.d.ts +296 -0
- node_ui/node_modules/type-fest/source/is-never.d.ts +42 -0
- node_ui/node_modules/type-fest/source/is-null.d.ts +20 -0
- node_ui/node_modules/type-fest/source/is-tuple.d.ts +89 -0
- node_ui/node_modules/type-fest/source/is-unknown.d.ts +52 -0
- node_ui/node_modules/type-fest/source/iterable-element.d.ts +64 -0
- node_ui/node_modules/type-fest/source/join.d.ts +68 -0
- node_ui/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
- node_ui/node_modules/type-fest/source/jsonify.d.ts +122 -0
- node_ui/node_modules/type-fest/source/kebab-case.d.ts +44 -0
- node_ui/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
- node_ui/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
- node_ui/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
- node_ui/node_modules/type-fest/source/last-array-element.d.ts +38 -0
- node_ui/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
- node_ui/node_modules/type-fest/source/less-than.d.ts +26 -0
- node_ui/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
- node_ui/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
- node_ui/node_modules/type-fest/source/literal-union.d.ts +37 -0
- node_ui/node_modules/type-fest/source/merge-deep.d.ts +486 -0
- node_ui/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
- node_ui/node_modules/type-fest/source/merge.d.ts +48 -0
- node_ui/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
- node_ui/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
- node_ui/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
- node_ui/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
- node_ui/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
- node_ui/node_modules/type-fest/source/numeric.d.ts +222 -0
- node_ui/node_modules/type-fest/source/observable-like.d.ts +63 -0
- node_ui/node_modules/type-fest/source/omit-deep.d.ts +167 -0
- node_ui/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
- node_ui/node_modules/type-fest/source/opaque.d.ts +1 -0
- node_ui/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
- node_ui/node_modules/type-fest/source/or.d.ts +25 -0
- node_ui/node_modules/type-fest/source/override-properties.d.ts +36 -0
- node_ui/node_modules/type-fest/source/package-json.d.ts +676 -0
- node_ui/node_modules/type-fest/source/partial-deep.d.ts +151 -0
- node_ui/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
- node_ui/node_modules/type-fest/source/pascal-case.d.ts +42 -0
- node_ui/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
- node_ui/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
- node_ui/node_modules/type-fest/source/paths.d.ts +262 -0
- node_ui/node_modules/type-fest/source/pick-deep.d.ts +149 -0
- node_ui/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
- node_ui/node_modules/type-fest/source/primitive.d.ts +13 -0
- node_ui/node_modules/type-fest/source/promisable.d.ts +25 -0
- node_ui/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
- node_ui/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
- node_ui/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
- node_ui/node_modules/type-fest/source/replace.d.ts +85 -0
- node_ui/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
- node_ui/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
- node_ui/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
- node_ui/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
- node_ui/node_modules/type-fest/source/required-deep.d.ts +78 -0
- node_ui/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
- node_ui/node_modules/type-fest/source/schema.d.ts +114 -0
- node_ui/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
- node_ui/node_modules/type-fest/source/set-field-type.d.ts +65 -0
- node_ui/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
- node_ui/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
- node_ui/node_modules/type-fest/source/set-optional.d.ts +38 -0
- node_ui/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
- node_ui/node_modules/type-fest/source/set-readonly.d.ts +39 -0
- node_ui/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
- node_ui/node_modules/type-fest/source/set-required.d.ts +70 -0
- node_ui/node_modules/type-fest/source/set-return-type.d.ts +29 -0
- node_ui/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
- node_ui/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
- node_ui/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
- node_ui/node_modules/type-fest/source/simplify.d.ts +58 -0
- node_ui/node_modules/type-fest/source/single-key-object.d.ts +29 -0
- node_ui/node_modules/type-fest/source/snake-case.d.ts +45 -0
- node_ui/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
- node_ui/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
- node_ui/node_modules/type-fest/source/split.d.ts +88 -0
- node_ui/node_modules/type-fest/source/spread.d.ts +84 -0
- node_ui/node_modules/type-fest/source/string-key-of.d.ts +25 -0
- node_ui/node_modules/type-fest/source/string-repeat.d.ts +47 -0
- node_ui/node_modules/type-fest/source/string-slice.d.ts +37 -0
- node_ui/node_modules/type-fest/source/stringified.d.ts +23 -0
- node_ui/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
- node_ui/node_modules/type-fest/source/subtract.d.ts +83 -0
- node_ui/node_modules/type-fest/source/sum.d.ts +78 -0
- node_ui/node_modules/type-fest/source/tagged-union.d.ts +51 -0
- node_ui/node_modules/type-fest/source/tagged.d.ts +256 -0
- node_ui/node_modules/type-fest/source/trim.d.ts +27 -0
- node_ui/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
- node_ui/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
- node_ui/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
- node_ui/node_modules/type-fest/source/typed-array.d.ts +17 -0
- node_ui/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
- node_ui/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
- node_ui/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
- node_ui/node_modules/type-fest/source/unknown-array.d.ts +25 -0
- node_ui/node_modules/type-fest/source/unknown-map.d.ts +24 -0
- node_ui/node_modules/type-fest/source/unknown-record.d.ts +31 -0
- node_ui/node_modules/type-fest/source/unknown-set.d.ts +24 -0
- node_ui/node_modules/type-fest/source/value-of.d.ts +42 -0
- node_ui/node_modules/type-fest/source/words.d.ts +118 -0
- node_ui/node_modules/type-fest/source/writable-deep.d.ts +83 -0
- node_ui/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
- node_ui/node_modules/type-fest/source/writable.d.ts +68 -0
- node_ui/node_modules/widest-line/index.d.ts +12 -0
- node_ui/node_modules/widest-line/index.js +11 -0
- node_ui/node_modules/widest-line/license +9 -0
- node_ui/node_modules/widest-line/package.json +60 -0
- node_ui/node_modules/widest-line/readme.md +26 -0
- node_ui/node_modules/wrap-ansi/index.d.ts +41 -0
- node_ui/node_modules/wrap-ansi/index.js +222 -0
- node_ui/node_modules/wrap-ansi/license +9 -0
- node_ui/node_modules/wrap-ansi/package.json +69 -0
- node_ui/node_modules/wrap-ansi/readme.md +75 -0
- node_ui/node_modules/ws/LICENSE +20 -0
- node_ui/node_modules/ws/README.md +548 -0
- node_ui/node_modules/ws/browser.js +8 -0
- node_ui/node_modules/ws/index.js +13 -0
- node_ui/node_modules/ws/lib/buffer-util.js +131 -0
- node_ui/node_modules/ws/lib/constants.js +18 -0
- node_ui/node_modules/ws/lib/event-target.js +292 -0
- node_ui/node_modules/ws/lib/extension.js +203 -0
- node_ui/node_modules/ws/lib/limiter.js +55 -0
- node_ui/node_modules/ws/lib/permessage-deflate.js +528 -0
- node_ui/node_modules/ws/lib/receiver.js +706 -0
- node_ui/node_modules/ws/lib/sender.js +602 -0
- node_ui/node_modules/ws/lib/stream.js +161 -0
- node_ui/node_modules/ws/lib/subprotocol.js +62 -0
- node_ui/node_modules/ws/lib/validation.js +152 -0
- node_ui/node_modules/ws/lib/websocket-server.js +550 -0
- node_ui/node_modules/ws/lib/websocket.js +1388 -0
- node_ui/node_modules/ws/package.json +69 -0
- node_ui/node_modules/ws/wrapper.mjs +8 -0
- node_ui/node_modules/yoga-wasm-web/LICENSE +21 -0
- node_ui/node_modules/yoga-wasm-web/README.md +70 -0
- node_ui/node_modules/yoga-wasm-web/dist/asm.d.ts +6 -0
- node_ui/node_modules/yoga-wasm-web/dist/asm.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/auto.d.ts +7 -0
- node_ui/node_modules/yoga-wasm-web/dist/browser.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/generated/YGEnums.d.ts +328 -0
- node_ui/node_modules/yoga-wasm-web/dist/index.d.ts +7 -0
- node_ui/node_modules/yoga-wasm-web/dist/index.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/node.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-57389177.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/wrapAsm-f766f97f.js +1 -0
- node_ui/node_modules/yoga-wasm-web/dist/wrapAsm.d.ts +176 -0
- node_ui/node_modules/yoga-wasm-web/dist/yoga.wasm +0 -0
- node_ui/node_modules/yoga-wasm-web/package.json +56 -0
- 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
|