kash-shell 0.3.9__py3-none-any.whl → 0.3.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.
Files changed (135) hide show
  1. kash/actions/__init__.py +4 -4
  2. kash/actions/core/markdownify.py +5 -2
  3. kash/actions/core/readability.py +5 -2
  4. kash/actions/core/render_as_html.py +18 -0
  5. kash/actions/core/webpage_config.py +12 -4
  6. kash/commands/__init__.py +8 -20
  7. kash/commands/base/basic_file_commands.py +15 -0
  8. kash/commands/base/debug_commands.py +13 -0
  9. kash/commands/base/general_commands.py +21 -16
  10. kash/commands/base/logs_commands.py +4 -2
  11. kash/commands/base/model_commands.py +8 -8
  12. kash/commands/base/search_command.py +3 -2
  13. kash/commands/base/show_command.py +5 -3
  14. kash/commands/extras/parse_uv_lock.py +186 -0
  15. kash/commands/help/doc_commands.py +2 -31
  16. kash/commands/help/welcome.py +33 -0
  17. kash/commands/workspace/selection_commands.py +11 -6
  18. kash/commands/workspace/workspace_commands.py +18 -15
  19. kash/config/colors.py +2 -0
  20. kash/config/env_settings.py +14 -1
  21. kash/config/init.py +2 -2
  22. kash/config/logger.py +59 -56
  23. kash/config/logger_basic.py +3 -3
  24. kash/config/settings.py +116 -57
  25. kash/config/setup.py +28 -12
  26. kash/config/text_styles.py +3 -13
  27. kash/docs/load_api_docs.py +2 -1
  28. kash/docs/markdown/topics/a3_getting_started.md +3 -2
  29. kash/{concepts → embeddings}/text_similarity.py +2 -2
  30. kash/exec/__init__.py +20 -3
  31. kash/exec/action_decorators.py +18 -4
  32. kash/exec/action_exec.py +41 -23
  33. kash/exec/action_registry.py +13 -48
  34. kash/exec/command_registry.py +2 -1
  35. kash/exec/fetch_url_metadata.py +4 -6
  36. kash/exec/importing.py +56 -0
  37. kash/exec/llm_transforms.py +6 -7
  38. kash/exec/precondition_registry.py +2 -1
  39. kash/exec/preconditions.py +16 -1
  40. kash/exec/shell_callable_action.py +33 -19
  41. kash/file_storage/file_store.py +23 -10
  42. kash/file_storage/item_file_format.py +5 -2
  43. kash/file_storage/metadata_dirs.py +11 -2
  44. kash/help/assistant.py +1 -1
  45. kash/help/assistant_instructions.py +2 -1
  46. kash/help/help_embeddings.py +2 -2
  47. kash/help/help_printing.py +7 -11
  48. kash/llm_utils/clean_headings.py +1 -1
  49. kash/llm_utils/llm_api_keys.py +4 -4
  50. kash/llm_utils/llm_features.py +68 -0
  51. kash/llm_utils/llm_messages.py +1 -2
  52. kash/llm_utils/llm_names.py +1 -1
  53. kash/llm_utils/llms.py +8 -3
  54. kash/local_server/__init__.py +5 -2
  55. kash/local_server/local_server.py +8 -5
  56. kash/local_server/local_server_commands.py +2 -2
  57. kash/local_server/local_url_formatters.py +1 -1
  58. kash/mcp/__init__.py +5 -2
  59. kash/mcp/mcp_cli.py +5 -5
  60. kash/mcp/mcp_server_commands.py +5 -5
  61. kash/mcp/mcp_server_routes.py +5 -5
  62. kash/mcp/mcp_server_sse.py +4 -2
  63. kash/media_base/media_cache.py +8 -8
  64. kash/media_base/media_services.py +1 -1
  65. kash/media_base/media_tools.py +6 -6
  66. kash/media_base/services/local_file_media.py +2 -2
  67. kash/media_base/{speech_transcription.py → transcription_deepgram.py} +25 -110
  68. kash/media_base/transcription_format.py +73 -0
  69. kash/media_base/transcription_whisper.py +38 -0
  70. kash/model/__init__.py +73 -5
  71. kash/model/actions_model.py +38 -4
  72. kash/model/concept_model.py +30 -0
  73. kash/model/items_model.py +44 -7
  74. kash/model/params_model.py +24 -0
  75. kash/shell/completions/completion_scoring.py +37 -5
  76. kash/shell/output/kerm_codes.py +1 -2
  77. kash/shell/output/shell_formatting.py +14 -4
  78. kash/shell/shell_main.py +2 -2
  79. kash/shell/utils/exception_printing.py +6 -0
  80. kash/shell/utils/native_utils.py +26 -20
  81. kash/text_handling/custom_sliding_transforms.py +12 -4
  82. kash/text_handling/doc_normalization.py +6 -2
  83. kash/text_handling/markdown_render.py +117 -0
  84. kash/text_handling/markdown_utils.py +204 -0
  85. kash/utils/common/import_utils.py +12 -3
  86. kash/utils/common/type_utils.py +0 -29
  87. kash/utils/common/url.py +27 -3
  88. kash/utils/errors.py +6 -0
  89. kash/utils/file_utils/file_formats.py +2 -2
  90. kash/utils/file_utils/file_formats_model.py +3 -0
  91. kash/web_content/dir_store.py +1 -2
  92. kash/web_content/file_cache_utils.py +37 -10
  93. kash/web_content/file_processing.py +68 -0
  94. kash/web_content/local_file_cache.py +12 -9
  95. kash/web_content/web_extract.py +8 -3
  96. kash/web_content/web_fetch.py +12 -4
  97. kash/web_gen/tabbed_webpage.py +5 -2
  98. kash/web_gen/templates/base_styles.css.jinja +120 -14
  99. kash/web_gen/templates/base_webpage.html.jinja +60 -13
  100. kash/web_gen/templates/content_styles.css.jinja +4 -2
  101. kash/web_gen/templates/item_view.html.jinja +2 -2
  102. kash/web_gen/templates/tabbed_webpage.html.jinja +1 -2
  103. kash/workspaces/__init__.py +15 -2
  104. kash/workspaces/selections.py +18 -3
  105. kash/workspaces/source_items.py +0 -1
  106. kash/workspaces/workspaces.py +5 -11
  107. kash/xonsh_custom/command_nl_utils.py +40 -19
  108. kash/xonsh_custom/custom_shell.py +43 -11
  109. kash/xonsh_custom/customize_prompt.py +39 -21
  110. kash/xonsh_custom/load_into_xonsh.py +22 -25
  111. kash/xonsh_custom/shell_load_commands.py +2 -2
  112. kash/xonsh_custom/xonsh_completers.py +2 -249
  113. kash/xonsh_custom/xonsh_keybindings.py +282 -0
  114. kash/xonsh_custom/xonsh_modern_tools.py +3 -3
  115. kash/xontrib/kash_extension.py +5 -6
  116. {kash_shell-0.3.9.dist-info → kash_shell-0.3.10.dist-info}/METADATA +8 -6
  117. {kash_shell-0.3.9.dist-info → kash_shell-0.3.10.dist-info}/RECORD +122 -123
  118. kash/concepts/concept_formats.py +0 -23
  119. kash/shell/clideps/api_keys.py +0 -100
  120. kash/shell/clideps/dotenv_setup.py +0 -115
  121. kash/shell/clideps/dotenv_utils.py +0 -98
  122. kash/shell/clideps/pkg_deps.py +0 -257
  123. kash/shell/clideps/platforms.py +0 -11
  124. kash/shell/clideps/terminal_features.py +0 -56
  125. kash/shell/utils/osc_utils.py +0 -95
  126. kash/shell/utils/terminal_images.py +0 -133
  127. kash/text_handling/markdown_util.py +0 -167
  128. kash/utils/common/atomic_var.py +0 -171
  129. kash/utils/common/string_replace.py +0 -93
  130. kash/utils/common/string_template.py +0 -101
  131. /kash/{concepts → embeddings}/cosine.py +0 -0
  132. /kash/{concepts → embeddings}/embeddings.py +0 -0
  133. {kash_shell-0.3.9.dist-info → kash_shell-0.3.10.dist-info}/WHEEL +0 -0
  134. {kash_shell-0.3.9.dist-info → kash_shell-0.3.10.dist-info}/entry_points.txt +0 -0
  135. {kash_shell-0.3.9.dist-info → kash_shell-0.3.10.dist-info}/licenses/LICENSE +0 -0
@@ -1,59 +1,58 @@
1
1
  kash/__init__.py,sha256=hplHtnRqt1MpGIgKv3WZb9YoCoMPGtnNGtu8Eb9G6zI,110
2
2
  kash/__main__.py,sha256=83JiHvCNK7BAwEkaTD0kVekj7PEMucvCyquSl4p-1QA,78
3
- kash/actions/__init__.py,sha256=xggv_dShKVAKBXWuDuajetenLKcjOB02_gGQO8P37O0,1453
3
+ 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=5P3ZDMKmOqnfiSn4dchtodh9StpnMWkUM5acIguIkmw,3043
7
- kash/actions/core/markdownify.py,sha256=lTNNKIcOpxrwx3Ham7r_qpIbKmyFBHVLJJXssD5QdFo,998
8
- kash/actions/core/readability.py,sha256=tRs18Z-2rTdmG51n_7Ug-8D35ATCkRGg8IXnWsIit-Y,827
7
+ kash/actions/core/markdownify.py,sha256=WTA1FP7h6eCr1mebrm0QqyT5D288SnMkYax8ECKX5kE,1183
8
+ kash/actions/core/readability.py,sha256=TWgBn00aglIWwp_g2hFodyWmJVSDsqn-S18d5uKXZyE,1012
9
+ kash/actions/core/render_as_html.py,sha256=jZVCqx4Z3zAEZ5HBHtENFJN3ywOuurUPTp4cMx38yqU,632
9
10
  kash/actions/core/show_webpage.py,sha256=hMhPTTwpZb7q1w2ZNjmuVkxlG-O4WE_Dw3GKrQkX5UA,987
10
11
  kash/actions/core/strip_html.py,sha256=VeTsTzoR0GKAvwpdr8-nFplYF50V3urfYZmGOhlwuZo,895
11
12
  kash/actions/core/summarize_as_bullets.py,sha256=Zwr8lNzL77pwpnW_289LQjNBijNDpTPANfFdOJA-PZ4,2070
12
- kash/actions/core/webpage_config.py,sha256=gRcx-MK3KVnxrpWBfgq0u7wToMTfycBz7XkMk2hukII,656
13
+ kash/actions/core/webpage_config.py,sha256=uJtJwHxel7xgWg9WjkR2snEBXMj9lmieYI3YKhpuff8,873
13
14
  kash/actions/core/webpage_generate.py,sha256=FHRmwWWWzSoC2Cd0d4oy249Za0A03HD-nFL6SL9SUBw,788
14
15
  kash/actions/meta/write_instructions.py,sha256=zeKKX-Yi8jSyjvZ4Ii_4MNBRtM2MENuHyrD0Vxsaos8,1277
15
16
  kash/actions/meta/write_new_action.py,sha256=w7SJZ2FjzRbKwqKX9PeozUrh8cNJAumX7F80wW7dQts,6356
16
- kash/commands/__init__.py,sha256=k8JtFpQbbTIrnA1O3iQvCEgiIzrQ_WhG2x6GdJP22vI,1152
17
- kash/commands/base/basic_file_commands.py,sha256=5Z3s7PpsDZw4YL53h0DW8B5CNPPxZm_ZxK8KV6o1OKE,5906
17
+ kash/commands/__init__.py,sha256=MhdPSluWGE3XVQ7LSv2L8_aAxaey8CLjQBjGC9B4nRM,191
18
+ kash/commands/base/basic_file_commands.py,sha256=7aZ5ZuSTCZE8jilDxD_41C7Ie88nmx9aGgiJCQLasCA,6359
18
19
  kash/commands/base/browser_commands.py,sha256=iYvpW4D_tlhW_p0cq3A6YO9UGCdHtvzIQiNMDwCY07A,1574
19
- kash/commands/base/debug_commands.py,sha256=PHEUfNTVW2QKdcGYlHSCeqZYWyvqjJ8MX1TrNeXcu8c,7337
20
+ kash/commands/base/debug_commands.py,sha256=9I5W3SMQvsnpcs-b6CJCYu1Ydl6gIoTUcDZxvn1dN3g,7643
20
21
  kash/commands/base/diff_commands.py,sha256=U2geK6TLji9hnSfKW1DDGICaawm9p6Ht_Way6W_34AY,3446
21
22
  kash/commands/base/files_command.py,sha256=mGvFNHadG3c9tmOxCFJm-TjiK8e7mDb7kS0o75N2Clc,15947
22
- kash/commands/base/general_commands.py,sha256=522ZnL-kDDmLjDdFADCS6eYMI1W_6aCLSI-D4mqVznA,6608
23
- kash/commands/base/logs_commands.py,sha256=jocUYQAcL8IN5u4izfAz1vcg7XoZEXpo6F5xbCHiG2A,2939
24
- kash/commands/base/model_commands.py,sha256=nnkZtx_fSQNnEcvRUcbyDTvwQX75j7Ay23HXWpnWdag,1766
23
+ kash/commands/base/general_commands.py,sha256=KaCbzk7o-ejwXE_H3PB3MrN00uTinP3T8uHKYrGPrIw,6946
24
+ kash/commands/base/logs_commands.py,sha256=IyNgxaAoa5LlS-VxD_x8bXTVbD04pT8qEHlIJNM09UU,2963
25
+ kash/commands/base/model_commands.py,sha256=d17a2NvfDbwV1y8gyZVsOtX-j5H5we5OEXM9TxTqvBs,1790
25
26
  kash/commands/base/reformat_command.py,sha256=C4EJz4DRrNon8TLgzlUeR64iLIdorGwx2nRGviI8zxs,1863
26
- kash/commands/base/search_command.py,sha256=L1z894CRR5kmAsfN6HpHhMHR_ZwI0XKPyXAKe74jcP4,2212
27
- kash/commands/base/show_command.py,sha256=VgwrOfoBSm072XICriN7HFU-8X305zKBQPKfzK0R3bQ,2754
27
+ kash/commands/base/search_command.py,sha256=FXtP09HmmfHRrjenvmU4j0Lcw34piIzdI3UFGbUQ1tg,2201
28
+ kash/commands/base/show_command.py,sha256=J0zw8gBcDQJ0nI47EkrGY9VfNFb_thQXcxNCele9av8,2895
29
+ kash/commands/extras/parse_uv_lock.py,sha256=Uwu6uq5mmHEKdQMTyiYxiLQ5FJSI5rGtVn6JQtzyufU,5542
28
30
  kash/commands/extras/utils_commands.py,sha256=rz3N7VxoUHvCxksRt-sLubkvyW-VH9OTltLEMEnjRfU,769
29
31
  kash/commands/help/assistant_commands.py,sha256=BhGhtyoiEbu6xYfi-r47g_U4pxptUkucyNmiv5_kg34,3042
30
- kash/commands/help/doc_commands.py,sha256=V8nbYl2VNiIS3sZvNjn6vxoDO743dSz_schWY4up2Fo,3207
32
+ kash/commands/help/doc_commands.py,sha256=7lKR7mzue2N7pSkNqblpFJy892fS5N6jWVOHqeXziHw,2466
31
33
  kash/commands/help/help_commands.py,sha256=eJTpIhXck123PAUq2k-D3Q6UL6IQ8atOVYurLi2GD0A,4229
32
34
  kash/commands/help/logo.py,sha256=W8SUach9FjoTqpHZwTGS582ry4ZluxbBp86ZCiAtDkY,3505
33
- kash/commands/workspace/selection_commands.py,sha256=qSR2_2IZ6A4hHF70FpWI2sIQj_IAKGy-RlEoy7vCfi0,7196
34
- kash/commands/workspace/workspace_commands.py,sha256=vULwaisjpWsg0OymDOI9c_gvqh4Ivmj9qd8aHLdkrsA,22544
35
- kash/concepts/concept_formats.py,sha256=701gEnqWLrK_ElrKhwlzXuwqRYUZ7OATyy0k2EUBjoA,807
36
- kash/concepts/cosine.py,sha256=Nke3WF9XB305dWYCzko7vmIwxOWgBu_RlpR-tnMq0ik,1422
37
- kash/concepts/embeddings.py,sha256=vx8klwgPc6D7oswWD5MfA3xGCke8zEwS1cGGln7P388,4249
38
- kash/concepts/text_similarity.py,sha256=UKwcpmhlMwZTxdEpKc2Sv5I6H9a2Mrk8WpOQ_IVAgQY,1783
35
+ kash/commands/help/welcome.py,sha256=F4QBgj3e1dM9Pf0H4TSzCrkVfXQVKUIl0b6Qmofbdo4,905
36
+ kash/commands/workspace/selection_commands.py,sha256=nWWIN-8EnEgjgWIbQevqz5_3iDbcIJT3ffQg-_WAlHU,7451
37
+ kash/commands/workspace/workspace_commands.py,sha256=DkcDVynFSjuC8_S96g0DBWg-AgPzY3JtTBfnDlREceA,22694
39
38
  kash/config/__init__.py,sha256=ytly9Typ1mWV4CXfV9G3CIPtPQ02u2rpZ304L3GlFro,148
40
39
  kash/config/capture_output.py,sha256=ud3uUVNuDicHj3mI_nBUBO-VmOrxtBdA3z-I3D1lSCU,2398
41
- kash/config/colors.py,sha256=fAO7heiAq3wUVw-ezZEdFI0PFDoSJAZUD8YOq7oL_uk,9845
42
- kash/config/env_settings.py,sha256=68_pTVmNiIVufge1Ge50_1chQXN3WZmt9u7el0l4FxQ,1718
43
- kash/config/init.py,sha256=O3wLzjeRH6jRdQJyLcLCsu5zi94xRNIBjdbnOnz7lLM,532
40
+ kash/config/colors.py,sha256=gnbK5YnPH9fhtyOzCy5vGgQXRLhOzAxc441xMscvfkc,9949
41
+ kash/config/env_settings.py,sha256=DXp9Q9u-EC7cK0nyXIcKvPV9DuChvoVw7QCe7ZGe3Rw,2225
42
+ kash/config/init.py,sha256=aE4sZ6DggBmmoZEx9C5mQKrEbcDiswX--HF7pfCFKzc,526
44
43
  kash/config/lazy_imports.py,sha256=MCZXLnKvNyfHi0k7MU5rNwcdJtUF28naCixuogsAOAA,805
45
- kash/config/logger.py,sha256=i1uSgMZJZFAD5imCUZ2YkdljIusNwkuhx5joFibYHeQ,11105
46
- kash/config/logger_basic.py,sha256=-hFuWQN3GNuBr3K4OsNzJpeRHxXD_ELu_CSiTiUuNCY,1526
44
+ kash/config/logger.py,sha256=uy6KXsCjvr_-6IB45wmNNDgkkTcFLxH56QPxx8-0MT0,11537
45
+ kash/config/logger_basic.py,sha256=yLZtDqIETBvZTilLDI-yJahmhVVW4twCNyKlsREEq0g,1511
47
46
  kash/config/logo.txt,sha256=P4RO1cJ9HRF1BavTp3Kae9iByDNhzhEC-qLAa6ww1RA,217
48
47
  kash/config/server_config.py,sha256=eQ1yxDk031QI0Efp0I1VetqQd9wG7MrLVBCHFm4gp2g,1790
49
- kash/config/settings.py,sha256=OGcGNZ1fH9ITiTbS1FSLBjM9YgM0yx1dOZ3RSeGFBWo,6858
50
- kash/config/setup.py,sha256=ESJYliOm1coyvOdliaz9654I_x1mbNZqS-3tDuqUpsw,2013
48
+ kash/config/settings.py,sha256=SwCe1ttV0vKA4Koin1I6RqHplMBlixlHhf5N2bOLjWo,8425
49
+ kash/config/setup.py,sha256=AgeLPGM01C5H5z1_WK-zoWb_HqryJsQ7sU1yN5qca9E,2531
51
50
  kash/config/suppress_warnings.py,sha256=yty5ZodMLIpmjphRtcVmRamXfiWbyfga9annve6qxb0,1475
52
- kash/config/text_styles.py,sha256=y9z-4b8fCijcb46O0OGeF03WTV9DyvZKDtSjKmuhIWI,13827
51
+ kash/config/text_styles.py,sha256=3k0iar_hDW0iv7JKi5bKHyQZFOGzDjA8x0IaFi69mj8,13498
53
52
  kash/docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
53
  kash/docs/all_docs.py,sha256=NutfgU8VOA7_K2HX18FoOHVvvLL14dALoCxK9qDbQ04,3157
55
54
  kash/docs/load_actions_info.py,sha256=D9uv8gdBtkBmdbFZeyIigsupPF9_WfidHVwWQrlggI0,937
56
- kash/docs/load_api_docs.py,sha256=lBxJSqa--epCvxnC7_tXKdaCtrub0pvUMK_0QU6UO88,511
55
+ kash/docs/load_api_docs.py,sha256=6fj2Y92JWE-edYWh5mvSFmZp8YVrIunXXq_CNbqgk5c,484
57
56
  kash/docs/load_help_topics.py,sha256=49RbwYS_Qn8JJI5q8Nlj-SpQ95xRDOSGuEKOWaDhUSM,1583
58
57
  kash/docs/load_source_code.py,sha256=ysVZKUnLOrnRAIo_M25tPcYO64_fBdssD3-2XUx-4hg,4123
59
58
  kash/docs/markdown/api_docs_template.md,sha256=nUjrV5FhDql8odjjPiwOK8roCUiauy31G2ARiS_OGiQ,1457
@@ -63,7 +62,7 @@ kash/docs/markdown/warning.md,sha256=bG0T3UFqAkzF8217J8AbIbQ7ftJ_GKMRilIGq9eLdYc
63
62
  kash/docs/markdown/welcome.md,sha256=yp_tmGXGIb8043ZDIL97Q1uaKVys7-ArHCprgDlon7w,611
64
63
  kash/docs/markdown/topics/a1_what_is_kash.md,sha256=EE1ImWkkXHImmpe24QEau30suUMBRllHa0e6e99MUGQ,4983
65
64
  kash/docs/markdown/topics/a2_installation.md,sha256=fzx2rkMK-hJh9XlFqHutGVFZS5OkweZYizJO5_FCqHw,6019
66
- kash/docs/markdown/topics/a3_getting_started.md,sha256=XfDx-qgKHcQ1SBVTtY4aOiOzXWW6i69j-1fTWhyzZLk,9535
65
+ kash/docs/markdown/topics/a3_getting_started.md,sha256=qUeFYAn18DkZn0JkkpIkoHh8LFRipeQBaoYa9U8mDK8,9577
67
66
  kash/docs/markdown/topics/a4_elements.md,sha256=XNJRw-iqnytiIHOAshp1YnUpHM5KBgFAhuOdp_fekxQ,4615
68
67
  kash/docs/markdown/topics/a5_tips_for_use_with_other_tools.md,sha256=VGUdq8dm78E8PFbNR9BmV8Gj-r8zP-vOQz8TibQmGw0,3259
69
68
  kash/docs/markdown/topics/b0_philosophy_of_kash.md,sha256=ADtgbvv756vKrJPhdvNGVzJVedOgo6ak7_vGEEFi8Sc,8749
@@ -78,99 +77,101 @@ kash/docs_base/load_recipe_snippets.py,sha256=nGw4xlbfsKdR6ZngBBGBeRHBwfSPpI_gnJ
78
77
  kash/docs_base/recipes/general_system_commands.sh,sha256=rFNPuLj3Md09L5yzWx6ILjaR-mFROSlL1cmpWiyJ9WQ,208
79
78
  kash/docs_base/recipes/python_dev_commands.sh,sha256=9vJsQiDZKJ7ShokFnzc2Jsto6n87MNRkbgcc2Ee9Kro,179
80
79
  kash/docs_base/recipes/tldr_standard_commands.sh,sha256=7nPES55aT45HF3eDhQRrEUiWRpPdvvp40Sg88uADa80,60491
81
- kash/exec/__init__.py,sha256=VJCPszxT2AUZuaE2GQROgg3RDqVdCoK0gmfsGAT1olQ,625
82
- kash/exec/action_decorators.py,sha256=xb_0l-_IpgFkapVsWRZS848bVeSFJHGG5nZnNZnl63A,16422
83
- kash/exec/action_exec.py,sha256=9Wl4XxfxU6q6B-WcKCPou5V4SpTPUkimUwxhs6rWjEE,17294
84
- kash/exec/action_registry.py,sha256=PPS_eB3FjOhtOpPV6VWG5lbbk1nKjjWVG_T_hdKjFVc,3786
80
+ kash/embeddings/cosine.py,sha256=Nke3WF9XB305dWYCzko7vmIwxOWgBu_RlpR-tnMq0ik,1422
81
+ kash/embeddings/embeddings.py,sha256=vx8klwgPc6D7oswWD5MfA3xGCke8zEwS1cGGln7P388,4249
82
+ kash/embeddings/text_similarity.py,sha256=t5I1s5pW9WKBej5h9msg6J4rFzRRY17oJCCa8UFxd28,1787
83
+ kash/exec/__init__.py,sha256=m9UFokJm7EXCMPETXf1hE63zIZDiAfVGRAHb6SmaHbs,1018
84
+ kash/exec/action_decorators.py,sha256=8e055Z0HqKwK1Aif5UqM5TheYLB6LtWbTmGr1-QU8aU,16917
85
+ kash/exec/action_exec.py,sha256=Fo5HK7H87xw2G2FUr8PPgt-eFev2y4caTU9tW15ip4A,17942
86
+ kash/exec/action_registry.py,sha256=numU9pH_W5RgIrYmfi0iYMYy_kLJl6vup8PMrhxAfdc,2627
85
87
  kash/exec/combiners.py,sha256=AJ6wgPUHsmwanObsUw64B83XzU26yuh5t4l7igLn82I,4291
86
88
  kash/exec/command_exec.py,sha256=zc-gWm7kyB5J5Kp8xhULQ9Jj9AL927KkDPXXk-Yr1Bw,1292
87
- kash/exec/command_registry.py,sha256=5YHOVk0GPvafbizgukpXuHdESkZgvTC4vUCuS4E6iAk,2049
88
- kash/exec/fetch_url_metadata.py,sha256=NcQrDncWiA_TJpQ-B3IR6FgM5bAW4lAQg-Oso4azmck,2735
89
+ kash/exec/command_registry.py,sha256=1s2ogU8b8nqK_AEtslbr1eYrXCGDkeT30UrB7L0BRoM,2027
90
+ kash/exec/fetch_url_metadata.py,sha256=mgS4zwPw0HAVYIroTeKN_whMyoVE2DUDN_W6ylO3gVw,2656
89
91
  kash/exec/history.py,sha256=l2XwHGBR1UgTGSFPSBE9mltmxvjR_5qFFO6d-Z008nc,1208
90
- kash/exec/llm_transforms.py,sha256=0a27ELndHjV8sj33QLnYAA_13USF0yQVxFkQH2IgvW8,4260
92
+ kash/exec/importing.py,sha256=i1utrbqpn8MKfCQ06vavka_cjNaYRHaWnsy0ygNRbxI,1825
93
+ kash/exec/llm_transforms.py,sha256=cHbvtPdNNA3Pi8yY9-y2tZNYdsVUaJ8RA4RKfW1cCj0,4230
91
94
  kash/exec/precondition_checks.py,sha256=HymxL7qm4Yz8V76Um5pKdIRnQ2N-p9rpQQi1fI38bNA,2139
92
- kash/exec/precondition_registry.py,sha256=-RlMI5N4lx5_Tm6cB9Vjd2KnVBfgqKedlouxIy7pOW0,1266
93
- kash/exec/preconditions.py,sha256=fO7jhDiFy9FrGgBBCsbRg7IlzMQfR6AkPzN6uzvDIOw,3922
95
+ kash/exec/precondition_registry.py,sha256=cmp0mUfLS42AbAByDhwGx8GWz9PuZNR7z5rPZW9WQE4,1244
96
+ kash/exec/preconditions.py,sha256=NbkhTG_ga3KjIGGLrjOifNDx8Ea5VyzSW1Ku54dwIew,4349
94
97
  kash/exec/resolve_args.py,sha256=2sNk3dYmTfl8z3OBVrcgnaG0FonhKE_08MjlEap6qdc,4300
95
- kash/exec/shell_callable_action.py,sha256=rOsArl_GLmBVipa8-YK5hncmK4jqd7iDhxAs5ZzAxAk,3548
98
+ kash/exec/shell_callable_action.py,sha256=HsufAc4fWNWOZvciwzujs4CABKOgB5emWP4Ux1LbQZ4,4302
96
99
  kash/exec_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
100
  kash/exec_model/args_model.py,sha256=gquOD0msFA-5xhNU-3R5l8wlwyAMefpMHltpxrDlYGQ,2662
98
101
  kash/exec_model/commands_model.py,sha256=iM8QhzA0tAas5OwF5liUfHtm45XIH1LcvCviuh3As7s,4923
99
102
  kash/exec_model/script_model.py,sha256=1VG3LhkTmlKzHOYouZ92ZpOSKSCcsz3-tHNcFMQF788,5031
100
103
  kash/exec_model/shell_model.py,sha256=LUhQivbpXlerM-DUzNY7BtctNBbn08Wto8CSSxQDxRU,568
101
104
  kash/file_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
- kash/file_storage/file_store.py,sha256=6FJZVwI8h0kzA0r49h0lAtasWScTlXvoMbukRe4oIFA,26023
103
- kash/file_storage/item_file_format.py,sha256=HNoZgwkG9BfO0S640Ca4ePJ924rnNuZows984g4ZrWQ,5280
104
- kash/file_storage/metadata_dirs.py,sha256=VU5lgj3C_0t5JxMy4kE6B5AalLjuE0QfcvPuYiEexgQ,3744
105
+ kash/file_storage/file_store.py,sha256=GqgU6htX6mNZfqZuNACLXzFlOdjw53fJOqvUCOjcTcU,26578
106
+ kash/file_storage/item_file_format.py,sha256=oe71pB7hK6tkU0tBuUEjiuba0NuO7ovkJ1oUqd0UaRo,5368
107
+ kash/file_storage/metadata_dirs.py,sha256=9AqO3S3SSY1dtvP2iLX--E4ui0VIzXttG8R040otfyg,3820
105
108
  kash/file_storage/persisted_yaml.py,sha256=4-4RkFqdlBUkTOwkdA4vRKUywEE9TaDo13OGaDUyU9M,1309
106
109
  kash/file_storage/store_cache_warmer.py,sha256=cQ_KwxkBPWT3lMmYOCTkXgo7CKaGINns2YzIH32ExSU,1013
107
110
  kash/file_storage/store_filenames.py,sha256=95TVIrG0C36Rf77-uhqqfSrt-Xq6DTD0jZDoKnIODD4,1663
108
111
  kash/help/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- kash/help/assistant.py,sha256=wfficMqXxY10HIPZpFHBchw_aiz0eY0dNBsxWCYy81Y,11529
110
- kash/help/assistant_instructions.py,sha256=9CU7saqsJeP6UBmwGuHEdQ8IXd3s60ViNECbvCOYvQE,2576
112
+ kash/help/assistant.py,sha256=R0XHNi-h51QoQ7rGouD2chrDPGomYaPQUqJdvpjlCs8,11535
113
+ kash/help/assistant_instructions.py,sha256=jW5XAsmLx8YZMKSDJgWnqo9Vwe7VuiTURQHjKBqr_L8,2549
111
114
  kash/help/assistant_output.py,sha256=9sM-OVLc6eMSOkxyovB88dNlsknFpf8Wz89Zp5PuEA8,1668
112
115
  kash/help/docstring_utils.py,sha256=80vcEGR05G1wwIfzaKhX5QzU38mkKna-gN6_wTNHjXg,3208
113
116
  kash/help/function_param_info.py,sha256=DHhd3eXI47IjrOOsWSwOC1Xal4X4h9qtZfXS67d-mqU,1682
114
- kash/help/help_embeddings.py,sha256=yTSd4C11QU_K6l2gkeeFCFMkHO0pu9wNjfGQQzCrDV0,2773
117
+ kash/help/help_embeddings.py,sha256=_ca7hPo_2UPwSGnB2k3KbcNU1b_I9OMI4RH2Z2E1PCU,2777
115
118
  kash/help/help_lookups.py,sha256=0dtuLWEXncqhJCijC98IA9stBDNNcJewt1JYqMLkTx4,2029
116
119
  kash/help/help_pages.py,sha256=XyV3SN1cvGjpS8xAbZ_X_6Z9hTIH7vXdgK8DCX2cwNg,3886
117
- kash/help/help_printing.py,sha256=4UpYfZQmWjxT9ZLuMMWYaj2AN69Zj8dC2k2K9TEkl1s,6196
120
+ kash/help/help_printing.py,sha256=NAJa8qfaZGce5NKtUqdyDE8Ey0ag2ywjL2LP8ACT060,6078
118
121
  kash/help/help_types.py,sha256=xo0AXfaNjlMrWp6dkGixo6P61n1tIhFhlvv9sWhNBrI,7909
119
122
  kash/help/recommended_commands.py,sha256=jqc3TjWFBqDJ-iSzXn8vTOplb4uHndwvdAGJfcUV_qs,2486
120
123
  kash/help/tldr_help.py,sha256=bcu__MIF4vYlZEeqQqieGIBcRhNCTK5u8jPV08ObzCI,9654
121
124
  kash/llm_utils/__init__.py,sha256=3yjign7KD-kM3ZBBcgtrZz-zjJ2Yx2Q-9bzknBx5vbU,401
122
- kash/llm_utils/clean_headings.py,sha256=97tpXPFXHh4vGC5s4fztPG3vAJcx44doaYYTRaKwCl0,2329
125
+ kash/llm_utils/clean_headings.py,sha256=TGUcPSmUMepTPF5st8b4Jbe9TzZ6HD0Jf_9Nh1SoilA,2330
123
126
  kash/llm_utils/fuzzy_parsing.py,sha256=bbG2Y7i5w6kxAVPAixyluv3MDS2hW_pkhnJpVOLHZQc,3278
124
- kash/llm_utils/llm_api_keys.py,sha256=QA_VwKmgiuT6rT3HNo8_Y_ITWmIsQf8fXwHLl4TO3H8,1095
127
+ kash/llm_utils/llm_api_keys.py,sha256=Vy2LdX3-3czlQSrHn1Iq7_GXfeu7vETZWKGfCOFAWrg,1086
125
128
  kash/llm_utils/llm_completion.py,sha256=ig_rZCHjaOZbt5D-3sOPsSFLpO8AMDXDi40jzdGeOk8,5296
126
- kash/llm_utils/llm_messages.py,sha256=_4VoyCSjCtUuYcaFAXyQtrv-UPZEN7L1DJojDR_ZkQY,1203
127
- kash/llm_utils/llm_names.py,sha256=M_5uGfWfd0M1ZimDXqalIhANPcwcyul-cdjJE6rS3-E,3609
128
- kash/llm_utils/llms.py,sha256=VKul_U2jOcJSnqM-rpRCbdRk4Bczk4qiaAG_NVVoJYA,3282
129
- kash/local_server/__init__.py,sha256=VKqWymz0rvWXSymDmurOaJP2iKGQ60LSu5keUjqkaqs,95
130
- kash/local_server/local_server.py,sha256=YQVZj6IRnnrimISK0q8TjbIXkEizCnJP4a_5fJ2XYFg,5704
131
- kash/local_server/local_server_commands.py,sha256=85BLT4t6XZPzhuE__GPZ3gL-vNhCUqd1F0weWOslaLc,1574
129
+ kash/llm_utils/llm_features.py,sha256=NXZ3nvwcsVe0RLj3TtlK9gUu-UWoxdCU6Uw2X2IChrk,1773
130
+ kash/llm_utils/llm_messages.py,sha256=70QwIIvdwo-h4Jfn_6MbEHb3LTUjUmzg_v_dU_Ey__g,1174
131
+ kash/llm_utils/llm_names.py,sha256=VZbdKnoeBx_luB5YQ-Rz37gMt3_FcueJdp40ZaQbpUA,3620
132
+ kash/llm_utils/llms.py,sha256=Zz45v7qrmBNGnmyF-Mn5Q4F1dZGFT2xf_kmWGUMSUUw,3518
133
+ kash/local_server/__init__.py,sha256=kLah74GG0msEARgH6CrilY3OUPuivvx_fXVCqDzDMrc,142
134
+ kash/local_server/local_server.py,sha256=EugjL30VM0pWdZDsiQxU-o6EdEa082qlGd_7RHvI5tk,5863
135
+ kash/local_server/local_server_commands.py,sha256=xJQ1vHVWqkbPwRMw9LwHE8CnKrb8uWeXItI1ruQPx2Y,1584
132
136
  kash/local_server/local_server_routes.py,sha256=o6yMhugVaJCDHJsEQf8vjb6EbhTyqx1cikBoODZSdIY,10750
133
- kash/local_server/local_url_formatters.py,sha256=u5sRVTIaoibIMC4PwSDDuQWYho7SQd64Z2PwQZQDxig,5350
137
+ kash/local_server/local_url_formatters.py,sha256=SqHjGMEufvm43n34SCa_8Asdwm7utx91Wwymj15TuSY,5327
134
138
  kash/local_server/port_tools.py,sha256=oFfOvO6keqS5GowTpVg2FTu5KqkPHBq-dWAEomUIgGo,2008
135
139
  kash/local_server/rich_html_template.py,sha256=O9CnkMYkWuMvKJkqD0P8jaZqfUe6hMP4LXFvcLpwN8Q,196
136
- kash/mcp/__init__.py,sha256=-MWyjlY2MLlcZ0NdBd5JFN2SlKfnlfvZ4SY02wpNnck,84
137
- kash/mcp/mcp_cli.py,sha256=uUKBmlPKcK8NqZUICw5pinWMkaQJPemHCAl03Uv-njE,3815
140
+ kash/mcp/__init__.py,sha256=kLah74GG0msEARgH6CrilY3OUPuivvx_fXVCqDzDMrc,142
141
+ kash/mcp/mcp_cli.py,sha256=jeNmqYTlYpDeFoOsZqtixIQ5ywoIB1LJZaK28opn4p8,3838
138
142
  kash/mcp/mcp_main.py,sha256=6PhjKwp631mezDTUAd-pL8lUZx9Gl7yCrCQFW61pqJU,3167
139
- kash/mcp/mcp_server_commands.py,sha256=oNwgOjgZzanWkoHbO-QV_2JpIq6brItLrRgAOuS0MZI,4144
140
- kash/mcp/mcp_server_routes.py,sha256=B2cguTHuxquKoLoWCdaK8s2axxLt6GRfZkddLU3idAU,10642
141
- kash/mcp/mcp_server_sse.py,sha256=66u6D6QbWZeXVcciZURqa6vIRFSQZahPFjFEPU_D7go,5887
143
+ kash/mcp/mcp_server_commands.py,sha256=dPvW6fE5FRQuaK5Gurg9_Mjk-U-sdoQ17tXOm3_Wh6Q,4163
144
+ kash/mcp/mcp_server_routes.py,sha256=_7KMZM-iNvySXZcPxRMrOsJKcr7L_OtVHujAqHkPJV0,10674
145
+ kash/mcp/mcp_server_sse.py,sha256=_D61cRWMuxgMrk-KxhkRLaaXXpgzJJa0sOB3uRxR0XM,5886
142
146
  kash/mcp/mcp_server_stdio.py,sha256=u-oeIZKwzIAGlKmBpipC-hfNQKx36Md9hST11y3AZUY,1174
143
147
  kash/media_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
148
  kash/media_base/audio_processing.py,sha256=k8V3SpQrSzdxHiInei4z6LycoAnfpQ2dttOfWhWLTX8,2874
145
- kash/media_base/media_cache.py,sha256=hm2kiX9Mept1ce2rl_xxbruiXgnOUcRW3pAZQo3u0jU,7458
146
- kash/media_base/media_services.py,sha256=l4bbIMCGbUIrkf6vhoe5Y6zzEBC0efXrKqHtuvWPwPo,3429
147
- kash/media_base/media_tools.py,sha256=VjP6ulRLy5Ch-YX4A_YXRcADfbqEHMlWXFBDcPpOK-w,1471
148
- kash/media_base/speech_transcription.py,sha256=ccE37w5t7vJuxgF7zGe7txsv6ob2ed5gfDhTUNrLe_U,7816
149
+ kash/media_base/media_cache.py,sha256=0YnZBCPbi12TG0eZoa-02XBoRVZAEmmR6XT8PS-avBI,7453
150
+ kash/media_base/media_services.py,sha256=7H7Y-WDjvZCidoLCsWi01xfuJoP7uiUklviwN_78crE,3406
151
+ kash/media_base/media_tools.py,sha256=enzSebW41vDBGWUwkEn5udhRHmSBvH01MAt5rY1s388,1466
149
152
  kash/media_base/timestamp_citations.py,sha256=IHTvlZD3lIfe8T2uHFitgom82WahdHBeKqyc2OjUi9g,2368
150
- kash/media_base/services/local_file_media.py,sha256=2_qlhWpg377vqb4BALmN5zCraNR05HMDIRdTaybGf7k,5411
151
- kash/model/__init__.py,sha256=bX2mdMhshK79ljNtD0Su8CQchRwtmXuNcP-c6UxEZjs,1703
152
- kash/model/actions_model.py,sha256=mUBXB4ijn5c3JTGJZcDrZioEGvna4ytqsjCGi3mL-4Y,22191
153
+ kash/media_base/transcription_deepgram.py,sha256=AENcjBMyzf01yx-OrsQ5tqOg0-xJigvuMrm0IJgFRF8,5108
154
+ kash/media_base/transcription_format.py,sha256=rOVPTpwvW22c27BRwYF-Tc_xzqK_wOtUZpOPlvkHiDY,2344
155
+ kash/media_base/transcription_whisper.py,sha256=GqvroW9kBAH4-gcbYkMgNCfs2MpMIgm1ip3NMWtJ0IE,1169
156
+ kash/media_base/services/local_file_media.py,sha256=-A-tK6XP7XDCqXQIAoohesFZ3OIvpXWsDoktYBvBuNA,5399
157
+ kash/model/__init__.py,sha256=3cF2ExBzLfMsHul5IAjOywyBjdMthWFtbvLkjqc_BjU,2949
158
+ kash/model/actions_model.py,sha256=RSPGAdrBYkSerUPalYMx3Z1xm570Edoz-5buWX7WFG8,23289
153
159
  kash/model/assistant_response_model.py,sha256=6eDfC27nyuBDFjv5nCYMa_Qb2mPbKwDzZy7uLOIyskI,2653
154
160
  kash/model/compound_actions_model.py,sha256=HiDK5wwCu3WwZYHATZoLEguiqwR9V6V296wiKtGIX8s,6926
161
+ kash/model/concept_model.py,sha256=we2qOcy9Mv1q7XPfkDLp_CyO_-8DwAUfUYlpgy_jrFs,1011
155
162
  kash/model/graph_model.py,sha256=jnctrPiBZ0xwAR8D54JMAJPanA1yZdaxSFQoIpe8anA,2662
156
- kash/model/items_model.py,sha256=urGrIRKPbA-vDkX4jEwLQc5dzU3LN_kvH_34uwOOrAU,29817
163
+ kash/model/items_model.py,sha256=6siBGrChZIrr8lk1XFsME-zzz7Sz7ButAtSRPtUqL8w,31060
157
164
  kash/model/language_list.py,sha256=I3RIbxTseVmPdhExQimimEv18Gmy2ImMbpXe0-_t1Qw,450
158
165
  kash/model/llm_actions_model.py,sha256=a29uXVNfS2CiqvM7HPdC6H9A23rSQQihAideuBLMH8g,2110
159
166
  kash/model/media_model.py,sha256=64Zic4cRjQpgf_-tOuZlZZe59mz_qu0s6OQSU0YlDUI,3357
160
167
  kash/model/operations_model.py,sha256=OGNtCY0QDqHtRNL5ueVpmOASYrwg-ysoUKMvBsQTMWk,5194
161
- kash/model/params_model.py,sha256=YZO1TvnZ714CEG2Si7Vq6zEQOBdzfIC1Zkbk5bbAWsk,14292
168
+ kash/model/params_model.py,sha256=qGhsGvtDQoSqWkrKk9QZZfEh-jO1q2V-s-p6X-F37_M,14939
162
169
  kash/model/paths_model.py,sha256=H2CZNieTPF2ceW6QQDiwuZwpLddoo6ysazBi3THeNvM,15807
163
170
  kash/model/preconditions_model.py,sha256=-IfsVR0NkQhq_3hUTXzK2bFYAd--3YjSwUiDKHVQQqk,2887
164
171
  kash/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
- kash/shell/shell_main.py,sha256=f7_cph3Tf8ZanfXdyuGR6uRUzU4fs8r5y1vyUk5eRqk,2082
172
+ kash/shell/shell_main.py,sha256=pR2a0Y0kXwXJBa6X7FayiM4SGtSs7fclDADUjMI3YEU,2092
166
173
  kash/shell/version.py,sha256=FRGs_jmzk6QiRPZfZv36SPzeyJCsVWZ_E2CKRkExazw,835
167
- kash/shell/clideps/api_keys.py,sha256=0JaUN1EREnALS5T0uCQ6R5ax3pYnrUOJEgOmrdH_SYc,3120
168
- kash/shell/clideps/dotenv_setup.py,sha256=4PXfTPJ5T4rbmOJKK3Fih3kwlQCONiPc-PRD7bYz_Bg,3823
169
- kash/shell/clideps/dotenv_utils.py,sha256=R0ZE2RixS6DbQerDufX5NXlApwI0CyymdHBSLiIPCCw,3534
170
- kash/shell/clideps/pkg_deps.py,sha256=n1_wM7sI6cHheQEsRAc04_nWy6qKxz9U6d3puobQgQ0,7809
171
- kash/shell/clideps/platforms.py,sha256=TA2Ji-QQNtsaGJ5owZPJxfFE82LfaaHfwaBRPjlT1Q8,175
172
- kash/shell/clideps/terminal_features.py,sha256=bGrjaNb1NoWJApAL9vYcQs8IXn6MyzY8yyIG0wkQOlg,1692
173
- kash/shell/completions/completion_scoring.py,sha256=MAWqcDJKDeWk1LzBIex-1MaG7G4QoRsXflJBlM0JgAQ,9053
174
+ kash/shell/completions/completion_scoring.py,sha256=-svesm2cR1AA86jYcxlynXCBZON26eUJce93FlL2nQo,10209
174
175
  kash/shell/completions/completion_types.py,sha256=FocRXd6Df3Df0nL2Y1GevMx3FsljJwbQdVgWsIngpaQ,4793
175
176
  kash/shell/completions/shell_completions.py,sha256=yHCFs-XRNjReuEsmhEUi-iTE2MoZrUa3RDSKhVe5EfQ,8846
176
177
  kash/shell/file_icons/color_for_format.py,sha256=bFuE1lwiyUkgWB3Gk3jrch-9EIQz9thILQiX_a5dGb8,2034
@@ -182,47 +183,43 @@ kash/shell/input/param_inputs.py,sha256=FiGClMtMe0pv0y_45qJ9PKF61vn8SOPiNeh5yvH0
182
183
  kash/shell/input/shell_confirm.py,sha256=A17HTxx_DPnis2503Q_LOEW8P9yIWvaj1zHVz4LSz_Q,1070
183
184
  kash/shell/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
185
  kash/shell/output/kerm_code_utils.py,sha256=92A4AV-IFKKZMWLNZnd_zksNFMBgE_VNXySyn0Kn6Zk,1673
185
- kash/shell/output/kerm_codes.py,sha256=9RDvl03sYnR4mQ9suzO2OWeAiNhlOU8pXb8Qj12flwU,18878
186
+ kash/shell/output/kerm_codes.py,sha256=KLVdTM_dL_NeYmGbllzsQoW4IHXJjEsgqqIp1s7P1yI,18877
186
187
  kash/shell/output/kmarkdown.py,sha256=RRB5b0Ip0KZ71vnJKFfvxerYkeDFTCVTlHqHfmMy80Y,3675
187
- kash/shell/output/shell_formatting.py,sha256=wPAP3maoIUB5kWGysMdedAEd5dWzfWZB1749SubRloU,2971
188
+ kash/shell/output/shell_formatting.py,sha256=oxmAeJ2j0ANYSUsL15CUv--KcGlQ6Wa_rywXSDlsZM4,3331
188
189
  kash/shell/output/shell_output.py,sha256=-Y0BUh4DOlhyVdawBXvUa6UUYkv38iaKAay-57yBb7Y,11067
189
190
  kash/shell/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
191
  kash/shell/ui/shell_results.py,sha256=vO_9UUnI_cr1ZJqCSFgeVwGFy7JLsrEpIAobKvTdkmo,4109
191
192
  kash/shell/ui/shell_syntax.py,sha256=1fuDqcCV16AAWwWS4w4iT-tlSnl-Ywdrf68Ge8XIfmQ,751
192
193
  kash/shell/utils/argparse_utils.py,sha256=UD2NZXyOlziWf-fPtGCmcmHNmFbNTcFX1UDtx67bJeE,649
193
- kash/shell/utils/exception_printing.py,sha256=8XxY22cM0dZeyNW0B8mesiS3LIK8w0Y-AeiLqq2r_PA,1570
194
- kash/shell/utils/native_utils.py,sha256=4PLTRrFxzdFlUjqfD8lKjL07wIcP2Zi2yTQt1I-9U8U,8870
195
- kash/shell/utils/osc_utils.py,sha256=pa1v4SRRWw7EZVZ-cQDjhxaeXpd5N-mr2MQQ1UdYLSQ,2768
194
+ kash/shell/utils/exception_printing.py,sha256=jkSbEZLQmMjLPMRIBolZSkrACYMHJJ_lh6yZQ7Gv-9g,1898
195
+ kash/shell/utils/native_utils.py,sha256=FtIjjB1sOgNifTx1u7nKSAwg9A8wc9-fkACw2_xWnNg,9153
196
196
  kash/shell/utils/shell_function_wrapper.py,sha256=8ogOb3Crl06KovlxMs0mOyB7uKzoz2ru_hUSVzxr83c,7439
197
- kash/shell/utils/terminal_images.py,sha256=h1JPwfI7XMwPu1HMDolK6zCETt-lYvt_hKDBsZMvKxU,4190
198
- kash/text_handling/custom_sliding_transforms.py,sha256=5LO-tDdlW5xE9sFPVyUfbihdp1Xxf8UuRGjpj3_jYpY,9665
199
- kash/text_handling/doc_normalization.py,sha256=Fh5T6ESmN2NsHd76tyjYidTvS1DLvG1-18-SMdcqkSc,2427
200
- kash/text_handling/markdown_util.py,sha256=4E4fkOgw0YTNt1IToS1mb-dvtmAKQjIoWpnMPD60Pl4,4494
197
+ kash/text_handling/custom_sliding_transforms.py,sha256=stbvN8McdHqC8oOs7QYK0J-Rh3kBLxxxbw7kjlOLKfM,9764
198
+ kash/text_handling/doc_normalization.py,sha256=ghB5m8X1jrV350WsdcXt9-4jFHx1Jq-IuF8F4B1P8Ok,2538
199
+ kash/text_handling/markdown_render.py,sha256=ij_OL7Te6IQbf8mOQZReN_RpPU84TzplqmLzxVHY-mk,3656
200
+ kash/text_handling/markdown_utils.py,sha256=I011g0K6bWy9Sh3mttJFiMCokGtvCmqsBi9XP0WOaLE,6250
201
201
  kash/text_handling/unified_diffs.py,sha256=AS5el-uPkXwpRA9bD46dyMo-YBDXb7zRF_MH3c47shA,4335
202
202
  kash/utils/__init__.py,sha256=4Jl_AtgRADdGORimWhYZwbSfQSpQ6SiexNIZzmbcngI,111
203
- kash/utils/errors.py,sha256=IQqh2Xq2XFatjMROJ43cwnWaxMKeOw2RTwGWSGWVcug,3705
203
+ kash/utils/errors.py,sha256=tTosrR8Z2bJGoBDxBbmEJ4GPQhS6_P6ENeDUNdLDyRg,3815
204
204
  kash/utils/common/__init__.py,sha256=ggeWw1xmbl1mgCQD3c4CNN2h5WXFCsN2wXlCWurEUEI,161
205
- kash/utils/common/atomic_var.py,sha256=W2PfFgj8yRF6QvMkDlvYm0yqYKpws5EO5SkDTeHjL80,5402
206
205
  kash/utils/common/format_utils.py,sha256=IPMKhx-S_SyqiN1cwUKFLJhpt1hT9P4cKZYrfKd1mYk,2431
207
206
  kash/utils/common/function_inspect.py,sha256=kZfsRbVL4FIZniyAUy_U5HJ3G80_U0xns8jEM9p8dzI,6540
208
- kash/utils/common/import_utils.py,sha256=ErK7OqpymdVpsapE4zrbChoLG3zsMFRkr1aksfXBhwQ,3075
207
+ kash/utils/common/import_utils.py,sha256=FUsasP-PgxOtRIutm3SnCGH_MBPK6pxUb-oc6dXT0aA,3428
209
208
  kash/utils/common/lazyobject.py,sha256=9dmOfSheblOXgo2RRakMwgfPIKdTgtyrlm6dCKAze04,5157
210
209
  kash/utils/common/obj_replace.py,sha256=AuiXptUOnuDNcWDgAJ3jEHkLh89XIqCP_SOkgaVyFIQ,2075
211
210
  kash/utils/common/parse_key_vals.py,sha256=yZRZIa5GD9SlnBSn2YNZm8PRVKoSJMY8DCmdGujQj_I,2418
212
211
  kash/utils/common/parse_shell_args.py,sha256=UZXTZDbV5m5Jy39jdAQ6W8uilr1TNa0__RqnE8UmQ_M,10604
213
212
  kash/utils/common/stack_traces.py,sha256=a2NwlK_0xxnjMCDC4LrQu7ueFylF-OImFG3bAAHpPwY,1392
214
- kash/utils/common/string_replace.py,sha256=KX1IftQPYfIm_4CqpMeS8uRrRiSwx9LfyIajjw3Qfo0,2981
215
- kash/utils/common/string_template.py,sha256=PmmkcUpSxM2JzAzzbvrs6MEOlolD_-Qkuq3VeLPwo4Y,3758
216
213
  kash/utils/common/task_stack.py,sha256=C8tJ4liA9__04EBf75o16FhaBWyyHqSdYKFcZRPOXn8,4800
217
- kash/utils/common/type_utils.py,sha256=B4eUglfrxPd9Kx0r0n4P_Tz1RfCd7X6v6Vd5EehMKz4,4712
214
+ kash/utils/common/type_utils.py,sha256=SJirXhPilQom_-OKkFToDLm_82ZwpjcNjRy8U1HaQ0Q,3829
218
215
  kash/utils/common/uniquifier.py,sha256=75OY4KIVF8u1eoO0FCPbEGTyVpPOtM-0ctoG_s_jahM,3082
219
- kash/utils/common/url.py,sha256=o1lIgypMWSPLwhO85v27MTYcXVelf6M3ctrOpHrQM28,5782
216
+ kash/utils/common/url.py,sha256=hEDC0ImO3DLvaPRflcmiUZ1wK_Ilsm6_9fLaG23sUfo,6515
220
217
  kash/utils/file_formats/chat_format.py,sha256=Onby7Zany1UQSUo_JzLs6MIfmoXViZeOAacRTMVe92M,11818
221
218
  kash/utils/file_utils/__init__.py,sha256=loL_iW0oOZs0mJ5GelBPptBcqzYKSWdsGcHrpRyxitQ,43
222
219
  kash/utils/file_utils/dir_info.py,sha256=HamMr58k_DanTLifj7A2JDxTGWXEZZx2pQuE6Hjcm8g,1856
223
220
  kash/utils/file_utils/file_ext.py,sha256=HqUnCojgEuA4JSJwIK5ILPJU4TS4cXYNJmTNwC2tiwA,1783
224
- kash/utils/file_utils/file_formats.py,sha256=JrCyZ0hMXEm5BedH52ofYta1mVNfG7_RjX8IAIsYVb0,4914
225
- kash/utils/file_utils/file_formats_model.py,sha256=t99KAu6roFjdDqaVUfPXshO6fiZhPDL9gg3DoyJjJ40,13751
221
+ kash/utils/file_utils/file_formats.py,sha256=tmrmqM5YTxfvlpvqmeOVz0yVRuPxxIAkVZf1-D0fp5Y,4902
222
+ kash/utils/file_utils/file_formats_model.py,sha256=9Vp9vP7ECsnQIcJOpqYZymhcyw7vREvPrP6ovKpuLp0,13930
226
223
  kash/utils/file_utils/file_sort_filter.py,sha256=-hjNV0AvDTU64zTag9vOlZ7Bg5y04I8Bn61J43si7hw,7003
227
224
  kash/utils/file_utils/file_walk.py,sha256=cpwVDPuaVm95_ZwFJiAdIuZAGhASI3gJ3ZUsCGP75b8,5527
228
225
  kash/utils/file_utils/filename_parsing.py,sha256=sxrZGOv1d4YOCRRtLlpkpYdB-7fIQJqIzUDGH2_S9EA,3350
@@ -238,45 +235,47 @@ kash/utils/rich_custom/rich_char_transform.py,sha256=3M89tViKM0y31VHsDoHi5eHFWlv
238
235
  kash/utils/rich_custom/rich_indent.py,sha256=nz72yNpUuYjOsaPNVmxM81oEQm-GKEfQkNsuWmv16G0,2286
239
236
  kash/utils/rich_custom/rich_markdown_fork.py,sha256=M_JRaSAyHrSg-wuLv9C9P7SkehSim3lwkqQPuMIFkVw,26551
240
237
  kash/web_content/canon_url.py,sha256=Zv2q7xQdIHBFkxxwyJn3_ME-qqMFRi_fKxE_IgV2Z50,742
241
- kash/web_content/dir_store.py,sha256=k7_BQyqxApfayww8qtNICvPc3v-bsq89baDKOkdTm1c,3497
242
- kash/web_content/file_cache_utils.py,sha256=_6qKAzN9OGFEphVCvQfZvfb8m_Pxt7qEsTar1gncGAM,4055
243
- kash/web_content/local_file_cache.py,sha256=GnjxFxRl4nusx1rw9Pr3iMJRjUUp0n6rmhqBEEbMwLM,8374
244
- kash/web_content/web_extract.py,sha256=PviDL49S-up_5tR1mDRdaEn-Z7C5I6wb6fuJh8CwpzE,2054
238
+ kash/web_content/dir_store.py,sha256=BJc-s-RL5CC-GwhFTC_lhLXSMWluPPnLVmVBx-66DiM,3425
239
+ kash/web_content/file_cache_utils.py,sha256=VZfN6AD_yQT4Q-G3w5QRoCSFeynq0BSOUxcRmltQa0c,5070
240
+ kash/web_content/file_processing.py,sha256=cQC-MnJMM5qG9-y0S4yobkmRi6A75qhHjV6xTwbtYDY,1904
241
+ kash/web_content/local_file_cache.py,sha256=pkGrFF32idDjY0IL0NkzBKWKvVS_tzy0yy3c0mOdcZA,8431
242
+ kash/web_content/web_extract.py,sha256=TjfVyVN7bAtKjGRpgeuV-Mr3VBAZuJE0hZ63rSlJ1gU,2296
245
243
  kash/web_content/web_extract_justext.py,sha256=74HLJBKDGKatwxyRDX6za70bZG9LrVmtj9jLX7UJzg4,2540
246
244
  kash/web_content/web_extract_readabilipy.py,sha256=yxwO-bVtRGepOobqa3AWSVe7WYCOBvWJV9Sktp60_UI,763
247
- kash/web_content/web_fetch.py,sha256=3dBAxRhi8HI4vmkQKRJDGFPCAiPadMbLHYI1FjwiWzs,3374
245
+ kash/web_content/web_fetch.py,sha256=dy3p-jrZY2szSgMUgLYWzEbMPsuFopPWKS0C8WIYgMM,3737
248
246
  kash/web_content/web_page_model.py,sha256=g9GUJpPJOd3-3mwajVodA3dcapDg1CMHxnPczXKEWUk,657
249
247
  kash/web_gen/__init__.py,sha256=mAa0ZNUbazETGHlM8OwxBC35LFvWDUvg15IpbZ-_TU4,121
250
- kash/web_gen/tabbed_webpage.py,sha256=DAaEIsoxuhtfPTZLZRRKGnHLJzic2IqJnE0rztmYEPk,4387
248
+ kash/web_gen/tabbed_webpage.py,sha256=M1ohHmpjWpF-FXSo3vYcXQR9jhK77b6RPvx96vJ_AFg,4511
251
249
  kash/web_gen/template_render.py,sha256=r5oS7RarPnGfZqS5G-pHnNin6SZRVactRO-c-QX6fcM,763
252
- kash/web_gen/templates/base_styles.css.jinja,sha256=UfGFbGPFlByYbKAWwRX7Pb-44y1kRogE7woE1xynOi4,3828
253
- kash/web_gen/templates/base_webpage.html.jinja,sha256=yK63pU6wRZDRTKG0SaXgGA8-2x88tGi2qy0YmHqEEr8,5137
254
- kash/web_gen/templates/content_styles.css.jinja,sha256=kOiZwtOCZ_6qf78nxWRm3jKGjg4H_TFBmI45ryhgTKc,3577
250
+ kash/web_gen/templates/base_styles.css.jinja,sha256=mBBV54STFOghEO3lYsFbJc9qgW4b_ta-tzhIF3HcTv8,5967
251
+ kash/web_gen/templates/base_webpage.html.jinja,sha256=OiZzV1aiaCDMBOYo3_dZunX6FyJmoAFQCMboW_ohphA,7044
252
+ kash/web_gen/templates/content_styles.css.jinja,sha256=3qcIwIt3DipCDJa9z6oIM_BMxmwoT7E_loTK0F3L9Vo,3629
255
253
  kash/web_gen/templates/explain_view.html.jinja,sha256=DNw5Iw5SrhIUFRGB4qNvfcKXsBHVbEJVURGdhvyC75Q,949
256
- kash/web_gen/templates/item_view.html.jinja,sha256=gnDc8a-qrFKkLUg3b497pdTg5hmnvOcHWpd5xtES7J0,6526
257
- kash/web_gen/templates/tabbed_webpage.html.jinja,sha256=zsUjtUJsMNyTCaKbC6rDwgaIFkygo8lGDlOG1uM5aTI,1581
258
- kash/workspaces/__init__.py,sha256=4sxy8PDcyJKM1SeWuz_tBF1QBsBMKG_5UT93wWhpjgc,269
254
+ kash/web_gen/templates/item_view.html.jinja,sha256=YoTPeHcDwFg2ST3E_TBzzf2OfuIpxlvItdf0M1UrwL0,6551
255
+ kash/web_gen/templates/tabbed_webpage.html.jinja,sha256=P_7I0gvgIHbyt1er13IcN55k0IKoPrkc-d8d-o0KdoI,1539
256
+ kash/workspaces/__init__.py,sha256=prLkBWLn7QkyAjG-bV8Z5ORJ5o0qSiKmRoP63jf0heY,494
259
257
  kash/workspaces/param_state.py,sha256=vT_eGWqg2SRviIM5jqEAauznX2B5Xt2nHHu2oRxTcIU,746
260
- kash/workspaces/selections.py,sha256=7HjHrRX5ld3PpnVDK6SCe-X4qfLecTjH5QX79xUIIR0,11506
261
- kash/workspaces/source_items.py,sha256=qBXlKM9OqIi99Nl9tTVx-TPay1bcu1LDW9Xv0FPE_rs,2911
258
+ kash/workspaces/selections.py,sha256=bles1G_XueDIP9-kjuTmb1BfI1KK9mBTuHZ2GxJLrEM,12003
259
+ kash/workspaces/source_items.py,sha256=Pwnw3OhjR2IJEMEeHf6hpKloj-ellM5vsY7LgkGevRY,2861
262
260
  kash/workspaces/workspace_importing.py,sha256=9LTzPdEFZ8BaliWplPHc87YePL8tJpjtMsICjDQwwD8,1933
263
261
  kash/workspaces/workspace_output.py,sha256=dEtXBCdGufupiG2hzB1xZQpS3E-vbVfqHlpRfPWTBRE,5692
264
262
  kash/workspaces/workspace_registry.py,sha256=SQt2DZgBEu95Zj9fpy67XdJPgJyKFDCU2laSuiZswNo,2200
265
- kash/workspaces/workspaces.py,sha256=-4-k6UCuuRxzqPdtHNyfS_ki9YVrDjE-eVPB-Lv4Pck,8563
266
- kash/xonsh_custom/command_nl_utils.py,sha256=FGydvISgJEsWpHXY6CyRjm52tbycSjPd0BfzAkCVANY,2276
267
- kash/xonsh_custom/custom_shell.py,sha256=Xk_C2qzdfDvdcF8ZjKO8OYh61qG618BUPnDn926JTv4,17670
268
- kash/xonsh_custom/customize_prompt.py,sha256=EOOuNB-q1UstdVR3RMLkeAi2Zx7y6xRHqUZ2fww_nqQ,6341
269
- kash/xonsh_custom/load_into_xonsh.py,sha256=DYsY-fMlDkwpSaXHRjEm5FVcXAOILDsG6r8QNxmylxQ,3562
270
- kash/xonsh_custom/shell_load_commands.py,sha256=3CBpMQjfaIhqi-FwIOJiXWl5RfOhitj5ldCroZqJKc0,4709
263
+ kash/workspaces/workspaces.py,sha256=Z0V_2czs7C_8EFeqlKzxn00CZ-V03_EUKQBDCCI4q5s,8356
264
+ kash/xonsh_custom/command_nl_utils.py,sha256=6Xcx98HXL5HywziHi0XskwFx6kfvz7oCmMX-siJib1A,3392
265
+ kash/xonsh_custom/custom_shell.py,sha256=jydWwHR0-RslioaHHY1sHnM6H6fG3cwOw1XO__sG_b0,19026
266
+ kash/xonsh_custom/customize_prompt.py,sha256=u-jRY-ftXYflBkbJVetEg6GYelPUvqZEpjrPRUTfy8w,6896
267
+ kash/xonsh_custom/load_into_xonsh.py,sha256=D7x6mgcz5XPho39GvbGO2MK81KpeCSNJNGvsajyKx-E,3620
268
+ kash/xonsh_custom/shell_load_commands.py,sha256=bndmVEecIhuzQBI3OUDpH4ac7DXGkAMUVqXXcbrmEqI,4719
271
269
  kash/xonsh_custom/shell_which.py,sha256=zRaLhFVg9HEDFXo4dqWKwX07YpfPh25kopeG_fgctOE,1926
272
- kash/xonsh_custom/xonsh_completers.py,sha256=29tRSqIMDzZblbRr-qe7JMbwXauhMiEgNI8YrcpS7uw,26153
270
+ kash/xonsh_custom/xonsh_completers.py,sha256=jxsc279DwZUHm0-iCnCtvbzqJBtq8zu0FUls5J1BA8o,17959
273
271
  kash/xonsh_custom/xonsh_env.py,sha256=KEob1vxlT4gBndYrLPP3deQtANA5Sx6PPE9Q08r4ua8,871
274
- kash/xonsh_custom/xonsh_modern_tools.py,sha256=9HXPTsYp8mN4V9Q9CxFCaB9kKZGxC5BQqyIpJkrO3ME,1471
272
+ kash/xonsh_custom/xonsh_keybindings.py,sha256=pSnYoZdJmyvC32U1JeqSADV-wReXEHC_LeYrw3g3NAc,9284
273
+ kash/xonsh_custom/xonsh_modern_tools.py,sha256=mj_b34LZXfE8MJe9EpDmp5JZ0tDM1biYNPAS8jdcURo,1467
275
274
  kash/xonsh_custom/xonsh_ranking_completer.py,sha256=ZRGiAfoEgqgnlq2-ReUVEaX5oOgW1DQ9WxIv2OJLuTo,5620
276
275
  kash/xontrib/fnm.py,sha256=V2tsOdmIDgbFbZSfMLpsvDIwwJJqiYnOkOySD1cXNXw,3700
277
- kash/xontrib/kash_extension.py,sha256=hLIrFgdPaa4yHXIjHT5xqLmCFrqY68ei_H_J2VhbG6A,1927
278
- kash_shell-0.3.9.dist-info/METADATA,sha256=WX4O028_n_mLs96hRgXAPpFFtEH36Xqgb4lM8xdf4u4,31182
279
- kash_shell-0.3.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
280
- kash_shell-0.3.9.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
281
- kash_shell-0.3.9.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
282
- kash_shell-0.3.9.dist-info/RECORD,,
276
+ kash/xontrib/kash_extension.py,sha256=JRRJC3cZSMOl4sSWEdKAQ_dVRMubWaOltKr8G0dWt6Y,1876
277
+ kash_shell-0.3.10.dist-info/METADATA,sha256=lsmYCD3ihVRJao2oHGiNMR_qYHJG_ayQIl3yBIX84OQ,31260
278
+ kash_shell-0.3.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
279
+ kash_shell-0.3.10.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
280
+ kash_shell-0.3.10.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
281
+ kash_shell-0.3.10.dist-info/RECORD,,
@@ -1,23 +0,0 @@
1
- from kash.text_handling.markdown_util import extract_bullet_points
2
- from kash.utils.lang_utils.capitalization import capitalize_cms
3
-
4
-
5
- def canonicalize_concept(concept: str) -> str:
6
- """
7
- Convert a concept string (general name, person, etc.) to a canonical form.
8
- Drop any extraneous Markdown bullets.
9
- """
10
- return capitalize_cms(concept.strip("-* "))
11
-
12
-
13
- def normalize_concepts(concepts: list[str]) -> list[str]:
14
- return sorted(set(canonicalize_concept(concept) for concept in concepts))
15
-
16
-
17
- def concepts_from_bullet_points(markdown_text: str) -> list[str]:
18
- """
19
- Parse, normalize, capitalize, sort, and then remove exact duplicates from a Markdown
20
- list of concepts as bullet points.
21
- """
22
- concepts = extract_bullet_points(markdown_text)
23
- return normalize_concepts(concepts)
@@ -1,100 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from enum import Enum
4
- from logging import getLogger
5
-
6
- from rich.text import Text
7
-
8
- from kash.config.settings import get_system_config_dir
9
- from kash.shell.clideps.dotenv_utils import env_var_is_set, load_dotenv_paths
10
- from kash.shell.output.shell_formatting import format_success_or_failure
11
- from kash.shell.output.shell_output import cprint
12
- from kash.utils.common.atomic_var import AtomicVar
13
-
14
- log = getLogger(__name__)
15
-
16
-
17
- class ApiEnvKey(str, Enum):
18
- """
19
- Convenience names for common API env vars. Any other env key is allowed too.
20
- """
21
-
22
- OPENAI_API_KEY = "OPENAI_API_KEY"
23
- ANTHROPIC_API_KEY = "ANTHROPIC_API_KEY"
24
- GEMINI_API_KEY = "GEMINI_API_KEY"
25
- AZURE_API_KEY = "AZURE_API_KEY"
26
- XAI_API_KEY = "XAI_API_KEY"
27
- DEEPSEEK_API_KEY = "DEEPSEEK_API_KEY"
28
- MISTRAL_API_KEY = "MISTRAL_API_KEY"
29
- PERPLEXITYAI_API_KEY = "PERPLEXITYAI_API_KEY"
30
- DEEPGRAM_API_KEY = "DEEPGRAM_API_KEY"
31
- GROQ_API_KEY = "GROQ_API_KEY"
32
- FIRECRAWL_API_KEY = "FIRECRAWL_API_KEY"
33
- EXA_API_KEY = "EXA_API_KEY"
34
-
35
- @classmethod
36
- def for_provider(cls, provider_name: str) -> ApiEnvKey | None:
37
- """
38
- Get the ApiKey for a provider name, if known.
39
- """
40
- return getattr(cls, provider_name.upper() + "_API_KEY", None)
41
-
42
- @property
43
- def provider_name(self) -> str:
44
- """
45
- Get the lowercase provider name for an API ("openai", "azure", etc.).
46
- This matches LiteLLM's provider names.
47
- """
48
- return self.value.removesuffix("_API_KEY").lower()
49
-
50
-
51
- _log_api_setup_done = AtomicVar(False)
52
-
53
-
54
- def warn_if_missing_api_keys(env_keys: list[str]) -> list[str]:
55
- missing_apis = [key for key in env_keys if not env_var_is_set(key)]
56
- if missing_apis:
57
- log.warning(
58
- "Missing recommended API keys (%s):\nCheck .env file or run `self_configure` to set them.",
59
- ", ".join(missing_apis),
60
- )
61
-
62
- return missing_apis
63
-
64
-
65
- def available_api_keys(all_keys: list[str] | None) -> list[tuple[ApiEnvKey, bool]]:
66
- if not all_keys:
67
- all_keys = [key.value for key in ApiEnvKey]
68
- return [(ApiEnvKey(key), env_var_is_set(key)) for key in all_keys]
69
-
70
-
71
- def print_api_key_setup(
72
- recommended_keys: list[str], all_keys: list[str] | None = None, once: bool = False
73
- ) -> None:
74
- if not all_keys:
75
- all_keys = [key.value for key in ApiEnvKey]
76
- if once and _log_api_setup_done:
77
- return
78
-
79
- dotenv_paths = load_dotenv_paths(True, True, get_system_config_dir())
80
-
81
- cprint(
82
- Text.assemble(
83
- format_success_or_failure(
84
- value=bool(dotenv_paths),
85
- true_str=f"Found .env files: {', '.join(str(path) for path in dotenv_paths)}",
86
- false_str="No .env files found. Set up your API keys in a .env file.",
87
- ),
88
- )
89
- )
90
-
91
- texts = [
92
- format_success_or_failure(is_found, key.provider_name)
93
- for key, is_found in available_api_keys(all_keys)
94
- ]
95
-
96
- cprint(Text.assemble("API keys found: ", Text(" ").join(texts)))
97
-
98
- warn_if_missing_api_keys(recommended_keys)
99
-
100
- _log_api_setup_done.set(True)