@spzxg/cli-ui 0.3.0 → 0.4.0

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.
package/README.md CHANGED
@@ -18,6 +18,7 @@ import "@spzxg/cli-ui/styles.css";
18
18
 
19
19
  <CliChat jobId="job_xxx" /> // 打开已有对话(对话任务的第一个对话)
20
20
  <CliChat jobId="job_xxx" taskId="task_yyy" /> // 对话任务里的某个对话;taskId="new" 新开一个
21
+ <CliChat jobId="job_batch" taskId="task_zzz" /> // 一次性任务 / 续派的子任务:只读查看执行过程
21
22
  <CliChat jobId={null} newConversation={{ title: "周报", businessId: "biz-1" }} /> // 新对话
22
23
  <CliMsgList jobIds={["job_xxx"]} onSelect={setJobId} /> // 列表
23
24
  ```
@@ -60,15 +61,28 @@ location /api/center/ {
60
61
  - **组件自己建**:`<CliChat jobId={null} newConversation={{ title, businessId }} />`,建好后通过 `job_change` 事件把 job_id 交给页面。
61
62
  - **业务后端建**(要带 callback 时):后端调 `POST /api/jobs`,前端只传 `jobId`,这样 callback 的密钥留在服务端。
62
63
 
63
- ## 和列表一起用
64
+ ## 组合使用(列表 + 对话 + 看板联动)
65
+
66
+ 放进同一个 `CliCenterProvider`(Web Component 写同一个 `group`),三个组件互相通信、切换时一起变:列表点哪个对话,对话和看板就切到哪个;对话里新建 / 接续出的新对话,列表跟着加上并选中、看板跟过去;对话里点文件在看板里打开。
64
67
 
65
68
  ```tsx
66
- // a. 页面自己串:两个组件互不依赖
67
- <CliMsgList selectedId={jobId} onSelect={setJobId} onNew={() => setJobId(null)} />
68
- <CliChat jobId={jobId} onEvent={(e) => e.type === "job_change" && setJobId(e.key)} />
69
+ <CliCenterProvider baseUrl="/api/center"
70
+ selectedId={key} // 打开 / 切换到哪个对话("job_x" 或 "job_x#task_y");不传由列表点击决定
71
+ onEvent={(e) => { if (e.type === "select") setKey(e.jobId); if (e.type === "job_change") setKey(e.key); }}>
72
+ <CliMsgList jobIds={ids} />
73
+ <CliChat />
74
+ <CliBoard />
75
+ </CliCenterProvider>
76
+ ```
69
77
 
70
- // b. 放进同一个 Provider:自动联动
71
- <CliCenterProvider><CliMsgList /><CliChat /></CliCenterProvider>
78
+ - Provider 里的组件不要再传 `jobId` / `taskId`(列表不传 `selectedId`):传了的组件只看自己那个,不跟着切。
79
+ - Web Component:同一个 `group`,不写 `job-id`;从外面打开某个对话给任意一个元素写 `selected-id="job_x"`,改它就一起切。
80
+ - 不用 Provider 也行:页面自己串,每个组件传 `jobId` / `selectedId`,在 `onSelect`、`job_change` 里同步:
81
+
82
+ ```tsx
83
+ <CliMsgList selectedId={key} onSelect={setKey} onNew={() => setKey(null)} />
84
+ <CliChat jobId={key} onEvent={(e) => e.type === "job_change" && setKey(e.key)} />
85
+ <CliBoard jobId={key} />
72
86
  ```
73
87
 
74
88
  ## 右侧看板
@@ -110,13 +124,13 @@ location /api/center/ {
110
124
 
111
125
  ```tsx
112
126
  <CliChat config={{
113
- header: { export: false, close: false }, // header: false 隐藏整个顶部栏
127
+ header: { title: true, status: true }, // 顶部栏缺省隐藏;header: true 全部显示
114
128
  composer: { placeholder: "给 {agent} 发消息…" }, // composer: false 只读
115
129
  transcript: { tools: false },
116
130
  }} />
117
131
  ```
118
132
 
119
- 所有配置项和缺省值都在 [`src/core/config.ts`](src/core/config.ts) 里,每一项都有注释。Web Component 上用 `config='{"header":{"export":false}}'`。
133
+ cli-chat 的顶部栏(面包屑、标题、智能体、用量、模型、状态、结束对话)缺省全部隐藏,需要哪项写哪项。各种状态(未开始、进行中、已完成……)缺省都不显示:要显示打开 chat 的 `header.status`、`transcript.status`,list 的 `card.status`(卡片状态)、`grouped`(按状态分组)。所有配置项和缺省值都在 [`src/core/config.ts`](src/core/config.ts) 里,每一项都有注释。Web Component 上用 `config='{"header":{"title":true}}'`。
120
134
 
121
135
  ## 事件
122
136
 
@@ -135,6 +149,10 @@ location /api/center/ {
135
149
  - `"job_xxx#new"`:在这个对话任务里新开一个对话(还没发第一条消息)。
136
150
 
137
151
  `<CliChat jobId taskId>` 两个参数,或者把对话键整个交给 `jobId` 都可以。cli-msglist 里开了几个对话的任务按对话展开,卡片上的「+」新开对话;`onSelect(id, { jobId, taskId })` 的 `id` 就是对话键,直接交给 CliChat 即可。指定了对话时,「结束对话」只关这一个(`POST /api/jobs/:id/conversations/:taskId/close`),没指定时结束整个对话任务。工具函数 `convKey` / `parseConvKey` 从包里导出。
152
+
153
+ 一次性任务(含续派,`mode` 不是 `conversation`)也能交给 CliChat:只读显示一个子任务的执行过程(没有输入框和「结束对话」,状态是子任务的状态)。`taskId` 指定看哪个子任务,不给看最近派发的那个(续派开出新的子任务后自动跟过去)。转录里中枢的派发标记行(`[CENTER-ATTEMPT…]`)去掉,完成核对(`[CENTER-CONFIRM]`)合成一行说明。需要 0.3.1 + 中枢实时流支持 `?task=`;0.3.0 打开这类任务会一直「正在重连」。
154
+
155
+ 例外是对话式续派的子任务(续派时 `mode: "conversation"`):用 `taskId` 打开它就是一个能一直聊下去的对话——有输入框,不显示「子任务已完成」之类的状态;每发一条 = 续派一条 `continue_from` 这个子任务的子任务(接在同一个 Agent 会话里),对话键不变。需要 0.4.0 + 同版本中枢。
138
156
  - Web Component 上监听 `cli-turn-end` / `cli-conversation-end` / `cli-event` 事件。
139
157
  - 旧名字 `onCallback` / `cli-callback` 仍然可用,等同于前两个合在一起。
140
158