Skip to content

输入任何字符都会出现 Unexpected error: 'utf-8' codec can't encode characters in position 9885-9886: surrogates not allowed #994

@wrenchzc

Description

@wrenchzc

What version of Kimi Code CLI is running?

kimi, version 1.8.0 从1.5升级到1.6开始就有

Which open platform/subscription were you using?

kimi code

Which model were you using?

No response

What platform is your computer?

ubuntu 22.04

What issue are you seeing?

026-02-06 11:14:26.089 | INFO | kimi_cli.ui.shell:run_soul_command:220 - Running soul with user input: [TextPart(type='text', text='你好')]
2026-02-06 11:14:26.185 | ERROR | kimi_cli.ui.shell:run_soul_command:268 - Unexpected error:
Traceback (most recent call last):

File "/home/zhangchi/.local/bin/kimi-cli", line 10, in
sys.exit(cli())
│ │ └ <typer.main.Typer object at 0x7b14af5afa80>
│ └
└ <module 'sys' (built-in)>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/main.py", line 319, in call
return get_command(self)(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <typer.main.Typer object at 0x7b14af5afa80>
└ <function get_command at 0x7b14af6a7740>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1485, in call
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function TyperGroup.main at 0x7b14af697880>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/core.py", line 814, in main
return _main(
└ <function main at 0x7b14af6963e0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/core.py", line 190, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7b14af57f8c0>
│ └ <function Group.invoke at 0x7b14af627ce0>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1851, in invoke
rv = super().invoke(ctx)
└ <click.core.Context object at 0x7b14af57f8c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'version': None, 'verbose': False, 'debug': False, 'local_work_dir': None, 'session_id': None, 'continue
': False, 'config_s...
│ │ │ │ └ <click.core.Context object at 0x7b14af57f8c0>
│ │ │ └ <function kimi at 0x7b14af482d40>
│ │ └
│ └ <function Context.invoke at 0x7b14af625d00>
└ <click.core.Context object at 0x7b14af57f8c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
│ │ └ {'version': None, 'verbose': False, 'debug': False, 'local_work_dir': None, 'session_id': None, 'continue
': False, 'config_s...
│ └ ()
└ <function kimi at 0x7b14af482d40>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/main.py", line 706, in wrapper
return callback(**use_params)
│ └ {'ctx': <click.core.Context object at 0x7b14af57f8c0>, 'version': None, 'verbose': False, 'debug': False, 'local_work_dir': N...
└ <function kimi at 0x7b14af432200>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 574, in kimi
switch_to_web = asyncio.run(_reload_loop(session_id))
│ │ │ └ None
│ │ └ <function kimi.._reload_loop at 0x7b14ad205bc0>
│ └ <function run at 0x7b14af996c00>
└ <module 'asyncio' from '/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/_init...
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
│ │ └ <coroutine object kimi.._reload_loop at 0x7b14ad199be0>
│ └ <function Runner.run at 0x7b14af81d3a0>
└ <asyncio.runners.Runner object at 0x7b14ad210050>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<kimi.._reload_loop() running at /home/zhangchi/.local/share/uv/tools/kimi-cli/lib/p...
│ │ └ <function BaseEventLoop.run_until_complete at 0x7b14af816de0>
│ └ <_UnixSelectorEventLoop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x7b14ad210050>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py", line 712, in run_until_complete
self.run_forever()
│ └ <function BaseEventLoop.run_forever at 0x7b14af816d40>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py", line 683, in run_forever
self._run_once()
│ └ <function BaseEventLoop._run_once at 0x7b14af81cb80>
└ <_UnixSelectorEventLoop running=True closed=False debug=False>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py", line 2050, in _run_once
handle._run()
│ └ <function Handle._run at 0x7b14af942fc0>
└ <Handle Task.task_wakeup()>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/events.py", line 89, in _run
self._context.run(self._callback, *self._args)
│ │ │ │ │ └ <member '_args' of 'Handle' objects>
│ │ │ │ └ <Handle Task.task_wakeup()>
│ │ │ └ <member '_callback' of 'Handle' objects>
│ │ └ <Handle Task.task_wakeup()>
│ └ <member '_context' of 'Handle' objects>
└ <Handle Task.task_wakeup()>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 559, in _reload_loop
last_session, succeeded = await _run(session_id)
│ └ None
└ <function kimi.._run at 0x7b14ad205940>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 502, in _run
succeeded = await instance.run_shell(prompt)
│ │ └ None
│ └ <function KimiCLI.run_shell at 0x7b14ad204860>
└ <kimi_cli.app.KimiCLI object at 0x7b14a8dc3c50>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/app.py", line 324, in run_shell
return await shell.run(command)
│ │ └ None
│ └ <function Shell.run at 0x7b14a8d2c540>
└ <kimi_cli.ui.shell.Shell object at 0x7b14a8dc3d90>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 111, in run
await self.run_soul_command(user_input.content)
│ │ │ └ [TextPart(type='text', text='你好')]
│ │ └ UserInput(mode=<PromptMode.AGENT: 'agent'>, command='你好', content=[TextPart(type='text', text='你好')])
│ └ <function Shell.run_soul_command at 0x7b14a8d2c720>
└ <kimi_cli.ui.shell.Shell object at 0x7b14a8dc3d90>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 232, in run_soul_command
await run_soul(
└ <function run_soul at 0x7b14adf916c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/init.py", line 169, in run_soul
soul_task.result() # this will raise if any exception was raised in the run task
│ └ <method 'result' of '_asyncio.Task' objects>
└ <Task finished name='Task-314' coro=<KimiSoul.run() done, defined at /home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 206, in run
await self._turn(user_message)
│ │ └ Message(role='user', name=None, content=[TextPart(type='text', text='你好')], tool_calls=None, tool_call_id=None, partial=None)
│ └ <function KimiSoul._turn at 0x7b14ad1e3880>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 220, in _turn
return await self._agent_loop()
│ └ <function KimiSoul._agent_loop at 0x7b14ad1e3ba0>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 349, in _agent_loop
step_outcome = await self._step()
│ └ <function KimiSoul._step at 0x7b14ad1e3c40>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 406, in _step
result = await _kosong_step_with_retry()
└ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a82225c0>
File "/home/zhangchi/.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)
│ │ │ └ {}
│ │ └ ()
│ └ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a83e2e80>
└ <AsyncRetrying object at 0x7b14a83f5950 (stop=<tenacity.stop.stop_after_attempt object at 0x7b14a8405010>, wait=<tenacity.wai...
File "/home/zhangchi/.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)
│ │ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
│ └ <function AsyncRetrying.iter at 0x7b14ad1bff60>
└ <AsyncRetrying object at 0x7b14a83f5950 (stop=<tenacity.stop.stop_after_attempt object at 0x7b14a8405010>, wait=<tenacity.wai...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 153, in iter
result = await action(retry_state)
│ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
└ <function wrap_to_async_func..inner at 0x7b14a8220860>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/_utils.py", line 99, in inner
return call(*args, **kwargs)
│ │ └ {}
│ └ (<RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't enco...
└ <function BaseRetrying._post_retry_check_actions.. at 0x7b14a82236a0>
File "/home/zhangchi/.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())
│ │ │ └ <function Future.result at 0x7b14afa79da0>
│ │ └ <Future at 0x7b14a8405be0 state=finished raised UnicodeEncodeError>
│ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
└ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
└ None
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
└ None
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 114, in call
result = await fn(*args, **kwargs)
│ │ └ {}
│ └ ()
└ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a83e2e80>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 397, in _kosong_step_with_retry
return await kosong.step(
│ └ <function step at 0x7b14ae21c2c0>
└ <module 'kosong' from '/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/init.py'>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/init.py", line 158, in step
result = await generate(
└ <function generate at 0x7b14ae21c860>
File "/home/zhangchi/.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)
│ │ │ │ └ [Message(role='user', name=None, content=[TextPart(type='text', text='你好')], tool_calls=None, tool_call_id=None, partial=None)]
│ │ │ └ [Tool(name='Task', description='Spawn a subagent to perform a specific task. Subagent will be spawned with a fresh context wi...
│ │ └ 'You are Kimi Code CLI, an interactive general AI agent running on a user's computer.\n\nYour primary goal is to answer ques...
│ └ <function Kimi.generate at 0x7b14acaf8cc0>
└ <kosong.chat_provider.kimi.Kimi object at 0x7b14a8ee2580>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/chat_provider/kimi.py", line 155, in generate
response = await self.client.chat.completions.create(
│ │ │ │ └ <function AsyncCompletions.create at 0x7b14977887c0>
│ │ │ └ <openai.resources.chat.completions.completions.AsyncCompletions object at 0x7b14974b8050>
│ │ └ <openai.resources.chat.chat.AsyncChat object at 0x7b14a8407e00>
│ └ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
└ <kosong.chat_provider.kimi.Kimi object at 0x7b14a8ee2580>
File "/home/zhangchi/.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(
│ └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x7b14a8dc0410>>
└ <openai.resources.chat.completions.completions.AsyncCompletions object at 0x7b14974b8050>
File "/home/zhangchi/.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)
│ │ │ │ │ └ openai.AsyncStream[openai.types.chat.chat_completion_chunk.ChatCompletionChunk]
│ │ │ │ └ True
│ │ │ └ FinalRequestOptions(method='post', url='/chat/completions', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT
...
│ │ └ <class 'openai.types.chat.chat_completion.ChatCompletion'>
│ └ <function AsyncAPIClient.request at 0x7b14acb8e7a0>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.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)
│ │ │ └ 0
│ │ └ FinalRequestOptions(method='post', url='/chat/completions', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT
...
│ └ <function BaseClient._build_request at 0x7b14acb7fc40>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.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]
│ │ └ <function BaseClient.build_request at 0x7b14ada6d440>
│ └ <openai._base_client.AsyncHttpxClientWrapper object at 0x7b14a8dc1bd0>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_client.py", line 378, in build_request
return Request(
└ <class 'httpx.Request'>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_models.py", line 408, in init
headers, stream = encode_request(
│ └ <function encode_request at 0x7b14adc03e20>
└ Headers({'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'accept': 'application/json', 'content-type': 'appli...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_content.py", line 216, in encode_request
return encode_json(json)
│ └ {'messages': [{'role': 'system', 'content': 'You are Kimi Code CLI, an interactive general AI agent running on a user's comp...
└ <function encode_json at 0x7b14adc03d80>
File "/home/zhangchi/.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 characters in position 9885-9886: surrogates not allowed
2026-02-06 11:14:26.191 | ERROR | kimi_cli.cli:kimi:585 - Fatal error when running CLI
Traceback (most recent call last):

File "/home/zhangchi/.local/bin/kimi-cli", line 10, in
sys.exit(cli())
│ │ └ <typer.main.Typer object at 0x7b14af5afa80>
│ └
└ <module 'sys' (built-in)>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/main.py", line 319, in call
return get_command(self)(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <typer.main.Typer object at 0x7b14af5afa80>
└ <function get_command at 0x7b14af6a7740>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1485, in call
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function TyperGroup.main at 0x7b14af697880>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/core.py", line 814, in main
return _main(
└ <function main at 0x7b14af6963e0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/core.py", line 190, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x7b14af57f8c0>
│ └ <function Group.invoke at 0x7b14af627ce0>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1851, in invoke
rv = super().invoke(ctx)
└ <click.core.Context object at 0x7b14af57f8c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'version': None, 'verbose': False, 'debug': False, 'local_work_dir': None, 'session_id': None, 'continue
': False, 'config_s...
│ │ │ │ └ <click.core.Context object at 0x7b14af57f8c0>
│ │ │ └ <function kimi at 0x7b14af482d40>
│ │ └
│ └ <function Context.invoke at 0x7b14af625d00>
└ <click.core.Context object at 0x7b14af57f8c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
│ │ └ {'version': None, 'verbose': False, 'debug': False, 'local_work_dir': None, 'session_id': None, 'continue
': False, 'config_s...
│ └ ()
└ <function kimi at 0x7b14af482d40>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/typer/main.py", line 706, in wrapper
return callback(**use_params)
│ └ {'ctx': <click.core.Context object at 0x7b14af57f8c0>, 'version': None, 'verbose': False, 'debug': False, 'local_work_dir': N...
└ <function kimi at 0x7b14af432200>

File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 574, in kimi
switch_to_web = asyncio.run(_reload_loop(session_id))
│ │ │ └ None
│ │ └ <function kimi.._reload_loop at 0x7b14ad205bc0>
│ └ <function run at 0x7b14af996c00>
└ <module 'asyncio' from '/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/_init...
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py", line 195, in run
return runner.run(main)
│ │ └ <coroutine object kimi.._reload_loop at 0x7b14ad199be0>
│ └ <function Runner.run at 0x7b14af81d3a0>
└ <asyncio.runners.Runner object at 0x7b14ad210050>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ └ <Task finished name='Task-1' coro=<kimi.._reload_loop() done, defined at /home/zhangchi/.local/share/uv/tools/kimi-cl...
│ └ None
└ <asyncio.runners.Runner object at 0x7b14ad210050>
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
│ └ <method 'result' of '_asyncio.Task' objects>
└ <Task finished name='Task-1' coro=<kimi.._reload_loop() done, defined at /home/zhangchi/.local/share/uv/tools/kimi-cl...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 559, in _reload_loop
last_session, succeeded = await _run(session_id)
│ └ None
└ <function kimi.._run at 0x7b14ad205940>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/cli/init.py", line 502, in _run
succeeded = await instance.run_shell(prompt)
│ │ └ None
│ └ <function KimiCLI.run_shell at 0x7b14ad204860>
└ <kimi_cli.app.KimiCLI object at 0x7b14a8dc3c50>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/app.py", line 324, in run_shell
return await shell.run(command)
│ │ └ None
│ └ <function Shell.run at 0x7b14a8d2c540>
└ <kimi_cli.ui.shell.Shell object at 0x7b14a8dc3d90>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 111, in run
await self.run_soul_command(user_input.content)
│ │ │ └ [TextPart(type='text', text='你好')]
│ │ └ UserInput(mode=<PromptMode.AGENT: 'agent'>, command='你好', content=[TextPart(type='text', text='你好')])
│ └ <function Shell.run_soul_command at 0x7b14a8d2c720>
└ <kimi_cli.ui.shell.Shell object at 0x7b14a8dc3d90>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/ui/shell/init.py", line 232, in run_soul_command
await run_soul(
└ <function run_soul at 0x7b14adf916c0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/init.py", line 169, in run_soul
soul_task.result() # this will raise if any exception was raised in the run task
│ └ <method 'result' of '_asyncio.Task' objects>
└ <Task finished name='Task-314' coro=<KimiSoul.run() done, defined at /home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 206, in run
await self._turn(user_message)
│ │ └ Message(role='user', name=None, content=[TextPart(type='text', text='你好')], tool_calls=None, tool_call_id=None, partial=None)
│ └ <function KimiSoul._turn at 0x7b14ad1e3880>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 220, in _turn
return await self._agent_loop()
│ └ <function KimiSoul._agent_loop at 0x7b14ad1e3ba0>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 349, in _agent_loop
step_outcome = await self._step()
│ └ <function KimiSoul._step at 0x7b14ad1e3c40>
└ <kimi_cli.soul.kimisoul.KimiSoul object at 0x7b14a8dc39d0>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 406, in _step
result = await _kosong_step_with_retry()
└ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a82225c0>
File "/home/zhangchi/.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)
│ │ │ └ {}
│ │ └ ()
│ └ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a83e2e80>
└ <AsyncRetrying object at 0x7b14a83f5950 (stop=<tenacity.stop.stop_after_attempt object at 0x7b14a8405010>, wait=<tenacity.wai...
File "/home/zhangchi/.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)
│ │ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
│ └ <function AsyncRetrying.iter at 0x7b14ad1bff60>
└ <AsyncRetrying object at 0x7b14a83f5950 (stop=<tenacity.stop.stop_after_attempt object at 0x7b14a8405010>, wait=<tenacity.wai...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 153, in iter
result = await action(retry_state)
│ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
└ <function wrap_to_async_func..inner at 0x7b14a8220860>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/_utils.py", line 99, in inner
return call(*args, **kwargs)
│ │ └ {}
│ └ (<RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't enco...
└ <function BaseRetrying._post_retry_check_actions.. at 0x7b14a82236a0>
File "/home/zhangchi/.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())
│ │ │ └ <function Future.result at 0x7b14afa79da0>
│ │ └ <Future at 0x7b14a8405be0 state=finished raised UnicodeEncodeError>
│ └ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
└ <RetryCallState 135328652349120: attempt #1; slept for 0.0; last result: failed (UnicodeEncodeError 'utf-8' codec can't encod...
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
└ None
File "/home/zhangchi/.local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
└ None
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/tenacity/asyncio/init.py", line 114, in call
result = await fn(*args, **kwargs)
│ │ └ {}
│ └ ()
└ <function KimiSoul._step.._kosong_step_with_retry at 0x7b14a83e2e80>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kimi_cli/soul/kimisoul.py", line 397, in _kosong_step_with_retry
return await kosong.step(
│ └ <function step at 0x7b14ae21c2c0>
└ <module 'kosong' from '/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/init.py'>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/init.py", line 158, in step
result = await generate(
└ <function generate at 0x7b14ae21c860>
File "/home/zhangchi/.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)
│ │ │ │ └ [Message(role='user', name=None, content=[TextPart(type='text', text='你好')], tool_calls=None, tool_call_id=None, partial=None)]
│ │ │ └ [Tool(name='Task', description='Spawn a subagent to perform a specific task. Subagent will be spawned with a fresh context wi...
│ │ └ 'You are Kimi Code CLI, an interactive general AI agent running on a user's computer.\n\nYour primary goal is to answer ques...
│ └ <function Kimi.generate at 0x7b14acaf8cc0>
└ <kosong.chat_provider.kimi.Kimi object at 0x7b14a8ee2580>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/kosong/chat_provider/kimi.py", line 155, in generate
response = await self.client.chat.completions.create(
│ │ │ │ └ <function AsyncCompletions.create at 0x7b14977887c0>
│ │ │ └ <openai.resources.chat.completions.completions.AsyncCompletions object at 0x7b14974b8050>
│ │ └ <openai.resources.chat.chat.AsyncChat object at 0x7b14a8407e00>
│ └ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
└ <kosong.chat_provider.kimi.Kimi object at 0x7b14a8ee2580>
File "/home/zhangchi/.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(
│ └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x7b14a8dc0410>>
└ <openai.resources.chat.completions.completions.AsyncCompletions object at 0x7b14974b8050>
File "/home/zhangchi/.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)
│ │ │ │ │ └ openai.AsyncStream[openai.types.chat.chat_completion_chunk.ChatCompletionChunk]
│ │ │ │ └ True
│ │ │ └ FinalRequestOptions(method='post', url='/chat/completions', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT
...
│ │ └ <class 'openai.types.chat.chat_completion.ChatCompletion'>
│ └ <function AsyncAPIClient.request at 0x7b14acb8e7a0>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.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)
│ │ │ └ 0
│ │ └ FinalRequestOptions(method='post', url='/chat/completions', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT
...
│ └ <function BaseClient._build_request at 0x7b14acb7fc40>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.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]
│ │ └ <function BaseClient.build_request at 0x7b14ada6d440>
│ └ <openai._base_client.AsyncHttpxClientWrapper object at 0x7b14a8dc1bd0>
└ <openai.AsyncOpenAI object at 0x7b14a8dc0410>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_client.py", line 378, in build_request
return Request(
└ <class 'httpx.Request'>
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_models.py", line 408, in init
headers, stream = encode_request(
│ └ <function encode_request at 0x7b14adc03e20>
└ Headers({'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'accept': 'application/json', 'content-type': 'appli...
File "/home/zhangchi/.local/share/uv/tools/kimi-cli/lib/python3.13/site-packages/httpx/_content.py", line 216, in encode_request
return encode_json(json)
│ └ {'messages': [{'role': 'system', 'content': 'You are Kimi Code CLI, an interactive general AI agent running on a user's comp...
└ <function encode_json at 0x7b14adc03d80>
File "/home/zhangchi/.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 characters in position 9885-9886: surrogates not allowed

What steps can reproduce the bug?

必现, 输入任何字符都会出现这个错误

What is the expected behavior?

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions