kash-shell 0.3.28__py3-none-any.whl → 0.3.30__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.
- kash/actions/core/markdownify_html.py +1 -4
- kash/actions/core/minify_html.py +4 -5
- kash/actions/core/render_as_html.py +9 -7
- kash/actions/core/save_sidematter_meta.py +47 -0
- kash/actions/core/zip_sidematter.py +47 -0
- kash/commands/base/basic_file_commands.py +7 -4
- kash/commands/base/diff_commands.py +6 -4
- kash/commands/base/files_command.py +31 -30
- kash/commands/base/general_commands.py +3 -2
- kash/commands/base/logs_commands.py +6 -4
- kash/commands/base/reformat_command.py +3 -2
- kash/commands/base/search_command.py +4 -3
- kash/commands/base/show_command.py +9 -7
- kash/commands/help/assistant_commands.py +6 -4
- kash/commands/help/help_commands.py +7 -4
- kash/commands/workspace/selection_commands.py +18 -16
- kash/commands/workspace/workspace_commands.py +39 -26
- kash/config/setup.py +2 -27
- kash/docs/markdown/topics/a1_what_is_kash.md +26 -18
- kash/exec/action_decorators.py +2 -2
- kash/exec/action_exec.py +56 -50
- kash/exec/fetch_url_items.py +36 -9
- kash/exec/preconditions.py +2 -2
- kash/exec/resolve_args.py +4 -1
- kash/exec/runtime_settings.py +1 -0
- kash/file_storage/file_store.py +59 -23
- kash/file_storage/item_file_format.py +91 -26
- kash/help/help_types.py +1 -1
- kash/llm_utils/llms.py +6 -1
- kash/local_server/local_server_commands.py +2 -1
- kash/mcp/mcp_server_commands.py +3 -2
- kash/mcp/mcp_server_routes.py +1 -1
- kash/model/actions_model.py +31 -30
- kash/model/compound_actions_model.py +4 -3
- kash/model/exec_model.py +30 -3
- kash/model/items_model.py +114 -57
- kash/model/params_model.py +4 -4
- kash/shell/output/shell_output.py +1 -2
- kash/utils/file_formats/chat_format.py +7 -4
- kash/utils/file_utils/file_ext.py +1 -0
- kash/utils/file_utils/file_formats.py +4 -2
- kash/utils/file_utils/file_formats_model.py +12 -0
- kash/utils/text_handling/doc_normalization.py +1 -1
- kash/utils/text_handling/markdown_footnotes.py +224 -0
- kash/utils/text_handling/markdown_utils.py +532 -41
- kash/utils/text_handling/markdownify_utils.py +2 -1
- kash/web_gen/templates/components/tooltip_scripts.js.jinja +186 -1
- kash/web_gen/templates/components/youtube_popover_scripts.js.jinja +223 -0
- kash/web_gen/templates/components/youtube_popover_styles.css.jinja +150 -0
- kash/web_gen/templates/content_styles.css.jinja +53 -1
- kash/web_gen/templates/youtube_webpage.html.jinja +47 -0
- kash/web_gen/webpage_render.py +103 -0
- kash/workspaces/workspaces.py +0 -5
- kash/xonsh_custom/custom_shell.py +4 -3
- {kash_shell-0.3.28.dist-info → kash_shell-0.3.30.dist-info}/METADATA +33 -24
- {kash_shell-0.3.28.dist-info → kash_shell-0.3.30.dist-info}/RECORD +59 -54
- kash/llm_utils/llm_features.py +0 -72
- kash/web_gen/simple_webpage.py +0 -55
- {kash_shell-0.3.28.dist-info → kash_shell-0.3.30.dist-info}/WHEEL +0 -0
- {kash_shell-0.3.28.dist-info → kash_shell-0.3.30.dist-info}/entry_points.txt +0 -0
- {kash_shell-0.3.28.dist-info → kash_shell-0.3.30.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
from chopdiff.html import rewrite_html_img_urls
|
|
2
|
+
from sidematter_format import Sidematter, copy_sidematter
|
|
3
|
+
|
|
4
|
+
from kash.config.logger import get_logger
|
|
5
|
+
from kash.model.items_model import Item
|
|
6
|
+
from kash.utils.file_utils.file_formats_model import Format
|
|
7
|
+
from kash.utils.text_handling.markdown_utils import rewrite_image_urls
|
|
8
|
+
from kash.web_gen.template_render import render_web_template
|
|
9
|
+
from kash.workspaces.workspaces import current_ws
|
|
10
|
+
|
|
11
|
+
log = get_logger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def copy_item_sidematter(
|
|
15
|
+
input_item: Item,
|
|
16
|
+
result_item: Item,
|
|
17
|
+
) -> tuple[str, str]:
|
|
18
|
+
"""
|
|
19
|
+
Copy the sidematter of an item to a new item. Useful for copying assets, especially images.
|
|
20
|
+
"""
|
|
21
|
+
ws = current_ws()
|
|
22
|
+
|
|
23
|
+
# Manually copy over metadata and assets. This makes image assets work.
|
|
24
|
+
assert input_item.store_path
|
|
25
|
+
src_path = ws.base_dir / input_item.store_path
|
|
26
|
+
dest_path = ws.assign_store_path(result_item)
|
|
27
|
+
|
|
28
|
+
log.message(
|
|
29
|
+
"Copying sidematter and assets: %s -> %s",
|
|
30
|
+
input_item.store_path,
|
|
31
|
+
result_item.store_path,
|
|
32
|
+
)
|
|
33
|
+
copy_sidematter(
|
|
34
|
+
src_path=src_path,
|
|
35
|
+
dest_path=dest_path,
|
|
36
|
+
make_parents=True,
|
|
37
|
+
copy_original=False,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
old_prefix = Sidematter(src_path).assets_dir.name
|
|
41
|
+
new_prefix = Sidematter(dest_path).assets_dir.name
|
|
42
|
+
|
|
43
|
+
return old_prefix, new_prefix
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def rewrite_item_image_urls(
|
|
47
|
+
input_item: Item,
|
|
48
|
+
old_prefix: str,
|
|
49
|
+
new_prefix: str,
|
|
50
|
+
) -> Item:
|
|
51
|
+
"""
|
|
52
|
+
Rewrite image path prefixes. Useful when we are rendering an item with sidematter
|
|
53
|
+
asset paths.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
# Rewrite image paths to be relative to the workspace.
|
|
57
|
+
assert input_item.body
|
|
58
|
+
if input_item.format in (Format.markdown, Format.md_html):
|
|
59
|
+
rewritten_body = rewrite_image_urls(input_item.body, old_prefix, new_prefix)
|
|
60
|
+
elif input_item.format == Format.html:
|
|
61
|
+
rewritten_body = rewrite_html_img_urls(
|
|
62
|
+
input_item.body, from_prefix=old_prefix, to_prefix=new_prefix
|
|
63
|
+
)
|
|
64
|
+
else:
|
|
65
|
+
rewritten_body = input_item.body
|
|
66
|
+
|
|
67
|
+
change_str = "found" if rewritten_body != input_item.body else "none found"
|
|
68
|
+
log.message("Rewrote doc image paths (%s): `%s` -> `%s`", change_str, old_prefix, new_prefix)
|
|
69
|
+
rewritten_item = input_item.derived_copy(body=rewritten_body)
|
|
70
|
+
|
|
71
|
+
return rewritten_item
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def render_item_as_html(
|
|
75
|
+
input_item: Item,
|
|
76
|
+
result_item: Item,
|
|
77
|
+
*,
|
|
78
|
+
add_title_h1: bool,
|
|
79
|
+
template_filename: str = "youtube_webpage.html.jinja",
|
|
80
|
+
) -> Item:
|
|
81
|
+
"""
|
|
82
|
+
Render an item as HTML, including copying sidematter and assets.
|
|
83
|
+
Also rewrites image paths to be relative to the workspace.
|
|
84
|
+
The partly filled-in result item is needed to be able to assign a store path.
|
|
85
|
+
If `add_title_h1` is True, the title will be inserted as an h1 heading above the body.
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
old_prefix, new_prefix = copy_item_sidematter(input_item, result_item)
|
|
89
|
+
|
|
90
|
+
rewritten_item = rewrite_item_image_urls(input_item, old_prefix, new_prefix)
|
|
91
|
+
|
|
92
|
+
result_item.body = render_web_template(
|
|
93
|
+
template_filename=template_filename,
|
|
94
|
+
data={
|
|
95
|
+
"title": input_item.pick_title(),
|
|
96
|
+
"add_title_h1": add_title_h1,
|
|
97
|
+
"content_html": rewritten_item.body_as_html(),
|
|
98
|
+
"thumbnail_url": input_item.thumbnail_url,
|
|
99
|
+
"enable_themes": True,
|
|
100
|
+
"show_theme_toggle": True,
|
|
101
|
+
},
|
|
102
|
+
)
|
|
103
|
+
return result_item
|
kash/workspaces/workspaces.py
CHANGED
|
@@ -53,11 +53,6 @@ class Workspace(ABC):
|
|
|
53
53
|
def base_dir(self) -> Path:
|
|
54
54
|
"""The base directory for this workspace."""
|
|
55
55
|
|
|
56
|
-
@property
|
|
57
|
-
@abstractmethod
|
|
58
|
-
def assets_dir(self) -> Path:
|
|
59
|
-
"""The directory for this workspace's assets."""
|
|
60
|
-
|
|
61
56
|
|
|
62
57
|
def resolve_ws(name: str | Path) -> WorkspaceInfo:
|
|
63
58
|
"""
|
|
@@ -100,7 +100,7 @@ class CustomPTKPromptFormatter(PTKPromptFormatter):
|
|
|
100
100
|
if isinstance(result, FormattedText):
|
|
101
101
|
return result
|
|
102
102
|
except Exception as e:
|
|
103
|
-
log.error("Error formatting prompt: evaluating %s: %s", template, e)
|
|
103
|
+
log.error("Error formatting prompt: evaluating %s: %s", template, e, exc_info=True)
|
|
104
104
|
# On any error, return a simple fallback prompt.
|
|
105
105
|
return FormattedText([("", "$ ")])
|
|
106
106
|
# If it's not FormattedText, use it as the template for parent formatter
|
|
@@ -431,8 +431,9 @@ def start_shell(single_command: str | None = None, ready_event: threading.Event
|
|
|
431
431
|
other customizations but then the rest of the customization is via the `kash_extension`
|
|
432
432
|
xontrib.
|
|
433
433
|
|
|
434
|
-
:
|
|
435
|
-
|
|
434
|
+
Args:
|
|
435
|
+
single_command: Optional command to run in non-interactive mode
|
|
436
|
+
shell_ready_event: Optional event to signal when shell is ready
|
|
436
437
|
"""
|
|
437
438
|
import builtins
|
|
438
439
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kash-shell
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.30
|
|
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,7 +20,7 @@ Requires-Dist: aiolimiter>=1.2.1
|
|
|
20
20
|
Requires-Dist: anyio>=4.8.0
|
|
21
21
|
Requires-Dist: audioop-lts>=0.2.1; python_version >= '3.13'
|
|
22
22
|
Requires-Dist: cachetools>=5.5.2
|
|
23
|
-
Requires-Dist: chopdiff>=0.2.
|
|
23
|
+
Requires-Dist: chopdiff>=0.2.5
|
|
24
24
|
Requires-Dist: clideps>=0.1.4
|
|
25
25
|
Requires-Dist: colour>=0.1.5
|
|
26
26
|
Requires-Dist: cssselect>=1.2.0
|
|
@@ -28,8 +28,8 @@ Requires-Dist: curl-cffi>=0.11.4
|
|
|
28
28
|
Requires-Dist: deepgram-sdk>=3.10.1
|
|
29
29
|
Requires-Dist: dunamai>=1.23.0
|
|
30
30
|
Requires-Dist: fastapi>=0.115.11
|
|
31
|
-
Requires-Dist: flowmark>=0.5.
|
|
32
|
-
Requires-Dist: frontmatter-format>=0.2.
|
|
31
|
+
Requires-Dist: flowmark>=0.5.3
|
|
32
|
+
Requires-Dist: frontmatter-format>=0.2.3
|
|
33
33
|
Requires-Dist: funlog>=0.2.0
|
|
34
34
|
Requires-Dist: httpx[brotli]>=0.28.1
|
|
35
35
|
Requires-Dist: humanfriendly>=10.0
|
|
@@ -46,7 +46,7 @@ Requires-Dist: pandas>=2.2.3
|
|
|
46
46
|
Requires-Dist: patch-ng>=1.18.1
|
|
47
47
|
Requires-Dist: pathspec>=0.12.1
|
|
48
48
|
Requires-Dist: pluralizer>=1.2.0
|
|
49
|
-
Requires-Dist: prettyfmt>=0.
|
|
49
|
+
Requires-Dist: prettyfmt>=0.4.1
|
|
50
50
|
Requires-Dist: prompt-toolkit>=3.0.50
|
|
51
51
|
Requires-Dist: pydantic>=2.10.6
|
|
52
52
|
Requires-Dist: pydub>=0.25.1
|
|
@@ -62,9 +62,10 @@ Requires-Dist: regex>=2024.11.6
|
|
|
62
62
|
Requires-Dist: rich-argparse>=1.7.0
|
|
63
63
|
Requires-Dist: rich>=14.0.0
|
|
64
64
|
Requires-Dist: ripgrepy>=2.1.0
|
|
65
|
+
Requires-Dist: selectolax>=0.3.32
|
|
65
66
|
Requires-Dist: send2trash>=1.8.3
|
|
66
67
|
Requires-Dist: setproctitle>=1.3.5
|
|
67
|
-
Requires-Dist: sidematter-format>=0.0.
|
|
68
|
+
Requires-Dist: sidematter-format>=0.0.5
|
|
68
69
|
Requires-Dist: strif>=3.0.1
|
|
69
70
|
Requires-Dist: tenacity>=9.0.0
|
|
70
71
|
Requires-Dist: thefuzz>=0.22.1
|
|
@@ -85,6 +86,19 @@ src="https://github.com/user-attachments/assets/a5d62ae4-17e6-46bb-a9cb-3b6ec8d8
|
|
|
85
86
|
|
|
86
87
|
</div>
|
|
87
88
|
|
|
89
|
+
## Hello!
|
|
90
|
+
|
|
91
|
+
If you’re seeing this, you there’s a good chance I shared it with you for feedback.
|
|
92
|
+
Thank you for checking out Kash.
|
|
93
|
+
|
|
94
|
+
It’s new, the result of some experimentation over the past few months.
|
|
95
|
+
I like a lot of things about it but it isn’t mature and I’d love your help to make it
|
|
96
|
+
more usable. If you try it please **let me know** what works and what doesn’t work.
|
|
97
|
+
Or if you just don’t get it, where you lost interest or got stuck.
|
|
98
|
+
My contact info is at [github.com/jlevy](https://github.com/jlevy) or [follow or DM
|
|
99
|
+
me](https://x.com/ojoshe) (I’m fastest on Twitter DMs).
|
|
100
|
+
Thank you. :)
|
|
101
|
+
|
|
88
102
|
## What is Kash?
|
|
89
103
|
|
|
90
104
|
> “*Simple should be simple.
|
|
@@ -99,9 +113,15 @@ It operates on “items” such as URLs, files, or Markdown notes within a works
|
|
|
99
113
|
directory.
|
|
100
114
|
|
|
101
115
|
You can use Kash as an **interactive, AI-native command-line** shell for practical
|
|
102
|
-
knowledge tasks.
|
|
103
|
-
|
|
104
|
-
|
|
116
|
+
knowledge tasks.
|
|
117
|
+
|
|
118
|
+
But it’s actually not just a shell, and you can skip the shell entirely.
|
|
119
|
+
It’s really simply **a Python library** that lets you convert a simple Python function
|
|
120
|
+
into “actions” that work in a clean way on plain files in a workspace.
|
|
121
|
+
An action is also an MCP tool, so it integrates with other tools like Anthropic Desktop
|
|
122
|
+
or Cursor.
|
|
123
|
+
|
|
124
|
+
So basically, it gives a unified way to use the shell, Python functions, and MCP tools.
|
|
105
125
|
|
|
106
126
|
It’s new and still has some rough edges, but it’s now working well enough it is feeling
|
|
107
127
|
quite powerful. It now serves as a replacement for my usual shell (previously bash or
|
|
@@ -160,10 +180,10 @@ quick to install via uv.
|
|
|
160
180
|
- **Support for any API:** Kash is tool agnostic and runs locally, on file inputs in
|
|
161
181
|
simple formats, so you own and manage your data and workspaces however you like.
|
|
162
182
|
You can use it with any models or APIs you like, and is already set up to use the APIs
|
|
163
|
-
of **OpenAI GPT-
|
|
164
|
-
Grok**, **Mistral**, **Groq (Llama, Qwen, Deepseek)** (via
|
|
165
|
-
**Perplexity**, **Firecrawl**, **Exa**, and any Python
|
|
166
|
-
There is also some experimental support for **LlamaIndex** and **ChromaDB**.
|
|
183
|
+
of **OpenAI** (GPT-5 is now the default model), **Anthropic Claude**, **Google
|
|
184
|
+
Gemini**, **xAI Grok**, **Mistral**, **Groq (Llama, Qwen, Deepseek)** (via
|
|
185
|
+
**LiteLLM**), **Deepgram**, **Perplexity**, **Firecrawl**, **Exa**, and any Python
|
|
186
|
+
libraries. There is also some experimental support for **LlamaIndex** and **ChromaDB**.
|
|
167
187
|
|
|
168
188
|
- **MCP support:** Finally, an action is also an **MCP tool server** so you can use it
|
|
169
189
|
in any MCP client, like Anthropic Desktop or Cursor.
|
|
@@ -198,17 +218,6 @@ I’ve separately built a new desktop terminal app, Kerm, which adds support for
|
|
|
198
218
|
the terminal. Because Kash supports these codes, as this develops you will get the
|
|
199
219
|
visuals of a web app layered on the flexibility of a text-based terminal.
|
|
200
220
|
|
|
201
|
-
### Is Kash Mature?
|
|
202
|
-
|
|
203
|
-
It’s the result of a couple months of coding and experimentation, and it’s still in
|
|
204
|
-
progress and has rough edges.
|
|
205
|
-
Please help me make it better by sharing your ideas and feedback!
|
|
206
|
-
It’s easiest to DM me at [twitter.com/ojoshe](https://x.com/ojoshe).
|
|
207
|
-
My contact info is at [github.com/jlevy](https://github.com/jlevy).
|
|
208
|
-
|
|
209
|
-
[**Please follow or DM me**](https://x.com/ojoshe) for future updates or if you have
|
|
210
|
-
ideas, feedback, or use cases for Kash!
|
|
211
|
-
|
|
212
221
|
## Installation
|
|
213
222
|
|
|
214
223
|
### Running the Kash Shell
|
|
@@ -6,38 +6,40 @@ kash/actions/core/chat.py,sha256=yCannBFa0cSpR_in-XSSuMm1x2ZZQUCKmlqzhsUfpOo,269
|
|
|
6
6
|
kash/actions/core/combine_docs.py,sha256=5bTU7n_ICavvTXfC7fs5BDMeZYn7Xh5FkU7DVQqDHAQ,1536
|
|
7
7
|
kash/actions/core/concat_docs.py,sha256=Umx3VzFiHJGY-76AEs4ju_1HnB9SbQsBux03Mkeig24,1345
|
|
8
8
|
kash/actions/core/format_markdown_template.py,sha256=ZJbtyTSypPo2ewLiGRSyIpVf711vQMhI_-Ng-FgCs80,2991
|
|
9
|
-
kash/actions/core/markdownify_html.py,sha256=
|
|
10
|
-
kash/actions/core/minify_html.py,sha256=
|
|
9
|
+
kash/actions/core/markdownify_html.py,sha256=3no9UkI6YT9FdiDmwUCG1CdeCanO0jHa9zWzfk-adro,1733
|
|
10
|
+
kash/actions/core/minify_html.py,sha256=TRhyn7Gvcowou8pzq9vzDTtcCFOA4eC5217pJ9rPuOw,1386
|
|
11
11
|
kash/actions/core/readability.py,sha256=ljdB2rOpzfKU2FpEJ2UELIzcdOAWvdUjFsxoHRTE3xo,989
|
|
12
|
-
kash/actions/core/render_as_html.py,sha256=
|
|
12
|
+
kash/actions/core/render_as_html.py,sha256=AtPZrNBByQHFnmOD77DqGjslOy2NR7Zp7NOZ99nfMmU,1870
|
|
13
|
+
kash/actions/core/save_sidematter_meta.py,sha256=fKLE5eWIorOdw_FW46AUivXACQ6cxWvKWllcEjT6mz8,1440
|
|
13
14
|
kash/actions/core/show_webpage.py,sha256=Ggba9jkx9U-FZOcuL0lkS-SwtPNUyxVsGdeQrqwWs1s,887
|
|
14
15
|
kash/actions/core/strip_html.py,sha256=FDLN_4CKB11q5cU4NixTf7PGrAq92AjQNbKAdvQDwCY,849
|
|
15
16
|
kash/actions/core/summarize_as_bullets.py,sha256=Zwr8lNzL77pwpnW_289LQjNBijNDpTPANfFdOJA-PZ4,2070
|
|
16
17
|
kash/actions/core/tabbed_webpage_config.py,sha256=rIbzEhBTmnkbSiRZC-Rj46T1J6c0jOztiKE9Usa4nsc,980
|
|
17
18
|
kash/actions/core/tabbed_webpage_generate.py,sha256=935HkDSuP4eZ1e0xf-LhjPOdicU3wI5Kuh79r61QCl8,988
|
|
19
|
+
kash/actions/core/zip_sidematter.py,sha256=E7ae0g9Bz7uXApYdNY-a8GvSIIPoqXcD95mjMaKQlsM,1557
|
|
18
20
|
kash/actions/meta/write_instructions.py,sha256=zeKKX-Yi8jSyjvZ4Ii_4MNBRtM2MENuHyrD0Vxsaos8,1277
|
|
19
21
|
kash/actions/meta/write_new_action.py,sha256=w7SJZ2FjzRbKwqKX9PeozUrh8cNJAumX7F80wW7dQts,6356
|
|
20
22
|
kash/commands/__init__.py,sha256=MhdPSluWGE3XVQ7LSv2L8_aAxaey8CLjQBjGC9B4nRM,191
|
|
21
|
-
kash/commands/base/basic_file_commands.py,sha256=
|
|
23
|
+
kash/commands/base/basic_file_commands.py,sha256=y13xxPWldXp03ndqVKxz6MrLwSV9DjuKKg4rMTIyb0U,7079
|
|
22
24
|
kash/commands/base/browser_commands.py,sha256=iYvpW4D_tlhW_p0cq3A6YO9UGCdHtvzIQiNMDwCY07A,1574
|
|
23
25
|
kash/commands/base/debug_commands.py,sha256=9I5W3SMQvsnpcs-b6CJCYu1Ydl6gIoTUcDZxvn1dN3g,7643
|
|
24
|
-
kash/commands/base/diff_commands.py,sha256=
|
|
25
|
-
kash/commands/base/files_command.py,sha256=
|
|
26
|
-
kash/commands/base/general_commands.py,sha256=
|
|
27
|
-
kash/commands/base/logs_commands.py,sha256=
|
|
26
|
+
kash/commands/base/diff_commands.py,sha256=5FypsOGiSvZAiis0bahlgR1vfmcxBpLwnkF8oZQD3eY,4921
|
|
27
|
+
kash/commands/base/files_command.py,sha256=e4yLfb4_hsKQEvVdeBQSl7TNr8v4FDSUsYk9iOUR6hk,16756
|
|
28
|
+
kash/commands/base/general_commands.py,sha256=V18XZv5fu-Wi3T41pLVx8BKe_6VkS8FRehMsnuo5ikE,7015
|
|
29
|
+
kash/commands/base/logs_commands.py,sha256=9w11XLKbZ_ZKMF9SasaKGM6lZNXRjJrQy8LE-2xkV8Q,2971
|
|
28
30
|
kash/commands/base/model_commands.py,sha256=d17a2NvfDbwV1y8gyZVsOtX-j5H5we5OEXM9TxTqvBs,1790
|
|
29
|
-
kash/commands/base/reformat_command.py,sha256=
|
|
30
|
-
kash/commands/base/search_command.py,sha256=
|
|
31
|
-
kash/commands/base/show_command.py,sha256=
|
|
31
|
+
kash/commands/base/reformat_command.py,sha256=G1u4FVjGMx4FxzfsqQkLn7420ABi8GW_nJzYle7wwBI,1884
|
|
32
|
+
kash/commands/base/search_command.py,sha256=K3_N1po1CUPRw6PQVeyQvEVtUoVRCfOgHEaTngZ1x3A,2202
|
|
33
|
+
kash/commands/base/show_command.py,sha256=o8wAYAulwNhwhPwGMS_0wjwYsTqBjcLYcN5UumsOyuE,3345
|
|
32
34
|
kash/commands/extras/parse_uv_lock.py,sha256=HVqmGhJAd3ZCTTTaXe_nzzTMFKhwjLLP7hx4NTM224U,5696
|
|
33
35
|
kash/commands/extras/utils_commands.py,sha256=rz3N7VxoUHvCxksRt-sLubkvyW-VH9OTltLEMEnjRfU,769
|
|
34
|
-
kash/commands/help/assistant_commands.py,sha256=
|
|
36
|
+
kash/commands/help/assistant_commands.py,sha256=tZXmMqCrlDHI1KWmKpQEz5kTxYViPWxATF5hSupbeWM,3060
|
|
35
37
|
kash/commands/help/doc_commands.py,sha256=7lKR7mzue2N7pSkNqblpFJy892fS5N6jWVOHqeXziHw,2466
|
|
36
|
-
kash/commands/help/help_commands.py,sha256=
|
|
38
|
+
kash/commands/help/help_commands.py,sha256=5exWU4SpnI20GD-zhLchSaL0664jA2t41xh6trPLnC4,4255
|
|
37
39
|
kash/commands/help/logo.py,sha256=4K3pPIiNlPIgdNeOgdIGbJQCKmqCEsDOhuWPH51msWo,3377
|
|
38
40
|
kash/commands/help/welcome.py,sha256=16pAASjc4UNbm-eKC482Co6VB8i-fSwII8XYrW9JbHA,934
|
|
39
|
-
kash/commands/workspace/selection_commands.py,sha256=
|
|
40
|
-
kash/commands/workspace/workspace_commands.py,sha256=
|
|
41
|
+
kash/commands/workspace/selection_commands.py,sha256=cMB6O1ejDb2s_u3o2Zaq-iytykhQzWYtDGd0j4jkGLo,8142
|
|
42
|
+
kash/commands/workspace/workspace_commands.py,sha256=GE_wHdeYFJ1ruRi4spZtyyTjYXJWCYEQ1Vmc52fIpSQ,22296
|
|
41
43
|
kash/config/__init__.py,sha256=ytly9Typ1mWV4CXfV9G3CIPtPQ02u2rpZ304L3GlFro,148
|
|
42
44
|
kash/config/capture_output.py,sha256=ud3uUVNuDicHj3mI_nBUBO-VmOrxtBdA3z-I3D1lSCU,2398
|
|
43
45
|
kash/config/colors.py,sha256=cV3LRBegDZxZXjV-XEjc3fystFY_defhz1LN8QPdaKc,13727
|
|
@@ -49,7 +51,7 @@ kash/config/logger_basic.py,sha256=Gsxitz7xeMGCUr5qjWK6y72qeMsIz4mcDZP5xyzK0WU,1
|
|
|
49
51
|
kash/config/logo.txt,sha256=P4RO1cJ9HRF1BavTp3Kae9iByDNhzhEC-qLAa6ww1RA,217
|
|
50
52
|
kash/config/server_config.py,sha256=eQ1yxDk031QI0Efp0I1VetqQd9wG7MrLVBCHFm4gp2g,1790
|
|
51
53
|
kash/config/settings.py,sha256=Tja5MNZJDjo5SRaCngfQQFTTjmVGUlmkCZ7UEAhvXqw,9087
|
|
52
|
-
kash/config/setup.py,sha256=
|
|
54
|
+
kash/config/setup.py,sha256=SepMs7CvWdIXCjs03_noA16PETW_YOxH33F8cdP8kYc,2643
|
|
53
55
|
kash/config/suppress_warnings.py,sha256=yty5ZodMLIpmjphRtcVmRamXfiWbyfga9annve6qxb0,1475
|
|
54
56
|
kash/config/text_styles.py,sha256=1qIrMgDYYuBoVj9kFCaEEOca_Ibz5VnPVNI-xTSQnlk,13840
|
|
55
57
|
kash/config/unified_live.py,sha256=tUEnTWMSYKYSJkEoAPbaJET-bJ1HnfU2Ar-XeyBOtlo,8420
|
|
@@ -64,7 +66,7 @@ kash/docs/markdown/assistant_instructions_template.md,sha256=oLZbr8DPbl1x8pfouqt
|
|
|
64
66
|
kash/docs/markdown/readme_template.md,sha256=iGx9IjSni1t_9BuYD5d2GgkxkNIkqvE3k78IufHF6Yg,409
|
|
65
67
|
kash/docs/markdown/warning.md,sha256=ipTFWQc1F0cPGrIG0epX5RqQH6PmshyZOoCQDz0zDos,88
|
|
66
68
|
kash/docs/markdown/welcome.md,sha256=wdvPehSgQWFPXJFRfBcA1GqA_WsS7C2rrpPuAnVVens,613
|
|
67
|
-
kash/docs/markdown/topics/a1_what_is_kash.md,sha256=
|
|
69
|
+
kash/docs/markdown/topics/a1_what_is_kash.md,sha256=3zDbkF7IAS4sLz1bASturGUZBI65tJbQrRBJOXPa4Os,7341
|
|
68
70
|
kash/docs/markdown/topics/a2_installation.md,sha256=J9dqn9Cen9FgUIdBJm9hWdNihj2RW5X9CvgzN2FUnVA,5762
|
|
69
71
|
kash/docs/markdown/topics/a3_getting_started.md,sha256=8V95mk9MKH7fTWb0YoyOkRpeFHL2J9oaf5Lo7Ci-WXI,9396
|
|
70
72
|
kash/docs/markdown/topics/a4_elements.md,sha256=GSu6vEEiNA9b87FGmJcL-VsCuaL3T9sbhFKMe0sI834,4623
|
|
@@ -85,21 +87,21 @@ kash/embeddings/cosine.py,sha256=QTWPWUHivXjxCM6APSqij_-4mywM2BVVm0xb0hu7FHA,158
|
|
|
85
87
|
kash/embeddings/embeddings.py,sha256=DirB5DjowEQADfxtp1BTROINyIxU2QEUj79_tXipRfo,6664
|
|
86
88
|
kash/embeddings/text_similarity.py,sha256=2jp0A27dOto6kItzqe95-f-lx6Mop68d-MJevyCHj9o,1817
|
|
87
89
|
kash/exec/__init__.py,sha256=Najls8No143yoj_KAaOQgo8ufC2LWCB_DwwEQ-8nDM0,1277
|
|
88
|
-
kash/exec/action_decorators.py,sha256=
|
|
89
|
-
kash/exec/action_exec.py,sha256=
|
|
90
|
+
kash/exec/action_decorators.py,sha256=LJaXObZlnROZliZ2usuQmpkilq97sh54Ddgkv6nGV6o,16782
|
|
91
|
+
kash/exec/action_exec.py,sha256=OV3ijpzsek5ILqn_xzMTohe7iwHeupFAyYQw2x4ZVko,19361
|
|
90
92
|
kash/exec/action_registry.py,sha256=numU9pH_W5RgIrYmfi0iYMYy_kLJl6vup8PMrhxAfdc,2627
|
|
91
93
|
kash/exec/combiners.py,sha256=AJ6wgPUHsmwanObsUw64B83XzU26yuh5t4l7igLn82I,4291
|
|
92
94
|
kash/exec/command_exec.py,sha256=zc-gWm7kyB5J5Kp8xhULQ9Jj9AL927KkDPXXk-Yr1Bw,1292
|
|
93
95
|
kash/exec/command_registry.py,sha256=1s2ogU8b8nqK_AEtslbr1eYrXCGDkeT30UrB7L0BRoM,2027
|
|
94
|
-
kash/exec/fetch_url_items.py,sha256=
|
|
96
|
+
kash/exec/fetch_url_items.py,sha256=l994G1b_vd1JQu3Akp5-B0JlZsQso81qyw4c6C_kGIg,6086
|
|
95
97
|
kash/exec/history.py,sha256=l2XwHGBR1UgTGSFPSBE9mltmxvjR_5qFFO6d-Z008nc,1208
|
|
96
98
|
kash/exec/importing.py,sha256=xunmBapeUMNc6Zox7y6e_DZkidyWeouiFZpphajwSzc,1843
|
|
97
99
|
kash/exec/llm_transforms.py,sha256=n7S-Dew8z_BoAwp-14lY4LueFeUtG117eK_8msbn02c,4375
|
|
98
100
|
kash/exec/precondition_checks.py,sha256=HymxL7qm4Yz8V76Um5pKdIRnQ2N-p9rpQQi1fI38bNA,2139
|
|
99
101
|
kash/exec/precondition_registry.py,sha256=9O-01d2OrsYLuhqodVuWjouLR2ABJbUotAmfJNBCRzs,1439
|
|
100
|
-
kash/exec/preconditions.py,sha256=
|
|
101
|
-
kash/exec/resolve_args.py,sha256=
|
|
102
|
-
kash/exec/runtime_settings.py,sha256
|
|
102
|
+
kash/exec/preconditions.py,sha256=bwNuuPEnkymj24ySPTl8K5DEgTtB2NPGAm9cWaomhAk,5262
|
|
103
|
+
kash/exec/resolve_args.py,sha256=jxuur3ZjnbXiMa_dvp-faeAkA8k43CJ7xX4NYbpQwP0,4510
|
|
104
|
+
kash/exec/runtime_settings.py,sha256=-mv4cyslnviaQUmPn3IBc004JMb7I97hL7UGShaGGpc,3961
|
|
103
105
|
kash/exec/shell_callable_action.py,sha256=IN50c_Xsbn5Pv_ZKrel-UlrNDyIKh2BdeAkMmJ88Uis,4397
|
|
104
106
|
kash/exec_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
107
|
kash/exec_model/args_model.py,sha256=gquOD0msFA-5xhNU-3R5l8wlwyAMefpMHltpxrDlYGQ,2662
|
|
@@ -107,8 +109,8 @@ kash/exec_model/commands_model.py,sha256=iM8QhzA0tAas5OwF5liUfHtm45XIH1LcvCviuh3
|
|
|
107
109
|
kash/exec_model/script_model.py,sha256=1VG3LhkTmlKzHOYouZ92ZpOSKSCcsz3-tHNcFMQF788,5031
|
|
108
110
|
kash/exec_model/shell_model.py,sha256=LUhQivbpXlerM-DUzNY7BtctNBbn08Wto8CSSxQDxRU,568
|
|
109
111
|
kash/file_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
-
kash/file_storage/file_store.py,sha256=
|
|
111
|
-
kash/file_storage/item_file_format.py,sha256=
|
|
112
|
+
kash/file_storage/file_store.py,sha256=mGWr5Fz7YT_pLtw56WULMqNxga_HqUgKyh3s1shHJic,32516
|
|
113
|
+
kash/file_storage/item_file_format.py,sha256=QNNpvMDDNyBLLrIwy3yhNgN0Ktsvjh-_Uzkf2XQpI98,7531
|
|
112
114
|
kash/file_storage/metadata_dirs.py,sha256=9AqO3S3SSY1dtvP2iLX--E4ui0VIzXttG8R040otfyg,3820
|
|
113
115
|
kash/file_storage/persisted_yaml.py,sha256=4-4RkFqdlBUkTOwkdA4vRKUywEE9TaDo13OGaDUyU9M,1309
|
|
114
116
|
kash/file_storage/store_cache_warmer.py,sha256=cQ_KwxkBPWT3lMmYOCTkXgo7CKaGINns2YzIH32ExSU,1013
|
|
@@ -122,7 +124,7 @@ kash/help/help_embeddings.py,sha256=EERozW4CriUv1L9blox5eK3OYm31ypoNicxzaUBrYtU,
|
|
|
122
124
|
kash/help/help_lookups.py,sha256=0dtuLWEXncqhJCijC98IA9stBDNNcJewt1JYqMLkTx4,2029
|
|
123
125
|
kash/help/help_pages.py,sha256=TaKsE26R-pZTrK4Pa593DK5osdJodFHaVm5pZpjqgaI,3894
|
|
124
126
|
kash/help/help_printing.py,sha256=eZbZdyJC158JiXcEk2zvUmqYbYzbYOpHvxEhC1kIN-Q,6086
|
|
125
|
-
kash/help/help_types.py,sha256=
|
|
127
|
+
kash/help/help_types.py,sha256=pZDxisdqH6_VaS1EOzYMgAfRcy0KauQNW_DdVCUGfD0,7888
|
|
126
128
|
kash/help/recommended_commands.py,sha256=jqc3TjWFBqDJ-iSzXn8vTOplb4uHndwvdAGJfcUV_qs,2486
|
|
127
129
|
kash/help/tldr_help.py,sha256=bcu__MIF4vYlZEeqQqieGIBcRhNCTK5u8jPV08ObzCI,9654
|
|
128
130
|
kash/llm_utils/__init__.py,sha256=3yjign7KD-kM3ZBBcgtrZz-zjJ2Yx2Q-9bzknBx5vbU,401
|
|
@@ -132,13 +134,12 @@ kash/llm_utils/fuzzy_parsing.py,sha256=bbG2Y7i5w6kxAVPAixyluv3MDS2hW_pkhnJpVOLHZ
|
|
|
132
134
|
kash/llm_utils/init_litellm.py,sha256=5Fn9uW4P7lfEO8Rk1EJJUzDEGNjw-PDvxFgHlKDf-Ok,409
|
|
133
135
|
kash/llm_utils/llm_api_keys.py,sha256=nTB9wSFfHTOXvqshSQCQGCPxUwOW1U7oslngya8nHkw,1168
|
|
134
136
|
kash/llm_utils/llm_completion.py,sha256=SzeWGRrsjuN1TXdPwscYG6whLQkHclITtwTvQK19GE0,5436
|
|
135
|
-
kash/llm_utils/llm_features.py,sha256=ZpQhHiRDtF1BY8HGxTQH0dIeM3rux7a9CvJ0JO2KAlI,1847
|
|
136
137
|
kash/llm_utils/llm_messages.py,sha256=70QwIIvdwo-h4Jfn_6MbEHb3LTUjUmzg_v_dU_Ey__g,1174
|
|
137
138
|
kash/llm_utils/llm_names.py,sha256=VZbdKnoeBx_luB5YQ-Rz37gMt3_FcueJdp40ZaQbpUA,3620
|
|
138
|
-
kash/llm_utils/llms.py,sha256=
|
|
139
|
+
kash/llm_utils/llms.py,sha256=S4hBDeOraKOp9e99M8Ga61u6xAkocxs02jXgJRdFNSA,3983
|
|
139
140
|
kash/local_server/__init__.py,sha256=AyNpvCOJlQF6A4DnlYKRMbbfRNzdizEA-ytp-F2SLZU,162
|
|
140
141
|
kash/local_server/local_server.py,sha256=EugjL30VM0pWdZDsiQxU-o6EdEa082qlGd_7RHvI5tk,5863
|
|
141
|
-
kash/local_server/local_server_commands.py,sha256=
|
|
142
|
+
kash/local_server/local_server_commands.py,sha256=T5wN-Xty3IbwbyeJxTULPB2NqssWLJcuV8IoqMu9bus,1668
|
|
142
143
|
kash/local_server/local_server_routes.py,sha256=JlIVsrbsU0yiwv7vAoD9BctqiBI0w6u8Ld3BYY4jmo8,10530
|
|
143
144
|
kash/local_server/local_url_formatters.py,sha256=SqHjGMEufvm43n34SCa_8Asdwm7utx91Wwymj15TuSY,5327
|
|
144
145
|
kash/local_server/port_tools.py,sha256=oFfOvO6keqS5GowTpVg2FTu5KqkPHBq-dWAEomUIgGo,2008
|
|
@@ -146,8 +147,8 @@ kash/local_server/rich_html_template.py,sha256=O9CnkMYkWuMvKJkqD0P8jaZqfUe6hMP4L
|
|
|
146
147
|
kash/mcp/__init__.py,sha256=HA_aFskEchpAwA0wOKi5nasytx2JZfH8z9oCVXUI7MQ,160
|
|
147
148
|
kash/mcp/mcp_cli.py,sha256=UC0Jwd7DLxx2zEFj0hK1UWPkXXXGntV1te33CensyHM,3849
|
|
148
149
|
kash/mcp/mcp_main.py,sha256=6PhjKwp631mezDTUAd-pL8lUZx9Gl7yCrCQFW61pqJU,3167
|
|
149
|
-
kash/mcp/mcp_server_commands.py,sha256=
|
|
150
|
-
kash/mcp/mcp_server_routes.py,sha256=
|
|
150
|
+
kash/mcp/mcp_server_commands.py,sha256=sKPBD4DptUArxo833eJRRYYRt32E5Dwpr0k8Qe6U8ec,4349
|
|
151
|
+
kash/mcp/mcp_server_routes.py,sha256=hH9bJfdIJnkmL4GjIcgCOJASNykX-3VgKLJhL9Ljby0,10596
|
|
151
152
|
kash/mcp/mcp_server_sse.py,sha256=7zAOJodrCVfLtChUTRxzgxWGymQnmj1e9fRG7H_yqXg,5678
|
|
152
153
|
kash/mcp/mcp_server_stdio.py,sha256=u-oeIZKwzIAGlKmBpipC-hfNQKx36Md9hST11y3AZUY,1174
|
|
153
154
|
kash/media_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -161,18 +162,18 @@ kash/media_base/transcription_format.py,sha256=rOVPTpwvW22c27BRwYF-Tc_xzqK_wOtUZ
|
|
|
161
162
|
kash/media_base/transcription_whisper.py,sha256=GqvroW9kBAH4-gcbYkMgNCfs2MpMIgm1ip3NMWtJ0IE,1169
|
|
162
163
|
kash/media_base/services/local_file_media.py,sha256=_NV-T90rShJ8ucUjQXMPCKKJ50GSFE9PyyVzhXp5z9w,5624
|
|
163
164
|
kash/model/__init__.py,sha256=kFfBKb5N70NWYUfpRRxn_Sb9p_vXlB6BBaTCqWmSReo,2978
|
|
164
|
-
kash/model/actions_model.py,sha256=
|
|
165
|
+
kash/model/actions_model.py,sha256=rQsMon-uEhOIPFIR4CBUG4g0f7-LP69XTdqO-UhdqBs,22493
|
|
165
166
|
kash/model/assistant_response_model.py,sha256=6eDfC27nyuBDFjv5nCYMa_Qb2mPbKwDzZy7uLOIyskI,2653
|
|
166
|
-
kash/model/compound_actions_model.py,sha256=
|
|
167
|
+
kash/model/compound_actions_model.py,sha256=oYEtVKtQv-mA1abZkK7PvaM9xazVBUuk1z0geKBulak,6965
|
|
167
168
|
kash/model/concept_model.py,sha256=we2qOcy9Mv1q7XPfkDLp_CyO_-8DwAUfUYlpgy_jrFs,1011
|
|
168
|
-
kash/model/exec_model.py,sha256=
|
|
169
|
+
kash/model/exec_model.py,sha256=OC-yS_mtDb-dKvzfglfNfGHRwVRbPYD3O9B7-lZWbBs,3032
|
|
169
170
|
kash/model/graph_model.py,sha256=T034y0E9OJtITd1g9zp9vll5pLscdatq6JoT08KvPZE,2724
|
|
170
|
-
kash/model/items_model.py,sha256=
|
|
171
|
+
kash/model/items_model.py,sha256=CaKURUcisoWdZiNYq9Jh-LQxJP98FziJOnZ5WHAG_nQ,38051
|
|
171
172
|
kash/model/language_list.py,sha256=I3RIbxTseVmPdhExQimimEv18Gmy2ImMbpXe0-_t1Qw,450
|
|
172
173
|
kash/model/llm_actions_model.py,sha256=a29uXVNfS2CiqvM7HPdC6H9A23rSQQihAideuBLMH8g,2110
|
|
173
174
|
kash/model/media_model.py,sha256=ZnlZ-FkswbAIGpUAuNqLce1WDZK-WbnwHn2ipg8x7-0,3511
|
|
174
175
|
kash/model/operations_model.py,sha256=WmU-xeWGsqMLVN369dQEyVGU8T7G_KyLLsj6YFc5sVw,6517
|
|
175
|
-
kash/model/params_model.py,sha256=
|
|
176
|
+
kash/model/params_model.py,sha256=NHW-74_sFCY58spf9bzU1EaVxLDpdbqmiw8SCSKASCw,15079
|
|
176
177
|
kash/model/paths_model.py,sha256=KDFm7wan7hjObHbnV2rR8-jsyLTVqbKcwFdKeLFRtdM,15889
|
|
177
178
|
kash/model/preconditions_model.py,sha256=-IfsVR0NkQhq_3hUTXzK2bFYAd--3YjSwUiDKHVQQqk,2887
|
|
178
179
|
kash/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -193,7 +194,7 @@ kash/shell/output/kerm_code_utils.py,sha256=92A4AV-IFKKZMWLNZnd_zksNFMBgE_VNXySy
|
|
|
193
194
|
kash/shell/output/kerm_codes.py,sha256=KLVdTM_dL_NeYmGbllzsQoW4IHXJjEsgqqIp1s7P1yI,18877
|
|
194
195
|
kash/shell/output/kmarkdown.py,sha256=RRB5b0Ip0KZ71vnJKFfvxerYkeDFTCVTlHqHfmMy80Y,3675
|
|
195
196
|
kash/shell/output/shell_formatting.py,sha256=oxmAeJ2j0ANYSUsL15CUv--KcGlQ6Wa_rywXSDlsZM4,3331
|
|
196
|
-
kash/shell/output/shell_output.py,sha256=
|
|
197
|
+
kash/shell/output/shell_output.py,sha256=yG-4YjQUkPQZASMRGcfVRUadOcRO6hm-eaAC74jms6c,11812
|
|
197
198
|
kash/shell/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
198
199
|
kash/shell/ui/shell_results.py,sha256=mvFHxK_oz3bNfF5_Twt6VqDO44TA1b256Bjf5oco804,4130
|
|
199
200
|
kash/shell/ui/shell_syntax.py,sha256=1fuDqcCV16AAWwWS4w4iT-tlSnl-Ywdrf68Ge8XIfmQ,751
|
|
@@ -223,13 +224,13 @@ kash/utils/common/type_utils.py,sha256=SJirXhPilQom_-OKkFToDLm_82ZwpjcNjRy8U1HaQ
|
|
|
223
224
|
kash/utils/common/uniquifier.py,sha256=75OY4KIVF8u1eoO0FCPbEGTyVpPOtM-0ctoG_s_jahM,3082
|
|
224
225
|
kash/utils/common/url.py,sha256=R_P-CkOUiFxVdo9COcaL7YFvFIoAULj5-XxvmlFLvzo,9416
|
|
225
226
|
kash/utils/common/url_slice.py,sha256=QJb_qJp-hd5lFrxpw7P009yeMTJWDMfF11KRKEo7mIA,10963
|
|
226
|
-
kash/utils/file_formats/chat_format.py,sha256=
|
|
227
|
+
kash/utils/file_formats/chat_format.py,sha256=XQpyUyq3jBKqM1f1eRZmg5hPBWZIobHNusQPFctFbRQ,11901
|
|
227
228
|
kash/utils/file_utils/__init__.py,sha256=loL_iW0oOZs0mJ5GelBPptBcqzYKSWdsGcHrpRyxitQ,43
|
|
228
229
|
kash/utils/file_utils/csv_utils.py,sha256=ZqchXD4y0buWtgnEsR_UeHyWBHM1wEJl5u-IxQvFa3s,4064
|
|
229
230
|
kash/utils/file_utils/dir_info.py,sha256=HamMr58k_DanTLifj7A2JDxTGWXEZZx2pQuE6Hjcm8g,1856
|
|
230
|
-
kash/utils/file_utils/file_ext.py,sha256
|
|
231
|
-
kash/utils/file_utils/file_formats.py,sha256=
|
|
232
|
-
kash/utils/file_utils/file_formats_model.py,sha256=
|
|
231
|
+
kash/utils/file_utils/file_ext.py,sha256=U0fG3rowgtc56fNhhCK8P1UCYFbCNoa87pv7mGiEQgA,1876
|
|
232
|
+
kash/utils/file_utils/file_formats.py,sha256=4bq0-ZomFidL2GJBFyszGPurNQeTMOdLaXlGgrXznhA,4973
|
|
233
|
+
kash/utils/file_utils/file_formats_model.py,sha256=WqtAb10_vBuWeP2cUHzUHNjNmLx5GdqPjsnuqziB6Zg,15970
|
|
233
234
|
kash/utils/file_utils/file_sort_filter.py,sha256=_k1chT3dJl5lSmKA2PW90KaoG4k4zftGdtwWoNEljP4,7136
|
|
234
235
|
kash/utils/file_utils/file_walk.py,sha256=cpwVDPuaVm95_ZwFJiAdIuZAGhASI3gJ3ZUsCGP75b8,5527
|
|
235
236
|
kash/utils/file_utils/filename_parsing.py,sha256=drHrH2B9W_5yAbXURNGJxNqj9GmTe8FayH6Gjw9e4-U,4194
|
|
@@ -244,11 +245,12 @@ kash/utils/rich_custom/multitask_status.py,sha256=eOON62evEAOmmNyVBSjfYkh5y9OTej
|
|
|
244
245
|
kash/utils/rich_custom/rich_char_transform.py,sha256=3M89tViKM0y31VHsDoHi5eHFWlv5ME7F4p35IdDxnrw,2616
|
|
245
246
|
kash/utils/rich_custom/rich_indent.py,sha256=nz72yNpUuYjOsaPNVmxM81oEQm-GKEfQkNsuWmv16G0,2286
|
|
246
247
|
kash/utils/rich_custom/rich_markdown_fork.py,sha256=M_JRaSAyHrSg-wuLv9C9P7SkehSim3lwkqQPuMIFkVw,26551
|
|
247
|
-
kash/utils/text_handling/doc_normalization.py,sha256=
|
|
248
|
+
kash/utils/text_handling/doc_normalization.py,sha256=GsK8J8HSVINYYIeO2XQvWYK1ZSiQ6mX34mVb9UOjgG8,3029
|
|
248
249
|
kash/utils/text_handling/escape_html_tags.py,sha256=8pC3JgoKRtdnbnOu8DiWrlvNR6GAqjwhGbQgl3jiFG4,6441
|
|
250
|
+
kash/utils/text_handling/markdown_footnotes.py,sha256=4_ZOez-xHjiSn_XHyqXPk9MNbjts1hiHOh1ARs9vVZA,7494
|
|
249
251
|
kash/utils/text_handling/markdown_render.py,sha256=LHPdJc__2ejBx7iwkp_P9wIePNmiVSgwu4-uhamVjms,3791
|
|
250
|
-
kash/utils/text_handling/markdown_utils.py,sha256=
|
|
251
|
-
kash/utils/text_handling/markdownify_utils.py,sha256=
|
|
252
|
+
kash/utils/text_handling/markdown_utils.py,sha256=Yf57dVljpbg8vuHbtcOSHZqz1PafOSBal6R8ESJz1Bs,49220
|
|
253
|
+
kash/utils/text_handling/markdownify_utils.py,sha256=fXl3uSUk9aHXL0PDqxdlvWvIvBXUQTOfQxnK9uicQcg,2964
|
|
252
254
|
kash/utils/text_handling/unified_diffs.py,sha256=JfHSakISkT_GuBPBI4fTooHrp2aenWzDKiVvDewVfMk,2655
|
|
253
255
|
kash/web_content/canon_url.py,sha256=Zv2q7xQdIHBFkxxwyJn3_ME-qqMFRi_fKxE_IgV2Z50,742
|
|
254
256
|
kash/web_content/dir_store.py,sha256=BJc-s-RL5CC-GwhFTC_lhLXSMWluPPnLVmVBx-66DiM,3425
|
|
@@ -261,20 +263,23 @@ kash/web_content/web_extract_readabilipy.py,sha256=IT7ET5IoU2-Nf37-Neh6CkKMvLL3W
|
|
|
261
263
|
kash/web_content/web_fetch.py,sha256=hC4kijKVez4_QtfwdE0OPrEkfEGT2hVcB1vVZko8o78,12129
|
|
262
264
|
kash/web_content/web_page_model.py,sha256=TWgWreGOoOvl7lUkjMSd0rxoDf2VuaKOq7WijwydW0Q,1387
|
|
263
265
|
kash/web_gen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
264
|
-
kash/web_gen/simple_webpage.py,sha256=ks_0ljxCeS2-gAAEaUc1JEnzY3JY0nzqGFiyyqyRuZs,1537
|
|
265
266
|
kash/web_gen/tabbed_webpage.py,sha256=e0GGG1bQ4CQegpJgOIT2KpyM6cmwN_BQ9eJSsi4BjgY,4945
|
|
266
267
|
kash/web_gen/template_render.py,sha256=aypo6UanouftV4RpxgNm6JdquelI52fV0IlihdA3yjE,1908
|
|
268
|
+
kash/web_gen/webpage_render.py,sha256=C3xFdmTROh_cWcuh1q2ZXnbeJfgK8wEZ7b1PBAB5i2g,3352
|
|
267
269
|
kash/web_gen/templates/base_styles.css.jinja,sha256=9ftNuhUrTpS8TcxP239AqWsIhPl_i0wS0J4rhsvQkrM,24962
|
|
268
270
|
kash/web_gen/templates/base_webpage.html.jinja,sha256=ZP9p1S29yXNZ6CU0DYYAXUA-v6YhnUv9NLX4aYupvBE,14723
|
|
269
|
-
kash/web_gen/templates/content_styles.css.jinja,sha256=
|
|
271
|
+
kash/web_gen/templates/content_styles.css.jinja,sha256=NyZRUNIrqf7RuJ0_bVuvwiQmimcWNh067bFvtb2xp-Q,6002
|
|
270
272
|
kash/web_gen/templates/explain_view.html.jinja,sha256=DNw5Iw5SrhIUFRGB4qNvfcKXsBHVbEJVURGdhvyC75Q,949
|
|
271
273
|
kash/web_gen/templates/item_view.html.jinja,sha256=_b51RuoBmYu7nxVq-S_zw_tv8mfQXHICGqfDWNIB9Xg,7304
|
|
272
274
|
kash/web_gen/templates/simple_webpage.html.jinja,sha256=_RVu0AvrN5fK_Kz-tEi4AlPQ_wuu8-S9oFIYg_sdcec,2556
|
|
273
275
|
kash/web_gen/templates/tabbed_webpage.html.jinja,sha256=umkipUXW-lDGnbV-tlDroCfCx_385PFnpbzsvwmityo,1843
|
|
276
|
+
kash/web_gen/templates/youtube_webpage.html.jinja,sha256=uUdu3HWv0lwwgEh094QbzzesxAdYv9rCxCkiuuIr1MY,1380
|
|
274
277
|
kash/web_gen/templates/components/toc_scripts.js.jinja,sha256=9AanLJaVormGi52h-k2tKJTRT4BiBGGNnw3Kmrnr40Q,10481
|
|
275
278
|
kash/web_gen/templates/components/toc_styles.css.jinja,sha256=SM99C9bOu11qdZ1U6hN7lLe2w_Hk6u9qNZcx2knSkgg,7553
|
|
276
|
-
kash/web_gen/templates/components/tooltip_scripts.js.jinja,sha256=
|
|
279
|
+
kash/web_gen/templates/components/tooltip_scripts.js.jinja,sha256=63HUSXtT07Vh2ndp90ViuPHTdzslrkGO5it4s-5EheM,40181
|
|
277
280
|
kash/web_gen/templates/components/tooltip_styles.css.jinja,sha256=tD-GBEFNIeVPAbbeB88bsOWzEFoThcSP5FfH9LmSAeM,14216
|
|
281
|
+
kash/web_gen/templates/components/youtube_popover_scripts.js.jinja,sha256=txlltrlP-xDvkFDd_ZOKNKA1Kr5aS3VSFQ51TqeKCpU,7383
|
|
282
|
+
kash/web_gen/templates/components/youtube_popover_styles.css.jinja,sha256=00hVUdGXpJSxKevid4DPTpxxrEc6ejJUurzRjUpnUDI,4113
|
|
278
283
|
kash/workspaces/__init__.py,sha256=q1gFERRZLJMA9-XSUKvB1ulauHDKqyzzc86GFLbxAuk,700
|
|
279
284
|
kash/workspaces/param_state.py,sha256=vT_eGWqg2SRviIM5jqEAauznX2B5Xt2nHHu2oRxTcIU,746
|
|
280
285
|
kash/workspaces/selections.py,sha256=rEUuQlrQ3C_54bzBSKDTTptgX8oZPqN0Ao4uaXSWA-Q,12003
|
|
@@ -282,9 +287,9 @@ kash/workspaces/source_items.py,sha256=Pwnw3OhjR2IJEMEeHf6hpKloj-ellM5vsY7LgkGev
|
|
|
282
287
|
kash/workspaces/workspace_dirs.py,sha256=kjuY4t7mSSXq00fZmln7p9TWq4kAZoPTCDM0DG7uEaI,1545
|
|
283
288
|
kash/workspaces/workspace_output.py,sha256=MMg_KumkHKFGc0DOUFaW5ImpgqIfdlsLtvXbLEt1hwI,5692
|
|
284
289
|
kash/workspaces/workspace_registry.py,sha256=SQt2DZgBEu95Zj9fpy67XdJPgJyKFDCU2laSuiZswNo,2200
|
|
285
|
-
kash/workspaces/workspaces.py,sha256=
|
|
290
|
+
kash/workspaces/workspaces.py,sha256=H-VpigO2zvWvWCZIT2G-cqEqcZATiwCLFX2jwFW08bw,6781
|
|
286
291
|
kash/xonsh_custom/command_nl_utils.py,sha256=6Xcx98HXL5HywziHi0XskwFx6kfvz7oCmMX-siJib1A,3392
|
|
287
|
-
kash/xonsh_custom/custom_shell.py,sha256=
|
|
292
|
+
kash/xonsh_custom/custom_shell.py,sha256=wTYwDt6zJzVtljcDh1j__cJXkoMy9w687vhgDk6nlqU,19024
|
|
288
293
|
kash/xonsh_custom/customize_prompt.py,sha256=u-jRY-ftXYflBkbJVetEg6GYelPUvqZEpjrPRUTfy8w,6896
|
|
289
294
|
kash/xonsh_custom/load_into_xonsh.py,sha256=Z_PAaW_Uv-PDRKdw9E_7dC1eMe6FbwwIUioxyS1Sp_g,3596
|
|
290
295
|
kash/xonsh_custom/shell_load_commands.py,sha256=2SzigO-IDK5QTBhAkv7bL4hPuRLWIT0r5D9t4mrXANY,4673
|
|
@@ -296,8 +301,8 @@ kash/xonsh_custom/xonsh_modern_tools.py,sha256=mj_b34LZXfE8MJe9EpDmp5JZ0tDM1biYN
|
|
|
296
301
|
kash/xonsh_custom/xonsh_ranking_completer.py,sha256=ZRGiAfoEgqgnlq2-ReUVEaX5oOgW1DQ9WxIv2OJLuTo,5620
|
|
297
302
|
kash/xontrib/fnm.py,sha256=V2tsOdmIDgbFbZSfMLpsvDIwwJJqiYnOkOySD1cXNXw,3700
|
|
298
303
|
kash/xontrib/kash_extension.py,sha256=FLIMlgR3C_6A1fwKE-Ul0nmmpJSszVPbAriinUyQ8Zg,1896
|
|
299
|
-
kash_shell-0.3.
|
|
300
|
-
kash_shell-0.3.
|
|
301
|
-
kash_shell-0.3.
|
|
302
|
-
kash_shell-0.3.
|
|
303
|
-
kash_shell-0.3.
|
|
304
|
+
kash_shell-0.3.30.dist-info/METADATA,sha256=g7JD1AYfHubO3mqMqRV4JwGYbebI9rioQ2oGohlElpI,33514
|
|
305
|
+
kash_shell-0.3.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
306
|
+
kash_shell-0.3.30.dist-info/entry_points.txt,sha256=SQraWDAo8SqYpthLXThei0mf_hGGyhYBUO-Er_0HcwI,85
|
|
307
|
+
kash_shell-0.3.30.dist-info/licenses/LICENSE,sha256=rCh2PsfYeiU6FK_0wb58kHGm_Fj5c43fdcHEexiVzIo,34562
|
|
308
|
+
kash_shell-0.3.30.dist-info/RECORD,,
|
kash/llm_utils/llm_features.py
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from dataclasses import dataclass
|
|
4
|
-
from typing import Literal, TypeAlias
|
|
5
|
-
|
|
6
|
-
from prettyfmt import custom_key_sort
|
|
7
|
-
|
|
8
|
-
from kash.llm_utils.llm_names import LLMName
|
|
9
|
-
from kash.llm_utils.llms import LLM
|
|
10
|
-
|
|
11
|
-
Speed: TypeAlias = Literal["fast", "medium", "slow"]
|
|
12
|
-
|
|
13
|
-
ContextSize: TypeAlias = Literal["small", "medium", "large"]
|
|
14
|
-
|
|
15
|
-
ModelSize: TypeAlias = Literal["small", "medium", "large"]
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@dataclass(frozen=True)
|
|
19
|
-
class LLMFeatures:
|
|
20
|
-
speed: Speed | None = None
|
|
21
|
-
context_size: ContextSize | None = None
|
|
22
|
-
model_size: ModelSize | None = None
|
|
23
|
-
structured_output: bool | None = None
|
|
24
|
-
thinking: bool = False
|
|
25
|
-
|
|
26
|
-
def satisfies(self, features: LLMFeatures) -> bool:
|
|
27
|
-
return all(
|
|
28
|
-
getattr(self, attr) == getattr(features, attr)
|
|
29
|
-
for attr in features.__dataclass_fields__
|
|
30
|
-
if getattr(self, attr) is not None
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def pick_llm(desired_features: LLMFeatures) -> LLMName:
|
|
35
|
-
"""
|
|
36
|
-
Pick the preferred model that satisfies the desired features.
|
|
37
|
-
"""
|
|
38
|
-
satisfied_models: list[LLMName] = [
|
|
39
|
-
llm for llm, features in FEATURES.items() if features.satisfies(desired_features)
|
|
40
|
-
]
|
|
41
|
-
satisfied_models.sort(key=custom_key_sort(preferred_llms))
|
|
42
|
-
if not satisfied_models:
|
|
43
|
-
raise ValueError(f"No model found for features: {desired_features}")
|
|
44
|
-
return satisfied_models[0]
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
FEATURES = {
|
|
48
|
-
LLM.o3_mini: LLMFeatures(
|
|
49
|
-
speed="fast",
|
|
50
|
-
context_size="small",
|
|
51
|
-
model_size="small",
|
|
52
|
-
structured_output=True,
|
|
53
|
-
thinking=True,
|
|
54
|
-
),
|
|
55
|
-
# FIXME
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
preferred_llms: list[LLMName] = [
|
|
59
|
-
LLM.o4_mini,
|
|
60
|
-
LLM.o3,
|
|
61
|
-
LLM.o3_mini,
|
|
62
|
-
LLM.o1_mini,
|
|
63
|
-
LLM.o1,
|
|
64
|
-
LLM.gpt_4o_mini,
|
|
65
|
-
LLM.gpt_4o,
|
|
66
|
-
LLM.gpt_4,
|
|
67
|
-
LLM.claude_4_sonnet,
|
|
68
|
-
LLM.claude_4_opus,
|
|
69
|
-
LLM.claude_3_7_sonnet,
|
|
70
|
-
LLM.claude_3_5_haiku,
|
|
71
|
-
LLM.gemini_2_5_pro,
|
|
72
|
-
]
|