MoonshotAI / MoonshotAI/kimi-cli

功能请求:跳过tool call error继续执行任务

Open
#1,589 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?

1.24.0

Which open platform/subscription were you using?

Kimi Code

Which model were you using?

kimi-for-coding

What platform is your computer?

Linux 6.17.0-1012-oem x86_64 x86_64

What issue are you seeing?

我开启Yolo模式,让Kimi CLI全自动运行,结果自己只跑了10分钟就因为出现以下错误停掉了:

Edit
Invalid arguments
error:
Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931)
message:
Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931)

同时弹出:

Connection Error
Tool call arguments must be valid JSON.

能不能建立一个绕过此错误的机制,使得智能体可以继续工作?

目前Kimi CLI自主执行长程复杂任务的能力有待提升!

What steps can reproduce the bug?

这是引发错误的tool call:

╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── #258 ASSISTANT ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── thinking ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  构件构建成功, 提交第一个 commit:**Phase 2: 集成ECharts真实图表**。**现在继续 Phase 3。 XX波形图。**现在修复XX Overview,测试,然后提交。 commit。**/Phase 2: 集成ECharts图表组件 **/<|assistant|>现在修复 XX Overview 使用真实数据和。测试,验证,然后提 │ │
│ │ 交 commit。**/Phase 3: XX 波形图                                                                                                                                                                                                                                 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                                                                                                                                                                                                      │
│ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Tool Call ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Function: StrReplaceFile                                                                                                                                                                                                                                                         │ │
│ │ Call ID: call_c8640582653849149eb56e3a                                                                                                                                                                                                                                           │ │
│ │ Arguments:                                                                                                                                                                                                                                                                       │ │
│ │ {"path":".../src/pages/Cluster/List.tsx","edit":{"new": "import { Card, Table, Tag, Space, Button, Input, Select, Row, Col, Spin, message } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchO │ │
│ │ utlined } from '@ant-design/icons'\nimport { useState, useEffect } from 'react'\nimport { api } from '../../services/api'\nimport type { Cluster } from '../../types'\n \nconst { Option } = Select\n\nconst ClusterList = () => {", "old": "import { Card, Table, Tag, Space, B │ │
│ │ utton, Input, Select, Row, Col, Spin } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchOutlined } from '@ant-design/icons'\nimport { useState, useEffect } from 'react'\nimport { api } from '../../services/api'\nimport typ │ │
│ │ e { Cluster } from '../../types'\n \nconst { Option } = Select\n", "new": "import { Card, Table, Tag, Space, Button, Input, Select, Row, Col, Spin, message } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchOutlined } from │ │
│ │ '@ant-design/icons'\nimport { useEffect, useState, from 'react'\nimport { api } from '../../services/api'\nimport type { Cluster } from '../../types'\n \nconst { Option } = Select\n\nconst ClusterList = () => {", "old": "  const [loading, setLoading] = useState(true)\n  c │ │
│ │ onst [clusters, setClusters] = useState<Cluster[]>([])\n  const [total, setTotal] = useState(0)\n  const [filter, setFilter] = useState({ label: 'all', search: '' })\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": "  const [loading, set │ │
│ │ Loading] = useState(true)\n  const [clusters, setClusters] = useState<Cluster[]>([])\n  const [total, setTotal] = useState(0)\n  const [filter, setFilter] = useState({ label: 'all', search: '' })\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n │ │
│ │ \n  useEffect(() => {\", "old": "  const fetchClusters = async () => {\", "new": "  const fetchData = async () => {\n      try {\n        setLoading(true)\n        const params = new URLSearchParams()\n        if (filter.label !== 'all') {\n          params.append('label' │ │
│ │ , filter.label)\n        }\n        params.append('page', pagination.page.toString())\n        params.append('per_page', pagination.per_page.toString())\n\n        const data = await api.get<{ items: Cluster[]; total: number }>(\n          `/probes/${probeId}/clusters?${p │ │
│ │ arams.toString()}`\ )\n        \n        let filteredItems = data.items\n        if (filter.search) {\n          filteredItems = filteredItems.filter(c => \n            c.kilosort_cluster_id.toString().includes(filter.search)\n )\n        }\n        )\n        setClusters │ │
│ │ (filteredItems)\n        setTotal(data.total)\n      } catch (error) {\n        message.error('加载Cluster数据失败')\n        console.error(error)\n      } finally {\n        setLoading(false)\n      }\n    }\n\n    if (probeId) {\n      fetchClusters()\n    }\  }, [probe │ │
│ │ Id])", "new": "  if (probeId) {\n    fetchData()\n }\n }, [filter.label, pagination.page, pagination.per_page])"}, {"old": "  const columns = [\n    { \n      title: 'Cluster ID', \n      dataIndex: 'kilosort_cluster_id', \n      key: 'kilosort_cluster_id', \n      sorter │ │
│ │ : (a: Cluster, b: Cluster) => a.kilosort_cluster_id - b.kilosort_cluster_id,\n      width: 100\n    },\n    { \n      title: 'Label', \n      dataIndex: 'cluster_label', \n      key: 'cluster_label', \n      width: 80,\n      render: (label: string) => {\n        const co │ │
│ │ lors: Record<string, string> = { good: 'green', mua: 'orange', noise: 'red' }\n        return <Tag color={colors[label] || 'default'}>{label?.toUpperCase() || '-'}</Tag>\\n      }\n },\n    { title: 'Channel', dataIndex: 'channel_number', key: 'channel_number', width: 80  │ │
│ │ },\n    { title: 'Depth (mm)', dataIndex: 'depth', key: 'depth', width: 100, render: (v: number) => v?.toFixed(2) || '-' },\n    { title: 'Area', dataIndex: 'area_name', key: 'area_name', width: 80, render: (v: string) => v || '-' },\n    { title: 'n_spikes', dataIndex: ' │ │
│ │ n_spikes', key: 'n_spikes', width: 100, sorter: (a: Cluster, b: Cluster) => (a.n_spikes || 0) - (b.n_spikes || 0) },\n    { title: 'Firing Rate (Hz)', dataIndex: 'firing_rate', key: 'firing_rate', width: 120, render: (v: number) => v?.toFixed(2) || '-' },\n    {\n      ti │ │
│ │ tle: '操作',\n      key: 'action',\n      render: (_: any, record: Cluster) => (\n        <Link to={`/session/${sessionId}/probe/${record.probe_id}/cluster/${record.cluster_id}`}>                                                                                              │ │
│ │ n          详情                                                                                                                                                                                                                                                                  │ │
│ │         </Link>)\n      } else if (await clusterLink.isVisible().catch(() => false)) {\n        await clusterLink.click()                                                                                                                                                        │ │
│ │         await expect(page).toHaveURL(/\\/session\\/\\d+\\/probe/\\d+/cluster/\\d+/)\n      }                                                                                                                                                                                     │ │
│ │     },                                                                                                                                                                                                                                                                           │ │
│ │ n  ]"}, {"old": "  const [loading, setLoading] = useState(true)\n  const [clusters, setClusters] = useState<Cluster[]>([])\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": "  const [loading, setLoading] = useState(true)\n  const [cluster │ │
│ │ s, setClusters] = useState<Cluster[]>([])\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n  const [filter, setFilter] = useState({ label: 'all', search: '' })", "new": "  const [loading, setLoading] = useState(true)\n  const [clusters, setClust │ │
│ │ ers] = useState<Cluster[]>([])\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n  const [filter, setFilter] = useState({ label: 'all', search: '' })", "new": "  const [loading, setLoading] = useState(true)\n  const [clusters, setClusters] = useS │ │
│ │ tate<Cluster[]>([])\n  const [total, setTotal] = useState(0)\n  const [filter, setFilter] = useState({ label: 'all', search: '' })\n  const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": "  const fetchClusters = async () => {\n      try {\n     │ │
│ │    setLoading(true)\n        const params = new URLSearchParams()\n        if (filter.label !== 'all') {\n          params.append('label', filter.label)\n        }\n        params.append('page', pagination.page.toString())\n        params.append('per_page', pagination.per │ │
│ │ _page.toString())\n\n        const data = await api.get<{ items: Cluster[]; total: number }>(\n          `/probes/${probeId}/clusters?${params.toString()}`\ )\n        \n        let filteredItems = data.items\n        if (filter.search) {\n          filteredItems = filter │ │
│ │ edItems.filter(c => \n            c.kilosort_cluster_id.toString().includes(filter.search)\n )\n        }\n        setClusters(filteredItems)\n        setTotal(data.total)\n      } catch (error) {\n        message.error('加载Cluster数据失败')\n        console.error(error) │ │
│ │ \n      } finally {\n        setLoading(false)                                                                                                                                                                                                                                   │ │
│ │ n } else {                                                                                                                                                                                                                                                                       │ │
│ │     \n  }, [probeId, filter.label, pagination])", "new": "  const handleTableChange = (pagination: Pagination) => => {\n        setPagination(pag)\n        fetchData()                                                                                                          │ │
│ │       }}                                                                                                                                                                                                                                                                         │ │
│ │     }, {"old": "  return (                                                                                                                                                                                                                                                       │ │
│ │     <Spin spinning={loading ? <Spin size=\"large\" /> : null}                                                                                                                                                                                                                    │ │
│ │   )\n\n  return (                                                                                                                                                                                                                                                                │ │
│ │     <div>                                                                                                                                                                                                                                                                        │ │
│ │       <Space style={{ marginBottom: 24 }}>                                                                                                                                                                                                                                       │ │
│ │         <Link to={`/session/${sessionId}/overview`}>                                                                                                                                                                                                                             │ │
│ │           <Button icon={<ArrowLeftOutlined />}>返回Session</Button>                                                                                                                                                                                                              │ │
│ │         </Link>                                                                                                                                                                                                                                                                  │ │
│ │       </Space>                                                                                                                                                                                                                                                                   │ │
│ │                                                                                                                                                                                                                                                                                  │ │
│ │       <h1 style={{ marginBottom: 24 }}>Cluster列表</h1>                                                                                                                                                                                                                          │ │
│ │                                                                                                                                                                                                                                                                                  │ │
│ │       <Card style={{ marginBottom: 16 }}>                                                                                                                                                                                                                                        │ │
│ │         <Row gutter={16}>                                                                                                                                                                                                                                                        │ │
│ │           <Col span={8}>                                                                                                                                                                                                                                                         │ │
│ │             <Input                                                                                                                                                                                                                                                               │ │
│ │               placeholder=\"搜索Cluster ID\"                                                                                                                                                                                                                                     │ │
│ │               prefix={<SearchOutlined />}                                                                                                                                                                                                                                        │ │
│ │               value={filter.search}                                                                                                                                                                                                                                              │ │
│ │               onChange={(e) => setFilter({ ...filter, search: e.target.value })}                                                                                                                                                                                                 │ │
│ │             />                                                                                                                                                                                                                                                                   │ │
│ │           </Col>                                                                                                                                                                                                                                                                 │ │
│ │           <Col span={8}>                                                                                                                                                                                                                                                         │ │
│ │             <Select                                                                                                                                                                                                                                                              │ │
│ │               style={{ width: '100%' }}                                                                                                                                                                                                                                          │ │
│ │               value={filter.label}                                                                                                                                                                                                                                               │ │
│ │               onChange={(v) => setFilter({ ...filter, label: v })}                                                                                                                                                                                                               │ │
│ │             >                                                                                                                                                                                                                                                                    │ │
│ │               <Option value=\"all\">全部</Option>                                                                                                                                                                                                                                │ │
│ │               <Option value=\"1\">1</Option>                                                                                                                                                                                                                               │ │
│ │               <Option value=\"2\">2</Option>                                                                                                                                                                                                                                 │ │
│ │               <Option value=\"3\">3</Option>                                                                                                                                                                                                                             │ ││ │             </Select>                                                                                                                                                                                                                                                            │ │
│ │           </Col>                                                                                                                                                                                                                                                                 │ │
│ │           <Col span={8}>                                                                                                                                                                                                                                                         │ │
│ │             <Space>                                                                                                                                                                                                                                                              │ │
│ │               <Tag>总计: {filteredClusters.length}</Tag>                                                                                                                                                                                                                         │ │
│ │               <Tag color=\"green\">1: {filteredClusters.filter(c => c.cluster_label === '1').length}</Tag>                                                                                                                                                                 │ │
│ │               <Tag color=\"orange\">2: {filteredClusters.filter(c => c.cluster_label === '2').length}</Tag>                                                                                                                                                                  │ │
│ │             </Space>                                                                                                                                                                                                                                                             │ │
│ │           </Col>                                                                                                                                                                                                                                                                 │ │
│ │         </Row>                                                                                                                                                                                                                                                                   │ │
│ │       </Card>                                                                                                                                                                                                                                                                    │ │
│ │                                                                                                                                                                                                                                                                                  │ │
│ │       <Table                                                                                                                                                                                                                                                                     │ │
│ │         dataSource={clusters}                                                                                                                                                                                                                                                    │ │
│ │         columns={columns}                                                                                                                                                                                                                                                        │ │
│ │         rowKey=\"cluster_id"                                                                                                                                                                                                                                                     │ │
│ │         pagination={{                                                                                                                                                                                                                                                            │ │
│ │           current: pagination.page,                                                                                                                                                                                                                                              │ │
│ │           pageSize: pagination.per_page,                                                                                                                                                                                                                                         │ │
│ │           showSize=\"small\"                                                                                                                                                                                                                                                     │ │
│ │         scroll={{ x: 1000 }}                                                                                                                                                                                                                                                     │ │
│ │       />                                                                                                                                                                                                                                                                         │ │
│ │     </div>                                                                                                                                                                                                                                                                       │ │
│ │   )                                                                                                                                                                                                                                                                              │ │
│ │ }                                                                                                                                                                                                                                                                                │ │
│ │                                                                                                                                                                                                                                                                                  │ │
│ │ export default ClusterList                                                                                                                                                                                                                                                       │ │
│ │ }                                                                                                                                                                                                                                                                                │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────── #259 TOOL → call_c8640582653849149eb56e3a ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── system ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ ERROR: Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931)                                                                                                                                                                                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

### What is the expected behavior?

自动跳过这个引发错误的tool call,继续任务

### Additional information

_No response_
<!--This is a translation content dividing line, the content below is generated by machine, please do not modify the content below-->
---
### What version of Kimi Code CLI is running?

1.24.0

### Which open platform/subscription were you using?

Kimi Code

### Which model were you using?

kimi-for-coding

### What platform is your computer?

Linux 6.17.0-1012-oem x86_64 x86_64

### What issue are you seeing?

I turned on Yolo mode and let Kimi CLI run fully automatically. However, it only ran for 10 minutes before it stopped due to the following error:

Edit
Invalid arguments
error:
Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931)
message:
Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931)

At the same time pop up:

> Connection Error
> Tool call arguments must be valid JSON.
>

Is it possible to build a mechanism to bypass this error so that the agent can continue to work?

At present, Kimi CLI's ability to autonomously perform long-range and complex tasks needs to be improved!

### What steps can reproduce the bug?

This is the tool call that throws the error:

╭───────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────── #258 ASSISTANT ─────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────╮
│ ╭───────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────── thinking ─────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────────╮ │
│ │ The component is built successfully, and the first commit is submitted: Phase 2: Integrating ECharts real charts. **Now proceed to Phase 3. XX waveform diagram. **Now fix XX Overview, test, and submit. commit. **/Phase 2: Integrate ECharts chart component **/<|assistant|>Now fix XX Overview using real data and. Test, verify, then propose │ │
│ │ Commit. **/Phase 3: XX waveform │ │
│ ╰───────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────────╯ │
│ │
│ ╭───────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────── Tool Call ─────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────────╮ │
│ │ Function: StrReplaceFile │ │
│ │ Call ID: call_c8640582653849149eb56e3a │ │
│ │ Arguments: │ │
│ │ {"path":".../src/pages/Cluster/List.tsx","edit":{"new": "import { Card, Table, Tag, Space, Button, Input, Select, Row, Col, Spin, message } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchO │ │
│ │ utlined } from '@ant-design/icons'\nimport { useState, useEffect } from 'react'\nimport { api } from '../../services/api'\nimport type { Cluster } from '../../types'\n \nconst { Option } = Select\n\nconst ClusterList = () => {", "old": "import { Card, Table, Tag, Space, B │ │
│ │ utton, Input, Select, Row, Col, Spin } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchOutlined } from '@ant-design/icons'\nimport { useState, useEffect } from 'react'\nimport { api } from '../../services/api'\nimport typ │ │
│ │ e { Cluster } from '../../types'\n \nconst { Option } = Select\n", "new": "import { Card, Table, Tag, Space, Button, Input, Select, Row, Col, Spin, message } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\nimport { ArrowLeftOutlined, SearchOutlined } from │ │
│ │ '@ant-design/icons'\nimport { useEffect, useState, from 'react'\nimport { api } from '../../services/api'\nimport type { Cluster } from '../../types'\n \nconst { Option } = Select\n\nconst ClusterList = () => {", "old": " const [loading, setLoading] = useState(true)\n c │ │
│ │ onst [clusters, setClusters] = useState<Cluster[]>([])\n const [total, setTotal] = useState(0)\n const [filter, setFilter] = useState({ label: 'all', search: '' })\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": " const [loading, set │ │
│ │ Loading] = useState(true)\n const [clusters, setClusters] = useState<Cluster[]>([])\n const [total, setTotal] = useState(0)\n const [filter, setFilter] = useState({ label: 'all', search: '' })\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n │ │
│ │ \n useEffect(() => {", "old": " const fetchClusters = async () => {", "new": " const fetchData = async () => {\n try {\n setLoading(true)\n const params = new URLSearchParams()\n if (filter.label !== 'all') {\n params.append('label' │ │
│ │ , filter.label)\n }\n params.append('page', pagination.page.toString())\n params.append('per_page', pagination.per_page.toString())\n\n const data = await api.get<{ items: Cluster[]; total: number }>(\n /probes/${probeId}/clusters?${p │ │ │ │ arams.toString()}\ )\n \n let filteredItems = data.items\n if (filter.search) {\n filteredItems = filteredItems.filter(c => \n c.kilosort_cluster_id.toString().includes(filter.search)\n )\n }\n )\n setClusters │ │
│ │ (filteredItems)\n setTotal(data.total)\n } catch (error) {\n message.error('Loading Cluster data failed')\n console.error(error)\n } finally {\n setLoading(false)\n }\n }\n\n if (probeId) {\n fetchClusters()\n }\ }, [probe │ │
│ │Id])", "new": " if (probeId) {\n fetchData()\n }\n }, [filter.label, pagination.page, pagination.per_page])"}, {"old": " const columns = [\n { \n title: 'Cluster ID', \n dataIndex: 'kilosort_cluster_id', \n key: 'kilosort_cluster_id', \n sorter │ │
│ │ : (a: Cluster, b: Cluster) => a.kilosort_cluster_id - b.kilosort_cluster_id,\n width: 100\n },\n { \n title: 'Label', \n dataIndex: 'cluster_label', \n key: 'cluster_label', \n width: 80,\n render: (label: string) => {\n const co │ │
│ │ lors: Record<string, string> = { good: 'green', mua: 'orange', noise: 'red' }\n return <Tag color={colors[label] || 'default'}>{label?.toUpperCase() || '-'}\n }\n },\n { title: 'Channel', dataIndex: 'channel_number', key: 'channel_number', width: 80 │ │
│ │ },\n { title: 'Depth (mm)', dataIndex: 'depth', key: 'depth', width: 100, render: (v: number) => v?.toFixed(2) || '-' },\n { title: 'Area', dataIndex: 'area_name', key: 'area_name', width: 80, render: (v: string) => v || '-' },\n { title: 'n_spikes', dataIndex: ' │ │
│ │ n_spikes', key: 'n_spikes', width: 100, sorter: (a: Cluster, b: Cluster) => (a.n_spikes || 0) - (b.n_spikes || 0) },\n { title: 'Firing Rate (Hz)', dataIndex: 'firing_rate', key: 'firing_rate', width: 120, render: (v: number) => v?.toFixed(2) || '-' },\n {\n ti │ │
│ │ tle: 'action',\n key: 'action',\n render: (_: any, record: Cluster) => (\n <Link to={/session/${sessionId}/probe/${record.probe_id}/cluster/${record.cluster_id}}> │ │
│ │ n Details │ │
│ │ )\n } else if (await clusterLink.isVisible().catch(() => false)) {\n await clusterLink.click() │ │
│ │ await expect(page).toHaveURL(/\/session\/\d+\/probe/\d+/cluster/\d+/)\n } │ │
│ │ }, │ │
│ │ n ]"}, {"old": " const [loading, setLoading] = useState(true)\n const [clusters, setClusters] = useState<Cluster[]>([])\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": " const [loading, setLoading] = useState(true)\n const [cluster │ │
│ │ s, setClusters] = useState<Cluster[]>([])\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n const [filter, setFilter] = useState({ label: 'all', search: '' })", "new": " const [loading, setLoading] = useState(true)\n const [clusters, setClust │ │
│ │ ers] = useState<Cluster[]>([])\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })\n const [filter, setFilter] = useState({ label: 'all', search: '' })", "new": " const [loading, setLoading] = useState(true)\n const [clusters, setClusters] = useS │ │
│ │ tate<Cluster[]>([])\n const [total, setTotal] = useState(0)\n const [filter, setFilter] = useState({ label: 'all', search: '' })\n const [pagination, setPagination] = useState({ page: 1, per_page: 50 })", "new": " const fetchClusters = async () => {\n try {\n │ │
│ │ setLoading(true)\n const params = new URLSearchParams()\n if (filter.label !== 'all') {\n params.append('label', filter.label)\n }\n params.append('page', pagination.page.toString())\n params.append('per_page', pagination.per │ │
│ │ _page.toString())\n\n const data = await api.get<{ items: Cluster[]; total: number }>(\n /probes/${probeId}/clusters?${params.toString()}\ )\n \n let filteredItems = data.items\n if (filter.search) {\n filteredItems = filter │ │
│ │ edItems.filter(c => \n c.kilosort_cluster_id.toString().includes(filter.search)\n )\n }\n setClusters(filteredItems)\n setTotal(data.total)\n } catch (error) {\n message.error('Failed to load Cluster data')\n console.error(error) │ │
│ │ \n } finally {\n setLoading(false) │ │
│ │ n } else { │ │
│ │ \n }, [probeId, filter.label, pagination])", "new": " const handleTableChange = (pagination: Pagination) => => {\n setPagination(pag)\n fetchData() │ │
│ │ }} │ │
│ │ }, {"old": " return ( │ │
│ │ <Spin spinning={loading ? <Spin size="large" /> : null} │ │
│ │ )\n\n return ( │ │
│ │

│ │
│ │ <Space style={{ marginBottom: 24 }}> │ │
│ │ <Link to={/session/${sessionId}/overview}> │ │
│ │ <Button icon={}>Return to Session │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ <h1 style={{ marginBottom: 24 }}>Cluster list │ │
│ │ │ │
│ │ <Card style={{ marginBottom: 16 }}> │ │
│ │ │ │
│ │ │ │
│ │ <Input │ │
│ │ placeholder="Search Cluster ID" │ │
│ │ prefix={} │ │
│ │ value={filter.search} │ │
│ │ onChange={(e) => setFilter({ ...filter, search: e.target.value })} │ │
│ │ /> │ │
│ │ │ │
│ │ │ │
│ │ <Select │ │
│ │ style={{ width: '100%' }} │ │
│ │ value={filter.label} │ │
│ │ onChange={(v) => setFilter({ ...filter, label: v })} │ │
│ │ > │ │
│ │ <Option value="all">All │ │
│ │ <Option value="1">1 │ │
│ │ <Option value="2">2 │ │
│ │ <Option value="3">3 │ ││ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ Total: {filteredClusters.length} │ │
│ │ <Tag color="green">1: {filteredClusters.filter(c => c.cluster_label === '1').length} │ │
│ │ <Tag color="orange">2: {filteredClusters.filter(c => c.cluster_label === '2').length} │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ <Table │ │
│ │ dataSource={clusters} │ │
│ │ columns={columns} │ │
│ │ rowKey="cluster_id" │ │
│ │ pagination={{ │ │
│ │ current: pagination.page, │ │
│ │ pageSize: pagination.per_page, │ │
│ │ showSize="small" │ │
│ │ scroll={{ x: 1000 }} │ │
│ │ /> │ │
│ │ │ │
│ │ ) │ │
│ │ } │ │
│ │ │ │
│ │ export default ClusterList │ │
│ │ } │ │
│ ╰──────────────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────╯ │
╰───────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────────────╯
╭────────────────────────────────────────────────────────── ────────────────────────────────────────────────────── #259 TOOL → call_c8640582653849149eb56e3a ─────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────╮
│ ╭────────────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────────── system ─────────────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────────────╮ │
│ │ ERROR: Error parsing JSON arguments: Expecting ',' delimiter: line 1 column 1932 (char 1931) │ │
│ ╰──────────────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────────────── ───────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────╯ │
╰───────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────────── ─────────────────────────────────────────────────────────────────────╯

What is the expected behavior?

自动跳过这个引发错误的tool call,继续任务

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

No implementation file or test is named in the report. Start by locating the CLI entry point that parses tool-call JSON and handles the “Tool call arguments must be valid JSON” error; define and test the recovery behavior so a malformed call does not stop the autonomous task, while preserving clear failure reporting.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
ai, cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.