kash-shell 0.3.10__py3-none-any.whl → 0.3.12__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 (83) hide show
  1. kash/actions/core/format_markdown_template.py +2 -5
  2. kash/actions/core/markdownify.py +2 -4
  3. kash/actions/core/readability.py +2 -4
  4. kash/actions/core/render_as_html.py +30 -11
  5. kash/actions/core/show_webpage.py +6 -11
  6. kash/actions/core/strip_html.py +4 -8
  7. kash/actions/core/{webpage_config.py → tabbed_webpage_config.py} +5 -3
  8. kash/actions/core/{webpage_generate.py → tabbed_webpage_generate.py} +5 -4
  9. kash/commands/base/basic_file_commands.py +21 -3
  10. kash/commands/base/files_command.py +29 -10
  11. kash/commands/extras/parse_uv_lock.py +12 -3
  12. kash/commands/workspace/selection_commands.py +1 -1
  13. kash/commands/workspace/workspace_commands.py +2 -3
  14. kash/config/colors.py +2 -2
  15. kash/config/env_settings.py +2 -42
  16. kash/config/logger.py +30 -25
  17. kash/config/logger_basic.py +6 -6
  18. kash/config/settings.py +23 -7
  19. kash/config/setup.py +33 -5
  20. kash/config/text_styles.py +25 -22
  21. kash/embeddings/cosine.py +12 -4
  22. kash/embeddings/embeddings.py +16 -6
  23. kash/embeddings/text_similarity.py +10 -4
  24. kash/exec/__init__.py +3 -0
  25. kash/exec/action_decorators.py +10 -25
  26. kash/exec/action_exec.py +43 -23
  27. kash/exec/llm_transforms.py +6 -3
  28. kash/exec/preconditions.py +10 -12
  29. kash/exec/resolve_args.py +4 -0
  30. kash/exec/runtime_settings.py +134 -0
  31. kash/exec/shell_callable_action.py +5 -3
  32. kash/file_storage/file_store.py +37 -38
  33. kash/file_storage/item_file_format.py +6 -3
  34. kash/file_storage/store_filenames.py +6 -3
  35. kash/help/function_param_info.py +1 -1
  36. kash/llm_utils/init_litellm.py +16 -0
  37. kash/llm_utils/llm_api_keys.py +6 -2
  38. kash/llm_utils/llm_completion.py +11 -4
  39. kash/local_server/local_server_routes.py +1 -7
  40. kash/mcp/mcp_cli.py +3 -2
  41. kash/mcp/mcp_server_routes.py +11 -12
  42. kash/media_base/transcription_deepgram.py +15 -2
  43. kash/model/__init__.py +1 -1
  44. kash/model/actions_model.py +6 -54
  45. kash/model/exec_model.py +79 -0
  46. kash/model/items_model.py +102 -35
  47. kash/model/operations_model.py +38 -15
  48. kash/model/paths_model.py +2 -0
  49. kash/shell/output/shell_output.py +10 -8
  50. kash/shell/shell_main.py +2 -2
  51. kash/shell/utils/exception_printing.py +2 -2
  52. kash/shell/utils/shell_function_wrapper.py +15 -15
  53. kash/text_handling/doc_normalization.py +16 -8
  54. kash/text_handling/markdown_render.py +1 -0
  55. kash/text_handling/markdown_utils.py +105 -2
  56. kash/utils/common/format_utils.py +2 -8
  57. kash/utils/common/function_inspect.py +360 -110
  58. kash/utils/common/inflection.py +22 -0
  59. kash/utils/common/task_stack.py +4 -15
  60. kash/utils/errors.py +14 -9
  61. kash/utils/file_utils/file_ext.py +4 -0
  62. kash/utils/file_utils/file_formats_model.py +32 -1
  63. kash/utils/file_utils/file_sort_filter.py +10 -3
  64. kash/web_gen/__init__.py +0 -4
  65. kash/web_gen/simple_webpage.py +52 -0
  66. kash/web_gen/tabbed_webpage.py +23 -16
  67. kash/web_gen/template_render.py +37 -2
  68. kash/web_gen/templates/base_styles.css.jinja +84 -59
  69. kash/web_gen/templates/base_webpage.html.jinja +85 -67
  70. kash/web_gen/templates/item_view.html.jinja +47 -37
  71. kash/web_gen/templates/simple_webpage.html.jinja +24 -0
  72. kash/web_gen/templates/tabbed_webpage.html.jinja +42 -32
  73. kash/workspaces/__init__.py +12 -3
  74. kash/workspaces/workspace_dirs.py +58 -0
  75. kash/workspaces/workspace_importing.py +1 -1
  76. kash/workspaces/workspaces.py +26 -90
  77. {kash_shell-0.3.10.dist-info → kash_shell-0.3.12.dist-info}/METADATA +7 -7
  78. {kash_shell-0.3.10.dist-info → kash_shell-0.3.12.dist-info}/RECORD +81 -76
  79. kash/shell/utils/argparse_utils.py +0 -20
  80. kash/utils/lang_utils/inflection.py +0 -18
  81. {kash_shell-0.3.10.dist-info → kash_shell-0.3.12.dist-info}/WHEEL +0 -0
  82. {kash_shell-0.3.10.dist-info → kash_shell-0.3.12.dist-info}/entry_points.txt +0 -0
  83. {kash_shell-0.3.10.dist-info → kash_shell-0.3.12.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,5 @@
1
- import contextvars
2
- import re
1
+ from __future__ import annotations
2
+
3
3
  from abc import ABC, abstractmethod
4
4
  from functools import cache
5
5
  from pathlib import Path
@@ -13,10 +13,13 @@ from kash.config.settings import (
13
13
  global_settings,
14
14
  resolve_and_create_dirs,
15
15
  )
16
+ from kash.config.text_styles import STYLE_HINT
16
17
  from kash.file_storage.metadata_dirs import MetadataDirs
17
18
  from kash.model.params_model import GLOBAL_PARAMS, RawParamValues
19
+ from kash.shell.output.shell_output import PrintHooks, cprint
18
20
  from kash.utils.errors import FileNotFound, InvalidInput, InvalidState
19
21
  from kash.utils.file_utils.ignore_files import IgnoreFilter, is_ignored_default
22
+ from kash.workspaces.workspace_dirs import check_strict_workspace_name, is_global_ws_dir, is_ws_dir
20
23
  from kash.workspaces.workspace_registry import WorkspaceInfo, get_ws_registry
21
24
 
22
25
  if TYPE_CHECKING:
@@ -25,19 +28,6 @@ if TYPE_CHECKING:
25
28
  log = get_logger(__name__)
26
29
 
27
30
 
28
- def normalize_workspace_name(ws_name: str) -> str:
29
- return str(ws_name).strip().rstrip("/")
30
-
31
-
32
- def check_strict_workspace_name(ws_name: str) -> str:
33
- ws_name = normalize_workspace_name(ws_name)
34
- if not re.match(r"^[\w.-]+$", ws_name):
35
- raise InvalidInput(
36
- f"Use an alphanumeric name (- and . also allowed) for the workspace name: `{ws_name}`"
37
- )
38
- return ws_name
39
-
40
-
41
31
  class Workspace(ABC):
42
32
  """
43
33
  A workspace is the context for actions and is tied to a folder on disk.
@@ -59,50 +49,6 @@ class Workspace(ABC):
59
49
  def base_dir(self) -> Path:
60
50
  """The base directory for this workspace."""
61
51
 
62
- def __enter__(self):
63
- """
64
- Context manager to set this workspace as the current workspace.
65
- """
66
- from kash.workspaces.workspaces import current_ws_context
67
-
68
- self._token = current_ws_context.set(self.base_dir)
69
- return self
70
-
71
- def __exit__(self, exc_type, exc_val, exc_tb):
72
- """
73
- Restore the previous workspace context.
74
- """
75
- from kash.workspaces.workspaces import current_ws_context
76
-
77
- current_ws_context.reset(self._token)
78
-
79
-
80
- current_ws_context: contextvars.ContextVar[Path | None] = contextvars.ContextVar(
81
- "current_ws_context", default=None
82
- )
83
- """
84
- Context variable that tracks the current workspace. Only used if it is
85
- explicitly set with a `with ws.as_current()` block.
86
- """
87
-
88
-
89
- def is_ws_dir(path: Path) -> bool:
90
- dirs = MetadataDirs(path, False)
91
- return dirs.is_initialized()
92
-
93
-
94
- def enclosing_ws_dir(path: Path) -> Path | None:
95
- """
96
- Get the workspace directory enclosing the given path (itself or a parent or None).
97
- """
98
- path = path.absolute()
99
- while path != Path("/"):
100
- if is_ws_dir(path):
101
- return path
102
- path = path.parent
103
-
104
- return None
105
-
106
52
 
107
53
  def resolve_ws(name: str | Path) -> WorkspaceInfo:
108
54
  """
@@ -137,10 +83,10 @@ def resolve_ws(name: str | Path) -> WorkspaceInfo:
137
83
 
138
84
  ws_name = check_strict_workspace_name(resolved.name)
139
85
 
140
- return WorkspaceInfo(ws_name, resolved, is_global_ws_path(resolved))
86
+ return WorkspaceInfo(ws_name, resolved, is_global_ws_dir(resolved))
141
87
 
142
88
 
143
- def get_ws(name_or_path: str | Path, auto_init: bool = True) -> "FileStore":
89
+ def get_ws(name_or_path: str | Path, auto_init: bool = True) -> FileStore:
144
90
  """
145
91
  Get a workspace by name or path. Adds to the in-memory registry so we reuse it.
146
92
  With `auto_init` true, will initialize the workspace if it is not already initialized.
@@ -162,18 +108,14 @@ def global_ws_dir() -> Path:
162
108
  return kb_path
163
109
 
164
110
 
165
- def is_global_ws_path(path: Path) -> bool:
166
- return path.name.lower() == GLOBAL_WS_NAME.lower()
167
-
168
-
169
- def get_global_ws() -> "FileStore":
111
+ def get_global_ws() -> FileStore:
170
112
  """
171
113
  Get the global_ws workspace.
172
114
  """
173
115
  return get_ws_registry().load(GLOBAL_WS_NAME, global_ws_dir(), True)
174
116
 
175
117
 
176
- def switch_to_ws(base_dir: Path) -> "FileStore":
118
+ def _switch_ws_settings(base_dir: Path) -> FileStore:
177
119
  """
178
120
  Switch the current workspace to the given directory.
179
121
  Updates logging and cache directories to be within that workspace.
@@ -199,41 +141,35 @@ def switch_to_ws(base_dir: Path) -> "FileStore":
199
141
  return get_ws_registry().load(info.name, info.base_dir, info.is_global_ws)
200
142
 
201
143
 
202
- def _current_ws_info() -> tuple[Path | None, bool]:
203
- """
204
- Infer the current workspace from context or the current working directory.
205
- Does not load the workspace.
206
- """
207
- # First check if we have an explicit workspace context.
208
- override_dir = current_ws_context.get()
209
- if override_dir:
210
- return override_dir, is_global_ws_path(override_dir)
211
-
212
- # Fall back to detecting from the current working directory.
213
- dir = enclosing_ws_dir(Path("."))
214
- is_global_ws = is_global_ws_path(dir) if dir else False
215
- if not dir or is_global_ws:
216
- dir = global_ws_dir()
217
- return dir, is_global_ws
218
-
219
-
220
- def current_ws(silent: bool = False) -> "FileStore":
144
+ def current_ws(silent: bool = False) -> FileStore:
221
145
  """
222
146
  Get the current workspace based on the current working directory.
223
147
  Loads and registers the workspace if it is not already loaded.
224
- Also updates logging and cache directories if this has changed.
148
+
149
+ As a convenience, this call also auto-updates logging and cache directories
150
+ if this has changed.
225
151
  """
226
- base_dir, _is_global_ws = _current_ws_info()
152
+ from kash.exec.runtime_settings import current_ws_context
153
+
154
+ ws_context = current_ws_context()
155
+ base_dir = ws_context.current_ws_dir
227
156
  if not base_dir:
228
157
  raise InvalidState(
229
158
  f"No workspace found in: {fmt_path(Path('.').absolute(), resolve=False)}\n"
230
159
  "Create one with the `workspace` command."
231
160
  )
232
161
 
233
- ws = switch_to_ws(base_dir)
162
+ ws = _switch_ws_settings(base_dir)
234
163
 
235
164
  if not silent:
236
- ws.log_workspace_info(once=True)
165
+ did_log = ws.log_workspace_info(once=True)
166
+ if did_log and ws.is_global_ws and not ws_context.override_dir:
167
+ PrintHooks.spacer()
168
+ log.warning("Note you are currently using the default global workspace.")
169
+ cprint(
170
+ "Create or switch to another workspace with the `workspace` command.",
171
+ style=STYLE_HINT,
172
+ )
237
173
 
238
174
  return ws
239
175
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kash-shell
3
- Version: 0.3.10
3
+ Version: 0.3.12
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>
@@ -20,30 +20,30 @@ Requires-Dist: anyio>=4.8.0
20
20
  Requires-Dist: audioop-lts>=0.2.1; python_version >= '3.13'
21
21
  Requires-Dist: cachetools>=5.5.2
22
22
  Requires-Dist: chopdiff>=0.2.1
23
- Requires-Dist: clideps>=0.1.1
23
+ Requires-Dist: clideps>=0.1.4
24
24
  Requires-Dist: colour>=0.1.5
25
25
  Requires-Dist: cssselect>=1.2.0
26
26
  Requires-Dist: deepgram-sdk>=3.10.1
27
27
  Requires-Dist: dunamai>=1.23.0
28
28
  Requires-Dist: fastapi>=0.115.11
29
- Requires-Dist: flowmark>=0.4.1
29
+ Requires-Dist: flowmark>=0.4.6
30
30
  Requires-Dist: frontmatter-format>=0.2.1
31
31
  Requires-Dist: funlog>=0.2.0
32
32
  Requires-Dist: humanfriendly>=10.0
33
- Requires-Dist: inflect>=7.5.0
34
33
  Requires-Dist: inquirerpy>=0.3.4
35
34
  Requires-Dist: jinja2>=3.1.6
36
35
  Requires-Dist: justext>=3.0.2
37
36
  Requires-Dist: lazyasd>=0.1.4
38
37
  Requires-Dist: litellm>=1.63.11
39
- Requires-Dist: markdownify>=0.14.1
38
+ Requires-Dist: markdownify>=0.13.1
40
39
  Requires-Dist: mcp-proxy>=0.5.0
41
40
  Requires-Dist: mcp>=1.6.0
42
41
  Requires-Dist: openai>=1.66.3
43
42
  Requires-Dist: pandas>=2.2.3
44
43
  Requires-Dist: patch-ng>=1.18.1
45
44
  Requires-Dist: pathspec>=0.12.1
46
- Requires-Dist: prettyfmt>=0.3.0
45
+ Requires-Dist: pluralizer>=1.2.0
46
+ Requires-Dist: prettyfmt>=0.3.1
47
47
  Requires-Dist: prompt-toolkit>=3.0.50
48
48
  Requires-Dist: pydantic>=2.10.6
49
49
  Requires-Dist: pydub>=0.25.1
@@ -59,7 +59,7 @@ Requires-Dist: rich>=14.0.0
59
59
  Requires-Dist: ripgrepy>=2.1.0
60
60
  Requires-Dist: send2trash>=1.8.3
61
61
  Requires-Dist: setproctitle>=1.3.5
62
- Requires-Dist: strif>=3.0.0-rc.1
62
+ Requires-Dist: strif>=3.0.1
63
63
  Requires-Dist: tenacity>=9.0.0
64
64
  Requires-Dist: thefuzz>=0.22.1
65
65
  Requires-Dist: tiktoken>=0.9.0
@@ -3,52 +3,52 @@ kash/__main__.py,sha256=83JiHvCNK7BAwEkaTD0kVekj7PEMucvCyquSl4p-1QA,78
3
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
- kash/actions/core/format_markdown_template.py,sha256=5P3ZDMKmOqnfiSn4dchtodh9StpnMWkUM5acIguIkmw,3043
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
10
- kash/actions/core/show_webpage.py,sha256=hMhPTTwpZb7q1w2ZNjmuVkxlG-O4WE_Dw3GKrQkX5UA,987
11
- kash/actions/core/strip_html.py,sha256=VeTsTzoR0GKAvwpdr8-nFplYF50V3urfYZmGOhlwuZo,895
6
+ kash/actions/core/format_markdown_template.py,sha256=ZJbtyTSypPo2ewLiGRSyIpVf711vQMhI_-Ng-FgCs80,2991
7
+ kash/actions/core/markdownify.py,sha256=3WO940dQGr_5M_Z3QuJHhfPhqr1FyasMY8Vz8LJ3JVE,1140
8
+ kash/actions/core/readability.py,sha256=6BoiQrlc8c4REGCOehmKyhhhf2M-pzGhl8VeUS4G0u0,969
9
+ kash/actions/core/render_as_html.py,sha256=YbXZ9idT12fHoK5D-IXyECUB3-pwvODs65ljUTfA1VA,1794
10
+ kash/actions/core/show_webpage.py,sha256=052HG80kSBP98qITp0gfKJ0G4PxGGS0o0N-L64JxWP0,889
11
+ kash/actions/core/strip_html.py,sha256=FDLN_4CKB11q5cU4NixTf7PGrAq92AjQNbKAdvQDwCY,849
12
12
  kash/actions/core/summarize_as_bullets.py,sha256=Zwr8lNzL77pwpnW_289LQjNBijNDpTPANfFdOJA-PZ4,2070
13
- kash/actions/core/webpage_config.py,sha256=uJtJwHxel7xgWg9WjkR2snEBXMj9lmieYI3YKhpuff8,873
14
- kash/actions/core/webpage_generate.py,sha256=FHRmwWWWzSoC2Cd0d4oy249Za0A03HD-nFL6SL9SUBw,788
13
+ kash/actions/core/tabbed_webpage_config.py,sha256=rIbzEhBTmnkbSiRZC-Rj46T1J6c0jOztiKE9Usa4nsc,980
14
+ kash/actions/core/tabbed_webpage_generate.py,sha256=_w_4LsgDqNnVvtX6Y4Txq56HAwEVMAY7RooWB29Okdk,954
15
15
  kash/actions/meta/write_instructions.py,sha256=zeKKX-Yi8jSyjvZ4Ii_4MNBRtM2MENuHyrD0Vxsaos8,1277
16
16
  kash/actions/meta/write_new_action.py,sha256=w7SJZ2FjzRbKwqKX9PeozUrh8cNJAumX7F80wW7dQts,6356
17
17
  kash/commands/__init__.py,sha256=MhdPSluWGE3XVQ7LSv2L8_aAxaey8CLjQBjGC9B4nRM,191
18
- kash/commands/base/basic_file_commands.py,sha256=7aZ5ZuSTCZE8jilDxD_41C7Ie88nmx9aGgiJCQLasCA,6359
18
+ kash/commands/base/basic_file_commands.py,sha256=5jvyEVK6JruCXt3w0h1kF8BCjoKbaDt9psVtHngpOdA,6982
19
19
  kash/commands/base/browser_commands.py,sha256=iYvpW4D_tlhW_p0cq3A6YO9UGCdHtvzIQiNMDwCY07A,1574
20
20
  kash/commands/base/debug_commands.py,sha256=9I5W3SMQvsnpcs-b6CJCYu1Ydl6gIoTUcDZxvn1dN3g,7643
21
21
  kash/commands/base/diff_commands.py,sha256=U2geK6TLji9hnSfKW1DDGICaawm9p6Ht_Way6W_34AY,3446
22
- kash/commands/base/files_command.py,sha256=mGvFNHadG3c9tmOxCFJm-TjiK8e7mDb7kS0o75N2Clc,15947
22
+ kash/commands/base/files_command.py,sha256=KZjlBSJ3_e2YazZFMGr2ybAdsp5bcf9JBj3_3CHaRyc,16768
23
23
  kash/commands/base/general_commands.py,sha256=KaCbzk7o-ejwXE_H3PB3MrN00uTinP3T8uHKYrGPrIw,6946
24
24
  kash/commands/base/logs_commands.py,sha256=IyNgxaAoa5LlS-VxD_x8bXTVbD04pT8qEHlIJNM09UU,2963
25
25
  kash/commands/base/model_commands.py,sha256=d17a2NvfDbwV1y8gyZVsOtX-j5H5we5OEXM9TxTqvBs,1790
26
26
  kash/commands/base/reformat_command.py,sha256=C4EJz4DRrNon8TLgzlUeR64iLIdorGwx2nRGviI8zxs,1863
27
27
  kash/commands/base/search_command.py,sha256=FXtP09HmmfHRrjenvmU4j0Lcw34piIzdI3UFGbUQ1tg,2201
28
28
  kash/commands/base/show_command.py,sha256=J0zw8gBcDQJ0nI47EkrGY9VfNFb_thQXcxNCele9av8,2895
29
- kash/commands/extras/parse_uv_lock.py,sha256=Uwu6uq5mmHEKdQMTyiYxiLQ5FJSI5rGtVn6JQtzyufU,5542
29
+ kash/commands/extras/parse_uv_lock.py,sha256=HVqmGhJAd3ZCTTTaXe_nzzTMFKhwjLLP7hx4NTM224U,5696
30
30
  kash/commands/extras/utils_commands.py,sha256=rz3N7VxoUHvCxksRt-sLubkvyW-VH9OTltLEMEnjRfU,769
31
31
  kash/commands/help/assistant_commands.py,sha256=BhGhtyoiEbu6xYfi-r47g_U4pxptUkucyNmiv5_kg34,3042
32
32
  kash/commands/help/doc_commands.py,sha256=7lKR7mzue2N7pSkNqblpFJy892fS5N6jWVOHqeXziHw,2466
33
33
  kash/commands/help/help_commands.py,sha256=eJTpIhXck123PAUq2k-D3Q6UL6IQ8atOVYurLi2GD0A,4229
34
34
  kash/commands/help/logo.py,sha256=W8SUach9FjoTqpHZwTGS582ry4ZluxbBp86ZCiAtDkY,3505
35
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
36
+ kash/commands/workspace/selection_commands.py,sha256=JyQMLXKydn_vvlNrltHNXfQtMjDEc_x3K96d12ZLt4s,7447
37
+ kash/commands/workspace/workspace_commands.py,sha256=ktNDRbOD0ZIJVb3Zfj1KMQQvMXTxTaNRUylJ9hLk9nU,22646
38
38
  kash/config/__init__.py,sha256=ytly9Typ1mWV4CXfV9G3CIPtPQ02u2rpZ304L3GlFro,148
39
39
  kash/config/capture_output.py,sha256=ud3uUVNuDicHj3mI_nBUBO-VmOrxtBdA3z-I3D1lSCU,2398
40
- kash/config/colors.py,sha256=gnbK5YnPH9fhtyOzCy5vGgQXRLhOzAxc441xMscvfkc,9949
41
- kash/config/env_settings.py,sha256=DXp9Q9u-EC7cK0nyXIcKvPV9DuChvoVw7QCe7ZGe3Rw,2225
40
+ kash/config/colors.py,sha256=6lqrB2RQYF2OLw-njfOqVHO9Bwiq7bW6K1ROCOAd1EM,9949
41
+ kash/config/env_settings.py,sha256=uhCdfs9-TzJ15SzbuIQP1yIORaLUqYXCxh9qq_Z8cJc,996
42
42
  kash/config/init.py,sha256=aE4sZ6DggBmmoZEx9C5mQKrEbcDiswX--HF7pfCFKzc,526
43
43
  kash/config/lazy_imports.py,sha256=MCZXLnKvNyfHi0k7MU5rNwcdJtUF28naCixuogsAOAA,805
44
- kash/config/logger.py,sha256=uy6KXsCjvr_-6IB45wmNNDgkkTcFLxH56QPxx8-0MT0,11537
45
- kash/config/logger_basic.py,sha256=yLZtDqIETBvZTilLDI-yJahmhVVW4twCNyKlsREEq0g,1511
44
+ kash/config/logger.py,sha256=VHsHb9Llp9Z3QmPqh4x42IaZs8pyQqfWT3pWvxY7x8o,11923
45
+ kash/config/logger_basic.py,sha256=Gsxitz7xeMGCUr5qjWK6y72qeMsIz4mcDZP5xyzK0WU,1598
46
46
  kash/config/logo.txt,sha256=P4RO1cJ9HRF1BavTp3Kae9iByDNhzhEC-qLAa6ww1RA,217
47
47
  kash/config/server_config.py,sha256=eQ1yxDk031QI0Efp0I1VetqQd9wG7MrLVBCHFm4gp2g,1790
48
- kash/config/settings.py,sha256=SwCe1ttV0vKA4Koin1I6RqHplMBlixlHhf5N2bOLjWo,8425
49
- kash/config/setup.py,sha256=AgeLPGM01C5H5z1_WK-zoWb_HqryJsQ7sU1yN5qca9E,2531
48
+ kash/config/settings.py,sha256=P3g0RSR6vrvfovDDYOIx6Hxafrg1mYTAxrTiVgH2Tm4,8889
49
+ kash/config/setup.py,sha256=zFxfTPG1cbsozuwUkIyAYebxuHhpYCiaexHnYnYJG1c,3524
50
50
  kash/config/suppress_warnings.py,sha256=yty5ZodMLIpmjphRtcVmRamXfiWbyfga9annve6qxb0,1475
51
- kash/config/text_styles.py,sha256=3k0iar_hDW0iv7JKi5bKHyQZFOGzDjA8x0IaFi69mj8,13498
51
+ kash/config/text_styles.py,sha256=R9jHvupnC_ln3-wWksYLQXWZZBJCazr3ru8WyDsL6UA,13790
52
52
  kash/docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  kash/docs/all_docs.py,sha256=NutfgU8VOA7_K2HX18FoOHVvvLL14dALoCxK9qDbQ04,3157
54
54
  kash/docs/load_actions_info.py,sha256=D9uv8gdBtkBmdbFZeyIigsupPF9_WfidHVwWQrlggI0,937
@@ -77,12 +77,12 @@ kash/docs_base/load_recipe_snippets.py,sha256=nGw4xlbfsKdR6ZngBBGBeRHBwfSPpI_gnJ
77
77
  kash/docs_base/recipes/general_system_commands.sh,sha256=rFNPuLj3Md09L5yzWx6ILjaR-mFROSlL1cmpWiyJ9WQ,208
78
78
  kash/docs_base/recipes/python_dev_commands.sh,sha256=9vJsQiDZKJ7ShokFnzc2Jsto6n87MNRkbgcc2Ee9Kro,179
79
79
  kash/docs_base/recipes/tldr_standard_commands.sh,sha256=7nPES55aT45HF3eDhQRrEUiWRpPdvvp40Sg88uADa80,60491
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
80
+ kash/embeddings/cosine.py,sha256=QTWPWUHivXjxCM6APSqij_-4mywM2BVVm0xb0hu7FHA,1587
81
+ kash/embeddings/embeddings.py,sha256=v6RmrEHsx5PuE3fPrY15RK4fgW0K_VlNWDTjCVr11zY,4451
82
+ kash/embeddings/text_similarity.py,sha256=BOo9Vcs5oi2Zs5La56uTkPMHo65XSd4qz_yr6GTfUA4,1924
83
+ kash/exec/__init__.py,sha256=rdSsKzTaXfSZmD5JvmUSSwmpfvl-moNv9PUgtE_WUpQ,1148
84
+ kash/exec/action_decorators.py,sha256=VOSCnFiev2_DuFoSk0i_moejwM4wJ1j6QfsQd93uetI,16480
85
+ kash/exec/action_exec.py,sha256=_NVf4Il_lntGtRosDmZdRHxLL0QPmlr3_x6MpuVID2Q,18567
86
86
  kash/exec/action_registry.py,sha256=numU9pH_W5RgIrYmfi0iYMYy_kLJl6vup8PMrhxAfdc,2627
87
87
  kash/exec/combiners.py,sha256=AJ6wgPUHsmwanObsUw64B83XzU26yuh5t4l7igLn82I,4291
88
88
  kash/exec/command_exec.py,sha256=zc-gWm7kyB5J5Kp8xhULQ9Jj9AL927KkDPXXk-Yr1Bw,1292
@@ -90,30 +90,31 @@ kash/exec/command_registry.py,sha256=1s2ogU8b8nqK_AEtslbr1eYrXCGDkeT30UrB7L0BRoM
90
90
  kash/exec/fetch_url_metadata.py,sha256=mgS4zwPw0HAVYIroTeKN_whMyoVE2DUDN_W6ylO3gVw,2656
91
91
  kash/exec/history.py,sha256=l2XwHGBR1UgTGSFPSBE9mltmxvjR_5qFFO6d-Z008nc,1208
92
92
  kash/exec/importing.py,sha256=i1utrbqpn8MKfCQ06vavka_cjNaYRHaWnsy0ygNRbxI,1825
93
- kash/exec/llm_transforms.py,sha256=cHbvtPdNNA3Pi8yY9-y2tZNYdsVUaJ8RA4RKfW1cCj0,4230
93
+ kash/exec/llm_transforms.py,sha256=nr_9C0aW6-EL9LvZIr7nG040js9W1BOiR4FyTg94WSc,4372
94
94
  kash/exec/precondition_checks.py,sha256=HymxL7qm4Yz8V76Um5pKdIRnQ2N-p9rpQQi1fI38bNA,2139
95
95
  kash/exec/precondition_registry.py,sha256=cmp0mUfLS42AbAByDhwGx8GWz9PuZNR7z5rPZW9WQE4,1244
96
- kash/exec/preconditions.py,sha256=NbkhTG_ga3KjIGGLrjOifNDx8Ea5VyzSW1Ku54dwIew,4349
97
- kash/exec/resolve_args.py,sha256=2sNk3dYmTfl8z3OBVrcgnaG0FonhKE_08MjlEap6qdc,4300
98
- kash/exec/shell_callable_action.py,sha256=HsufAc4fWNWOZvciwzujs4CABKOgB5emWP4Ux1LbQZ4,4302
96
+ kash/exec/preconditions.py,sha256=Ar37VJgPRQR1nh5y_SRqDRa2dI0D4rJYcO92oWHeSzo,4333
97
+ kash/exec/resolve_args.py,sha256=yGU6Jjzn5yyAN9pNZx8Qfc9oBrosFEdazIs5g9pjWTs,4410
98
+ kash/exec/runtime_settings.py,sha256=aK6nGbZhKSIDVmV6AqV68hQkiaIGWnCiNzHtwwZ5V0w,3960
99
+ kash/exec/shell_callable_action.py,sha256=x-Hs4EqpsZfKEcwhWkhc27HCIfoI91b-DrbG40BLxRY,4350
99
100
  kash/exec_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
101
  kash/exec_model/args_model.py,sha256=gquOD0msFA-5xhNU-3R5l8wlwyAMefpMHltpxrDlYGQ,2662
101
102
  kash/exec_model/commands_model.py,sha256=iM8QhzA0tAas5OwF5liUfHtm45XIH1LcvCviuh3As7s,4923
102
103
  kash/exec_model/script_model.py,sha256=1VG3LhkTmlKzHOYouZ92ZpOSKSCcsz3-tHNcFMQF788,5031
103
104
  kash/exec_model/shell_model.py,sha256=LUhQivbpXlerM-DUzNY7BtctNBbn08Wto8CSSxQDxRU,568
104
105
  kash/file_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- kash/file_storage/file_store.py,sha256=GqgU6htX6mNZfqZuNACLXzFlOdjw53fJOqvUCOjcTcU,26578
106
- kash/file_storage/item_file_format.py,sha256=oe71pB7hK6tkU0tBuUEjiuba0NuO7ovkJ1oUqd0UaRo,5368
106
+ kash/file_storage/file_store.py,sha256=ibIqaNqimfGDH_xN-IBQ1ySAkdbGc5kUI-qZOt4cFsE,26669
107
+ kash/file_storage/item_file_format.py,sha256=GIOAD95hxbhmbsbcClim1YOQUP4Qar1uHL6UtebuyAE,5469
107
108
  kash/file_storage/metadata_dirs.py,sha256=9AqO3S3SSY1dtvP2iLX--E4ui0VIzXttG8R040otfyg,3820
108
109
  kash/file_storage/persisted_yaml.py,sha256=4-4RkFqdlBUkTOwkdA4vRKUywEE9TaDo13OGaDUyU9M,1309
109
110
  kash/file_storage/store_cache_warmer.py,sha256=cQ_KwxkBPWT3lMmYOCTkXgo7CKaGINns2YzIH32ExSU,1013
110
- kash/file_storage/store_filenames.py,sha256=95TVIrG0C36Rf77-uhqqfSrt-Xq6DTD0jZDoKnIODD4,1663
111
+ kash/file_storage/store_filenames.py,sha256=YKpeuFEWgT4SgArhhU97NW13YK0TgfY3Ozp1Hm3F9Z8,1738
111
112
  kash/help/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
113
  kash/help/assistant.py,sha256=R0XHNi-h51QoQ7rGouD2chrDPGomYaPQUqJdvpjlCs8,11535
113
114
  kash/help/assistant_instructions.py,sha256=jW5XAsmLx8YZMKSDJgWnqo9Vwe7VuiTURQHjKBqr_L8,2549
114
115
  kash/help/assistant_output.py,sha256=9sM-OVLc6eMSOkxyovB88dNlsknFpf8Wz89Zp5PuEA8,1668
115
116
  kash/help/docstring_utils.py,sha256=80vcEGR05G1wwIfzaKhX5QzU38mkKna-gN6_wTNHjXg,3208
116
- kash/help/function_param_info.py,sha256=DHhd3eXI47IjrOOsWSwOC1Xal4X4h9qtZfXS67d-mqU,1682
117
+ kash/help/function_param_info.py,sha256=IVi6dtRjAWUCxpy9rZ1fRqKLCciK_kuMybTwCZ9XiYg,1692
117
118
  kash/help/help_embeddings.py,sha256=_ca7hPo_2UPwSGnB2k3KbcNU1b_I9OMI4RH2Z2E1PCU,2777
118
119
  kash/help/help_lookups.py,sha256=0dtuLWEXncqhJCijC98IA9stBDNNcJewt1JYqMLkTx4,2029
119
120
  kash/help/help_pages.py,sha256=XyV3SN1cvGjpS8xAbZ_X_6Z9hTIH7vXdgK8DCX2cwNg,3886
@@ -124,8 +125,9 @@ kash/help/tldr_help.py,sha256=bcu__MIF4vYlZEeqQqieGIBcRhNCTK5u8jPV08ObzCI,9654
124
125
  kash/llm_utils/__init__.py,sha256=3yjign7KD-kM3ZBBcgtrZz-zjJ2Yx2Q-9bzknBx5vbU,401
125
126
  kash/llm_utils/clean_headings.py,sha256=TGUcPSmUMepTPF5st8b4Jbe9TzZ6HD0Jf_9Nh1SoilA,2330
126
127
  kash/llm_utils/fuzzy_parsing.py,sha256=bbG2Y7i5w6kxAVPAixyluv3MDS2hW_pkhnJpVOLHZQc,3278
127
- kash/llm_utils/llm_api_keys.py,sha256=Vy2LdX3-3czlQSrHn1Iq7_GXfeu7vETZWKGfCOFAWrg,1086
128
- kash/llm_utils/llm_completion.py,sha256=ig_rZCHjaOZbt5D-3sOPsSFLpO8AMDXDi40jzdGeOk8,5296
128
+ kash/llm_utils/init_litellm.py,sha256=5Fn9uW4P7lfEO8Rk1EJJUzDEGNjw-PDvxFgHlKDf-Ok,409
129
+ kash/llm_utils/llm_api_keys.py,sha256=nTB9wSFfHTOXvqshSQCQGCPxUwOW1U7oslngya8nHkw,1168
130
+ kash/llm_utils/llm_completion.py,sha256=uIw6GEV17KXjOzZDshRO8LQ4faglyOAjY_Ny2D86EVg,5451
129
131
  kash/llm_utils/llm_features.py,sha256=NXZ3nvwcsVe0RLj3TtlK9gUu-UWoxdCU6Uw2X2IChrk,1773
130
132
  kash/llm_utils/llm_messages.py,sha256=70QwIIvdwo-h4Jfn_6MbEHb3LTUjUmzg_v_dU_Ey__g,1174
131
133
  kash/llm_utils/llm_names.py,sha256=VZbdKnoeBx_luB5YQ-Rz37gMt3_FcueJdp40ZaQbpUA,3620
@@ -133,15 +135,15 @@ kash/llm_utils/llms.py,sha256=Zz45v7qrmBNGnmyF-Mn5Q4F1dZGFT2xf_kmWGUMSUUw,3518
133
135
  kash/local_server/__init__.py,sha256=kLah74GG0msEARgH6CrilY3OUPuivvx_fXVCqDzDMrc,142
134
136
  kash/local_server/local_server.py,sha256=EugjL30VM0pWdZDsiQxU-o6EdEa082qlGd_7RHvI5tk,5863
135
137
  kash/local_server/local_server_commands.py,sha256=xJQ1vHVWqkbPwRMw9LwHE8CnKrb8uWeXItI1ruQPx2Y,1584
136
- kash/local_server/local_server_routes.py,sha256=o6yMhugVaJCDHJsEQf8vjb6EbhTyqx1cikBoODZSdIY,10750
138
+ kash/local_server/local_server_routes.py,sha256=SgYB_BQ8SRED_4Wtba6iwl_5y3Yjrn-5s9q3zEPsgC8,10533
137
139
  kash/local_server/local_url_formatters.py,sha256=SqHjGMEufvm43n34SCa_8Asdwm7utx91Wwymj15TuSY,5327
138
140
  kash/local_server/port_tools.py,sha256=oFfOvO6keqS5GowTpVg2FTu5KqkPHBq-dWAEomUIgGo,2008
139
141
  kash/local_server/rich_html_template.py,sha256=O9CnkMYkWuMvKJkqD0P8jaZqfUe6hMP4LXFvcLpwN8Q,196
140
142
  kash/mcp/__init__.py,sha256=kLah74GG0msEARgH6CrilY3OUPuivvx_fXVCqDzDMrc,142
141
- kash/mcp/mcp_cli.py,sha256=jeNmqYTlYpDeFoOsZqtixIQ5ywoIB1LJZaK28opn4p8,3838
143
+ kash/mcp/mcp_cli.py,sha256=po0BrdAYwrhmzX4X6ro1wT7XOYSZgK3XxgI7BCZRYtA,3841
142
144
  kash/mcp/mcp_main.py,sha256=6PhjKwp631mezDTUAd-pL8lUZx9Gl7yCrCQFW61pqJU,3167
143
145
  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
146
+ kash/mcp/mcp_server_routes.py,sha256=radxy5cc0yBmcbqAbB1LpZ0qcNtfDbtS5RTGwvgliDM,10617
145
147
  kash/mcp/mcp_server_sse.py,sha256=_D61cRWMuxgMrk-KxhkRLaaXXpgzJJa0sOB3uRxR0XM,5886
146
148
  kash/mcp/mcp_server_stdio.py,sha256=u-oeIZKwzIAGlKmBpipC-hfNQKx36Md9hST11y3AZUY,1174
147
149
  kash/media_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -150,26 +152,27 @@ kash/media_base/media_cache.py,sha256=0YnZBCPbi12TG0eZoa-02XBoRVZAEmmR6XT8PS-avB
150
152
  kash/media_base/media_services.py,sha256=7H7Y-WDjvZCidoLCsWi01xfuJoP7uiUklviwN_78crE,3406
151
153
  kash/media_base/media_tools.py,sha256=enzSebW41vDBGWUwkEn5udhRHmSBvH01MAt5rY1s388,1466
152
154
  kash/media_base/timestamp_citations.py,sha256=IHTvlZD3lIfe8T2uHFitgom82WahdHBeKqyc2OjUi9g,2368
153
- kash/media_base/transcription_deepgram.py,sha256=AENcjBMyzf01yx-OrsQ5tqOg0-xJigvuMrm0IJgFRF8,5108
155
+ kash/media_base/transcription_deepgram.py,sha256=yuwqgTPY-d7XnLMTuNDX0PLBxazqOy8osDXEscNOrGo,5308
154
156
  kash/media_base/transcription_format.py,sha256=rOVPTpwvW22c27BRwYF-Tc_xzqK_wOtUZpOPlvkHiDY,2344
155
157
  kash/media_base/transcription_whisper.py,sha256=GqvroW9kBAH4-gcbYkMgNCfs2MpMIgm1ip3NMWtJ0IE,1169
156
158
  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
159
+ kash/model/__init__.py,sha256=kFfBKb5N70NWYUfpRRxn_Sb9p_vXlB6BBaTCqWmSReo,2978
160
+ kash/model/actions_model.py,sha256=f7CBBkhgpbqdRWVoC8VVn8KL-_dGBoiSTz219WKtMZk,21720
159
161
  kash/model/assistant_response_model.py,sha256=6eDfC27nyuBDFjv5nCYMa_Qb2mPbKwDzZy7uLOIyskI,2653
160
162
  kash/model/compound_actions_model.py,sha256=HiDK5wwCu3WwZYHATZoLEguiqwR9V6V296wiKtGIX8s,6926
161
163
  kash/model/concept_model.py,sha256=we2qOcy9Mv1q7XPfkDLp_CyO_-8DwAUfUYlpgy_jrFs,1011
164
+ kash/model/exec_model.py,sha256=IlfvtQyoFRRWhWju7vdXp9J-w_NGcGtL5DhDLy9gRd8,2250
162
165
  kash/model/graph_model.py,sha256=jnctrPiBZ0xwAR8D54JMAJPanA1yZdaxSFQoIpe8anA,2662
163
- kash/model/items_model.py,sha256=6siBGrChZIrr8lk1XFsME-zzz7Sz7ButAtSRPtUqL8w,31060
166
+ kash/model/items_model.py,sha256=Qvo7yot4G4rXRtdiO91VIehJUtE488ilbGF_V-zXhWY,33489
164
167
  kash/model/language_list.py,sha256=I3RIbxTseVmPdhExQimimEv18Gmy2ImMbpXe0-_t1Qw,450
165
168
  kash/model/llm_actions_model.py,sha256=a29uXVNfS2CiqvM7HPdC6H9A23rSQQihAideuBLMH8g,2110
166
169
  kash/model/media_model.py,sha256=64Zic4cRjQpgf_-tOuZlZZe59mz_qu0s6OQSU0YlDUI,3357
167
- kash/model/operations_model.py,sha256=OGNtCY0QDqHtRNL5ueVpmOASYrwg-ysoUKMvBsQTMWk,5194
170
+ kash/model/operations_model.py,sha256=dPgccwh6HwWhag_MkhEfEwByuZamcJEFrvq4w4NtrII,6112
168
171
  kash/model/params_model.py,sha256=qGhsGvtDQoSqWkrKk9QZZfEh-jO1q2V-s-p6X-F37_M,14939
169
- kash/model/paths_model.py,sha256=H2CZNieTPF2ceW6QQDiwuZwpLddoo6ysazBi3THeNvM,15807
172
+ kash/model/paths_model.py,sha256=KDFm7wan7hjObHbnV2rR8-jsyLTVqbKcwFdKeLFRtdM,15889
170
173
  kash/model/preconditions_model.py,sha256=-IfsVR0NkQhq_3hUTXzK2bFYAd--3YjSwUiDKHVQQqk,2887
171
174
  kash/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
- kash/shell/shell_main.py,sha256=pR2a0Y0kXwXJBa6X7FayiM4SGtSs7fclDADUjMI3YEU,2092
175
+ kash/shell/shell_main.py,sha256=nqbP8NyxtxAwh787YWhpbWelt_ObfIRZzCMK1aaQcmg,2094
173
176
  kash/shell/version.py,sha256=FRGs_jmzk6QiRPZfZv36SPzeyJCsVWZ_E2CKRkExazw,835
174
177
  kash/shell/completions/completion_scoring.py,sha256=-svesm2cR1AA86jYcxlynXCBZON26eUJce93FlL2nQo,10209
175
178
  kash/shell/completions/completion_types.py,sha256=FocRXd6Df3Df0nL2Y1GevMx3FsljJwbQdVgWsIngpaQ,4793
@@ -186,41 +189,41 @@ kash/shell/output/kerm_code_utils.py,sha256=92A4AV-IFKKZMWLNZnd_zksNFMBgE_VNXySy
186
189
  kash/shell/output/kerm_codes.py,sha256=KLVdTM_dL_NeYmGbllzsQoW4IHXJjEsgqqIp1s7P1yI,18877
187
190
  kash/shell/output/kmarkdown.py,sha256=RRB5b0Ip0KZ71vnJKFfvxerYkeDFTCVTlHqHfmMy80Y,3675
188
191
  kash/shell/output/shell_formatting.py,sha256=oxmAeJ2j0ANYSUsL15CUv--KcGlQ6Wa_rywXSDlsZM4,3331
189
- kash/shell/output/shell_output.py,sha256=-Y0BUh4DOlhyVdawBXvUa6UUYkv38iaKAay-57yBb7Y,11067
192
+ kash/shell/output/shell_output.py,sha256=J3c6L_gkMgjwla4U0LkXsyzLODVAGbkVuLK0zKvf-JQ,11178
190
193
  kash/shell/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
194
  kash/shell/ui/shell_results.py,sha256=vO_9UUnI_cr1ZJqCSFgeVwGFy7JLsrEpIAobKvTdkmo,4109
192
195
  kash/shell/ui/shell_syntax.py,sha256=1fuDqcCV16AAWwWS4w4iT-tlSnl-Ywdrf68Ge8XIfmQ,751
193
- kash/shell/utils/argparse_utils.py,sha256=UD2NZXyOlziWf-fPtGCmcmHNmFbNTcFX1UDtx67bJeE,649
194
- kash/shell/utils/exception_printing.py,sha256=jkSbEZLQmMjLPMRIBolZSkrACYMHJJ_lh6yZQ7Gv-9g,1898
196
+ kash/shell/utils/exception_printing.py,sha256=UizjOkBPhW6YbkiFP965BE5FrCwn04MXGDbxyTuyvOk,1908
195
197
  kash/shell/utils/native_utils.py,sha256=FtIjjB1sOgNifTx1u7nKSAwg9A8wc9-fkACw2_xWnNg,9153
196
- kash/shell/utils/shell_function_wrapper.py,sha256=8ogOb3Crl06KovlxMs0mOyB7uKzoz2ru_hUSVzxr83c,7439
198
+ kash/shell/utils/shell_function_wrapper.py,sha256=fgUuVhocYMKLkGJJQJOER5nFMAvM0ZVpfGu7iJPJI9s,7385
197
199
  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
200
+ kash/text_handling/doc_normalization.py,sha256=LvAsdz-lkKI0NG5-Nn3XTM2bbMXSCO5Hw2dEQ8dzYqw,2755
201
+ kash/text_handling/markdown_render.py,sha256=Ea-QiBND0kp4Dc9rYr8Z3dB_CRpAxneGHBOlTDWsDo0,3751
202
+ kash/text_handling/markdown_utils.py,sha256=abrtwF1wMWxOIya0KB3tgO4y6Oj9kjU-RF8fjCR4wJA,9853
201
203
  kash/text_handling/unified_diffs.py,sha256=AS5el-uPkXwpRA9bD46dyMo-YBDXb7zRF_MH3c47shA,4335
202
204
  kash/utils/__init__.py,sha256=4Jl_AtgRADdGORimWhYZwbSfQSpQ6SiexNIZzmbcngI,111
203
- kash/utils/errors.py,sha256=tTosrR8Z2bJGoBDxBbmEJ4GPQhS6_P6ENeDUNdLDyRg,3815
205
+ kash/utils/errors.py,sha256=2lPL0fxI8pPOiDvjl0j-rvwY8uhmWetsrYYIc2-x1WY,3906
204
206
  kash/utils/common/__init__.py,sha256=ggeWw1xmbl1mgCQD3c4CNN2h5WXFCsN2wXlCWurEUEI,161
205
- kash/utils/common/format_utils.py,sha256=IPMKhx-S_SyqiN1cwUKFLJhpt1hT9P4cKZYrfKd1mYk,2431
206
- kash/utils/common/function_inspect.py,sha256=kZfsRbVL4FIZniyAUy_U5HJ3G80_U0xns8jEM9p8dzI,6540
207
+ kash/utils/common/format_utils.py,sha256=6zDHYsFlDzNGaqMkxXyYcX806tXwn-9rv0mJDMT-pUo,2343
208
+ kash/utils/common/function_inspect.py,sha256=gJ7jzd14hpuhJW18kxj6MgC2Q60nhYccQK78tq_hf_M,14085
207
209
  kash/utils/common/import_utils.py,sha256=FUsasP-PgxOtRIutm3SnCGH_MBPK6pxUb-oc6dXT0aA,3428
210
+ kash/utils/common/inflection.py,sha256=efufYj57MCGJeKv30BKVf0mfMX_MmJCT7PiiQKqVhw8,531
208
211
  kash/utils/common/lazyobject.py,sha256=9dmOfSheblOXgo2RRakMwgfPIKdTgtyrlm6dCKAze04,5157
209
212
  kash/utils/common/obj_replace.py,sha256=AuiXptUOnuDNcWDgAJ3jEHkLh89XIqCP_SOkgaVyFIQ,2075
210
213
  kash/utils/common/parse_key_vals.py,sha256=yZRZIa5GD9SlnBSn2YNZm8PRVKoSJMY8DCmdGujQj_I,2418
211
214
  kash/utils/common/parse_shell_args.py,sha256=UZXTZDbV5m5Jy39jdAQ6W8uilr1TNa0__RqnE8UmQ_M,10604
212
215
  kash/utils/common/stack_traces.py,sha256=a2NwlK_0xxnjMCDC4LrQu7ueFylF-OImFG3bAAHpPwY,1392
213
- kash/utils/common/task_stack.py,sha256=C8tJ4liA9__04EBf75o16FhaBWyyHqSdYKFcZRPOXn8,4800
216
+ kash/utils/common/task_stack.py,sha256=XkeBz3BwYY1HxxTqd3f7CulV0s61PePAKw1Irrtvf5o,4536
214
217
  kash/utils/common/type_utils.py,sha256=SJirXhPilQom_-OKkFToDLm_82ZwpjcNjRy8U1HaQ0Q,3829
215
218
  kash/utils/common/uniquifier.py,sha256=75OY4KIVF8u1eoO0FCPbEGTyVpPOtM-0ctoG_s_jahM,3082
216
219
  kash/utils/common/url.py,sha256=hEDC0ImO3DLvaPRflcmiUZ1wK_Ilsm6_9fLaG23sUfo,6515
217
220
  kash/utils/file_formats/chat_format.py,sha256=Onby7Zany1UQSUo_JzLs6MIfmoXViZeOAacRTMVe92M,11818
218
221
  kash/utils/file_utils/__init__.py,sha256=loL_iW0oOZs0mJ5GelBPptBcqzYKSWdsGcHrpRyxitQ,43
219
222
  kash/utils/file_utils/dir_info.py,sha256=HamMr58k_DanTLifj7A2JDxTGWXEZZx2pQuE6Hjcm8g,1856
220
- kash/utils/file_utils/file_ext.py,sha256=HqUnCojgEuA4JSJwIK5ILPJU4TS4cXYNJmTNwC2tiwA,1783
223
+ kash/utils/file_utils/file_ext.py,sha256=-H63vlrVI3pfE2Cn_9qF7-QLDaUIu_njc4TieNgAHSY,1860
221
224
  kash/utils/file_utils/file_formats.py,sha256=tmrmqM5YTxfvlpvqmeOVz0yVRuPxxIAkVZf1-D0fp5Y,4902
222
- kash/utils/file_utils/file_formats_model.py,sha256=9Vp9vP7ECsnQIcJOpqYZymhcyw7vREvPrP6ovKpuLp0,13930
223
- kash/utils/file_utils/file_sort_filter.py,sha256=-hjNV0AvDTU64zTag9vOlZ7Bg5y04I8Bn61J43si7hw,7003
225
+ kash/utils/file_utils/file_formats_model.py,sha256=DQdwshgfKjzS8a8teDZA_PQrn1saxRlY-gvekxtFdPw,15039
226
+ kash/utils/file_utils/file_sort_filter.py,sha256=_k1chT3dJl5lSmKA2PW90KaoG4k4zftGdtwWoNEljP4,7136
224
227
  kash/utils/file_utils/file_walk.py,sha256=cpwVDPuaVm95_ZwFJiAdIuZAGhASI3gJ3ZUsCGP75b8,5527
225
228
  kash/utils/file_utils/filename_parsing.py,sha256=sxrZGOv1d4YOCRRtLlpkpYdB-7fIQJqIzUDGH2_S9EA,3350
226
229
  kash/utils/file_utils/ignore_files.py,sha256=QJ0SFeGdxSCaf4v45qQE_BMsMT5nOgomma0TuJRibp8,3546
@@ -228,7 +231,6 @@ kash/utils/file_utils/mtime_cache.py,sha256=1QvAPdBSvKZL3j2cxm4lgZYTik4QdeIIC8Tz
228
231
  kash/utils/file_utils/path_utils.py,sha256=x0__A1-5Cjsit_RZr-wnNNQEzgVJ93Es5zSdJk7Ycz0,1069
229
232
  kash/utils/lang_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
233
  kash/utils/lang_utils/capitalization.py,sha256=5XbqBvjkzlxsm1Ue5AQP3P1J1IG0PubMVmGnoKVTF-c,3903
231
- kash/utils/lang_utils/inflection.py,sha256=lIroEww-JnaDv_p55r8p6sG9XslVQxQPtwuqOzJauF0,336
232
234
  kash/utils/rich_custom/__init__.py,sha256=_g2F3Bqc1UnLTdAdCwkvzXmW7OvmqXrA8DpfT1dKy6w,75
233
235
  kash/utils/rich_custom/ansi_cell_len.py,sha256=oQlNrqWB0f6pmigkbRRyeK6oWlGHMPbV_YLO_qmDH5E,2356
234
236
  kash/utils/rich_custom/rich_char_transform.py,sha256=3M89tViKM0y31VHsDoHi5eHFWlv5ME7F4p35IdDxnrw,2616
@@ -244,23 +246,26 @@ kash/web_content/web_extract_justext.py,sha256=74HLJBKDGKatwxyRDX6za70bZG9LrVmtj
244
246
  kash/web_content/web_extract_readabilipy.py,sha256=yxwO-bVtRGepOobqa3AWSVe7WYCOBvWJV9Sktp60_UI,763
245
247
  kash/web_content/web_fetch.py,sha256=dy3p-jrZY2szSgMUgLYWzEbMPsuFopPWKS0C8WIYgMM,3737
246
248
  kash/web_content/web_page_model.py,sha256=g9GUJpPJOd3-3mwajVodA3dcapDg1CMHxnPczXKEWUk,657
247
- kash/web_gen/__init__.py,sha256=mAa0ZNUbazETGHlM8OwxBC35LFvWDUvg15IpbZ-_TU4,121
248
- kash/web_gen/tabbed_webpage.py,sha256=M1ohHmpjWpF-FXSo3vYcXQR9jhK77b6RPvx96vJ_AFg,4511
249
- kash/web_gen/template_render.py,sha256=r5oS7RarPnGfZqS5G-pHnNin6SZRVactRO-c-QX6fcM,763
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
249
+ kash/web_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
+ kash/web_gen/simple_webpage.py,sha256=Lu99W277NT04lnFCrLEjea_RI0VcD56BDk8mUW1bRh4,1393
251
+ kash/web_gen/tabbed_webpage.py,sha256=Q_Htw2QO0O9H3A9OFrWw9GBD73cbwB6hOKF-W6mO6YE,4807
252
+ kash/web_gen/template_render.py,sha256=aypo6UanouftV4RpxgNm6JdquelI52fV0IlihdA3yjE,1908
253
+ kash/web_gen/templates/base_styles.css.jinja,sha256=4_-ipKCvne_WrzNZVEB7VwztXJgTrVAPlqIOfrjOVSM,6610
254
+ kash/web_gen/templates/base_webpage.html.jinja,sha256=Nvdd8pLSG2OdbrDQRvYcexYIZoMdr1G_7MdUVHNDoA8,7945
252
255
  kash/web_gen/templates/content_styles.css.jinja,sha256=3qcIwIt3DipCDJa9z6oIM_BMxmwoT7E_loTK0F3L9Vo,3629
253
256
  kash/web_gen/templates/explain_view.html.jinja,sha256=DNw5Iw5SrhIUFRGB4qNvfcKXsBHVbEJVURGdhvyC75Q,949
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
257
+ kash/web_gen/templates/item_view.html.jinja,sha256=-Rqf2qS9KNbcJp9q1OOtl1aBGgPuwG7jc2Bgw_6YfBg,6791
258
+ kash/web_gen/templates/simple_webpage.html.jinja,sha256=wUUOVhOjCRyHxjOhIl3dcRwppENOzgWaskiM0nX8TNU,721
259
+ kash/web_gen/templates/tabbed_webpage.html.jinja,sha256=u7gabDsCs3neQQlH1y1rIaqT8UumPKVPPZG4VKg5R_g,1823
260
+ kash/workspaces/__init__.py,sha256=q1gFERRZLJMA9-XSUKvB1ulauHDKqyzzc86GFLbxAuk,700
257
261
  kash/workspaces/param_state.py,sha256=vT_eGWqg2SRviIM5jqEAauznX2B5Xt2nHHu2oRxTcIU,746
258
262
  kash/workspaces/selections.py,sha256=bles1G_XueDIP9-kjuTmb1BfI1KK9mBTuHZ2GxJLrEM,12003
259
263
  kash/workspaces/source_items.py,sha256=Pwnw3OhjR2IJEMEeHf6hpKloj-ellM5vsY7LgkGevRY,2861
260
- kash/workspaces/workspace_importing.py,sha256=9LTzPdEFZ8BaliWplPHc87YePL8tJpjtMsICjDQwwD8,1933
264
+ kash/workspaces/workspace_dirs.py,sha256=kjuY4t7mSSXq00fZmln7p9TWq4kAZoPTCDM0DG7uEaI,1545
265
+ kash/workspaces/workspace_importing.py,sha256=s7_OpRRLI-L58bjoOe4fo8czZsVFLBNgaB6VuzhUPUs,1930
261
266
  kash/workspaces/workspace_output.py,sha256=dEtXBCdGufupiG2hzB1xZQpS3E-vbVfqHlpRfPWTBRE,5692
262
267
  kash/workspaces/workspace_registry.py,sha256=SQt2DZgBEu95Zj9fpy67XdJPgJyKFDCU2laSuiZswNo,2200
263
- kash/workspaces/workspaces.py,sha256=Z0V_2czs7C_8EFeqlKzxn00CZ-V03_EUKQBDCCI4q5s,8356
268
+ kash/workspaces/workspaces.py,sha256=kQyS3F57Y9A9xVT_Ss7HzJhDGlI-UXHKvRDnEVkBnik,6764
264
269
  kash/xonsh_custom/command_nl_utils.py,sha256=6Xcx98HXL5HywziHi0XskwFx6kfvz7oCmMX-siJib1A,3392
265
270
  kash/xonsh_custom/custom_shell.py,sha256=jydWwHR0-RslioaHHY1sHnM6H6fG3cwOw1XO__sG_b0,19026
266
271
  kash/xonsh_custom/customize_prompt.py,sha256=u-jRY-ftXYflBkbJVetEg6GYelPUvqZEpjrPRUTfy8w,6896
@@ -274,8 +279,8 @@ kash/xonsh_custom/xonsh_modern_tools.py,sha256=mj_b34LZXfE8MJe9EpDmp5JZ0tDM1biYN
274
279
  kash/xonsh_custom/xonsh_ranking_completer.py,sha256=ZRGiAfoEgqgnlq2-ReUVEaX5oOgW1DQ9WxIv2OJLuTo,5620
275
280
  kash/xontrib/fnm.py,sha256=V2tsOdmIDgbFbZSfMLpsvDIwwJJqiYnOkOySD1cXNXw,3700
276
281
  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,,
282
+ kash_shell-0.3.12.dist-info/METADATA,sha256=AziaMFV9B3BAhc_nn8N5gvS7d9O0_he_bBVhYc96LDM,31258
283
+ kash_shell-0.3.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
284
+ kash_shell-0.3.12.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
285
+ kash_shell-0.3.12.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
286
+ kash_shell-0.3.12.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- from typing import Any
2
-
3
- from rich import get_console
4
- from rich_argparse.contrib import ParagraphRichHelpFormatter
5
-
6
- MAX_WIDTH = 88
7
- MIN_WIDTH = 40
8
-
9
-
10
- class WrappedColorFormatter(ParagraphRichHelpFormatter):
11
- """
12
- A formatter for argparse that colorizes with rich_argparse and also wraps
13
- text to console width, which is better for readability in both wide and
14
- narrow consoles. Also preserves paragraphs, unlike the default argparse
15
- formatters.
16
- """
17
-
18
- def __init__(self, *args: Any, **kwargs: Any) -> None:
19
- width = max(MIN_WIDTH, min(MAX_WIDTH, get_console().width))
20
- super().__init__(*args, width=width, **kwargs)
@@ -1,18 +0,0 @@
1
- from functools import cache
2
-
3
- from chopdiff.docs import is_word
4
- from inflect import engine
5
-
6
-
7
- @cache
8
- def inflect():
9
- return engine()
10
-
11
-
12
- def plural(word: str, count: int | None = None) -> str:
13
- """
14
- Pluralize a word.
15
- """
16
- if not is_word(word):
17
- return word
18
- return inflect().plural(word, count) # pyright: ignore