kimi-cli 0.44__py3-none-any.whl → 0.78__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 +349 -40
- kimi_cli/__init__.py +6 -0
- kimi_cli/acp/AGENTS.md +91 -0
- kimi_cli/acp/__init__.py +13 -0
- kimi_cli/acp/convert.py +111 -0
- kimi_cli/acp/kaos.py +270 -0
- kimi_cli/acp/mcp.py +46 -0
- kimi_cli/acp/server.py +335 -0
- kimi_cli/acp/session.py +445 -0
- kimi_cli/acp/tools.py +158 -0
- kimi_cli/acp/types.py +13 -0
- kimi_cli/agents/default/agent.yaml +4 -4
- kimi_cli/agents/default/sub.yaml +2 -1
- kimi_cli/agents/default/system.md +79 -21
- kimi_cli/agents/okabe/agent.yaml +17 -0
- kimi_cli/agentspec.py +53 -25
- kimi_cli/app.py +180 -52
- kimi_cli/cli/__init__.py +595 -0
- kimi_cli/cli/__main__.py +8 -0
- kimi_cli/cli/info.py +63 -0
- kimi_cli/cli/mcp.py +349 -0
- kimi_cli/config.py +153 -17
- kimi_cli/constant.py +3 -0
- kimi_cli/exception.py +23 -2
- kimi_cli/flow/__init__.py +117 -0
- kimi_cli/flow/d2.py +376 -0
- kimi_cli/flow/mermaid.py +218 -0
- kimi_cli/llm.py +129 -23
- kimi_cli/metadata.py +32 -7
- kimi_cli/platforms.py +262 -0
- kimi_cli/prompts/__init__.py +2 -0
- kimi_cli/prompts/compact.md +4 -5
- kimi_cli/session.py +223 -31
- kimi_cli/share.py +2 -0
- kimi_cli/skill.py +145 -0
- kimi_cli/skills/kimi-cli-help/SKILL.md +55 -0
- kimi_cli/skills/skill-creator/SKILL.md +351 -0
- kimi_cli/soul/__init__.py +51 -20
- kimi_cli/soul/agent.py +213 -85
- kimi_cli/soul/approval.py +86 -17
- kimi_cli/soul/compaction.py +64 -53
- kimi_cli/soul/context.py +38 -5
- kimi_cli/soul/denwarenji.py +2 -0
- kimi_cli/soul/kimisoul.py +442 -60
- kimi_cli/soul/message.py +54 -54
- kimi_cli/soul/slash.py +72 -0
- kimi_cli/soul/toolset.py +387 -6
- kimi_cli/toad.py +74 -0
- kimi_cli/tools/AGENTS.md +5 -0
- kimi_cli/tools/__init__.py +42 -34
- kimi_cli/tools/display.py +25 -0
- kimi_cli/tools/dmail/__init__.py +10 -10
- kimi_cli/tools/dmail/dmail.md +11 -9
- kimi_cli/tools/file/__init__.py +1 -3
- kimi_cli/tools/file/glob.py +20 -23
- kimi_cli/tools/file/grep.md +1 -1
- kimi_cli/tools/file/{grep.py → grep_local.py} +51 -23
- kimi_cli/tools/file/read.md +24 -6
- kimi_cli/tools/file/read.py +134 -50
- kimi_cli/tools/file/replace.md +1 -1
- kimi_cli/tools/file/replace.py +36 -29
- kimi_cli/tools/file/utils.py +282 -0
- kimi_cli/tools/file/write.py +43 -22
- kimi_cli/tools/multiagent/__init__.py +7 -0
- kimi_cli/tools/multiagent/create.md +11 -0
- kimi_cli/tools/multiagent/create.py +50 -0
- kimi_cli/tools/{task/__init__.py → multiagent/task.py} +48 -53
- kimi_cli/tools/shell/__init__.py +120 -0
- kimi_cli/tools/{bash → shell}/bash.md +1 -2
- kimi_cli/tools/shell/powershell.md +25 -0
- kimi_cli/tools/test.py +4 -4
- kimi_cli/tools/think/__init__.py +2 -2
- kimi_cli/tools/todo/__init__.py +14 -8
- kimi_cli/tools/utils.py +64 -24
- kimi_cli/tools/web/fetch.py +68 -13
- kimi_cli/tools/web/search.py +10 -12
- kimi_cli/ui/acp/__init__.py +65 -412
- kimi_cli/ui/print/__init__.py +37 -49
- kimi_cli/ui/print/visualize.py +179 -0
- kimi_cli/ui/shell/__init__.py +141 -84
- kimi_cli/ui/shell/console.py +2 -0
- kimi_cli/ui/shell/debug.py +28 -23
- kimi_cli/ui/shell/keyboard.py +5 -1
- kimi_cli/ui/shell/prompt.py +220 -194
- kimi_cli/ui/shell/replay.py +111 -46
- kimi_cli/ui/shell/setup.py +89 -82
- kimi_cli/ui/shell/slash.py +422 -0
- kimi_cli/ui/shell/update.py +4 -2
- kimi_cli/ui/shell/usage.py +271 -0
- kimi_cli/ui/shell/visualize.py +574 -72
- kimi_cli/ui/wire/__init__.py +267 -0
- kimi_cli/ui/wire/jsonrpc.py +142 -0
- kimi_cli/ui/wire/protocol.py +1 -0
- kimi_cli/utils/__init__.py +0 -0
- kimi_cli/utils/aiohttp.py +2 -0
- kimi_cli/utils/aioqueue.py +72 -0
- kimi_cli/utils/broadcast.py +37 -0
- kimi_cli/utils/changelog.py +12 -7
- kimi_cli/utils/clipboard.py +12 -0
- kimi_cli/utils/datetime.py +37 -0
- kimi_cli/utils/environment.py +58 -0
- kimi_cli/utils/envvar.py +12 -0
- kimi_cli/utils/frontmatter.py +44 -0
- kimi_cli/utils/logging.py +7 -6
- kimi_cli/utils/message.py +9 -14
- kimi_cli/utils/path.py +99 -9
- kimi_cli/utils/pyinstaller.py +6 -0
- kimi_cli/utils/rich/__init__.py +33 -0
- kimi_cli/utils/rich/columns.py +99 -0
- kimi_cli/utils/rich/markdown.py +961 -0
- kimi_cli/utils/rich/markdown_sample.md +108 -0
- kimi_cli/utils/rich/markdown_sample_short.md +2 -0
- kimi_cli/utils/signals.py +2 -0
- kimi_cli/utils/slashcmd.py +124 -0
- kimi_cli/utils/string.py +2 -0
- kimi_cli/utils/term.py +168 -0
- kimi_cli/utils/typing.py +20 -0
- kimi_cli/wire/__init__.py +98 -29
- kimi_cli/wire/serde.py +45 -0
- kimi_cli/wire/types.py +299 -0
- kimi_cli-0.78.dist-info/METADATA +200 -0
- kimi_cli-0.78.dist-info/RECORD +135 -0
- kimi_cli-0.78.dist-info/entry_points.txt +4 -0
- kimi_cli/cli.py +0 -250
- kimi_cli/soul/runtime.py +0 -96
- kimi_cli/tools/bash/__init__.py +0 -99
- kimi_cli/tools/file/patch.md +0 -8
- kimi_cli/tools/file/patch.py +0 -143
- kimi_cli/tools/mcp.py +0 -85
- kimi_cli/ui/shell/liveview.py +0 -386
- kimi_cli/ui/shell/metacmd.py +0 -262
- kimi_cli/wire/message.py +0 -91
- kimi_cli-0.44.dist-info/METADATA +0 -188
- kimi_cli-0.44.dist-info/RECORD +0 -89
- kimi_cli-0.44.dist-info/entry_points.txt +0 -3
- /kimi_cli/tools/{task → multiagent}/task.md +0 -0
- {kimi_cli-0.44.dist-info → kimi_cli-0.78.dist-info}/WHEEL +0 -0
kimi_cli/wire/types.py
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
from typing import Any, Literal, TypeGuard, cast
|
|
5
|
+
|
|
6
|
+
from kosong.chat_provider import TokenUsage
|
|
7
|
+
from kosong.message import (
|
|
8
|
+
AudioURLPart,
|
|
9
|
+
ContentPart,
|
|
10
|
+
ImageURLPart,
|
|
11
|
+
TextPart,
|
|
12
|
+
ThinkPart,
|
|
13
|
+
ToolCall,
|
|
14
|
+
ToolCallPart,
|
|
15
|
+
VideoURLPart,
|
|
16
|
+
)
|
|
17
|
+
from kosong.tooling import (
|
|
18
|
+
BriefDisplayBlock,
|
|
19
|
+
DisplayBlock,
|
|
20
|
+
ToolResult,
|
|
21
|
+
ToolReturnValue,
|
|
22
|
+
UnknownDisplayBlock,
|
|
23
|
+
)
|
|
24
|
+
from kosong.utils.typing import JsonType
|
|
25
|
+
from pydantic import BaseModel, Field, field_serializer, field_validator
|
|
26
|
+
|
|
27
|
+
from kimi_cli.tools.display import DiffDisplayBlock, TodoDisplayBlock, TodoDisplayItem
|
|
28
|
+
from kimi_cli.utils.typing import flatten_union
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class TurnBegin(BaseModel):
|
|
32
|
+
"""
|
|
33
|
+
Indicates the beginning of a new agent turn.
|
|
34
|
+
This event must be sent before any other event in the turn.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
user_input: str | list[ContentPart]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class StepBegin(BaseModel):
|
|
41
|
+
"""
|
|
42
|
+
Indicates the beginning of a new agent step.
|
|
43
|
+
This event must be sent before any other event in the step.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
n: int
|
|
47
|
+
"""The step number."""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class StepInterrupted(BaseModel):
|
|
51
|
+
"""Indicates the current step was interrupted, either by user intervention or an error."""
|
|
52
|
+
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class CompactionBegin(BaseModel):
|
|
57
|
+
"""
|
|
58
|
+
Indicates that a compaction just began.
|
|
59
|
+
This event must be sent during a step, which means, between `StepBegin` and the next
|
|
60
|
+
`StepBegin` or `StepInterrupted`. And, there must be a `CompactionEnd` directly following
|
|
61
|
+
this event.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class CompactionEnd(BaseModel):
|
|
68
|
+
"""
|
|
69
|
+
Indicates that a compaction just ended.
|
|
70
|
+
This event must be sent directly after a `CompactionBegin` event.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
pass
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class StatusUpdate(BaseModel):
|
|
77
|
+
"""
|
|
78
|
+
An update on the current status of the soul.
|
|
79
|
+
None fields indicate no change from the previous status.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
context_usage: float | None = None
|
|
83
|
+
"""The usage of the context, in percentage."""
|
|
84
|
+
token_usage: TokenUsage | None = None
|
|
85
|
+
"""The token usage statistics of the current step."""
|
|
86
|
+
message_id: str | None = None
|
|
87
|
+
"""The message ID of the current step."""
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class SubagentEvent(BaseModel):
|
|
91
|
+
"""
|
|
92
|
+
An event from a subagent.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
task_tool_call_id: str
|
|
96
|
+
"""The ID of the task tool call associated with this subagent."""
|
|
97
|
+
event: Event
|
|
98
|
+
"""The event from the subagent."""
|
|
99
|
+
# TODO: maybe restrict the event types? to exclude approval request, etc.
|
|
100
|
+
|
|
101
|
+
@field_serializer("event", when_used="json")
|
|
102
|
+
def _serialize_event(self, event: Event) -> dict[str, Any]:
|
|
103
|
+
envelope = WireMessageEnvelope.from_wire_message(event)
|
|
104
|
+
return envelope.model_dump(mode="json")
|
|
105
|
+
|
|
106
|
+
@field_validator("event", mode="before")
|
|
107
|
+
@classmethod
|
|
108
|
+
def _validate_event(cls, value: Any) -> Event:
|
|
109
|
+
if is_wire_message(value):
|
|
110
|
+
if is_event(value):
|
|
111
|
+
return value
|
|
112
|
+
raise ValueError("SubagentEvent event must be an Event")
|
|
113
|
+
|
|
114
|
+
if not isinstance(value, dict):
|
|
115
|
+
raise ValueError("SubagentEvent event must be a dict")
|
|
116
|
+
event_type = cast(dict[str, Any], value).get("type")
|
|
117
|
+
event_payload = cast(dict[str, Any], value).get("payload")
|
|
118
|
+
envelope = WireMessageEnvelope.model_validate(
|
|
119
|
+
{"type": event_type, "payload": event_payload}
|
|
120
|
+
)
|
|
121
|
+
event = envelope.to_wire_message()
|
|
122
|
+
if not is_event(event):
|
|
123
|
+
raise ValueError("SubagentEvent event must be an Event")
|
|
124
|
+
return event
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
type ApprovalResponseKind = Literal["approve", "approve_for_session", "reject"]
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class ApprovalRequestResolved(BaseModel):
|
|
131
|
+
"""
|
|
132
|
+
Indicates that an approval request has been resolved.
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
request_id: str
|
|
136
|
+
"""The ID of the resolved approval request."""
|
|
137
|
+
response: ApprovalResponseKind
|
|
138
|
+
"""The response to the approval request."""
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class ApprovalRequest(BaseModel):
|
|
142
|
+
"""
|
|
143
|
+
A request for user approval before proceeding with an action.
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
id: str
|
|
147
|
+
tool_call_id: str
|
|
148
|
+
sender: str
|
|
149
|
+
action: str
|
|
150
|
+
description: str
|
|
151
|
+
display: list[DisplayBlock] = Field(default_factory=list[DisplayBlock])
|
|
152
|
+
"""Defaults to an empty list for backwards-compatible wire.jsonl loading."""
|
|
153
|
+
|
|
154
|
+
type Response = ApprovalResponseKind
|
|
155
|
+
|
|
156
|
+
# Note that the above fields are just a copy of `kimi_cli.soul.approval.Request`, but
|
|
157
|
+
# we cannot directly use that class here because we want to avoid dependency from Wire
|
|
158
|
+
# to Soul.
|
|
159
|
+
|
|
160
|
+
def __init__(self, **kwargs: Any) -> None:
|
|
161
|
+
super().__init__(**kwargs)
|
|
162
|
+
self._future = asyncio.Future[ApprovalRequest.Response]()
|
|
163
|
+
|
|
164
|
+
async def wait(self) -> Response:
|
|
165
|
+
"""
|
|
166
|
+
Wait for the request to be resolved or cancelled.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
ApprovalRequest.Response: The response to the approval request.
|
|
170
|
+
"""
|
|
171
|
+
return await self._future
|
|
172
|
+
|
|
173
|
+
def resolve(self, response: ApprovalRequest.Response) -> None:
|
|
174
|
+
"""
|
|
175
|
+
Resolve the approval request with the given response.
|
|
176
|
+
This will cause the `wait()` method to return the response.
|
|
177
|
+
"""
|
|
178
|
+
self._future.set_result(response)
|
|
179
|
+
|
|
180
|
+
@property
|
|
181
|
+
def resolved(self) -> bool:
|
|
182
|
+
"""Whether the request is resolved."""
|
|
183
|
+
return self._future.done()
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
type Event = (
|
|
187
|
+
TurnBegin
|
|
188
|
+
| StepBegin
|
|
189
|
+
| StepInterrupted
|
|
190
|
+
| CompactionBegin
|
|
191
|
+
| CompactionEnd
|
|
192
|
+
| StatusUpdate
|
|
193
|
+
| ContentPart
|
|
194
|
+
| ToolCall
|
|
195
|
+
| ToolCallPart
|
|
196
|
+
| ToolResult
|
|
197
|
+
| SubagentEvent
|
|
198
|
+
| ApprovalRequestResolved
|
|
199
|
+
)
|
|
200
|
+
"""Any event, including control flow and content/tooling events."""
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
type Request = ApprovalRequest
|
|
204
|
+
"""Any request. Request is a message that expects a response."""
|
|
205
|
+
|
|
206
|
+
type WireMessage = Event | Request
|
|
207
|
+
"""Any message sent over the `Wire`."""
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
_EVENT_TYPES = cast(tuple[type[Event], ...], flatten_union(Event))
|
|
211
|
+
_REQUEST_TYPES = cast(tuple[type[Request], ...], flatten_union(Request))
|
|
212
|
+
_WIRE_MESSAGE_TYPES = cast(tuple[type[WireMessage], ...], flatten_union(WireMessage))
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def is_event(msg: Any) -> TypeGuard[Event]:
|
|
216
|
+
"""Check if the message is an Event."""
|
|
217
|
+
return isinstance(msg, _EVENT_TYPES)
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def is_request(msg: Any) -> TypeGuard[Request]:
|
|
221
|
+
"""Check if the message is a Request."""
|
|
222
|
+
return isinstance(msg, _REQUEST_TYPES)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def is_wire_message(msg: Any) -> TypeGuard[WireMessage]:
|
|
226
|
+
"""Check if the message is a WireMessage."""
|
|
227
|
+
return isinstance(msg, _WIRE_MESSAGE_TYPES)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
_NAME_TO_WIRE_MESSAGE_TYPE: dict[str, type[WireMessage]] = {
|
|
231
|
+
cls.__name__: cls for cls in _WIRE_MESSAGE_TYPES
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class WireMessageEnvelope(BaseModel):
|
|
236
|
+
type: str
|
|
237
|
+
payload: dict[str, JsonType]
|
|
238
|
+
|
|
239
|
+
@classmethod
|
|
240
|
+
def from_wire_message(cls, msg: WireMessage) -> WireMessageEnvelope:
|
|
241
|
+
typename: str | None = None
|
|
242
|
+
for name, typ in _NAME_TO_WIRE_MESSAGE_TYPE.items():
|
|
243
|
+
if issubclass(type(msg), typ):
|
|
244
|
+
typename = name
|
|
245
|
+
break
|
|
246
|
+
assert typename is not None, f"Unknown wire message type: {type(msg)}"
|
|
247
|
+
return cls(
|
|
248
|
+
type=typename,
|
|
249
|
+
payload=msg.model_dump(mode="json"),
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
def to_wire_message(self) -> WireMessage:
|
|
253
|
+
"""
|
|
254
|
+
Convert the envelope back into a `WireMessage`.
|
|
255
|
+
|
|
256
|
+
Raises:
|
|
257
|
+
ValueError: If the message type is unknown or the payload is invalid.
|
|
258
|
+
"""
|
|
259
|
+
msg_type = _NAME_TO_WIRE_MESSAGE_TYPE.get(self.type)
|
|
260
|
+
if msg_type is None:
|
|
261
|
+
raise ValueError(f"Unknown wire message type: {self.type}")
|
|
262
|
+
return msg_type.model_validate(self.payload)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
__all__ = [
|
|
266
|
+
# `WireMessage` variants
|
|
267
|
+
"TurnBegin",
|
|
268
|
+
"StepBegin",
|
|
269
|
+
"StepInterrupted",
|
|
270
|
+
"CompactionBegin",
|
|
271
|
+
"CompactionEnd",
|
|
272
|
+
"StatusUpdate",
|
|
273
|
+
"ContentPart",
|
|
274
|
+
"ToolCall",
|
|
275
|
+
"ToolCallPart",
|
|
276
|
+
"ToolResult",
|
|
277
|
+
"SubagentEvent",
|
|
278
|
+
"ApprovalRequestResolved",
|
|
279
|
+
"ApprovalRequest",
|
|
280
|
+
# helpers
|
|
281
|
+
"WireMessageEnvelope",
|
|
282
|
+
# `StatusUpdate`-related
|
|
283
|
+
"TokenUsage",
|
|
284
|
+
# `ContentPart` types
|
|
285
|
+
"TextPart",
|
|
286
|
+
"ThinkPart",
|
|
287
|
+
"ImageURLPart",
|
|
288
|
+
"AudioURLPart",
|
|
289
|
+
"VideoURLPart",
|
|
290
|
+
# `ToolResult`-related
|
|
291
|
+
"ToolReturnValue",
|
|
292
|
+
# `DisplayBlock` types
|
|
293
|
+
"DisplayBlock",
|
|
294
|
+
"UnknownDisplayBlock",
|
|
295
|
+
"BriefDisplayBlock",
|
|
296
|
+
"DiffDisplayBlock",
|
|
297
|
+
"TodoDisplayBlock",
|
|
298
|
+
"TodoDisplayItem",
|
|
299
|
+
]
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: kimi-cli
|
|
3
|
+
Version: 0.78
|
|
4
|
+
Summary: Kimi CLI is your next CLI agent.
|
|
5
|
+
Requires-Dist: agent-client-protocol==0.7.0
|
|
6
|
+
Requires-Dist: aiofiles>=24.0,<26.0
|
|
7
|
+
Requires-Dist: aiohttp==3.13.3
|
|
8
|
+
Requires-Dist: typer==0.21.1
|
|
9
|
+
Requires-Dist: kosong[contrib]==0.38.0
|
|
10
|
+
Requires-Dist: loguru>=0.6.0,<0.8
|
|
11
|
+
Requires-Dist: prompt-toolkit==3.0.52
|
|
12
|
+
Requires-Dist: pillow==12.1.0
|
|
13
|
+
Requires-Dist: pyyaml==6.0.3
|
|
14
|
+
Requires-Dist: rich==14.2.0
|
|
15
|
+
Requires-Dist: ripgrepy==2.2.0
|
|
16
|
+
Requires-Dist: streamingjson==0.0.5
|
|
17
|
+
Requires-Dist: trafilatura==2.0.0
|
|
18
|
+
Requires-Dist: lxml==6.0.2
|
|
19
|
+
Requires-Dist: tenacity==9.1.2
|
|
20
|
+
Requires-Dist: fastmcp==2.12.5
|
|
21
|
+
Requires-Dist: pydantic==2.12.5
|
|
22
|
+
Requires-Dist: httpx[socks]==0.28.1
|
|
23
|
+
Requires-Dist: pykaos==0.6.0
|
|
24
|
+
Requires-Dist: batrachian-toad==0.5.23 ; python_full_version >= '3.14'
|
|
25
|
+
Requires-Dist: tomlkit==0.13.3
|
|
26
|
+
Requires-Dist: jinja2==3.1.4
|
|
27
|
+
Requires-Python: >=3.12
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# Kimi CLI
|
|
31
|
+
|
|
32
|
+
[](https://github.com/MoonshotAI/kimi-cli/graphs/commit-activity)
|
|
33
|
+
[](https://github.com/MoonshotAI/kimi-cli/actions)
|
|
34
|
+
[](https://pypi.org/project/kimi-cli/)
|
|
35
|
+
[](https://pypistats.org/packages/kimi-cli)
|
|
36
|
+
[](https://deepwiki.com/MoonshotAI/kimi-cli)
|
|
37
|
+
|
|
38
|
+
[Kimi Code](https://www.kimi.com/code/) | [Documentation](https://moonshotai.github.io/kimi-cli/en/) | [文档](https://moonshotai.github.io/kimi-cli/zh/)
|
|
39
|
+
|
|
40
|
+
Kimi CLI is an AI agent that runs in the terminal, helping you complete software development tasks and terminal operations. It can read and edit code, execute shell commands, search and fetch web pages, and autonomously plan and adjust actions during execution.
|
|
41
|
+
|
|
42
|
+
> [!IMPORTANT]
|
|
43
|
+
> Kimi CLI is currently in technical preview.
|
|
44
|
+
|
|
45
|
+
## Getting Started
|
|
46
|
+
|
|
47
|
+
See [Getting Started](https://moonshotai.github.io/kimi-cli/en/guides/getting-started.html) for how to install and start using Kimi CLI.
|
|
48
|
+
|
|
49
|
+
## Key Features
|
|
50
|
+
|
|
51
|
+
### Shell command mode
|
|
52
|
+
|
|
53
|
+
Kimi CLI is not only a coding agent, but also a shell. You can switch the shell command mode by pressing `Ctrl-X`. In this mode, you can directly run shell commands without leaving Kimi CLI.
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
> [!NOTE]
|
|
58
|
+
> Built-in shell commands like `cd` are not supported yet.
|
|
59
|
+
|
|
60
|
+
### IDE integration via ACP
|
|
61
|
+
|
|
62
|
+
Kimi CLI supports [Agent Client Protocol] out of the box. You can use it together with any ACP-compatible editor or IDE.
|
|
63
|
+
|
|
64
|
+
[Agent Client Protocol]: https://github.com/agentclientprotocol/agent-client-protocol
|
|
65
|
+
|
|
66
|
+
To use Kimi CLI with ACP clients, make sure to run Kimi CLI in the terminal and send `/setup` to complete the setup first. Then, you can configure your ACP client to start Kimi CLI as an ACP agent server with command `kimi acp`.
|
|
67
|
+
|
|
68
|
+
For example, to use Kimi CLI with [Zed](https://zed.dev/) or [JetBrains](https://blog.jetbrains.com/ai/2025/12/bring-your-own-ai-agent-to-jetbrains-ides/), add the following configuration to your `~/.config/zed/settings.json` or `~/.jetbrains/acp.json` file:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"agent_servers": {
|
|
73
|
+
"Kimi CLI": {
|
|
74
|
+
"command": "kimi",
|
|
75
|
+
"args": ["acp"],
|
|
76
|
+
"env": {}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Then you can create Kimi CLI threads in IDE's agent panel.
|
|
83
|
+
|
|
84
|
+

|
|
85
|
+
|
|
86
|
+
### Zsh integration
|
|
87
|
+
|
|
88
|
+
You can use Kimi CLI together with Zsh, to empower your shell experience with AI agent capabilities.
|
|
89
|
+
|
|
90
|
+
Install the [zsh-kimi-cli](https://github.com/MoonshotAI/zsh-kimi-cli) plugin via:
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
git clone https://github.com/MoonshotAI/zsh-kimi-cli.git \
|
|
94
|
+
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/kimi-cli
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
> [!NOTE]
|
|
98
|
+
> If you are using a plugin manager other than Oh My Zsh, you may need to refer to the plugin's README for installation instructions.
|
|
99
|
+
|
|
100
|
+
Then add `kimi-cli` to your Zsh plugin list in `~/.zshrc`:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
plugins=(... kimi-cli)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
After restarting Zsh, you can switch to agent mode by pressing `Ctrl-X`.
|
|
107
|
+
|
|
108
|
+
### MCP support
|
|
109
|
+
|
|
110
|
+
Kimi CLI supports MCP (Model Context Protocol) tools.
|
|
111
|
+
|
|
112
|
+
**`kimi mcp` sub-command group**
|
|
113
|
+
|
|
114
|
+
You can manage MCP servers with `kimi mcp` sub-command group. For example:
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
# Add streamable HTTP server:
|
|
118
|
+
kimi mcp add --transport http context7 https://mcp.context7.com/mcp --header "CONTEXT7_API_KEY: ctx7sk-your-key"
|
|
119
|
+
|
|
120
|
+
# Add streamable HTTP server with OAuth authorization:
|
|
121
|
+
kimi mcp add --transport http --auth oauth linear https://mcp.linear.app/mcp
|
|
122
|
+
|
|
123
|
+
# Add stdio server:
|
|
124
|
+
kimi mcp add --transport stdio chrome-devtools -- npx chrome-devtools-mcp@latest
|
|
125
|
+
|
|
126
|
+
# List added MCP servers:
|
|
127
|
+
kimi mcp list
|
|
128
|
+
|
|
129
|
+
# Remove an MCP server:
|
|
130
|
+
kimi mcp remove chrome-devtools
|
|
131
|
+
|
|
132
|
+
# Authorize an MCP server:
|
|
133
|
+
kimi mcp auth linear
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Ad-hoc MCP configuration**
|
|
137
|
+
|
|
138
|
+
Kimi CLI also supports ad-hoc MCP server configuration via CLI option.
|
|
139
|
+
|
|
140
|
+
Given an MCP config file in the well-known MCP config format like the following:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"mcpServers": {
|
|
145
|
+
"context7": {
|
|
146
|
+
"url": "https://mcp.context7.com/mcp",
|
|
147
|
+
"headers": {
|
|
148
|
+
"CONTEXT7_API_KEY": "YOUR_API_KEY"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"chrome-devtools": {
|
|
152
|
+
"command": "npx",
|
|
153
|
+
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Run `kimi` with `--mcp-config-file` option to connect to the specified MCP servers:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
kimi --mcp-config-file /path/to/mcp.json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### More
|
|
166
|
+
|
|
167
|
+
See more features in the [Documentation](https://moonshotai.github.io/kimi-cli/en/).
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
To develop Kimi CLI, run:
|
|
172
|
+
|
|
173
|
+
```sh
|
|
174
|
+
git clone https://github.com/MoonshotAI/kimi-cli.git
|
|
175
|
+
cd kimi-cli
|
|
176
|
+
|
|
177
|
+
make prepare # prepare the development environment
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Then you can start working on Kimi CLI.
|
|
181
|
+
|
|
182
|
+
Refer to the following commands after you make changes:
|
|
183
|
+
|
|
184
|
+
```sh
|
|
185
|
+
uv run kimi # run Kimi CLI
|
|
186
|
+
|
|
187
|
+
make format # format code
|
|
188
|
+
make check # run linting and type checking
|
|
189
|
+
make test # run tests
|
|
190
|
+
make test-kimi-cli # run Kimi CLI tests only
|
|
191
|
+
make test-kosong # run kosong tests only
|
|
192
|
+
make test-pykaos # run pykaos tests only
|
|
193
|
+
make build # build python packages
|
|
194
|
+
make build-bin # build standalone binary
|
|
195
|
+
make help # show all make targets
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Contributing
|
|
199
|
+
|
|
200
|
+
We welcome contributions to Kimi CLI! Please refer to [CONTRIBUTING.md](./CONTRIBUTING.md) for more information.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
kimi_cli/CHANGELOG.md,sha256=c97693b19d25f992360d3ef4fb27c0944928edd21b73fecb204a2a1bb04e9b3a,22733
|
|
2
|
+
kimi_cli/__init__.py,sha256=a19614a7db54e43f6e1169171cfd523466d9e26b21f3cd1be898945009ae685b,209
|
|
3
|
+
kimi_cli/acp/AGENTS.md,sha256=43ef19d65d7f96300b1b0e427de656d07bfa9d274d71ced57b98ec39dbe0b4af,4621
|
|
4
|
+
kimi_cli/acp/__init__.py,sha256=17395dd299da0e4b313a26c4619a19fcfa6d5c07302c2dd4e78a3a9811047883,394
|
|
5
|
+
kimi_cli/acp/convert.py,sha256=e49e43aa96a21c3fe6d6ea08fe4f7573be34028f9b3de2d269c6440a8fd89bce,3677
|
|
6
|
+
kimi_cli/acp/kaos.py,sha256=7760f8f603fc9df9e954e3b93c95fbf5d44072e632db3e62af7c836a9091ea98,9348
|
|
7
|
+
kimi_cli/acp/mcp.py,sha256=0fdf064e97ff387105a3b2b07dead99dbf57e7b1eaeef537e98cb5d33229c169,1540
|
|
8
|
+
kimi_cli/acp/server.py,sha256=94a6a959ea934a414f9d6821828d7c6bb7b504a51252b53901525ae118dd2e3c,13573
|
|
9
|
+
kimi_cli/acp/session.py,sha256=85abc5cd975440a510266d93a3641f4d16ca405f542410d10d4476606b3032c0,16808
|
|
10
|
+
kimi_cli/acp/tools.py,sha256=5588bb3d9a1c9a427f87aebc54b9193325a09118f64911f29dc2ee8c2d124eab,5842
|
|
11
|
+
kimi_cli/acp/types.py,sha256=5e916308f4c09262befcdb45b0bd42f365254363bcf27806984691a7c6c580f4,348
|
|
12
|
+
kimi_cli/agents/default/agent.yaml,sha256=bcd0d21ead17d10c2aa6f5f7ae5421beea637993dc47eab20e8a86c2f7463dcb,730
|
|
13
|
+
kimi_cli/agents/default/sub.yaml,sha256=cd6e1f8d6721e349119db9d3621929ac148d3b8eaa45afef7503d76aef3e1654,689
|
|
14
|
+
kimi_cli/agents/default/system.md,sha256=f7fbf510797fda4f89fa40639f4c56e2b40cf99b55e17eecfd8ba3907053355d,8453
|
|
15
|
+
kimi_cli/agents/okabe/agent.yaml,sha256=626056892e659b46109d5c326a62429ef38620576e1d44e0357c69f4bfa02727,543
|
|
16
|
+
kimi_cli/agentspec.py,sha256=9baafb635ae3a20a950dd172ca94880e69732c4f041d7253b4ee9d20aa949569,5326
|
|
17
|
+
kimi_cli/app.py,sha256=db5185a4dda5eab2f2ceefc61333bbe679f74cab98363e280974f8ed2411bad4,12479
|
|
18
|
+
kimi_cli/cli/__init__.py,sha256=7371c5df6f4c6c654d73b128bb80a8c71b8a72799be9efe86fd7e23e36a5896f,18241
|
|
19
|
+
kimi_cli/cli/__main__.py,sha256=0e5b278e7510d7b16cd52cb56668f429b98c702e247489bada0f5d575f05187c,125
|
|
20
|
+
kimi_cli/cli/info.py,sha256=309f324485694ce6fc6c436933d67e56a8febc79aaa348a03172c568abb5b88c,1637
|
|
21
|
+
kimi_cli/cli/mcp.py,sha256=60606dbdf57beb929c265266a40646f6ef8162597cd273808b99e649b1e1f140,11353
|
|
22
|
+
kimi_cli/config.py,sha256=7ca46e89731c4f019e5fe89e57b4279951ea97bcb8ad75c33e1a34ef5ca1b255,9818
|
|
23
|
+
kimi_cli/constant.py,sha256=a14147cfa368039b2b68fbf819f8c5c3f68db931e3ef1aa54e5a46bf76a436b2,164
|
|
24
|
+
kimi_cli/exception.py,sha256=aad3f2c712ca1a4437709b7c6839fd9c3cb017b285eb68434830cc4943aa7434,604
|
|
25
|
+
kimi_cli/flow/__init__.py,sha256=be4dcf11446a4f390c794697cb0b5680aba83f40f7c9de20e689d59d0bd0bb8c,3476
|
|
26
|
+
kimi_cli/flow/d2.py,sha256=27deb4c442bd30e4d765ab89a3a7301f254fe214b25ea935bcfc679a343082d6,11075
|
|
27
|
+
kimi_cli/flow/mermaid.py,sha256=f42ed4e705975abbadc505346dd759d4690786e3319ba59fa1263325d698a4a7,7450
|
|
28
|
+
kimi_cli/llm.py,sha256=1445b076ada725132ed860be751570a5ff05372a37758c91073d8b191bb908d8,7852
|
|
29
|
+
kimi_cli/metadata.py,sha256=9c54a33a257d4ee48f7e136dce0975ce6e592dfed3c31caec730b8acb8c4dcb2,2605
|
|
30
|
+
kimi_cli/platforms.py,sha256=195f1c8d03ba9b5e940b17a9e5fbdbbbaca18b04d535c232e19c6688f4a04029,7952
|
|
31
|
+
kimi_cli/prompts/__init__.py,sha256=57dfdb5f7c541e04b87f2d708ee7af46295735e10d6f18b35313a7e30483385c,210
|
|
32
|
+
kimi_cli/prompts/compact.md,sha256=24753a19a3c0dfabc5545a103666a559cc7dd8caa963715fdc6ca7dd787a0e0a,1858
|
|
33
|
+
kimi_cli/prompts/init.md,sha256=d271a0df6dd7b330ffec4f645a74c0392dafc1b3bfc1e3f2a77624e96cf6abbe,1380
|
|
34
|
+
kimi_cli/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
|
|
35
|
+
kimi_cli/session.py,sha256=4f32fa7bfd47cab0a0b2e9f8af9b58f442c394724faf8c3ee0f0802cd25c0024,9835
|
|
36
|
+
kimi_cli/share.py,sha256=c337ae72e2d47728d6418cb5aa4c9be67cda1c742466bc3a9fe0f32883b756d9,240
|
|
37
|
+
kimi_cli/skill.py,sha256=57e2f7dab8ef8ff2b1312ee38ad70762e504694d6fca252394f70aadd19928f4,3788
|
|
38
|
+
kimi_cli/skills/kimi-cli-help/SKILL.md,sha256=3056e146fb0309511ad41de0585c82eef58efdd60b6dfda076cc168065bbc286,1993
|
|
39
|
+
kimi_cli/skills/skill-creator/SKILL.md,sha256=ae7db8fe2e84a2f6fa95b74a779d2da0fb7534fdbec407aacdb3990d5b641b76,17629
|
|
40
|
+
kimi_cli/soul/__init__.py,sha256=3552d639766b94c4c99614f19dd20cc9c43e61a1a49eec66811a53707f97177f,6635
|
|
41
|
+
kimi_cli/soul/agent.py,sha256=2b198eab1a9e9904e95ba8af43ff6b67cade121d5da10d0c44b99bf5aa2f2c04,9758
|
|
42
|
+
kimi_cli/soul/approval.py,sha256=bb279af8a7b2bbef5fb88505612063fdd830f2f6885ae4965648417eaa9a900f,4582
|
|
43
|
+
kimi_cli/soul/compaction.py,sha256=50f6359cb00b01a34f773a131a7cd6c38f7bd6595f82a0afb4572d79c424295a,4327
|
|
44
|
+
kimi_cli/soul/context.py,sha256=352694721143714056628705d205e9dc1383b1f3acf18ef4fa182e42a93ebd60,6929
|
|
45
|
+
kimi_cli/soul/denwarenji.py,sha256=a5fafb3e1b7db8f45e758fe1e4ae84346af2ebe0f5d1f4ec78bfbf00498d663d,1420
|
|
46
|
+
kimi_cli/soul/kimisoul.py,sha256=cbf88ab3b54f48615c3dea17c74cec8e9ac93b13c71b2af96308e2efa5a0a771,26160
|
|
47
|
+
kimi_cli/soul/message.py,sha256=9accf156da96288a7b19dfbe8431f757191fd9b8b048a33e97d2508619db8f0d,2576
|
|
48
|
+
kimi_cli/soul/slash.py,sha256=c84a035c4ce36e1902df9351bf2139cf91c6f660e403abba4b444b445efa6cfb,2411
|
|
49
|
+
kimi_cli/soul/toolset.py,sha256=ead7953d328313f38677815426f917e4ef12a0a9d084f1a2f0112226313fa9ec,15080
|
|
50
|
+
kimi_cli/toad.py,sha256=fbf2def1c99770d0da7d7227efde70ef90f61d179bcf7ab1d0f46e2845e8ee38,2251
|
|
51
|
+
kimi_cli/tools/AGENTS.md,sha256=b90bd16545f33cb0daef68a151ac482424a6bbf771177edf7492f1231c5b1cd4,208
|
|
52
|
+
kimi_cli/tools/__init__.py,sha256=f6c6e9bbdf87b8999988be8cd12916407beed5400081752a1d40889fd3ae579c,3604
|
|
53
|
+
kimi_cli/tools/display.py,sha256=426a33a2d1060d89b3cf89abfe0a9ba460880a542e43e2c38c983c5be9639193,518
|
|
54
|
+
kimi_cli/tools/dmail/__init__.py,sha256=ba06dbe4c7b7eccddb3fabe3848ee890e94db06b088dc0d94db721bd2704a906,1217
|
|
55
|
+
kimi_cli/tools/dmail/dmail.md,sha256=0a3ccb62ce1e579521f8a6ab2e799fde36fba23d3a860b6abc28758b9967b7b5,2570
|
|
56
|
+
kimi_cli/tools/file/__init__.py,sha256=ee9ab55c64458f57b7e0596c19d4d267174685b49c9b48c8848f8950a3c4e48d,492
|
|
57
|
+
kimi_cli/tools/file/glob.md,sha256=11fbfaf6033f57b69c6f91077ddd90505036937cd7217600d96992b9a48b7ca7,1400
|
|
58
|
+
kimi_cli/tools/file/glob.py,sha256=5ba1e132c01e95fecede82c5ecfa2c042d6a949017fde660ba8c6b142d743939,5347
|
|
59
|
+
kimi_cli/tools/file/grep.md,sha256=66a59047357123116faad547d3a0a71fc6d34f7157704c0f63b4f5fae82f2cdd,246
|
|
60
|
+
kimi_cli/tools/file/grep_local.py,sha256=0cbd7183d638f1c19aa6e38f84f720d5a00c79a8452c1d467319a53ed3a01876,11096
|
|
61
|
+
kimi_cli/tools/file/read.md,sha256=14475a83df458ee328c4bacaf42dd02604cb6ba2daf10f7ea1a6d1479122c2e0,2451
|
|
62
|
+
kimi_cli/tools/file/read.py,sha256=16200f3c15c124cfa64fe5abb681940ba5f6093c592a266007dbb2c6f0de5cfa,8308
|
|
63
|
+
kimi_cli/tools/file/replace.md,sha256=ffd3045346781d2d40aa4159a67805538c8804fb84e21f1ca35cded68af4a904,268
|
|
64
|
+
kimi_cli/tools/file/replace.py,sha256=b33bcef139d804622ce9fc49a29a05c46a5f7db780e09a7fa8142c0064532dd0,5455
|
|
65
|
+
kimi_cli/tools/file/utils.py,sha256=94e631ac665d66e297272ae538cf0d59040685e9931c2520112b351519ed7179,7581
|
|
66
|
+
kimi_cli/tools/file/write.md,sha256=f37b0f4742da57797ec4dd29fbd4fdc9b6617c6be644724a3b16d651c6129cec,324
|
|
67
|
+
kimi_cli/tools/file/write.py,sha256=4cf4313d4f317f9ed6780fae7207811169d7c098d194ba3b3564d6d78e291384,5099
|
|
68
|
+
kimi_cli/tools/multiagent/__init__.py,sha256=ed1c6d2d18c103155ad008ce45a6c43a35c3a722784bf220f4a04bebd835d062,107
|
|
69
|
+
kimi_cli/tools/multiagent/create.md,sha256=055a1ea07b4af6d50bb0d2acbb4a2ec714e8460c93710bb520dbcd937698ed35,529
|
|
70
|
+
kimi_cli/tools/multiagent/create.py,sha256=9abfdf89a86db238a117a8bab4eb2b163d55bce2213359346205e6e504a59673,1855
|
|
71
|
+
kimi_cli/tools/multiagent/task.md,sha256=391cc3553c7d310a323626bae180dd41cb810fb1233583713ebde105f954147a,2280
|
|
72
|
+
kimi_cli/tools/multiagent/task.py,sha256=6d70378daca0a6e96cbc5987f9d273d326d4f93ed9d0be96d9062fd4f5547dde,6097
|
|
73
|
+
kimi_cli/tools/shell/__init__.py,sha256=7af9d43e73f41495348f2c959a7396dbd9f8ed6c1f70057baeba87234f780566,3919
|
|
74
|
+
kimi_cli/tools/shell/bash.md,sha256=90570c8feea601f664574358bfe4b862632a5c39f3e5277cbaeb5652efc0f988,2298
|
|
75
|
+
kimi_cli/tools/shell/powershell.md,sha256=8914b63a0f3bd900189470893da174393fa09bdbff3288dbd0748e9cccdb556e,2027
|
|
76
|
+
kimi_cli/tools/test.py,sha256=4e4932235ea7f9fcb39e57f543441bd03d822ad05577a00656fdaf3dd130a324,1446
|
|
77
|
+
kimi_cli/tools/think/__init__.py,sha256=920c19961443dea11db375788bd4bd9eb6db066db8d7093b9888e92e44bed08b,605
|
|
78
|
+
kimi_cli/tools/think/think.md,sha256=ab40d4de1d8adb208384a4ab548e35776283cb0a681c6e208b041fc40ccba724,200
|
|
79
|
+
kimi_cli/tools/todo/__init__.py,sha256=e82e9da9a545a75d3c64f6a715bc6a4009d3914a5ca04e97263f2722c536ee0f,1114
|
|
80
|
+
kimi_cli/tools/todo/set_todo_list.md,sha256=89509503f43ab321d440a04dc133ddc3e29859f68907a42c39e6093f7bfd485c,1654
|
|
81
|
+
kimi_cli/tools/utils.py,sha256=f30aa5195ed0e6a1058b830d0e802f9d1324bf92d30d6acf1ebae36fe2d9acb8,6073
|
|
82
|
+
kimi_cli/tools/web/__init__.py,sha256=e13108c598828a8a05907a7a821e7ac92f5d63572bb9866dc12ca026094acb42,95
|
|
83
|
+
kimi_cli/tools/web/fetch.md,sha256=56d00bd93b4e379c4f7efe445fce963eb26b8d20f85d4c19097ba6f33bd0019a,67
|
|
84
|
+
kimi_cli/tools/web/fetch.py,sha256=5884e2da92a3c44e2411bffac6edb1776060bd0c01625672adcf633cb984fd35,5765
|
|
85
|
+
kimi_cli/tools/web/search.md,sha256=24049f9e90d37083e0fc78b8b2e3a5f6fadf09bea00f36712b235d1212a2f532,146
|
|
86
|
+
kimi_cli/tools/web/search.py,sha256=0e83a6461dd731b2704c95ca38d7a5ad1f1b9f1baaf73fd2788e86c6e259d624,4443
|
|
87
|
+
kimi_cli/ui/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
|
|
88
|
+
kimi_cli/ui/acp/__init__.py,sha256=149d2d482ddacefce25fe4040ff05e861899a724f4c811f035bf8207075f243a,2686
|
|
89
|
+
kimi_cli/ui/print/__init__.py,sha256=7acf5421dfc80ce4839526d155a089be173d1acfb634a5015e9b1e4125490a63,4741
|
|
90
|
+
kimi_cli/ui/print/visualize.py,sha256=5d19643f468a4247ae1687ae5ba9ddaca15458113d6496192c68c025a46f4576,5669
|
|
91
|
+
kimi_cli/ui/shell/__init__.py,sha256=b306275d600b67dff46065de93ac7406db43fe4c856a61010647b7f58106a627,13804
|
|
92
|
+
kimi_cli/ui/shell/console.py,sha256=1882aa2c11c31dcf834649462c1f760de9b50213fa09aa8235aa27e3f7e3dbd8,878
|
|
93
|
+
kimi_cli/ui/shell/debug.py,sha256=97cb0f047f0ca8c32a4d217f041b068ef5ff0f8724394f55e48c094a01a97801,5777
|
|
94
|
+
kimi_cli/ui/shell/keyboard.py,sha256=f70fedb6058a7dcef00dc3afadc66e8cbb754d2701447641862c99b305100bde,5231
|
|
95
|
+
kimi_cli/ui/shell/prompt.py,sha256=0419dd52dc764e433f9aeb083f9eb781eb40d9739723ed5a73e687552afd3596,27657
|
|
96
|
+
kimi_cli/ui/shell/replay.py,sha256=0a44a99aef7512624aa6dc53c23a30659c94dc0bc4938e68b5c33ce7818d3afd,5636
|
|
97
|
+
kimi_cli/ui/shell/setup.py,sha256=71c2b53ba4c8e8769bb3ac542c886e67e6224fa80c888dad5c50eb817456f62a,5559
|
|
98
|
+
kimi_cli/ui/shell/slash.py,sha256=c1a17626c7163c7f3f24a1365a2970bfd72b2e05e5ed010abe95adf3c12afa6d,13814
|
|
99
|
+
kimi_cli/ui/shell/update.py,sha256=9bfeedcc042e13f2406c5a282d0fe88f4185be4cb49793930402b812116bb1c5,7370
|
|
100
|
+
kimi_cli/ui/shell/usage.py,sha256=0e642e765de999713c4a91583399e56d53227464c8d11e366fd5cf87b175c21c,8947
|
|
101
|
+
kimi_cli/ui/shell/visualize.py,sha256=f4aecf288a030baf807c8ad2ba057928b066829bdda09bf8591e40a4492d245f,23032
|
|
102
|
+
kimi_cli/ui/wire/__init__.py,sha256=9f8b883b91c9ce56fafb9db52720a1773b2ef2e5b2dd8a96bfaf913d86bd9e62,9748
|
|
103
|
+
kimi_cli/ui/wire/jsonrpc.py,sha256=e89d25fc8f995b67ffc38ef3a0b36d39146d6da2973cbfb6c40f1304d58f8b89,3675
|
|
104
|
+
kimi_cli/ui/wire/protocol.py,sha256=fc02cdbfb0ff68a719eb476296cb9a642417f8ad9b46de76afc5eef09116df91,33
|
|
105
|
+
kimi_cli/utils/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
|
|
106
|
+
kimi_cli/utils/aiohttp.py,sha256=6257967133ea6bf9fb949ce5d88496e3dac144c85b315f085ea0c6d7fab49465,281
|
|
107
|
+
kimi_cli/utils/aioqueue.py,sha256=440a8cc5fef7bf181362f0bf487813c06f56a7ab8ae37c41e5aba89e92fdd32e,2152
|
|
108
|
+
kimi_cli/utils/broadcast.py,sha256=85bb2a64e8aef6d3dc156aff21d1560087ce50026d9c51e5c2856790078e7393,1152
|
|
109
|
+
kimi_cli/utils/changelog.py,sha256=4bdd5b7ee36f06206b862de702f974bb974b23d493a3669f09b9506213df5b11,3597
|
|
110
|
+
kimi_cli/utils/clipboard.py,sha256=66ff12971d06f7db7791237c83d82d63db18f82e81c50ae9a3f535f434616c13,248
|
|
111
|
+
kimi_cli/utils/datetime.py,sha256=dabc6b4ce89be0551a6710cb6a78724d64577855837097fdf74f2c238dcabdb2,1152
|
|
112
|
+
kimi_cli/utils/environment.py,sha256=32c643055b3b841e930d046e08666460db6cf1f37281d394798125e59a872a0a,1658
|
|
113
|
+
kimi_cli/utils/envvar.py,sha256=a44f2548a6db6e1ca9021f54553b4f0991b6dde67fc0fcac810f3907ed97ce6d,277
|
|
114
|
+
kimi_cli/utils/frontmatter.py,sha256=a1fd28a2e996118838c4e3d940f5e11bfd0aa41b74577a513fa7f0441163c32f,1186
|
|
115
|
+
kimi_cli/utils/logging.py,sha256=802b230d3bc29f156a2cb1dbb4db0d6f9983b54cf8aff30d2a79067e8a62e7b7,474
|
|
116
|
+
kimi_cli/utils/message.py,sha256=3941e8e108c7e7de567670de5112b33bc332512c333b502796d1f4eafcf8ce37,509
|
|
117
|
+
kimi_cli/utils/path.py,sha256=54f75a9362ab0a978492a223b1baf6ccf80acf6a6f172321cbdfd2fa03d7c3e7,3792
|
|
118
|
+
kimi_cli/utils/pyinstaller.py,sha256=abd98647fad5efe3215fa57b3e397e2c333ab3852bff32bed0b0987e9aa24d43,698
|
|
119
|
+
kimi_cli/utils/rich/__init__.py,sha256=2cb421c8491bd11aa2360119f88a4788337fc9884aba05d6400761a0e24c4c2b,909
|
|
120
|
+
kimi_cli/utils/rich/columns.py,sha256=a87363bf244b457e8142eee84423e8e48b1dedc78a14181518f47494e12f31b9,3909
|
|
121
|
+
kimi_cli/utils/rich/markdown.py,sha256=61ebb1fb1213c5f3c9d0bdaf4b9b2aab16f6a95c6a67f5a68a37ce470c00988f,33999
|
|
122
|
+
kimi_cli/utils/rich/markdown_sample.md,sha256=2b04c7ad3eadca4bff61e5ccf4d9f2bc400110867afbce190e671ef3ff28007c,1792
|
|
123
|
+
kimi_cli/utils/rich/markdown_sample_short.md,sha256=52f9186332bd41e0e84586c7025c3e69df69cf406add8e71d2413735aeb8aa24,17
|
|
124
|
+
kimi_cli/utils/signals.py,sha256=424ac90d6764e56a55e1fba8cd41f029c72e50257dc111093ef93ee8750a4cde,1423
|
|
125
|
+
kimi_cli/utils/slashcmd.py,sha256=5dbfc385460733d0b0b52a89fd5efcfb800ffad0e0b65f87006c95a9cff47b66,3680
|
|
126
|
+
kimi_cli/utils/string.py,sha256=6885d64e3d4577e2c3c341c025f91b16f79d2884545945c679081a33d02d1833,629
|
|
127
|
+
kimi_cli/utils/term.py,sha256=9ee4bd1021be86d8cc18c2e4c2f031d9bf673a7b2c4dd573e65813d821f08578,4588
|
|
128
|
+
kimi_cli/utils/typing.py,sha256=63fa3a15fcad540a748fbf741659408a9375926ccca6b278c4dbcf1d61899c7e,637
|
|
129
|
+
kimi_cli/wire/__init__.py,sha256=61860cb9c06ca8af6e814ff24baa8015723ed817b381fb3cf826f6e156569cb3,4505
|
|
130
|
+
kimi_cli/wire/serde.py,sha256=53c9d214f88f7ad1c307965c619e061be072540b33a54e2af4c688eb3ae4a0bd,1282
|
|
131
|
+
kimi_cli/wire/types.py,sha256=6deb6d3fc5bef05b5e5963b38571e90a5f431544c54f6cfb857aa34531d4e462,8233
|
|
132
|
+
kimi_cli-0.78.dist-info/WHEEL,sha256=70ab3c2925fe316809860cb034f99ba13c4b49819b339959274aab755cc084a8,78
|
|
133
|
+
kimi_cli-0.78.dist-info/entry_points.txt,sha256=1f61f3727d07a13d32014a312a93961771f222f580c7d607fb3ea6a5ae25e39c,71
|
|
134
|
+
kimi_cli-0.78.dist-info/METADATA,sha256=d9aee4f20f60607cd97133c56742157e01520f8918fbfd51bf7bddf4d1c50855,6259
|
|
135
|
+
kimi_cli-0.78.dist-info/RECORD,,
|