MoonshotAI / MoonshotAI/kimi-cli

An error seems caused by the ✨ emoji.

Open
#2,320 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
11.4k
Forks
1.3k
Avg merge
9h 47m
Merged PRs (30d)
2

Description

What version of Kimi Code CLI is running?

kimi, version 1.44.0

Which open platform/subscription were you using?

submit request

Which model were you using?

kimi-for-coding

What platform is your computer?

Linux 7.0.5-1.0.8.sr20260504-default x86_64 x86_64

What issue are you seeing?

Python raised an error.

What steps can reproduce the bug?

Just text hello and enter to submit the request.

What is the expected behavior?

╭────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ ▐█▛█▛█▌ Welcome to Kimi Code CLI! │
│ ▐█████▌ Send /help for help information. │
│ │
│ Directory: ~ │
│ Session: 791f5362-d0a6-434d-8607-6f024e1de7c9 │
│ Model: Kimi-k2.6 │
│ │
│ Tip: Spot a bug or have feedback? Type /feedback right in this session — every report makes Kimi better. │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✨ hello

Unexpected error: 'utf-8' codec can't encode character '\udca9' in position 9763: surrogates not allowed
Run kimi export and send the exported data to support for assistance. Please do not share the exported file publicly.

To resume this session: kimi -r 791f5362-d0a6-434d-8607-6f024e1de7c9
Traceback (most recent call last):
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 849, in kimi
switch_target, exit_code = asyncio.run(_reload_loop(session_id))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/miniconda3/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/home/sym/miniconda3/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/sym/miniconda3/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 764, in _reload_loop
last_session, exit_code = await _run(session_id, prefill_text=prefill_text)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 660, in _run
shell_ok = await instance.run_shell(prompt, prefill_text=prefill_text)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/app.py", line 770, in run_shell
return await shell.run(command)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 680, in run
await self.run_soul_command(user_input.content)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 859, in run_soul_command
await run_soul(
...<23 lines>...
)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/init.py", line 233, in run_soul
soul_task.result() # this will raise if any exception was raised in the run task
~~~~~~~~~~~~~~~~^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 652, in run
await self._turn(user_message)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 729, in _turn
return await self._agent_loop()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 917, in _agent_loop
step_outcome = await self._step()
^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 1119, in _step
result = await _kosong_step_with_retry()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 189, in async_wrapped
return await copy(fn, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 111, in call
do = await self.iter(retry_state=retry_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 153, in iter
result = await action(retry_state)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/_utils.py", line 99, in inner
return call(*args, **kwargs)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/init.py", line 400, in
self._add_action_func(lambda rs: rs.outcome.result())
~~~~~~~~~~~~~~~~~^^
File "/home/sym/miniconda3/lib/python3.13/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "/home/sym/miniconda3/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 114, in call
result = await fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 1111, in _kosong_step_with_retry
return await self._run_with_connection_recovery(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 1417, in _run_with_connection_recovery
return await operation()
^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 1088, in _run_step_once
return await kosong.step(
^^^^^^^^^^^^^^^^^^
...<6 lines>...
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/init.py", line 158, in step
result = await generate(
^^^^^^^^^^^^^^^
...<6 lines>...
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/_generate.py", line 53, in generate
stream = await chat_provider.generate(system_prompt, tools, history)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/chat_provider/kimi.py", line 170, in generate
response = await self.client.chat.completions.create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<6 lines>...
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/openai/resources/chat/completions/completions.py", line 2678, in create
return await self._post(
^^^^^^^^^^^^^^^^^
...<49 lines>...
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/openai/_base_client.py", line 1797, in post
return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/openai/_base_client.py", line 1518, in request
request = self._build_request(options, retries_taken=retries_taken)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/openai/_base_client.py", line 547, in _build_request
return self._client.build_request( # pyright: ignore[reportUnknownMemberType]
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
headers=headers,
^^^^^^^^^^^^^^^^
...<8 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_client.py", line 378, in build_request
return Request(
method,
...<8 lines>...
extensions=extensions,
)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_models.py", line 408, in init
headers, stream = encode_request(
~~~~~~~~~~~~~~^
content=content,
^^^^^^^^^^^^^^^^
...<7 lines>...
),
^^
)
^
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_content.py", line 216, in encode_request
return encode_json(json)
File "/home/sym/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_content.py", line 179, in encode_json
).encode("utf-8")
~~~~~~^^^^^^^^^
UnicodeEncodeError: 'utf-8' codec can't encode character '\udca9' in position 9763: surrogates not allowed

Additional information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with kimi_cli/soul/kimisoul.py at _turn, _agent_loop, and _step, then trace the request through kosong/chat_provider/kimi.py at generate. Reproduce by submitting text containing the ✨ emoji on Kimi Code CLI 1.44.0 and follow the traceback to the request-building boundary. Done means the same input no longer raises the UTF-8 surrogate UnicodeEncodeError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.