kash-shell 0.3.21__py3-none-any.whl → 0.3.23__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.
@@ -6,7 +6,7 @@ from typing import Any, TypeAlias
6
6
  import marko
7
7
  import regex
8
8
  from marko.block import Heading, ListItem
9
- from marko.inline import Link
9
+ from marko.inline import AutoLink, Link
10
10
 
11
11
  from kash.utils.common.url import Url
12
12
 
@@ -64,6 +64,9 @@ def _tree_links(element, include_internal=False):
64
64
  case Link():
65
65
  if include_internal or not element.dest.startswith("#"):
66
66
  links.append(element.dest)
67
+ case AutoLink():
68
+ if include_internal or not element.dest.startswith("#"):
69
+ links.append(element.dest)
67
70
  case _:
68
71
  if hasattr(element, "children"):
69
72
  for child in element.children:
@@ -710,3 +713,157 @@ def test_markdown_utils_exceptions() -> None:
710
713
  result_with_internal = extract_links(content, include_internal=True)
711
714
  assert "https://example.com" in result_with_internal
712
715
  assert "#section" in result_with_internal
716
+
717
+
718
+ def test_extract_links_comprehensive() -> None:
719
+ """Test extract_links with various link formats including bare links and footnotes."""
720
+
721
+ # Test regular markdown links
722
+ regular_links = "Check out [this link](https://example.com) and [another](https://test.com)"
723
+ result = extract_links(regular_links)
724
+ assert "https://example.com" in result
725
+ assert "https://test.com" in result
726
+ assert len(result) == 2
727
+
728
+ # Test bare/autolinks in angle brackets
729
+ bare_links = "Visit <https://google.com> and also <https://github.com>"
730
+ result_bare = extract_links(bare_links)
731
+ assert "https://google.com" in result_bare
732
+ assert "https://github.com" in result_bare
733
+ assert len(result_bare) == 2
734
+
735
+ # Test autolinks without brackets (expected to not work with standard markdown)
736
+ auto_links = "Visit https://stackoverflow.com or http://reddit.com"
737
+ result_auto = extract_links(auto_links)
738
+ assert (
739
+ result_auto == []
740
+ ) # Plain URLs without brackets aren't parsed as links in standard markdown
741
+
742
+ # Test GFM footnotes (the original issue)
743
+ footnote_content = """
744
+ [^109]: What Is The Future Of Ketamine Therapy For Mental Health Treatment?
745
+ - The Ko-Op, accessed June 28, 2025,
746
+ <https://psychedelictherapists.co/blog/the-future-of-ketamine-assisted-psychotherapy/>
747
+ """
748
+ result_footnote = extract_links(footnote_content)
749
+ assert (
750
+ "https://psychedelictherapists.co/blog/the-future-of-ketamine-assisted-psychotherapy/"
751
+ in result_footnote
752
+ )
753
+ assert len(result_footnote) == 1
754
+
755
+ # Test mixed content with all types (excluding reference-style which has parsing conflicts with footnotes)
756
+ mixed_content = """
757
+ # Header
758
+
759
+ Regular link: [Example](https://example.com)
760
+ Bare link: <https://bare-link.com>
761
+ Auto link: https://auto-link.com
762
+
763
+ [^1]: Footnote with [regular link](https://footnote-regular.com)
764
+ [^2]: Footnote with bare link <https://footnote-bare.com>
765
+ """
766
+ result_mixed = extract_links(mixed_content)
767
+ expected_links = [
768
+ "https://example.com", # Regular link
769
+ "https://bare-link.com", # Bare link
770
+ "https://footnote-regular.com", # Link in footnote
771
+ "https://footnote-bare.com", # Bare link in footnote
772
+ ]
773
+ for link in expected_links:
774
+ assert link in result_mixed, f"Missing expected link: {link}"
775
+ # Should not include plain auto link (https://auto-link.com) as it's not in angle brackets
776
+ assert "https://auto-link.com" not in result_mixed
777
+ assert len(result_mixed) == len(expected_links)
778
+
779
+
780
+ def test_extract_bare_links() -> None:
781
+ """Test extraction of bare links in angle brackets."""
782
+ content = "Visit <https://example.com> and <https://github.com/user/repo> for more info"
783
+ result = extract_links(content)
784
+ assert "https://example.com" in result
785
+ assert "https://github.com/user/repo" in result
786
+ assert len(result) == 2
787
+
788
+
789
+ def test_extract_footnote_links() -> None:
790
+ """Test extraction of links within footnotes."""
791
+ content = dedent("""
792
+ Main text with reference[^1].
793
+
794
+ [^1]: This footnote has a [regular link](https://example.com) and <https://bare-link.com>
795
+ """)
796
+ result = extract_links(content)
797
+ assert "https://example.com" in result
798
+ assert "https://bare-link.com" in result
799
+ assert len(result) == 2
800
+
801
+
802
+ def test_extract_reference_style_links() -> None:
803
+ """Test extraction of reference-style links."""
804
+ content = dedent("""
805
+ Check out [this article][ref1] and [this other one][ref2].
806
+
807
+ [ref1]: https://example.com/article1
808
+ [ref2]: https://example.com/article2
809
+ """)
810
+ result = extract_links(content)
811
+ assert "https://example.com/article1" in result
812
+ assert "https://example.com/article2" in result
813
+ assert len(result) == 2
814
+
815
+
816
+ def test_extract_links_with_internal_fragments() -> None:
817
+ """Test that internal fragment links are excluded by default but included when requested."""
818
+ content = dedent("""
819
+ See [this section](#introduction) and [external link](https://example.com).
820
+ Also check [another section](#conclusion) here.
821
+ """)
822
+
823
+ # Default behavior: exclude internal links
824
+ result = extract_links(content)
825
+ assert "https://example.com" in result
826
+ assert "#introduction" not in result
827
+ assert "#conclusion" not in result
828
+ assert len(result) == 1
829
+
830
+ # Include internal links
831
+ result_with_internal = extract_links(content, include_internal=True)
832
+ assert "https://example.com" in result_with_internal
833
+ assert "#introduction" in result_with_internal
834
+ assert "#conclusion" in result_with_internal
835
+ assert len(result_with_internal) == 3
836
+
837
+
838
+ def test_extract_links_mixed_real_world() -> None:
839
+ """Test with a realistic mixed document containing various link types."""
840
+ content = dedent("""
841
+ # Research Article
842
+
843
+ This study examines ketamine therapy[^109] and references multiple sources.
844
+
845
+ ## Methods
846
+
847
+ We reviewed literature from [PubMed](https://pubmed.ncbi.nlm.nih.gov)
848
+ and other databases <https://scholar.google.com>.
849
+
850
+ For protocol details, see [our methodology][methodology].
851
+
852
+ [methodology]: https://research.example.com/protocol
853
+
854
+ [^109]: What Is The Future Of Ketamine Therapy For Mental Health Treatment?
855
+ - The Ko-Op, accessed June 28, 2025,
856
+ <https://psychedelictherapists.co/blog/the-future-of-ketamine-assisted-psychotherapy/>
857
+ """)
858
+
859
+ result = extract_links(content)
860
+ expected_links = [
861
+ "https://pubmed.ncbi.nlm.nih.gov",
862
+ "https://scholar.google.com",
863
+ "https://research.example.com/protocol",
864
+ "https://psychedelictherapists.co/blog/the-future-of-ketamine-assisted-psychotherapy/",
865
+ ]
866
+
867
+ for link in expected_links:
868
+ assert link in result, f"Missing expected link: {link}"
869
+ assert len(result) == len(expected_links)
@@ -8,7 +8,7 @@ from kash.web_content.web_extract_justext import extract_text_justext
8
8
  from kash.web_content.web_page_model import PageExtractor, WebPageData
9
9
 
10
10
 
11
- @log_calls(level="message")
11
+ @log_calls(level="info")
12
12
  def fetch_page_content(
13
13
  url: Url,
14
14
  *,
@@ -82,7 +82,7 @@ def tabbed_webpage_config(
82
82
 
83
83
  config_item = Item(
84
84
  title=f"{title} (config)",
85
- type=ItemType.config,
85
+ type=ItemType.data,
86
86
  format=Format.yaml,
87
87
  body=to_yaml_string(asdict(config)),
88
88
  )
@@ -108,7 +108,7 @@ def tabbed_webpage_generate(
108
108
  """
109
109
  Generate a web page using the supplied config.
110
110
  """
111
- config = config_item.read_as_config()
111
+ config = config_item.read_as_data()
112
112
  tabbed_webpage = as_dataclass(config, TabbedWebpage) # Checks the format.
113
113
 
114
114
  _load_tab_content(tabbed_webpage)
@@ -15,7 +15,6 @@ from kash.config.settings import RECOMMENDED_PKGS, check_kerm_code_support
15
15
  from kash.config.text_styles import LOGO_NAME, STYLE_HINT
16
16
  from kash.mcp.mcp_server_commands import start_mcp_server
17
17
  from kash.shell.output.shell_output import PrintHooks, cprint
18
- from kash.shell.version import get_version_tag
19
18
  from kash.workspaces import current_ws
20
19
  from kash.xonsh_custom.customize_prompt import get_prompt_info, kash_xonsh_prompt
21
20
  from kash.xonsh_custom.shell_load_commands import (
@@ -109,5 +108,3 @@ def load_into_xonsh():
109
108
 
110
109
  else:
111
110
  reload_shell_commands_and_actions()
112
-
113
- log.info("kash %s loaded", get_version_tag())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kash-shell
3
- Version: 0.3.21
3
+ Version: 0.3.23
4
4
  Summary: The knowledge agent shell (core)
5
5
  Project-URL: Repository, https://github.com/jlevy/kash-shell
6
6
  Author-email: Joshua Levy <joshua@cal.berkeley.edu>
@@ -4,7 +4,7 @@ kash/actions/__init__.py,sha256=a4pQw8O-Y3q5N4Qg2jUV0xEZLX6d164FQhZ6zizY9fE,1357
4
4
  kash/actions/core/assistant_chat.py,sha256=28G20cSr7Z94cltouTPve5TXY3km0lACrRvpLE27fK8,1837
5
5
  kash/actions/core/chat.py,sha256=yCannBFa0cSpR_in-XSSuMm1x2ZZQUCKmlqzhsUfpOo,2696
6
6
  kash/actions/core/format_markdown_template.py,sha256=ZJbtyTSypPo2ewLiGRSyIpVf711vQMhI_-Ng-FgCs80,2991
7
- kash/actions/core/markdownify_html.py,sha256=RXsC59rhDoLssRujkS32PETN1zzncIofFO7J3qTrnJc,1277
7
+ kash/actions/core/markdownify_html.py,sha256=luMXwwaY6E8oidgdrwV6KSgzdG0iX2JKS5aTNYDdZpA,1810
8
8
  kash/actions/core/minify_html.py,sha256=99r3SjpI2NQP7e5MnMixAiT5lxPx7t2nyJvJi6Yps6w,1365
9
9
  kash/actions/core/readability.py,sha256=ljdB2rOpzfKU2FpEJ2UELIzcdOAWvdUjFsxoHRTE3xo,989
10
10
  kash/actions/core/render_as_html.py,sha256=CIPGKCjUEVNsnXmpqHCUnjGwTfEfOyCXxlYFUN8mahY,1870
@@ -12,7 +12,7 @@ kash/actions/core/show_webpage.py,sha256=Ggba9jkx9U-FZOcuL0lkS-SwtPNUyxVsGdeQrqw
12
12
  kash/actions/core/strip_html.py,sha256=FDLN_4CKB11q5cU4NixTf7PGrAq92AjQNbKAdvQDwCY,849
13
13
  kash/actions/core/summarize_as_bullets.py,sha256=Zwr8lNzL77pwpnW_289LQjNBijNDpTPANfFdOJA-PZ4,2070
14
14
  kash/actions/core/tabbed_webpage_config.py,sha256=rIbzEhBTmnkbSiRZC-Rj46T1J6c0jOztiKE9Usa4nsc,980
15
- kash/actions/core/tabbed_webpage_generate.py,sha256=oYx9fdgY8NndFekXsZbil0luGa2OFDi2e0s5l7Toh7E,992
15
+ kash/actions/core/tabbed_webpage_generate.py,sha256=935HkDSuP4eZ1e0xf-LhjPOdicU3wI5Kuh79r61QCl8,988
16
16
  kash/actions/meta/write_instructions.py,sha256=zeKKX-Yi8jSyjvZ4Ii_4MNBRtM2MENuHyrD0Vxsaos8,1277
17
17
  kash/actions/meta/write_new_action.py,sha256=w7SJZ2FjzRbKwqKX9PeozUrh8cNJAumX7F80wW7dQts,6356
18
18
  kash/commands/__init__.py,sha256=MhdPSluWGE3XVQ7LSv2L8_aAxaey8CLjQBjGC9B4nRM,191
@@ -29,11 +29,11 @@ kash/commands/base/search_command.py,sha256=FXtP09HmmfHRrjenvmU4j0Lcw34piIzdI3UF
29
29
  kash/commands/base/show_command.py,sha256=rFyIW_5oZArRSTpe71PaX87Hq30WE-t6RAJKeCwJ3lM,3299
30
30
  kash/commands/extras/parse_uv_lock.py,sha256=HVqmGhJAd3ZCTTTaXe_nzzTMFKhwjLLP7hx4NTM224U,5696
31
31
  kash/commands/extras/utils_commands.py,sha256=rz3N7VxoUHvCxksRt-sLubkvyW-VH9OTltLEMEnjRfU,769
32
- kash/commands/help/assistant_commands.py,sha256=BhGhtyoiEbu6xYfi-r47g_U4pxptUkucyNmiv5_kg34,3042
32
+ kash/commands/help/assistant_commands.py,sha256=TR5HtKEoWWyK1VRfqm-SdSVHX0F3RUWrSMqAD78WXqs,3039
33
33
  kash/commands/help/doc_commands.py,sha256=7lKR7mzue2N7pSkNqblpFJy892fS5N6jWVOHqeXziHw,2466
34
34
  kash/commands/help/help_commands.py,sha256=eJTpIhXck123PAUq2k-D3Q6UL6IQ8atOVYurLi2GD0A,4229
35
- kash/commands/help/logo.py,sha256=W8SUach9FjoTqpHZwTGS582ry4ZluxbBp86ZCiAtDkY,3505
36
- kash/commands/help/welcome.py,sha256=F4QBgj3e1dM9Pf0H4TSzCrkVfXQVKUIl0b6Qmofbdo4,905
35
+ kash/commands/help/logo.py,sha256=4K3pPIiNlPIgdNeOgdIGbJQCKmqCEsDOhuWPH51msWo,3377
36
+ kash/commands/help/welcome.py,sha256=uM2UMtHG4oXTxU8IFlFbTOTmR5_XTCUtT828V_tKMsk,920
37
37
  kash/commands/workspace/selection_commands.py,sha256=nZzA-H7Pk8kqSJVRlX7j1m6cZX-e0X8isOryDU41vqU,8156
38
38
  kash/commands/workspace/workspace_commands.py,sha256=_2TcthGOu-nU9E_-jjf4kba9ldLRA6qe6Do6zV06EKc,21960
39
39
  kash/config/__init__.py,sha256=ytly9Typ1mWV4CXfV9G3CIPtPQ02u2rpZ304L3GlFro,148
@@ -59,8 +59,8 @@ kash/docs/load_source_code.py,sha256=CtMBUXrRetSO81HYW-DgJZ0bL_9Nn4GNidGKg-U11LU
59
59
  kash/docs/markdown/api_docs_template.md,sha256=nUjrV5FhDql8odjjPiwOK8roCUiauy31G2ARiS_OGiQ,1457
60
60
  kash/docs/markdown/assistant_instructions_template.md,sha256=Fzeledd_nr3bKhvQ1qZfMqyNtA7-_e05J5Jx5ecerBA,4758
61
61
  kash/docs/markdown/readme_template.md,sha256=iGx9IjSni1t_9BuYD5d2GgkxkNIkqvE3k78IufHF6Yg,409
62
- kash/docs/markdown/warning.md,sha256=bG0T3UFqAkzF8217J8AbIbQ7ftJ_GKMRilIGq9eLdYc,162
63
- kash/docs/markdown/welcome.md,sha256=yp_tmGXGIb8043ZDIL97Q1uaKVys7-ArHCprgDlon7w,611
62
+ kash/docs/markdown/warning.md,sha256=ipTFWQc1F0cPGrIG0epX5RqQH6PmshyZOoCQDz0zDos,88
63
+ kash/docs/markdown/welcome.md,sha256=uNI6CyZOuPUe6FZgKd9MpO_pumHxlGN7Lfhb52XJRa0,611
64
64
  kash/docs/markdown/topics/a1_what_is_kash.md,sha256=rgVrv6tRXEwdqQ54DAfHP3BSAuq8Ux4wCNeluTwpkhU,6758
65
65
  kash/docs/markdown/topics/a2_installation.md,sha256=DSzaniHjOYPC3soGLPTGOGDVvbiPTROtb3S8zYUCPEs,5736
66
66
  kash/docs/markdown/topics/a3_getting_started.md,sha256=xOMevEXMIpVJvTGuuwI9Cc9sun3tQM3OqCgynSgMpeM,9376
@@ -88,13 +88,13 @@ kash/exec/action_registry.py,sha256=numU9pH_W5RgIrYmfi0iYMYy_kLJl6vup8PMrhxAfdc,
88
88
  kash/exec/combiners.py,sha256=AJ6wgPUHsmwanObsUw64B83XzU26yuh5t4l7igLn82I,4291
89
89
  kash/exec/command_exec.py,sha256=zc-gWm7kyB5J5Kp8xhULQ9Jj9AL927KkDPXXk-Yr1Bw,1292
90
90
  kash/exec/command_registry.py,sha256=1s2ogU8b8nqK_AEtslbr1eYrXCGDkeT30UrB7L0BRoM,2027
91
- kash/exec/fetch_url_items.py,sha256=UUj3wrP3adzZHV_Icx7zSB9zRtl0S7EC54Ios8fuvbg,4404
91
+ kash/exec/fetch_url_items.py,sha256=mKwPW_RJKVmYMUID6ESevolIn6Q76do4PfxiAAalqVY,4595
92
92
  kash/exec/history.py,sha256=l2XwHGBR1UgTGSFPSBE9mltmxvjR_5qFFO6d-Z008nc,1208
93
93
  kash/exec/importing.py,sha256=xunmBapeUMNc6Zox7y6e_DZkidyWeouiFZpphajwSzc,1843
94
94
  kash/exec/llm_transforms.py,sha256=n7S-Dew8z_BoAwp-14lY4LueFeUtG117eK_8msbn02c,4375
95
95
  kash/exec/precondition_checks.py,sha256=HymxL7qm4Yz8V76Um5pKdIRnQ2N-p9rpQQi1fI38bNA,2139
96
96
  kash/exec/precondition_registry.py,sha256=9O-01d2OrsYLuhqodVuWjouLR2ABJbUotAmfJNBCRzs,1439
97
- kash/exec/preconditions.py,sha256=6bJ76AVFo0TLoykrGBNB0rrpIDWD0umfb3F5sMcmoKo,5131
97
+ kash/exec/preconditions.py,sha256=fuK_tfI7FiJ5F36MXOgopFtD5O_gf8yLvQ-xjowNKSw,5221
98
98
  kash/exec/resolve_args.py,sha256=gu65epzVrwWHdHA-KwAwYssncJIB84oHOJeoXXrQ2mM,4428
99
99
  kash/exec/runtime_settings.py,sha256=aK6nGbZhKSIDVmV6AqV68hQkiaIGWnCiNzHtwwZ5V0w,3960
100
100
  kash/exec/shell_callable_action.py,sha256=iSv3w33oJbIenOI6s9v5cHU4gX2U9w7MIWc8jHgk6HE,4377
@@ -104,7 +104,7 @@ kash/exec_model/commands_model.py,sha256=iM8QhzA0tAas5OwF5liUfHtm45XIH1LcvCviuh3
104
104
  kash/exec_model/script_model.py,sha256=1VG3LhkTmlKzHOYouZ92ZpOSKSCcsz3-tHNcFMQF788,5031
105
105
  kash/exec_model/shell_model.py,sha256=LUhQivbpXlerM-DUzNY7BtctNBbn08Wto8CSSxQDxRU,568
106
106
  kash/file_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- kash/file_storage/file_store.py,sha256=_OxcExZOQ-ef9Sm2sdD28BSMcQ64KsSikq3CJPUKYUU,30886
107
+ kash/file_storage/file_store.py,sha256=GeAHIvAFcIj_cKssqzHajmpJmZQ8sFNDbFDvy4fETys,30877
108
108
  kash/file_storage/item_file_format.py,sha256=_o2CjWstk_Z__qMr-Inct9wJm2VEUK0GZvF-fDZ8bcc,5377
109
109
  kash/file_storage/metadata_dirs.py,sha256=9AqO3S3SSY1dtvP2iLX--E4ui0VIzXttG8R040otfyg,3820
110
110
  kash/file_storage/persisted_yaml.py,sha256=4-4RkFqdlBUkTOwkdA4vRKUywEE9TaDo13OGaDUyU9M,1309
@@ -164,7 +164,7 @@ kash/model/compound_actions_model.py,sha256=HiDK5wwCu3WwZYHATZoLEguiqwR9V6V296wi
164
164
  kash/model/concept_model.py,sha256=we2qOcy9Mv1q7XPfkDLp_CyO_-8DwAUfUYlpgy_jrFs,1011
165
165
  kash/model/exec_model.py,sha256=IlfvtQyoFRRWhWju7vdXp9J-w_NGcGtL5DhDLy9gRd8,2250
166
166
  kash/model/graph_model.py,sha256=jnctrPiBZ0xwAR8D54JMAJPanA1yZdaxSFQoIpe8anA,2662
167
- kash/model/items_model.py,sha256=ZWAsqTHA4p6GSNz3QjPr46LRwY7pbv7d73_KqU3gsO0,35686
167
+ kash/model/items_model.py,sha256=d95duvrAvi7LjMQF6urUuwGiizo1K1QCnRfyAa7tcbA,35827
168
168
  kash/model/language_list.py,sha256=I3RIbxTseVmPdhExQimimEv18Gmy2ImMbpXe0-_t1Qw,450
169
169
  kash/model/llm_actions_model.py,sha256=a29uXVNfS2CiqvM7HPdC6H9A23rSQQihAideuBLMH8g,2110
170
170
  kash/model/media_model.py,sha256=ZnlZ-FkswbAIGpUAuNqLce1WDZK-WbnwHn2ipg8x7-0,3511
@@ -190,7 +190,7 @@ kash/shell/output/kerm_code_utils.py,sha256=92A4AV-IFKKZMWLNZnd_zksNFMBgE_VNXySy
190
190
  kash/shell/output/kerm_codes.py,sha256=KLVdTM_dL_NeYmGbllzsQoW4IHXJjEsgqqIp1s7P1yI,18877
191
191
  kash/shell/output/kmarkdown.py,sha256=RRB5b0Ip0KZ71vnJKFfvxerYkeDFTCVTlHqHfmMy80Y,3675
192
192
  kash/shell/output/shell_formatting.py,sha256=oxmAeJ2j0ANYSUsL15CUv--KcGlQ6Wa_rywXSDlsZM4,3331
193
- kash/shell/output/shell_output.py,sha256=zrL4d3GosAloTgTNeBtfzo8yd6Z4rKrOZto2Anww398,11645
193
+ kash/shell/output/shell_output.py,sha256=A4XcEo2P3CVVOuJHFHut3Wd4I2DBnim-NiYEsdokb9s,11831
194
194
  kash/shell/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
195
  kash/shell/ui/shell_results.py,sha256=mvFHxK_oz3bNfF5_Twt6VqDO44TA1b256Bjf5oco804,4130
196
196
  kash/shell/ui/shell_syntax.py,sha256=1fuDqcCV16AAWwWS4w4iT-tlSnl-Ywdrf68Ge8XIfmQ,751
@@ -199,9 +199,9 @@ kash/shell/utils/native_utils.py,sha256=pAiuqqrjfNTesdArSya6CVavKVsuAXOcX3_XAIQr
199
199
  kash/shell/utils/shell_function_wrapper.py,sha256=fgUuVhocYMKLkGJJQJOER5nFMAvM0ZVpfGu7iJPJI9s,7385
200
200
  kash/utils/__init__.py,sha256=4Jl_AtgRADdGORimWhYZwbSfQSpQ6SiexNIZzmbcngI,111
201
201
  kash/utils/errors.py,sha256=2lPL0fxI8pPOiDvjl0j-rvwY8uhmWetsrYYIc2-x1WY,3906
202
- kash/utils/api_utils/api_retries.py,sha256=0actlvQSP2puSvM7DwzC7eifDLAFYSRirNuo1Tp1Xvg,9040
202
+ kash/utils/api_utils/api_retries.py,sha256=Cn32BJlTnvVMo9pbfMcPZG1jGSNJl99aZbnyFHYmscg,20695
203
203
  kash/utils/api_utils/cache_requests_limited.py,sha256=TA5buZ9Dgbj4I1zHhwerTXre018i0TCACGsezsjX9Uc,3140
204
- kash/utils/api_utils/gather_limited.py,sha256=nnaR2jdvDz5ut95K7ZJltfTGCVigo0Y1828iLKd4pVA,35781
204
+ kash/utils/api_utils/gather_limited.py,sha256=-qUoriVVI5iTWxziTLSoUee-4NevUNQqVvkSYGaxbkY,27823
205
205
  kash/utils/api_utils/progress_protocol.py,sha256=Z_umf2DVmyTlfjiW57juN3wwlruU0camvVAHJKPHjtk,9041
206
206
  kash/utils/common/__init__.py,sha256=ggeWw1xmbl1mgCQD3c4CNN2h5WXFCsN2wXlCWurEUEI,161
207
207
  kash/utils/common/format_utils.py,sha256=83FhAwbMnOQIFudpnOGMuCqCiyoAlWGS6cc8q6xgZus,2072
@@ -242,7 +242,7 @@ kash/utils/rich_custom/rich_markdown_fork.py,sha256=M_JRaSAyHrSg-wuLv9C9P7SkehSi
242
242
  kash/utils/text_handling/doc_normalization.py,sha256=C211eSof8PUDVCqQtShuC4AMJpTZeBK8GHlGATp3c9E,2976
243
243
  kash/utils/text_handling/escape_html_tags.py,sha256=8pC3JgoKRtdnbnOu8DiWrlvNR6GAqjwhGbQgl3jiFG4,6441
244
244
  kash/utils/text_handling/markdown_render.py,sha256=LHPdJc__2ejBx7iwkp_P9wIePNmiVSgwu4-uhamVjms,3791
245
- kash/utils/text_handling/markdown_utils.py,sha256=kB_zqqwBX7AHfxWqPsTCD2xpvW49z47Vs-Jet107woc,25561
245
+ kash/utils/text_handling/markdown_utils.py,sha256=4RGIK9weadZ1UYTk7eVmCIFX9yktMyLSFsMLNTCnmoY,31681
246
246
  kash/utils/text_handling/markdownify_utils.py,sha256=xNMlBX36BJ5VK5kxY2Ofo-Q84R2kBSM91u1grkQ-5As,2925
247
247
  kash/utils/text_handling/unified_diffs.py,sha256=JfHSakISkT_GuBPBI4fTooHrp2aenWzDKiVvDewVfMk,2655
248
248
  kash/web_content/canon_url.py,sha256=Zv2q7xQdIHBFkxxwyJn3_ME-qqMFRi_fKxE_IgV2Z50,742
@@ -250,14 +250,14 @@ kash/web_content/dir_store.py,sha256=BJc-s-RL5CC-GwhFTC_lhLXSMWluPPnLVmVBx-66DiM
250
250
  kash/web_content/file_cache_utils.py,sha256=JRXUCAmrc83iAgdiICU2EYGWcoORflWNl6GAVq-O80I,5529
251
251
  kash/web_content/file_processing.py,sha256=cQC-MnJMM5qG9-y0S4yobkmRi6A75qhHjV6xTwbtYDY,1904
252
252
  kash/web_content/local_file_cache.py,sha256=PEDKU5VIwhCnSC-HXG4EkO2OzrOUDuuDBMuo3lP2EN0,9466
253
- kash/web_content/web_extract.py,sha256=FLn4LPAQHe79kx9LhSbGNnvoDM59X-AqeyBMkyLdyZo,2847
253
+ kash/web_content/web_extract.py,sha256=w6tjayTCgHFcyfSUk1UWBJjdYneoHQuTcV4foyUd_HQ,2844
254
254
  kash/web_content/web_extract_justext.py,sha256=74HLJBKDGKatwxyRDX6za70bZG9LrVmtj9jLX7UJzg4,2540
255
255
  kash/web_content/web_extract_readabilipy.py,sha256=IT7ET5IoU2-Nf37-Neh6CkKMvLL3WTNVJjq7ZMOx6OM,808
256
256
  kash/web_content/web_fetch.py,sha256=J8DLFP1vzp7aScanFq0Bd7xCP6AVL4JgMMBqyRPtZjQ,4720
257
257
  kash/web_content/web_page_model.py,sha256=aPpgC1fH2z2LTzGJhEDvZgq_mYwgsQIZaDS3UE7v98w,1147
258
258
  kash/web_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
259
259
  kash/web_gen/simple_webpage.py,sha256=ks_0ljxCeS2-gAAEaUc1JEnzY3JY0nzqGFiyyqyRuZs,1537
260
- kash/web_gen/tabbed_webpage.py,sha256=DiZV48TVvcjOf31g3nzTAtGKpH5Cek1Unksr7Cwcwog,4949
260
+ kash/web_gen/tabbed_webpage.py,sha256=e0GGG1bQ4CQegpJgOIT2KpyM6cmwN_BQ9eJSsi4BjgY,4945
261
261
  kash/web_gen/template_render.py,sha256=aypo6UanouftV4RpxgNm6JdquelI52fV0IlihdA3yjE,1908
262
262
  kash/web_gen/templates/base_styles.css.jinja,sha256=kLFEntQ7SHkbG9BEJTLtsiJCP5ldflILMXHAZGKjaF0,14942
263
263
  kash/web_gen/templates/base_webpage.html.jinja,sha256=gwxXMSC_eY-stu8uT5AVyQJ-Ppy2GyWwq9vEdTEbVi0,12887
@@ -281,7 +281,7 @@ kash/workspaces/workspaces.py,sha256=ypxlX2K64QOhNsta69arlvKbiVpUW_4CDeX_sEcIQbg
281
281
  kash/xonsh_custom/command_nl_utils.py,sha256=6Xcx98HXL5HywziHi0XskwFx6kfvz7oCmMX-siJib1A,3392
282
282
  kash/xonsh_custom/custom_shell.py,sha256=jydWwHR0-RslioaHHY1sHnM6H6fG3cwOw1XO__sG_b0,19026
283
283
  kash/xonsh_custom/customize_prompt.py,sha256=u-jRY-ftXYflBkbJVetEg6GYelPUvqZEpjrPRUTfy8w,6896
284
- kash/xonsh_custom/load_into_xonsh.py,sha256=3EuSXUOLz8ZCWrTHQUoaDHPB8koMY14Hhfbeo6idPns,3694
284
+ kash/xonsh_custom/load_into_xonsh.py,sha256=Z_PAaW_Uv-PDRKdw9E_7dC1eMe6FbwwIUioxyS1Sp_g,3596
285
285
  kash/xonsh_custom/shell_load_commands.py,sha256=bndmVEecIhuzQBI3OUDpH4ac7DXGkAMUVqXXcbrmEqI,4719
286
286
  kash/xonsh_custom/shell_which.py,sha256=zRaLhFVg9HEDFXo4dqWKwX07YpfPh25kopeG_fgctOE,1926
287
287
  kash/xonsh_custom/xonsh_completers.py,sha256=jxsc279DwZUHm0-iCnCtvbzqJBtq8zu0FUls5J1BA8o,17959
@@ -291,8 +291,8 @@ kash/xonsh_custom/xonsh_modern_tools.py,sha256=mj_b34LZXfE8MJe9EpDmp5JZ0tDM1biYN
291
291
  kash/xonsh_custom/xonsh_ranking_completer.py,sha256=ZRGiAfoEgqgnlq2-ReUVEaX5oOgW1DQ9WxIv2OJLuTo,5620
292
292
  kash/xontrib/fnm.py,sha256=V2tsOdmIDgbFbZSfMLpsvDIwwJJqiYnOkOySD1cXNXw,3700
293
293
  kash/xontrib/kash_extension.py,sha256=FLIMlgR3C_6A1fwKE-Ul0nmmpJSszVPbAriinUyQ8Zg,1896
294
- kash_shell-0.3.21.dist-info/METADATA,sha256=T3OtawnUMP_E6_s0IstCPv4m8zYrdJiztDK8uDIPP2k,32656
295
- kash_shell-0.3.21.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
296
- kash_shell-0.3.21.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
297
- kash_shell-0.3.21.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
298
- kash_shell-0.3.21.dist-info/RECORD,,
294
+ kash_shell-0.3.23.dist-info/METADATA,sha256=1y1zNJVuhHB8lUyLOKZoErj_A3nhZlOuEuERxtIM5Wo,32656
295
+ kash_shell-0.3.23.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
296
+ kash_shell-0.3.23.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
297
+ kash_shell-0.3.23.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
298
+ kash_shell-0.3.23.dist-info/RECORD,,