@spzxg/cli-ui 0.6.9 → 0.6.11
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/CHANGELOG.md +13 -1
- package/README.md +16 -5
- package/dist/{cli-ui-embed-CtZDwP8y.js → cli-ui-embed-CbxWozLO.js} +8075 -8075
- package/dist/{cli-ui-index-D9uwe5kv.js → cli-ui-index-ImgEunSf.js} +2 -2
- package/dist/{cli-ui-jszip.min-BkjzNeOa.js → cli-ui-jszip.min-DGdGLbxr.js} +2 -2
- package/dist/{cli-ui-jszip.min-D-YVhdLU.js → cli-ui-jszip.min-DWmufeZi.js} +1 -1
- package/dist/{cli-ui-xlsx-c5AN8lBq.js → cli-ui-xlsx-s2TcknA1.js} +1 -1
- package/dist/cli-ui.css +1 -1
- package/dist/cli-ui.js +1 -1
- package/package.json +1 -1
- package/src/chat/CliChat.tsx +5 -3
- package/src/chat/Composer.tsx +1 -1
- package/src/chat/useExecutionConfig.ts +4 -4
- package/src/operator.base.css +4 -3
- package/src/operator.css +4 -3
- package/src/styles.css +2 -1
package/dist/cli-ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as a, b as i, d as r, e as t, f as o, h as C, i as l, j as n, k as m, m as d, l as u, n as w, o as B, p as f } from "./cli-ui-embed-
|
|
1
|
+
import { C as a, b as i, d as r, e as t, f as o, h as C, i as l, j as n, k as m, m as d, l as u, n as w, o as B, p as f } from "./cli-ui-embed-CbxWozLO.js";
|
|
2
2
|
export {
|
|
3
3
|
a as CliBoard,
|
|
4
4
|
i as CliBrowserView,
|
package/package.json
CHANGED
package/src/chat/CliChat.tsx
CHANGED
|
@@ -234,9 +234,11 @@ function ChatInner({ slots, passiveContext = true, configurationBusy, onClear, j
|
|
|
234
234
|
const agent = task?.agent ?? conv?.turns[conv.turns.length - 1]?.agent ?? null;
|
|
235
235
|
const draftScope = store.draftScope ? `${store.draftScope}:${key ?? `new:${instanceId}`}` : key ?? `new:${instanceId}`;
|
|
236
236
|
const initialOptions = newConversation ?? store.getNewConversationOptions();
|
|
237
|
+
const executionReady = !batch && (!key || !!job);
|
|
238
|
+
const executionEnabled = showComposer && executionReady && (cfg.composer.agentSelector || cfg.composer.executionMode);
|
|
237
239
|
const execution = useExecutionConfig({ client: store.client, scope: draftScope,
|
|
238
240
|
target: key && !isNew ? key : null, running: running || batchPending,
|
|
239
|
-
enabled:
|
|
241
|
+
enabled: executionEnabled, ready: executionReady,
|
|
240
242
|
initial: { ...(initialOptions?.agent ? { agent: initialOptions.agent } : {}), ...initialOptions?.executionConfig },
|
|
241
243
|
});
|
|
242
244
|
const agentText = labelOf(execution.config?.agent ?? agent);
|
|
@@ -852,8 +854,8 @@ function ChatInner({ slots, passiveContext = true, configurationBusy, onClear, j
|
|
|
852
854
|
model: execution.config?.model, reasoning: execution.config?.reasoning, permission_mode: execution.config?.permission_mode }}
|
|
853
855
|
agents={execution.config?.agents} caps={executionAgent?.capabilities} defaults={executionAgent?.defaults}
|
|
854
856
|
showAgent={cfg.composer.agentSelector} showPermission={cfg.composer.executionMode}
|
|
855
|
-
unavailableReason={executionReadOnly ? "当前接入仅支持读取执行设置。" : execution.error ?? (execution.loading ? "正在读取执行设置…" : undefined)}
|
|
856
|
-
disabled={composerDisabled || running || batchPending || !!configurationBusy || execution.loading || executionReadOnly}
|
|
857
|
+
unavailableReason={batch ? "一次性任务沿用任务执行设置,不支持在对话中修改。" : executionReadOnly ? "当前接入仅支持读取执行设置。" : execution.error ?? (!executionEnabled || execution.loading ? "正在读取执行设置…" : undefined)}
|
|
858
|
+
disabled={!executionEnabled || composerDisabled || running || batchPending || !!configurationBusy || execution.loading || executionReadOnly}
|
|
857
859
|
onSetAgent={agent => execution.save({ agent, model: null, reasoning: null, permission_mode: null })}
|
|
858
860
|
onSetModel={model => execution.save({ model })} onSetReasoning={reasoning => execution.save({ reasoning })}
|
|
859
861
|
onSetPermission={permission_mode => execution.save({ permission_mode })} />
|
package/src/chat/Composer.tsx
CHANGED
|
@@ -211,7 +211,7 @@ export function Composer({ draft, placeholder, disabled, disabledHint, running,
|
|
|
211
211
|
{options.fileUpload && !disabled && <>
|
|
212
212
|
<input ref={fileRef} type="file" accept={uploadDocument ? FILE_UPLOAD_ACCEPT : ACCEPT_ATTR} multiple hidden onChange={(e) => { addFiles(Array.from(e.target.files ?? [])); e.target.value = ""; }} />
|
|
213
213
|
<button type="button" className="cli-attach" disabled={sending} aria-label={uploadDocument ? "添加文件" : "添加文档"} title={uploadDocument ? "添加文件(也可拖拽进来);HTML、Markdown 最大 100 MiB,其他支持类型最大 10 MiB" : `添加文档:${ACCEPTED_LABEL}(也可拖拽进来)`}
|
|
214
|
-
onClick={() => fileRef.current?.click()}>{Icon.plus()} <span>{options.fileButtonText}</span
|
|
214
|
+
onClick={() => fileRef.current?.click()}>{Icon.plus()}{options.fileButtonText && <span>{options.fileButtonText}</span>}</button>
|
|
215
215
|
</>}
|
|
216
216
|
{toolbar}
|
|
217
217
|
{options.hints && !disabled && <span className="hint comp-hint-extra">Shift + Enter 换行</span>}
|
|
@@ -18,9 +18,9 @@ function validate(result: ExecutionConfiguration) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/** 按对话隔离读取与保存,不轮询;换对话后的迟到响应不覆盖当前选择。 */
|
|
21
|
-
export function useExecutionConfig({ client, scope, target, enabled, initial, running }: {
|
|
21
|
+
export function useExecutionConfig({ client, scope, target, enabled, ready = true, initial, running }: {
|
|
22
22
|
client: ConversationBackend; scope: string; target: string | null; enabled: boolean;
|
|
23
|
-
initial?: ExecutionOptions; running: boolean;
|
|
23
|
+
initial?: ExecutionOptions; running: boolean; ready?: boolean;
|
|
24
24
|
}) {
|
|
25
25
|
const [view, setView] = useState<{ scope: string; config?: ExecutionConfiguration; error?: string; loading: boolean; saveFailed?: boolean }>({ scope, loading: false });
|
|
26
26
|
const current = useRef(scope);
|
|
@@ -34,7 +34,7 @@ export function useExecutionConfig({ client, scope, target, enabled, initial, ru
|
|
|
34
34
|
const reload = useCallback(async () => {
|
|
35
35
|
const serial = ++request.current;
|
|
36
36
|
const active = () => mounted.current && current.current === scope && request.current === serial;
|
|
37
|
-
if (!enabled && !readComposerDraft(scope).executionUncertain) return;
|
|
37
|
+
if (!ready || (!enabled && !readComposerDraft(scope).executionUncertain)) return;
|
|
38
38
|
if (!client.getExecutionConfig) {
|
|
39
39
|
setView({ scope, loading: false, error: "当前接入尚未提供执行设置。" });
|
|
40
40
|
return;
|
|
@@ -50,7 +50,7 @@ export function useExecutionConfig({ client, scope, target, enabled, initial, ru
|
|
|
50
50
|
} catch (error) {
|
|
51
51
|
if (active()) setView(value => ({ ...(value.scope === scope ? value : {}), scope, error: errorText(error), loading: false }));
|
|
52
52
|
}
|
|
53
|
-
}, [client, scope, target, enabled]);
|
|
53
|
+
}, [client, scope, target, enabled, ready]);
|
|
54
54
|
useEffect(() => { void reload(); return () => { request.current++; }; }, [reload]);
|
|
55
55
|
const wasRunning = useRef(running);
|
|
56
56
|
useEffect(() => {
|
package/src/operator.base.css
CHANGED
|
@@ -1068,7 +1068,8 @@ button.tpeek-more:hover{color:var(--accent-ink);}
|
|
|
1068
1068
|
.compact-session>.sess-rail{flex:1;}
|
|
1069
1069
|
.compact-session .sess-head{flex-wrap:wrap;}
|
|
1070
1070
|
.compact-session .sh-tools{flex-wrap:wrap;}
|
|
1071
|
-
|
|
1071
|
+
/* 保留消息引用能力;Chat 消息下方不再显示操作入口。 */
|
|
1072
|
+
.msg-actions{display:none;}
|
|
1072
1073
|
.msg-actions button{display:flex;align-items:center;gap:5px;min-height:32px;padding:5px 8px;border-radius:6px;background:transparent;font-size:12px;color:var(--ink-3);}
|
|
1073
1074
|
.msg-actions button svg{width:14px;height:14px;}
|
|
1074
1075
|
.msg-actions button:hover,.msg-actions button:focus-visible{background:var(--surface-2);color:var(--ink);}
|
|
@@ -1420,7 +1421,7 @@ button.pop-item:hover{background:var(--surface-2);}
|
|
|
1420
1421
|
.composer .comp-box{border-radius:26px;border-color:var(--line);box-shadow:0 4px 20px rgba(0,0,0,.035);}
|
|
1421
1422
|
.composer .comp-box:focus-within{border-color:var(--line-strong);box-shadow:0 6px 24px rgba(0,0,0,.055);}
|
|
1422
1423
|
.composer .comp-toolbar{gap:6px;padding:6px 12px 12px;}
|
|
1423
|
-
.composer .comp-area{padding:
|
|
1424
|
+
.composer .comp-area{padding:12px 20px 4px;}
|
|
1424
1425
|
.composer .attach-chip.image{width:108px;height:88px;border-radius:12px;}
|
|
1425
1426
|
.composer .attach-chip.image>img{height:100%;object-fit:cover;}
|
|
1426
1427
|
.composer .attach-chip .attach-x{width:26px;height:26px;top:4px;right:4px;font-size:16px;}
|
|
@@ -1429,7 +1430,7 @@ button.pop-item:hover{background:var(--surface-2);}
|
|
|
1429
1430
|
.composer .attach-row .attach-chip{flex:none;}
|
|
1430
1431
|
.composer .cli-blocks{max-height:min(30vh,180px);}
|
|
1431
1432
|
@container(max-width:420px){
|
|
1432
|
-
.composer .comp-area{padding:
|
|
1433
|
+
.composer .comp-area{padding:12px 16px 4px;}
|
|
1433
1434
|
.composer .comp-toolbar{gap:4px;padding:6px 10px 10px;}
|
|
1434
1435
|
.composer .comp-setting{padding:6px 9px;}
|
|
1435
1436
|
.composer .attach-chip.image{width:86px;height:76px;}
|
package/src/operator.css
CHANGED
|
@@ -1068,7 +1068,8 @@
|
|
|
1068
1068
|
.cli-ui .compact-session>.sess-rail{flex:1;}
|
|
1069
1069
|
.cli-ui .compact-session .sess-head{flex-wrap:wrap;}
|
|
1070
1070
|
.cli-ui .compact-session .sh-tools{flex-wrap:wrap;}
|
|
1071
|
-
|
|
1071
|
+
/* 保留消息引用能力;Chat 消息下方不再显示操作入口。 */
|
|
1072
|
+
.cli-ui .msg-actions{display:none;}
|
|
1072
1073
|
.cli-ui .msg-actions button{display:flex;align-items:center;gap:5px;min-height:32px;padding:5px 8px;border-radius:6px;background:transparent;font-size:12px;color:var(--ink-3);}
|
|
1073
1074
|
.cli-ui .msg-actions button svg{width:14px;height:14px;}
|
|
1074
1075
|
.cli-ui .msg-actions button:hover,.cli-ui .msg-actions button:focus-visible{background:var(--surface-2);color:var(--ink);}
|
|
@@ -1420,7 +1421,7 @@
|
|
|
1420
1421
|
.cli-ui .composer .comp-box{border-radius:26px;border-color:var(--line);box-shadow:0 4px 20px rgba(0,0,0,.035);}
|
|
1421
1422
|
.cli-ui .composer .comp-box:focus-within{border-color:var(--line-strong);box-shadow:0 6px 24px rgba(0,0,0,.055);}
|
|
1422
1423
|
.cli-ui .composer .comp-toolbar{gap:6px;padding:6px 12px 12px;}
|
|
1423
|
-
.cli-ui .composer .comp-area{padding:
|
|
1424
|
+
.cli-ui .composer .comp-area{padding:12px 20px 4px;}
|
|
1424
1425
|
.cli-ui .composer .attach-chip.image{width:108px;height:88px;border-radius:12px;}
|
|
1425
1426
|
.cli-ui .composer .attach-chip.image>img{height:100%;object-fit:cover;}
|
|
1426
1427
|
.cli-ui .composer .attach-chip .attach-x{width:26px;height:26px;top:4px;right:4px;font-size:16px;}
|
|
@@ -1429,7 +1430,7 @@
|
|
|
1429
1430
|
.cli-ui .composer .attach-row .attach-chip{flex:none;}
|
|
1430
1431
|
.cli-ui .composer .cli-blocks{max-height:min(30vh,180px);}
|
|
1431
1432
|
@container(max-width:420px){
|
|
1432
|
-
.cli-ui .composer .comp-area{padding:
|
|
1433
|
+
.cli-ui .composer .comp-area{padding:12px 16px 4px;}
|
|
1433
1434
|
.cli-ui .composer .comp-toolbar{gap:4px;padding:6px 10px 10px;}
|
|
1434
1435
|
.cli-ui .composer .comp-setting{padding:6px 9px;}
|
|
1435
1436
|
.cli-ui .composer .attach-chip.image{width:86px;height:76px;}
|
package/src/styles.css
CHANGED
|
@@ -53,8 +53,9 @@
|
|
|
53
53
|
.cli-ui .sess-head .crumb{overflow-wrap:anywhere;}
|
|
54
54
|
.cli-ui .cli-export{white-space:nowrap;}
|
|
55
55
|
.cli-ui .comp-area textarea{min-width:0;}
|
|
56
|
-
.cli-ui .comp-foot{gap:
|
|
56
|
+
.cli-ui .composer .comp-foot{gap:4px;padding:4px 10px;background:transparent;border-top:0;flex-wrap:wrap;}
|
|
57
57
|
.cli-ui .comp-foot>.comp-control{flex:0 0 auto;}
|
|
58
|
+
.cli-ui .comp-foot .permission{padding-inline:6px;}
|
|
58
59
|
.cli-ui .cli-attach{display:inline-flex;justify-content:center;align-items:center;gap:5px;min-width:44px;min-height:44px;padding:0 8px;border-radius:7px;color:var(--ink-3);font-size:12px;}
|
|
59
60
|
@media(hover:hover) and (pointer:fine){.cli-ui .cli-attach:hover{background:var(--surface-2);color:var(--ink);}}
|
|
60
61
|
.cli-ui .cli-attach svg{width:22px;height:22px;}
|