kimi-cli 0.40__py3-none-any.whl → 0.41__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.

Files changed (48) hide show
  1. kimi_cli/CHANGELOG.md +12 -0
  2. kimi_cli/__init__.py +18 -280
  3. kimi_cli/agents/koder/system.md +1 -1
  4. kimi_cli/agentspec.py +104 -0
  5. kimi_cli/cli.py +235 -0
  6. kimi_cli/constant.py +4 -0
  7. kimi_cli/llm.py +69 -0
  8. kimi_cli/prompts/__init__.py +2 -2
  9. kimi_cli/soul/__init__.py +102 -6
  10. kimi_cli/soul/agent.py +157 -0
  11. kimi_cli/soul/approval.py +1 -1
  12. kimi_cli/soul/compaction.py +4 -4
  13. kimi_cli/soul/context.py +5 -0
  14. kimi_cli/soul/globals.py +92 -0
  15. kimi_cli/soul/kimisoul.py +21 -26
  16. kimi_cli/tools/dmail/__init__.py +1 -1
  17. kimi_cli/tools/file/glob.md +1 -1
  18. kimi_cli/tools/file/glob.py +2 -2
  19. kimi_cli/tools/file/grep.py +1 -1
  20. kimi_cli/tools/file/patch.py +2 -2
  21. kimi_cli/tools/file/read.py +1 -1
  22. kimi_cli/tools/file/replace.py +2 -2
  23. kimi_cli/tools/file/write.py +2 -2
  24. kimi_cli/tools/task/__init__.py +23 -22
  25. kimi_cli/tools/task/task.md +1 -1
  26. kimi_cli/tools/todo/__init__.py +1 -1
  27. kimi_cli/tools/utils.py +1 -1
  28. kimi_cli/tools/web/search.py +2 -2
  29. kimi_cli/ui/__init__.py +0 -69
  30. kimi_cli/ui/acp/__init__.py +8 -9
  31. kimi_cli/ui/print/__init__.py +17 -35
  32. kimi_cli/ui/shell/__init__.py +5 -13
  33. kimi_cli/ui/shell/liveview.py +1 -1
  34. kimi_cli/ui/shell/metacmd.py +3 -3
  35. kimi_cli/ui/shell/setup.py +5 -5
  36. kimi_cli/ui/shell/update.py +2 -2
  37. kimi_cli/ui/shell/visualize.py +10 -7
  38. kimi_cli/utils/changelog.py +3 -1
  39. kimi_cli/wire/__init__.py +57 -0
  40. kimi_cli/{soul/wire.py → wire/message.py} +4 -39
  41. {kimi_cli-0.40.dist-info → kimi_cli-0.41.dist-info}/METADATA +34 -1
  42. kimi_cli-0.41.dist-info/RECORD +85 -0
  43. kimi_cli-0.41.dist-info/entry_points.txt +3 -0
  44. kimi_cli/agent.py +0 -261
  45. kimi_cli/utils/provider.py +0 -70
  46. kimi_cli-0.40.dist-info/RECORD +0 -81
  47. kimi_cli-0.40.dist-info/entry_points.txt +0 -3
  48. {kimi_cli-0.40.dist-info → kimi_cli-0.41.dist-info}/WHEEL +0 -0
kimi_cli/agent.py DELETED
@@ -1,261 +0,0 @@
1
- import importlib
2
- import inspect
3
- import string
4
- from pathlib import Path
5
- from typing import Any, NamedTuple
6
-
7
- import fastmcp
8
- import yaml
9
- from kosong.tooling import Toolset
10
- from kosong.tooling.simple import ToolType
11
- from pydantic import BaseModel, Field
12
-
13
- from kimi_cli.config import Config
14
- from kimi_cli.llm import LLM
15
- from kimi_cli.metadata import Session
16
- from kimi_cli.soul.approval import Approval
17
- from kimi_cli.soul.denwarenji import DenwaRenji
18
- from kimi_cli.soul.toolset import CustomToolset
19
- from kimi_cli.tools.mcp import MCPTool
20
- from kimi_cli.utils.logging import logger
21
-
22
-
23
- class AgentSpec(BaseModel):
24
- """Agent specification."""
25
-
26
- extend: str | None = Field(default=None, description="Agent file to extend")
27
- name: str | None = Field(default=None, description="Agent name") # required
28
- system_prompt_path: Path | None = Field(
29
- default=None, description="System prompt path"
30
- ) # required
31
- system_prompt_args: dict[str, str] = Field(
32
- default_factory=dict, description="System prompt arguments"
33
- )
34
- tools: list[str] | None = Field(default=None, description="Tools") # required
35
- exclude_tools: list[str] | None = Field(default=None, description="Tools to exclude")
36
- subagents: dict[str, "SubagentSpec"] | None = Field(default=None, description="Subagents")
37
-
38
-
39
- class SubagentSpec(BaseModel):
40
- """Subagent specification."""
41
-
42
- path: Path = Field(description="Subagent file path")
43
- description: str = Field(description="Subagent description")
44
-
45
-
46
- class BuiltinSystemPromptArgs(NamedTuple):
47
- """Builtin system prompt arguments."""
48
-
49
- KIMI_NOW: str
50
- """The current datetime."""
51
- KIMI_WORK_DIR: Path
52
- """The current working directory."""
53
- KIMI_WORK_DIR_LS: str
54
- """The `ls -la` output of current working directory."""
55
- KIMI_AGENTS_MD: str # TODO: move to first message from system prompt
56
- """The content of AGENTS.md."""
57
-
58
-
59
- class AgentGlobals(NamedTuple):
60
- """Agent globals."""
61
-
62
- config: Config
63
- llm: LLM | None
64
- builtin_args: BuiltinSystemPromptArgs
65
- denwa_renji: DenwaRenji
66
- session: Session
67
- approval: Approval
68
-
69
-
70
- class Agent(NamedTuple):
71
- """The loaded agent."""
72
-
73
- name: str
74
- system_prompt: str
75
- toolset: Toolset
76
-
77
-
78
- def get_agents_dir() -> Path:
79
- return Path(__file__).parent / "agents"
80
-
81
-
82
- DEFAULT_AGENT_FILE = get_agents_dir() / "koder" / "agent.yaml"
83
-
84
-
85
- async def load_agent_with_mcp(
86
- agent_file: Path,
87
- globals_: AgentGlobals,
88
- mcp_configs: list[dict[str, Any]],
89
- ) -> Agent:
90
- agent = load_agent(agent_file, globals_)
91
- assert isinstance(agent.toolset, CustomToolset)
92
- if mcp_configs:
93
- await _load_mcp_tools(agent.toolset, mcp_configs)
94
- return agent
95
-
96
-
97
- def load_agent(
98
- agent_file: Path,
99
- globals_: AgentGlobals,
100
- ) -> Agent:
101
- """
102
- Load agent from specification file.
103
-
104
- Raises:
105
- ValueError: If the agent spec is not valid.
106
- """
107
- agent_spec = _load_agent_spec(agent_file)
108
- assert agent_spec.extend is None, "agent extension should be recursively resolved"
109
- if agent_spec.name is None:
110
- raise ValueError("Agent name is required")
111
- if agent_spec.system_prompt_path is None:
112
- raise ValueError("System prompt path is required")
113
- if agent_spec.tools is None:
114
- raise ValueError("Tools are required")
115
-
116
- system_prompt = _load_system_prompt(
117
- agent_spec.system_prompt_path, agent_spec.system_prompt_args, globals_.builtin_args
118
- )
119
-
120
- tool_deps = {
121
- AgentSpec: agent_spec,
122
- AgentGlobals: globals_,
123
- Config: globals_.config,
124
- BuiltinSystemPromptArgs: globals_.builtin_args,
125
- Session: globals_.session,
126
- DenwaRenji: globals_.denwa_renji,
127
- Approval: globals_.approval,
128
- }
129
- tools = agent_spec.tools
130
- if agent_spec.exclude_tools:
131
- logger.debug("Excluding tools: {tools}", tools=agent_spec.exclude_tools)
132
- tools = [tool for tool in tools if tool not in agent_spec.exclude_tools]
133
- toolset = CustomToolset()
134
- bad_tools = _load_tools(toolset, tools, tool_deps)
135
- if bad_tools:
136
- raise ValueError(f"Invalid tools: {bad_tools}")
137
-
138
- return Agent(
139
- name=agent_spec.name,
140
- system_prompt=system_prompt,
141
- toolset=toolset,
142
- )
143
-
144
-
145
- def _load_agent_spec(agent_file: Path) -> AgentSpec:
146
- assert agent_file.is_file(), "expect agent file to exist"
147
- with open(agent_file, encoding="utf-8") as f:
148
- data: dict[str, Any] = yaml.safe_load(f)
149
-
150
- version = data.get("version", 1)
151
- if version != 1:
152
- raise ValueError(f"Unsupported agent spec version: {version}")
153
-
154
- agent_spec = AgentSpec(**data.get("agent", {}))
155
- if agent_spec.system_prompt_path is not None:
156
- agent_spec.system_prompt_path = agent_file.parent / agent_spec.system_prompt_path
157
- if agent_spec.subagents is not None:
158
- for v in agent_spec.subagents.values():
159
- v.path = agent_file.parent / v.path
160
- if agent_spec.extend:
161
- if agent_spec.extend == "default":
162
- base_agent_file = DEFAULT_AGENT_FILE
163
- else:
164
- base_agent_file = agent_file.parent / agent_spec.extend
165
- base_agent_spec = _load_agent_spec(base_agent_file)
166
- if agent_spec.name is not None:
167
- base_agent_spec.name = agent_spec.name
168
- if agent_spec.system_prompt_path is not None:
169
- base_agent_spec.system_prompt_path = agent_spec.system_prompt_path
170
- for k, v in agent_spec.system_prompt_args.items():
171
- base_agent_spec.system_prompt_args[k] = v
172
- if agent_spec.tools is not None:
173
- base_agent_spec.tools = agent_spec.tools
174
- if agent_spec.exclude_tools is not None:
175
- base_agent_spec.exclude_tools = agent_spec.exclude_tools
176
- if agent_spec.subagents is not None:
177
- base_agent_spec.subagents = agent_spec.subagents
178
- agent_spec = base_agent_spec
179
- return agent_spec
180
-
181
-
182
- def _load_system_prompt(
183
- path: Path, args: dict[str, str], builtin_args: BuiltinSystemPromptArgs
184
- ) -> str:
185
- system_prompt = path.read_text().strip()
186
- logger.debug(
187
- "Substituting system prompt with builtin args: {builtin_args}, spec args: {spec_args}",
188
- builtin_args=builtin_args,
189
- spec_args=args,
190
- )
191
- return string.Template(system_prompt).substitute(builtin_args._asdict(), **args)
192
-
193
-
194
- def _load_tools(
195
- toolset: CustomToolset,
196
- tool_paths: list[str],
197
- dependencies: dict[type[Any], Any],
198
- ) -> list[str]:
199
- bad_tools = []
200
- for tool_path in tool_paths:
201
- tool = _load_tool(tool_path, dependencies)
202
- if tool:
203
- toolset += tool
204
- else:
205
- bad_tools.append(tool_path)
206
- logger.debug("Loaded tools: {tools}", tools=toolset.tools)
207
- if bad_tools:
208
- logger.error("Bad tools: {bad_tools}", bad_tools=bad_tools)
209
- return bad_tools
210
-
211
-
212
- def _load_tool(tool_path: str, dependencies: dict[type[Any], Any]) -> ToolType | None:
213
- logger.debug("Loading tool: {tool_path}", tool_path=tool_path)
214
- module_name, class_name = tool_path.rsplit(":", 1)
215
- try:
216
- module = importlib.import_module(module_name)
217
- except ImportError:
218
- return None
219
- cls = getattr(module, class_name, None)
220
- if cls is None:
221
- return None
222
- args = []
223
- for param in inspect.signature(cls).parameters.values():
224
- if param.kind == inspect.Parameter.KEYWORD_ONLY:
225
- # once we encounter a keyword-only parameter, we stop injecting dependencies
226
- break
227
- # all positional parameters should be dependencies to be injected
228
- if param.annotation not in dependencies:
229
- raise ValueError(f"Tool dependency not found: {param.annotation}")
230
- args.append(dependencies[param.annotation])
231
- return cls(*args)
232
-
233
-
234
- async def _load_mcp_tools(
235
- toolset: CustomToolset,
236
- mcp_configs: list[dict[str, Any]],
237
- ):
238
- """
239
- Raises:
240
- ValueError: If the MCP config is not valid.
241
- RuntimeError: If the MCP server cannot be connected.
242
- """
243
- for mcp_config in mcp_configs:
244
- client = fastmcp.Client(mcp_config)
245
- async with client:
246
- for tool in await client.list_tools():
247
- toolset += MCPTool(tool, client)
248
- return toolset
249
-
250
-
251
- def load_agents_md(work_dir: Path) -> str | None:
252
- paths = [
253
- work_dir / "AGENTS.md",
254
- work_dir / "agents.md",
255
- ]
256
- for path in paths:
257
- if path.is_file():
258
- logger.debug("Loaded agents.md: {path}", path=path)
259
- return path.read_text().strip()
260
- logger.debug("No AGENTS.md found")
261
- return None
@@ -1,70 +0,0 @@
1
- import os
2
-
3
- from kosong.chat_provider import ChaosChatProvider, Kimi, OpenAILegacy
4
- from kosong.chat_provider.chaos import ChaosConfig
5
- from pydantic import SecretStr
6
-
7
- import kimi_cli
8
- from kimi_cli.config import LLMModel, LLMProvider
9
- from kimi_cli.llm import LLM
10
-
11
-
12
- def augment_provider_with_env_vars(provider: LLMProvider, model: LLMModel):
13
- match provider.type:
14
- case "kimi":
15
- if base_url := os.getenv("KIMI_BASE_URL"):
16
- provider.base_url = base_url
17
- if api_key := os.getenv("KIMI_API_KEY"):
18
- provider.api_key = SecretStr(api_key)
19
- if model_name := os.getenv("KIMI_MODEL_NAME"):
20
- model.model = model_name
21
- if max_context_size := os.getenv("KIMI_MODEL_MAX_CONTEXT_SIZE"):
22
- model.max_context_size = int(max_context_size)
23
- case "openai_legacy":
24
- if base_url := os.getenv("OPENAI_BASE_URL"):
25
- provider.base_url = base_url
26
- if api_key := os.getenv("OPENAI_API_KEY"):
27
- provider.api_key = SecretStr(api_key)
28
- case _:
29
- pass
30
-
31
-
32
- def create_llm(
33
- provider: LLMProvider,
34
- model: LLMModel,
35
- *,
36
- stream: bool = True,
37
- session_id: str | None = None,
38
- ) -> LLM:
39
- match provider.type:
40
- case "kimi":
41
- chat_provider = Kimi(
42
- model=model.model,
43
- base_url=provider.base_url,
44
- api_key=provider.api_key.get_secret_value(),
45
- stream=stream,
46
- default_headers={
47
- "User-Agent": kimi_cli.USER_AGENT,
48
- },
49
- )
50
- if session_id:
51
- chat_provider = chat_provider.with_generation_kwargs(prompt_cache_key=session_id)
52
- case "openai_legacy":
53
- chat_provider = OpenAILegacy(
54
- model=model.model,
55
- base_url=provider.base_url,
56
- api_key=provider.api_key.get_secret_value(),
57
- stream=stream,
58
- )
59
- case "_chaos":
60
- chat_provider = ChaosChatProvider(
61
- model=model.model,
62
- base_url=provider.base_url,
63
- api_key=provider.api_key.get_secret_value(),
64
- chaos_config=ChaosConfig(
65
- error_probability=0.8,
66
- error_types=[429, 500, 503],
67
- ),
68
- )
69
-
70
- return LLM(chat_provider=chat_provider, max_context_size=model.max_context_size)
@@ -1,81 +0,0 @@
1
- kimi_cli/CHANGELOG.md,sha256=aa5908bc14e277c574a399bbb47d636fd5a019e26a748c7015db35cc08fc74a0,7377
2
- kimi_cli/__init__.py,sha256=80ff28778a1d9c1ee9d43be6f4e673fda3b44a0ec1aadc272cb859776f152f0a,11390
3
- kimi_cli/agent.py,sha256=46fc0293489cc1d5daaa9be6b29c8a17bbf8c5a552fd437941eb1f0ae1335a3a,8528
4
- kimi_cli/agents/koder/README.md,sha256=2d9a987110652915cd1a4356caec3eef9380479ce36906c377a1ed177d46690f,96
5
- kimi_cli/agents/koder/agent.yaml,sha256=f1c5c585e8e0a52419c820d56a4aa928eebdf7bb21f0907d6c02d4ea1c8909d7,709
6
- kimi_cli/agents/koder/sub.yaml,sha256=e0c1ea34fdb04b0d6dc635709f0f130aff25d7f9fb97e238470143c8145be251,634
7
- kimi_cli/agents/koder/system.md,sha256=27ef94b525e846f6a8e55222042b6ca8eb8d2663ff7009d7b07c50ed8798bb02,4999
8
- kimi_cli/config.py,sha256=37dd65f2aa03c051dc92d09d9c110361ee35bb8dc94eced2c1e8bf01e3918353,4157
9
- kimi_cli/llm.py,sha256=e4c4a184ce7b78fb60ce29f7b967676dd338131ab05f5ea7c3cb7b3e7c6a64d4,165
10
- kimi_cli/metadata.py,sha256=70c01da57529a9f585c0c5f3dd642f92ef16c4e49a107d8da838fa6d4746546a,3933
11
- kimi_cli/prompts/__init__.py,sha256=56bee1833b9555c71f50d0def3de7fb6d78e018826d925686ce9295815edb666,142
12
- kimi_cli/prompts/compact.md,sha256=6655bd7d8270b24d8f97b51ef7c471cf71d686c56f8ec9a5cc9e47caa3aae87c,1877
13
- kimi_cli/prompts/init.md,sha256=d271a0df6dd7b330ffec4f645a74c0392dafc1b3bfc1e3f2a77624e96cf6abbe,1380
14
- kimi_cli/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
15
- kimi_cli/share.py,sha256=4292df7f44177419c45c772a933b5f36e2b7533f8cef9842629a438bc7856dc0,204
16
- kimi_cli/soul/__init__.py,sha256=058102a5dfaa73fab1f78e3e3f9d1a039a47410e197fef6a4482f2b2531b98b0,1561
17
- kimi_cli/soul/approval.py,sha256=1887c44b9e16a30a9ad9418931e25216c4273080d4259b43118110187c346ba7,2549
18
- kimi_cli/soul/compaction.py,sha256=967912406798835b1eb91465e82384560b24fe9cfe3d95e6400909919a286d0d,3544
19
- kimi_cli/soul/context.py,sha256=541759a65f8f87a3424a6da160ffb2043046e6f6b714124d94d82a77635df9bc,5855
20
- kimi_cli/soul/denwarenji.py,sha256=66b95f052a1fa844e2347972d34e1916a7be24d3e493701b451f5380b0375c9f,1384
21
- kimi_cli/soul/kimisoul.py,sha256=423e2ec32afb8e04f84114c74244f47e4860f609ab2c64c4d9239dd08f41d249,11793
22
- kimi_cli/soul/message.py,sha256=b0fce0a0901fad38f2778b85f82427d4a42906891893a643e537a9268eb6e190,2529
23
- kimi_cli/soul/toolset.py,sha256=60166d89ef0efac690fa6866e88afe70fbe80ad862ba2524d70ddf657a730d14,744
24
- kimi_cli/soul/wire.py,sha256=c69a1e45c584b8a43eddf2230f38b414ce7ffb5b43ad18ff822e0cb36e1b42a6,3367
25
- kimi_cli/tools/__init__.py,sha256=4d612402814eede7182e0a55e7dd21c4532b5dd44700dc744763a8308c2f74f8,3280
26
- kimi_cli/tools/bash/__init__.py,sha256=de21b19c714bda53f6c89e3348c4c82fb4278040130fed1d261b3ab203054e8c,3028
27
- kimi_cli/tools/bash/bash.md,sha256=5d9cc54b3718097951340b0a737c8e1fa308341fd2c4ebd121be94de31dd5f73,2348
28
- kimi_cli/tools/dmail/__init__.py,sha256=76b2175bc4acd307db0f761b995a9c2cd8ac12f25296fab14707adb9a1baa13b,1261
29
- kimi_cli/tools/dmail/dmail.md,sha256=0d18cae387dd52127ddc99e296253c09e68ccba5f343153c0adbe77d7586e759,1912
30
- kimi_cli/tools/file/__init__.py,sha256=1516fb4c71097f9c14b605e7b9a1872af8786bdcb48323d1fa83bb1419436abb,546
31
- kimi_cli/tools/file/glob.md,sha256=6aab77c357c203fb2d5cc2092375ce860941e3f7343b59e6ef264f42255163fa,1401
32
- kimi_cli/tools/file/glob.py,sha256=fabd6fbc1480a52d07c5ff3d570e3fb86d455438e97a9970dc44a0e7ff434101,5405
33
- kimi_cli/tools/file/grep.md,sha256=12353db42cf3b5d9d91ac7c0f0b9c2a732e8b050c23a78f4e668db823cca4d50,245
34
- kimi_cli/tools/file/grep.py,sha256=b882ffc19cd57f70d8a898abeb5854ff297b4777e64c0cd529688134dba7dd53,9771
35
- kimi_cli/tools/file/patch.md,sha256=f9edbed6c6a03bf7448a51acc1f42622395fd7f1674a814e9a3b2302d3b7b92e,404
36
- kimi_cli/tools/file/patch.py,sha256=09e0a6905e27246d83595557dd8867f53a68b158854cdb3b0b8cd23c255a1926,5205
37
- kimi_cli/tools/file/read.md,sha256=4c2d83e557daadc0612fb1a613e252b2c8e4df7ae57e6db094e9e75e994cb23b,1066
38
- kimi_cli/tools/file/read.py,sha256=c1824f0e7a56a065808414580663ba4363fcef0d374ba5ea2e8848ac411b5a5d,5061
39
- kimi_cli/tools/file/replace.md,sha256=f429f263fa580f2f6107907a33ba8800dcdbd4fc1d9ff8dc4f858bd76ec6bbc6,267
40
- kimi_cli/tools/file/replace.py,sha256=37582cd51534f6b35c08144ec6558906545140512172e204e6b5937e423adbbe,5181
41
- kimi_cli/tools/file/write.md,sha256=f37b0f4742da57797ec4dd29fbd4fdc9b6617c6be644724a3b16d651c6129cec,324
42
- kimi_cli/tools/file/write.py,sha256=6c3b04b31422f95ac06ba4afddf3899ed1c635119082dea57d6ef7315b2e0cd8,4355
43
- kimi_cli/tools/mcp.py,sha256=12f63c9ee5b82a5b0f23daca0b5ce4ceb3a6190ce5b553ee24e499699521e426,3620
44
- kimi_cli/tools/task/__init__.py,sha256=82b1d73280ba3b616c2a0b3432a854e08786289002abc8233f3186b8f3bcd94f,5915
45
- kimi_cli/tools/task/task.md,sha256=eaac7458676271423e53862bb27906ed8df3b86c767abd69e28a5d52f9eecdbf,2280
46
- kimi_cli/tools/test.py,sha256=c094a91a2d1a5259e192f1147facd5eebd5e5c413787fce167db90e4b41b5119,1442
47
- kimi_cli/tools/think/__init__.py,sha256=31b06088e2404cb09d42e0acec97c185e4861890bb687f28b41f39cea01b5733,603
48
- kimi_cli/tools/think/think.md,sha256=ab40d4de1d8adb208384a4ab548e35776283cb0a681c6e208b041fc40ccba724,200
49
- kimi_cli/tools/todo/__init__.py,sha256=a21948c8635c42743e99651297ba20430c82e75a5f862e1952143987811ac009,881
50
- kimi_cli/tools/todo/set_todo_list.md,sha256=89509503f43ab321d440a04dc133ddc3e29859f68907a42c39e6093f7bfd485c,1654
51
- kimi_cli/tools/utils.py,sha256=5331f57c95df817285a5a1ea2921bee3b0bcabf6fc50eb4abcb6587839323443,4580
52
- kimi_cli/tools/web/__init__.py,sha256=e13108c598828a8a05907a7a821e7ac92f5d63572bb9866dc12ca026094acb42,95
53
- kimi_cli/tools/web/fetch.md,sha256=56d00bd93b4e379c4f7efe445fce963eb26b8d20f85d4c19097ba6f33bd0019a,67
54
- kimi_cli/tools/web/fetch.py,sha256=66448121d27d67f75b977c32244c721c2ccff1b2e097c2fe6717e66018d8f747,3183
55
- kimi_cli/tools/web/search.md,sha256=24049f9e90d37083e0fc78b8b2e3a5f6fadf09bea00f36712b235d1212a2f532,146
56
- kimi_cli/tools/web/search.py,sha256=a89da8d843cca1a18855157832b3c08f38a4216f42e616691f856265de3b3b8a,4331
57
- kimi_cli/ui/__init__.py,sha256=127928de433021e42fdaab56188457896283cd5e188c7c0f21c2eb718e040495,2386
58
- kimi_cli/ui/acp/__init__.py,sha256=e5a93c3bbbb919fae41cedd829dbe1363ebcb56feb6413c47071692876007d52,17349
59
- kimi_cli/ui/print/__init__.py,sha256=9ea2933a00959eb19a07ed1abb3d1aff0d3dc3ee7e393271125fe210a085ecc5,6734
60
- kimi_cli/ui/shell/__init__.py,sha256=fe608006829c88255d8ee040e2f0823e4d4a4cafea716ad7e35f23db0cdacc4e,10808
61
- kimi_cli/ui/shell/console.py,sha256=bcbf7efd214cba3d2259f2a2c1842250cde96d49e4f9f1e0b60273cf1c366be3,842
62
- kimi_cli/ui/shell/debug.py,sha256=cd4e7259c83f099b5c6519713be5306580f30d3fa4944e07916d4468e960c9c7,5562
63
- kimi_cli/ui/shell/keyboard.py,sha256=8735c00363484263681adf885baec824e5f76cb4084bd024651e80190926edc5,3035
64
- kimi_cli/ui/shell/liveview.py,sha256=627cdb2110586eac7ee595030633d019e19753c71cb6d57b618193535ad69054,14236
65
- kimi_cli/ui/shell/metacmd.py,sha256=bb24538dbe451b14427697691275ec7d6ffd2e4a724cdc2f43b726ea7d71d744,7778
66
- kimi_cli/ui/shell/prompt.py,sha256=f85446d77b998e2594380c29000b06614e3fae8537db46ec96fc5ddc25490b45,19096
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
71
- kimi_cli/utils/changelog.py,sha256=9d9ae05f32e90a53d40626fca437b9a10e8bec5b3e63e9348135969dcab4380e,3380
72
- kimi_cli/utils/logging.py,sha256=129298ac214ecd8d913c3431cc05d754f9c4c8c4042c458618bf9e8ddebdb763,399
73
- kimi_cli/utils/message.py,sha256=ca8f8d3c7dc6d4fce938d1cfe8a7a7343e39ce1e2f0c7b2d76d838edc7d9f187,304
74
- kimi_cli/utils/path.py,sha256=fdd4fc08999ddc7c610f884b4ba8d27932248b9ed06b5eb4139519edd00b3f75,687
75
- kimi_cli/utils/provider.py,sha256=4e4facd7661b62331a8ded0cfaf588e238f7561979b3735d48de691c895aea29,2466
76
- kimi_cli/utils/pyinstaller.py,sha256=e5d709d0490ef8645bbed2d2363920c59f25bd17c04f471bf4a8c0fa2ebe1801,581
77
- kimi_cli/utils/string.py,sha256=f8a842ee014b9023d4045392f33ca6f576f5238ad3d40cb6df071a3ce9f5ed9c,365
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,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- kimi = kimi_cli:main
3
-