kimi-cli 0.38__py3-none-any.whl → 0.40__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kimi-cli might be problematic. Click here for more details.

kimi_cli/CHANGELOG.md CHANGED
@@ -9,6 +9,24 @@ Internal builds may append content to the Unreleased section.
9
9
  Only write entries that are worth mentioning to users.
10
10
  -->
11
11
 
12
+ ## [0.40] - 2025-10-24
13
+
14
+ ### Added
15
+
16
+ - Support `ESC` key to interrupt the agent loop
17
+
18
+ ### Fixed
19
+
20
+ - Fix SSL certificate verification error in some rare cases
21
+ - Fix possible decoding error in Bash tool
22
+
23
+ ## [0.39] - 2025-10-24
24
+
25
+ ### Fixed
26
+
27
+ - Fix context compaction threshold check
28
+ - Fix panic when SOCKS proxy is set in the shell session
29
+
12
30
  ## [0.38] - 2025-10-24
13
31
 
14
32
  - Minor UX improvements
kimi_cli/soul/approval.py CHANGED
@@ -9,7 +9,7 @@ class Approval:
9
9
  def __init__(self, yolo: bool = False):
10
10
  self._request_queue = asyncio.Queue[ApprovalRequest]()
11
11
  self._yolo = yolo
12
- self._auto_approve_actions = set() # TODO: persist across sessions
12
+ self._auto_approve_actions: set[str] = set() # TODO: persist across sessions
13
13
  """Set of action names that should automatically be approved."""
14
14
 
15
15
  def set_yolo(self, yolo: bool) -> None:
@@ -60,8 +60,6 @@ class Approval:
60
60
  return True
61
61
  case ApprovalResponse.REJECT:
62
62
  return False
63
- case _:
64
- raise ValueError(f"Unknown approval response: {response}")
65
63
 
66
64
  async def fetch_request(self) -> ApprovalRequest:
67
65
  """
@@ -1,6 +1,6 @@
1
1
  from collections.abc import Sequence
2
2
  from string import Template
3
- from typing import Protocol, runtime_checkable
3
+ from typing import TYPE_CHECKING, Protocol, runtime_checkable
4
4
 
5
5
  from kosong.base import generate
6
6
  from kosong.base.message import ContentPart, Message, TextPart
@@ -32,7 +32,7 @@ class Compaction(Protocol):
32
32
  ...
33
33
 
34
34
 
35
- class SimpleCompaction:
35
+ class SimpleCompaction(Compaction):
36
36
  async def compact(self, messages: Sequence[Message], llm: LLM) -> Sequence[Message]:
37
37
  history = list(messages)
38
38
  if not history:
@@ -99,7 +99,7 @@ class SimpleCompaction:
99
99
  return compacted_messages
100
100
 
101
101
 
102
- def __static_type_check(
103
- simple: SimpleCompaction,
104
- ):
105
- _: Compaction = simple
102
+ if TYPE_CHECKING:
103
+
104
+ def type_check(simple: SimpleCompaction):
105
+ _: Compaction = simple
kimi_cli/soul/kimisoul.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  from collections.abc import Sequence
3
3
  from functools import partial
4
+ from typing import TYPE_CHECKING
4
5
 
5
6
  import kosong
6
7
  import tenacity
@@ -111,6 +112,7 @@ class KimiSoul:
111
112
 
112
113
  async def _agent_loop(self, wire: Wire):
113
114
  """The main agent loop for one run."""
115
+ assert self._agent_globals.llm is not None
114
116
 
115
117
  async def _pipe_approval_to_wire():
116
118
  while True:
@@ -127,7 +129,10 @@ class KimiSoul:
127
129
  # out a better solution.
128
130
  try:
129
131
  # compact the context if needed
130
- if self._context.token_count >= self._reserved_tokens:
132
+ if (
133
+ self._context.token_count + self._reserved_tokens
134
+ >= self._agent_globals.llm.max_context_size
135
+ ):
131
136
  logger.info("Context too long, compacting...")
132
137
  wire.send(CompactionBegin())
133
138
  await self.compact_context()
@@ -298,7 +303,7 @@ class BackToTheFuture(Exception):
298
303
  self.messages = messages
299
304
 
300
305
 
301
- def __static_type_check(
302
- kimi_soul: KimiSoul,
303
- ):
304
- _: Soul = kimi_soul
306
+ if TYPE_CHECKING:
307
+
308
+ def type_check(kimi_soul: KimiSoul):
309
+ _: Soul = kimi_soul
kimi_cli/soul/message.py CHANGED
@@ -14,7 +14,7 @@ def tool_result_to_messages(tool_result: ToolResult) -> list[Message]:
14
14
  message = tool_result.result.message
15
15
  if isinstance(tool_result.result, ToolRuntimeError):
16
16
  message += "\nThis is an unexpected error and the tool is probably not working."
17
- content = [system(message)]
17
+ content: list[ContentPart] = [system(message)]
18
18
  if tool_result.result.output:
19
19
  content.append(TextPart(text=tool_result.result.output))
20
20
  return [
@@ -26,8 +26,8 @@ def tool_result_to_messages(tool_result: ToolResult) -> list[Message]:
26
26
  ]
27
27
 
28
28
  content = tool_ok_to_message_content(tool_result.result)
29
- text_parts = []
30
- non_text_parts = []
29
+ text_parts: list[ContentPart] = []
30
+ non_text_parts: list[ContentPart] = []
31
31
  for part in content:
32
32
  if isinstance(part, TextPart):
33
33
  text_parts.append(part)
@@ -60,7 +60,7 @@ def tool_result_to_messages(tool_result: ToolResult) -> list[Message]:
60
60
 
61
61
  def tool_ok_to_message_content(result: ToolOk) -> list[ContentPart]:
62
62
  """Convert a tool return value to a list of message content parts."""
63
- content = []
63
+ content: list[ContentPart] = []
64
64
  if result.message:
65
65
  content.append(system(result.message))
66
66
  match output := result.output:
@@ -70,7 +70,7 @@ def tool_ok_to_message_content(result: ToolOk) -> list[ContentPart]:
70
70
  case ContentPart():
71
71
  content.append(output)
72
72
  case _:
73
- content.extend(list(output))
73
+ content.extend(output)
74
74
  if not content:
75
75
  content.append(system("Tool output is empty."))
76
76
  return content
@@ -45,11 +45,11 @@ class Bash(CallableTool2[Params]):
45
45
  return ToolRejectedError()
46
46
 
47
47
  def stdout_cb(line: bytes):
48
- line_str = line.decode()
48
+ line_str = line.decode(errors="replace")
49
49
  builder.write(line_str)
50
50
 
51
51
  def stderr_cb(line: bytes):
52
- line_str = line.decode()
52
+ line_str = line.decode(errors="replace")
53
53
  builder.write(line_str)
54
54
 
55
55
  try:
@@ -15,6 +15,7 @@ from pydantic import BaseModel, Field
15
15
 
16
16
  import kimi_cli
17
17
  from kimi_cli.share import get_share_dir
18
+ from kimi_cli.utils.aiohttp import new_client_session
18
19
  from kimi_cli.utils.logging import logger
19
20
 
20
21
 
@@ -167,7 +168,7 @@ async def _download_and_install_rg(bin_name: str) -> Path:
167
168
  share_bin_dir.mkdir(parents=True, exist_ok=True)
168
169
  destination = share_bin_dir / bin_name
169
170
 
170
- async with aiohttp.ClientSession() as session:
171
+ async with new_client_session() as session:
171
172
  with tempfile.TemporaryDirectory(prefix="kimi-rg-") as tmpdir:
172
173
  tar_path = Path(tmpdir) / filename
173
174
 
@@ -7,6 +7,7 @@ from kosong.tooling import CallableTool2, ToolReturnType
7
7
  from pydantic import BaseModel, Field
8
8
 
9
9
  from kimi_cli.tools.utils import ToolResultBuilder, load_desc
10
+ from kimi_cli.utils.aiohttp import new_client_session
10
11
 
11
12
 
12
13
  class Params(BaseModel):
@@ -24,7 +25,7 @@ class FetchURL(CallableTool2[Params]):
24
25
 
25
26
  try:
26
27
  async with (
27
- aiohttp.ClientSession() as session,
28
+ new_client_session() as session,
28
29
  session.get(
29
30
  params.url,
30
31
  headers={
@@ -1,7 +1,6 @@
1
1
  from pathlib import Path
2
2
  from typing import override
3
3
 
4
- import aiohttp
5
4
  from kosong.tooling import CallableTool2, ToolReturnType
6
5
  from pydantic import BaseModel, Field, ValidationError
7
6
 
@@ -9,6 +8,7 @@ import kimi_cli
9
8
  from kimi_cli.config import Config
10
9
  from kimi_cli.soul.toolset import get_current_tool_call_or_none
11
10
  from kimi_cli.tools.utils import ToolResultBuilder, load_desc
11
+ from kimi_cli.utils.aiohttp import new_client_session
12
12
 
13
13
 
14
14
  class Params(BaseModel):
@@ -62,7 +62,7 @@ class SearchWeb(CallableTool2[Params]):
62
62
  assert tool_call is not None, "Tool call is expected to be set"
63
63
 
64
64
  async with (
65
- aiohttp.ClientSession() as session,
65
+ new_client_session() as session,
66
66
  session.post(
67
67
  self._base_url,
68
68
  headers={
@@ -1,7 +1,6 @@
1
1
  import asyncio
2
2
  import signal
3
3
  from collections.abc import Awaitable, Coroutine
4
- from functools import partial
5
4
  from typing import Any
6
5
 
7
6
  from kosong.chat_provider import APIStatusError, ChatProviderError
@@ -160,10 +159,13 @@ class ShellApp:
160
159
  loop.add_signal_handler(signal.SIGINT, _handler)
161
160
 
162
161
  try:
162
+ # Use lambda to pass cancel_event via closure
163
163
  await run_soul(
164
164
  self.soul,
165
165
  command,
166
- partial(visualize, initial_status=self.soul.status),
166
+ lambda wire: visualize(
167
+ wire, initial_status=self.soul.status, cancel_event=cancel_event
168
+ ),
167
169
  cancel_event,
168
170
  )
169
171
  return True
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  from collections import deque
2
3
 
3
4
  import streamingjson
@@ -125,7 +126,7 @@ class _ApprovalRequestDisplay:
125
126
 
126
127
 
127
128
  class StepLiveView:
128
- def __init__(self, status: StatusSnapshot):
129
+ def __init__(self, status: StatusSnapshot, cancel_event: asyncio.Event | None = None):
129
130
  # message content
130
131
  self._line_buffer = Text("")
131
132
 
@@ -144,6 +145,9 @@ class StepLiveView:
144
145
  )
145
146
  self._buffer_status: RenderableType | None = None
146
147
 
148
+ # cancel event for ESC key handling
149
+ self._cancel_event = cancel_event
150
+
147
151
  def __enter__(self):
148
152
  self._live = Live(
149
153
  self._compose(),
@@ -243,6 +247,11 @@ class StepLiveView:
243
247
  self._status_text.plain = self._format_status(status)
244
248
 
245
249
  def handle_keyboard_event(self, event: KeyEvent):
250
+ # Handle ESC key to cancel the run
251
+ if event == KeyEvent.ESCAPE and self._cancel_event is not None:
252
+ self._cancel_event.set()
253
+ return
254
+
246
255
  if not self._current_approval:
247
256
  # just ignore any keyboard event when there's no approval request
248
257
  return
@@ -298,8 +307,8 @@ class StepLiveView:
298
307
  class StepLiveViewWithMarkdown(StepLiveView):
299
308
  # TODO: figure out a streaming implementation for this
300
309
 
301
- def __init__(self, status: StatusSnapshot):
302
- super().__init__(status)
310
+ def __init__(self, status: StatusSnapshot, cancel_event: asyncio.Event | None = None):
311
+ super().__init__(status, cancel_event)
303
312
  self._pending_markdown_parts: list[str] = []
304
313
  self._buffer_status_active = False
305
314
  self._buffer_status_obj: Status | None = None
@@ -9,6 +9,7 @@ from pydantic import SecretStr
9
9
  from kimi_cli.config import LLMModel, LLMProvider, MoonshotSearchConfig, load_config, save_config
10
10
  from kimi_cli.ui.shell.console import console
11
11
  from kimi_cli.ui.shell.metacmd import meta_command
12
+ from kimi_cli.utils.aiohttp import new_client_session
12
13
 
13
14
  if TYPE_CHECKING:
14
15
  from kimi_cli.ui.shell import ShellApp
@@ -109,7 +110,7 @@ async def _setup() -> _SetupResult | None:
109
110
  models_url = f"{platform.base_url}/models"
110
111
  try:
111
112
  async with (
112
- aiohttp.ClientSession() as session,
113
+ new_client_session() as session,
113
114
  session.get(
114
115
  models_url,
115
116
  headers={
@@ -13,6 +13,7 @@ import aiohttp
13
13
 
14
14
  from kimi_cli.share import get_share_dir
15
15
  from kimi_cli.ui.shell.console import console
16
+ from kimi_cli.utils.aiohttp import new_client_session
16
17
  from kimi_cli.utils.logging import logger
17
18
 
18
19
  BASE_URL = "https://cdn.kimi.com/binaries/kimi-cli"
@@ -95,7 +96,7 @@ async def _do_update(*, print: bool, check_only: bool) -> UpdateResult:
95
96
  _print("[red]Failed to detect target platform.[/red]")
96
97
  return UpdateResult.UNSUPPORTED
97
98
 
98
- async with aiohttp.ClientSession() as session:
99
+ async with new_client_session() as session:
99
100
  logger.info("Checking for updates...")
100
101
  _print("Checking for updates...")
101
102
  latest_version = await _get_latest_version(session)
@@ -25,7 +25,6 @@ async def _keyboard_listener(step: StepLiveView):
25
25
  async def _keyboard():
26
26
  try:
27
27
  async for event in listen_for_keyboard():
28
- # TODO: ESCAPE to interrupt
29
28
  step.handle_keyboard_event(event)
30
29
  except asyncio.CancelledError:
31
30
  return
@@ -39,10 +38,17 @@ async def _keyboard_listener(step: StepLiveView):
39
38
  await task
40
39
 
41
40
 
42
- async def visualize(wire: Wire, *, initial_status: StatusSnapshot):
41
+ async def visualize(
42
+ wire: Wire, *, initial_status: StatusSnapshot, cancel_event: asyncio.Event | None = None
43
+ ):
43
44
  """
44
45
  A loop to consume agent events and visualize the agent behavior.
45
46
  This loop never raise any exception except asyncio.CancelledError.
47
+
48
+ Args:
49
+ wire: Communication channel with the agent
50
+ initial_status: Initial status snapshot
51
+ cancel_event: Event that can be set (e.g., by ESC key) to cancel the run
46
52
  """
47
53
  latest_status = initial_status
48
54
  try:
@@ -52,7 +58,7 @@ async def visualize(wire: Wire, *, initial_status: StatusSnapshot):
52
58
  while True:
53
59
  # TODO: Maybe we can always have a StepLiveView here.
54
60
  # No need to recreate for each step.
55
- with StepLiveViewWithMarkdown(latest_status) as step:
61
+ with StepLiveViewWithMarkdown(latest_status, cancel_event) as step:
56
62
  async with _keyboard_listener(step):
57
63
  # spin the moon at the beginning of each step
58
64
  with console.status("", spinner="moon"):
@@ -0,0 +1,10 @@
1
+ import ssl
2
+
3
+ import aiohttp
4
+ import certifi
5
+
6
+ _ssl_context = ssl.create_default_context(cafile=certifi.where())
7
+
8
+
9
+ def new_client_session() -> aiohttp.ClientSession:
10
+ return aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=_ssl_context))
@@ -66,7 +66,5 @@ def create_llm(
66
66
  error_types=[429, 500, 503],
67
67
  ),
68
68
  )
69
- case _:
70
- raise ValueError(f"Unsupported provider: {provider.type}")
71
69
 
72
70
  return LLM(chat_provider=chat_provider, max_context_size=model.max_context_size)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: kimi-cli
3
- Version: 0.38
3
+ Version: 0.40
4
4
  Summary: Kimi CLI is your next CLI agent.
5
5
  Requires-Dist: agent-client-protocol>=0.4.9
6
6
  Requires-Dist: aiofiles>=25.1.0
@@ -18,6 +18,7 @@ Requires-Dist: trafilatura>=2.0.0
18
18
  Requires-Dist: tenacity>=9.1.2
19
19
  Requires-Dist: fastmcp>=2.12.5
20
20
  Requires-Dist: pydantic>=2.12.3
21
+ Requires-Dist: httpx[socks]>=0.28.0
21
22
  Requires-Python: >=3.13
22
23
  Description-Content-Type: text/markdown
23
24
 
@@ -42,6 +43,9 @@ Kimi CLI is a new CLI agent that can help you with your software development tas
42
43
 
43
44
  ## Installation
44
45
 
46
+ > [!IMPORTANT]
47
+ > Kimi CLI currently only supports macOS and Linux. Windows support is coming soon.
48
+
45
49
  Kimi CLI is published as a Python package on PyPI. We highly recommend installing it with [uv](https://docs.astral.sh/uv/). If you have not installed uv yet, please follow the instructions [here](https://docs.astral.sh/uv/getting-started/installation/) to install it first.
46
50
 
47
51
  Once uv is installed, you can install Kimi CLI with:
@@ -104,7 +108,7 @@ After restarting Zsh, you can switch to agent mode by pressing `Ctrl-K`.
104
108
 
105
109
  ### ACP support
106
110
 
107
- Kimi CLI supports [Agent Client Protocol] out of the box. You can use it together with any ACP-compatible editors or IDEs.
111
+ Kimi CLI supports [Agent Client Protocol] out of the box. You can use it together with any ACP-compatible editor or IDE.
108
112
 
109
113
  For example, to use Kimi CLI with [Zed](https://zed.dev/), add the following configuration to your `~/.config/zed/settings.json`:
110
114
 
@@ -1,4 +1,4 @@
1
- kimi_cli/CHANGELOG.md,sha256=df863917e3975f63b553a9fc2a3a35a9407439b1331a02fc6ca687e7d10d1b00,7044
1
+ kimi_cli/CHANGELOG.md,sha256=aa5908bc14e277c574a399bbb47d636fd5a019e26a748c7015db35cc08fc74a0,7377
2
2
  kimi_cli/__init__.py,sha256=80ff28778a1d9c1ee9d43be6f4e673fda3b44a0ec1aadc272cb859776f152f0a,11390
3
3
  kimi_cli/agent.py,sha256=46fc0293489cc1d5daaa9be6b29c8a17bbf8c5a552fd437941eb1f0ae1335a3a,8528
4
4
  kimi_cli/agents/koder/README.md,sha256=2d9a987110652915cd1a4356caec3eef9380479ce36906c377a1ed177d46690f,96
@@ -14,16 +14,16 @@ kimi_cli/prompts/init.md,sha256=d271a0df6dd7b330ffec4f645a74c0392dafc1b3bfc1e3f2
14
14
  kimi_cli/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
15
15
  kimi_cli/share.py,sha256=4292df7f44177419c45c772a933b5f36e2b7533f8cef9842629a438bc7856dc0,204
16
16
  kimi_cli/soul/__init__.py,sha256=058102a5dfaa73fab1f78e3e3f9d1a039a47410e197fef6a4482f2b2531b98b0,1561
17
- kimi_cli/soul/approval.py,sha256=3015fddcead40c00a594147e040c45a0b7f86a3f25322b2839a9e3b72944c935,2634
18
- kimi_cli/soul/compaction.py,sha256=03213007626dcb7453d3c5ad08381c83d7e7feb8f8b8a434ab33dc71243512bf,3506
17
+ kimi_cli/soul/approval.py,sha256=1887c44b9e16a30a9ad9418931e25216c4273080d4259b43118110187c346ba7,2549
18
+ kimi_cli/soul/compaction.py,sha256=967912406798835b1eb91465e82384560b24fe9cfe3d95e6400909919a286d0d,3544
19
19
  kimi_cli/soul/context.py,sha256=541759a65f8f87a3424a6da160ffb2043046e6f6b714124d94d82a77635df9bc,5855
20
20
  kimi_cli/soul/denwarenji.py,sha256=66b95f052a1fa844e2347972d34e1916a7be24d3e493701b451f5380b0375c9f,1384
21
- kimi_cli/soul/kimisoul.py,sha256=5ddbf88428ed2ca31e8554217276fe32dfb6f1fd7487e6f05ede97d4a7703efb,11595
22
- kimi_cli/soul/message.py,sha256=16bbdc203c791dc50c7ebbc52d91fae801313920db1029217f30b5516ba5dbf3,2459
21
+ kimi_cli/soul/kimisoul.py,sha256=423e2ec32afb8e04f84114c74244f47e4860f609ab2c64c4d9239dd08f41d249,11793
22
+ kimi_cli/soul/message.py,sha256=b0fce0a0901fad38f2778b85f82427d4a42906891893a643e537a9268eb6e190,2529
23
23
  kimi_cli/soul/toolset.py,sha256=60166d89ef0efac690fa6866e88afe70fbe80ad862ba2524d70ddf657a730d14,744
24
24
  kimi_cli/soul/wire.py,sha256=c69a1e45c584b8a43eddf2230f38b414ce7ffb5b43ad18ff822e0cb36e1b42a6,3367
25
25
  kimi_cli/tools/__init__.py,sha256=4d612402814eede7182e0a55e7dd21c4532b5dd44700dc744763a8308c2f74f8,3280
26
- kimi_cli/tools/bash/__init__.py,sha256=75a61d3e12481dea075229b9fe831029768b38a5575bc2eb7d6c39d71c0459da,2996
26
+ kimi_cli/tools/bash/__init__.py,sha256=de21b19c714bda53f6c89e3348c4c82fb4278040130fed1d261b3ab203054e8c,3028
27
27
  kimi_cli/tools/bash/bash.md,sha256=5d9cc54b3718097951340b0a737c8e1fa308341fd2c4ebd121be94de31dd5f73,2348
28
28
  kimi_cli/tools/dmail/__init__.py,sha256=76b2175bc4acd307db0f761b995a9c2cd8ac12f25296fab14707adb9a1baa13b,1261
29
29
  kimi_cli/tools/dmail/dmail.md,sha256=0d18cae387dd52127ddc99e296253c09e68ccba5f343153c0adbe77d7586e759,1912
@@ -31,7 +31,7 @@ kimi_cli/tools/file/__init__.py,sha256=1516fb4c71097f9c14b605e7b9a1872af8786bdcb
31
31
  kimi_cli/tools/file/glob.md,sha256=6aab77c357c203fb2d5cc2092375ce860941e3f7343b59e6ef264f42255163fa,1401
32
32
  kimi_cli/tools/file/glob.py,sha256=fabd6fbc1480a52d07c5ff3d570e3fb86d455438e97a9970dc44a0e7ff434101,5405
33
33
  kimi_cli/tools/file/grep.md,sha256=12353db42cf3b5d9d91ac7c0f0b9c2a732e8b050c23a78f4e668db823cca4d50,245
34
- kimi_cli/tools/file/grep.py,sha256=765a7f7c3387f05c2d47781b484c612639e1cfd3a1b77291e3613ce239e46947,9720
34
+ kimi_cli/tools/file/grep.py,sha256=b882ffc19cd57f70d8a898abeb5854ff297b4777e64c0cd529688134dba7dd53,9771
35
35
  kimi_cli/tools/file/patch.md,sha256=f9edbed6c6a03bf7448a51acc1f42622395fd7f1674a814e9a3b2302d3b7b92e,404
36
36
  kimi_cli/tools/file/patch.py,sha256=09e0a6905e27246d83595557dd8867f53a68b158854cdb3b0b8cd23c255a1926,5205
37
37
  kimi_cli/tools/file/read.md,sha256=4c2d83e557daadc0612fb1a613e252b2c8e4df7ae57e6db094e9e75e994cb23b,1066
@@ -51,30 +51,31 @@ kimi_cli/tools/todo/set_todo_list.md,sha256=89509503f43ab321d440a04dc133ddc3e298
51
51
  kimi_cli/tools/utils.py,sha256=5331f57c95df817285a5a1ea2921bee3b0bcabf6fc50eb4abcb6587839323443,4580
52
52
  kimi_cli/tools/web/__init__.py,sha256=e13108c598828a8a05907a7a821e7ac92f5d63572bb9866dc12ca026094acb42,95
53
53
  kimi_cli/tools/web/fetch.md,sha256=56d00bd93b4e379c4f7efe445fce963eb26b8d20f85d4c19097ba6f33bd0019a,67
54
- kimi_cli/tools/web/fetch.py,sha256=f0e00464e8c5e6fadd7a31b27eded781921bffdaa6fcbd0ca79247e71fe2e61b,3132
54
+ kimi_cli/tools/web/fetch.py,sha256=66448121d27d67f75b977c32244c721c2ccff1b2e097c2fe6717e66018d8f747,3183
55
55
  kimi_cli/tools/web/search.md,sha256=24049f9e90d37083e0fc78b8b2e3a5f6fadf09bea00f36712b235d1212a2f532,146
56
- kimi_cli/tools/web/search.py,sha256=cba367a80b224c2a80e61c0c33bca6ff61c57b202a2e9f8037e221a60f05c340,4295
56
+ kimi_cli/tools/web/search.py,sha256=a89da8d843cca1a18855157832b3c08f38a4216f42e616691f856265de3b3b8a,4331
57
57
  kimi_cli/ui/__init__.py,sha256=127928de433021e42fdaab56188457896283cd5e188c7c0f21c2eb718e040495,2386
58
58
  kimi_cli/ui/acp/__init__.py,sha256=e5a93c3bbbb919fae41cedd829dbe1363ebcb56feb6413c47071692876007d52,17349
59
59
  kimi_cli/ui/print/__init__.py,sha256=9ea2933a00959eb19a07ed1abb3d1aff0d3dc3ee7e393271125fe210a085ecc5,6734
60
- kimi_cli/ui/shell/__init__.py,sha256=165f60912c29f5bc409a0e53efc921c04893a138a09218597f758212182ad434,10705
60
+ kimi_cli/ui/shell/__init__.py,sha256=fe608006829c88255d8ee040e2f0823e4d4a4cafea716ad7e35f23db0cdacc4e,10808
61
61
  kimi_cli/ui/shell/console.py,sha256=bcbf7efd214cba3d2259f2a2c1842250cde96d49e4f9f1e0b60273cf1c366be3,842
62
62
  kimi_cli/ui/shell/debug.py,sha256=cd4e7259c83f099b5c6519713be5306580f30d3fa4944e07916d4468e960c9c7,5562
63
63
  kimi_cli/ui/shell/keyboard.py,sha256=8735c00363484263681adf885baec824e5f76cb4084bd024651e80190926edc5,3035
64
- kimi_cli/ui/shell/liveview.py,sha256=0d91dc3f851563ae514310a054b084b13fda06d33819c75b7b818d407e8a99ac,13862
64
+ kimi_cli/ui/shell/liveview.py,sha256=627cdb2110586eac7ee595030633d019e19753c71cb6d57b618193535ad69054,14236
65
65
  kimi_cli/ui/shell/metacmd.py,sha256=bb24538dbe451b14427697691275ec7d6ffd2e4a724cdc2f43b726ea7d71d744,7778
66
66
  kimi_cli/ui/shell/prompt.py,sha256=f85446d77b998e2594380c29000b06614e3fae8537db46ec96fc5ddc25490b45,19096
67
- kimi_cli/ui/shell/setup.py,sha256=cd87fef38b213cb6c1adba11851b0bf36059f564fe6002017bb36486446443e6,5282
68
- kimi_cli/ui/shell/update.py,sha256=bc331f832d2c41d5b95f4926c4ff235ef92e70ff76d66173c354f05ee52545dd,7266
69
- kimi_cli/ui/shell/visualize.py,sha256=a5ff51441e80587909e9337c293762e55be24534331c24e71539c7b166ed568b,4032
67
+ kimi_cli/ui/shell/setup.py,sha256=12417d704b6698b0bcd4cdb99782552aea70bfb4be86a481f7fd2636f18c0d74,5333
68
+ kimi_cli/ui/shell/update.py,sha256=f7662e1728d41c3cf58e57068e6c662c1ddbbd7d455288413ca71214fd27b0ae,7317
69
+ kimi_cli/ui/shell/visualize.py,sha256=322242fe41741a477474b672cfd83b8f10cffc96093ff1007c27354c55e1ce85,4242
70
+ kimi_cli/utils/aiohttp.py,sha256=f8f61e3beaf6439e949c33c3a10db3035bf88136e882b09c858ea92a4c888e00,245
70
71
  kimi_cli/utils/changelog.py,sha256=9d9ae05f32e90a53d40626fca437b9a10e8bec5b3e63e9348135969dcab4380e,3380
71
72
  kimi_cli/utils/logging.py,sha256=129298ac214ecd8d913c3431cc05d754f9c4c8c4042c458618bf9e8ddebdb763,399
72
73
  kimi_cli/utils/message.py,sha256=ca8f8d3c7dc6d4fce938d1cfe8a7a7343e39ce1e2f0c7b2d76d838edc7d9f187,304
73
74
  kimi_cli/utils/path.py,sha256=fdd4fc08999ddc7c610f884b4ba8d27932248b9ed06b5eb4139519edd00b3f75,687
74
- kimi_cli/utils/provider.py,sha256=195ae475e3f87fff81f98b2714aa3d38049dcf8194a5ba933290d0e475ba9a10,2553
75
+ kimi_cli/utils/provider.py,sha256=4e4facd7661b62331a8ded0cfaf588e238f7561979b3735d48de691c895aea29,2466
75
76
  kimi_cli/utils/pyinstaller.py,sha256=e5d709d0490ef8645bbed2d2363920c59f25bd17c04f471bf4a8c0fa2ebe1801,581
76
77
  kimi_cli/utils/string.py,sha256=f8a842ee014b9023d4045392f33ca6f576f5238ad3d40cb6df071a3ce9f5ed9c,365
77
- kimi_cli-0.38.dist-info/WHEEL,sha256=70ab3c2925fe316809860cb034f99ba13c4b49819b339959274aab755cc084a8,78
78
- kimi_cli-0.38.dist-info/entry_points.txt,sha256=d5b0f8ebf823d7590e90bf9511c8ab13f73db97cba1e1fc88585d8d7b415bcc2,40
79
- kimi_cli-0.38.dist-info/METADATA,sha256=68140d5d6632ecc607e4b1d367779c130c39c44248cbeedb1415b35929f8ffae,4016
80
- kimi_cli-0.38.dist-info/RECORD,,
78
+ kimi_cli-0.40.dist-info/WHEEL,sha256=70ab3c2925fe316809860cb034f99ba13c4b49819b339959274aab755cc084a8,78
79
+ kimi_cli-0.40.dist-info/entry_points.txt,sha256=d5b0f8ebf823d7590e90bf9511c8ab13f73db97cba1e1fc88585d8d7b415bcc2,40
80
+ kimi_cli-0.40.dist-info/METADATA,sha256=0811034c3b634ace135a22555bc207ee44ba958c8b31f6684200558e25f744db,4150
81
+ kimi_cli-0.40.dist-info/RECORD,,