reasonix 0.45.1 → 0.46.1
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 +3 -8
- package/README.zh-CN.md +3 -0
- package/dashboard/dist/app.js +76 -6
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{acp-LGBLHBKY.js → acp-LKJU5DZX.js} +19 -19
- package/dist/cli/chat-W7LAWEN6.js +51 -0
- package/dist/cli/{chunk-5I2C4JEO.js → chunk-2AASOSD5.js} +6 -6
- package/dist/cli/{chunk-5I2C4JEO.js.map → chunk-2AASOSD5.js.map} +1 -1
- package/dist/cli/{chunk-HVUZWNSP.js → chunk-3AAG2CUT.js} +2 -2
- package/dist/cli/{chunk-IJ7JA32V.js → chunk-6VANO7KB.js} +44 -8
- package/dist/cli/chunk-6VANO7KB.js.map +1 -0
- package/dist/cli/{chunk-LIR2HBQH.js → chunk-7LOJS3LV.js} +2 -2
- package/dist/cli/{chunk-AB2RED3C.js → chunk-7SGGXNB2.js} +16 -16
- package/dist/cli/{chunk-AB2RED3C.js.map → chunk-7SGGXNB2.js.map} +1 -1
- package/dist/cli/{chunk-CBIQWMS6.js → chunk-7YW6TPXK.js} +7 -7
- package/dist/cli/{chunk-A3TSSDS2.js → chunk-C72TNHDE.js} +2 -2
- package/dist/cli/{chunk-AVFXO2EZ.js → chunk-DGA5QYFM.js} +107 -4
- package/dist/cli/chunk-DGA5QYFM.js.map +1 -0
- package/dist/cli/{chunk-JNAQYELD.js → chunk-DHRVZJ2D.js} +2 -2
- package/dist/cli/{chunk-5ACMUK4Q.js → chunk-E7TAHQ4A.js} +2 -1
- package/dist/cli/{chunk-C53JQES5.js → chunk-EAOL43HB.js} +3 -3
- package/dist/cli/{chunk-QJDDIK3Z.js → chunk-IYQ325V7.js} +2 -2
- package/dist/cli/{chunk-4CTDEJUF.js → chunk-JLQDNLZF.js} +2 -2
- package/dist/cli/{chunk-RDRC3XDT.js → chunk-JVFEJAJX.js} +2 -2
- package/dist/cli/{chunk-GTZTQNX5.js → chunk-JVQT5IYP.js} +7 -7
- package/dist/cli/{chunk-IBJIK2DD.js → chunk-K3AIFMI6.js} +2 -2
- package/dist/cli/chunk-K3AIFMI6.js.map +1 -0
- package/dist/cli/{chunk-ZZYBBX5N.js → chunk-M4E5JK6S.js} +23 -9
- package/dist/cli/chunk-M4E5JK6S.js.map +1 -0
- package/dist/cli/{chunk-V26WPN3J.js → chunk-MIIZJD5O.js} +28 -1
- package/dist/cli/chunk-MIIZJD5O.js.map +1 -0
- package/dist/cli/{chunk-4HCP2UQW.js → chunk-NCBP5D6E.js} +2 -2
- package/dist/cli/{chunk-HKWSPKMU.js → chunk-R2ASNSEO.js} +8 -8
- package/dist/cli/{chunk-W7YGWUWU.js → chunk-SE7C5ZSI.js} +3 -3
- package/dist/cli/{chunk-OLLQ76U6.js → chunk-SPXN5JIT.js} +1536 -2500
- package/dist/cli/chunk-SPXN5JIT.js.map +1 -0
- package/dist/cli/{chunk-WK3UFQY3.js → chunk-TDSBASOF.js} +2 -2
- package/dist/cli/{chunk-XSU4QVFW.js → chunk-WQ6ZRDQM.js} +12 -3
- package/dist/cli/chunk-WQ6ZRDQM.js.map +1 -0
- package/dist/cli/{chunk-R3CTO2HM.js → chunk-WRONKNIH.js} +2 -2
- package/dist/cli/{chunk-MJ6W5UN3.js → chunk-XPAUNFOL.js} +2 -2
- package/dist/cli/{chunk-NVURFF27.js → chunk-YRLC2EDF.js} +2 -2
- package/dist/cli/{chunk-WL6SNQ5T.js → chunk-ZOQHVQON.js} +9 -93
- package/dist/cli/chunk-ZOQHVQON.js.map +1 -0
- package/dist/cli/{code-D7V2TQX2.js → code-2JIHL5M2.js} +30 -33
- package/dist/cli/code-2JIHL5M2.js.map +1 -0
- package/dist/cli/{commands-OCU42XG4.js → commands-OPT5AJNH.js} +4 -4
- package/dist/cli/{commit-XCQIQCYG.js → commit-KA37H6GM.js} +3 -3
- package/dist/cli/{desktop-ZCUG7LMF.js → desktop-5ONTRU3C.js} +20 -20
- package/dist/cli/{diff-66B2KWOJ.js → diff-SOIA7AKH.js} +8 -8
- package/dist/cli/{doctor-Y73CPPRZ.js → doctor-RCUP4XRV.js} +9 -9
- package/dist/cli/{events-NGZ2OJYH.js → events-6KHITNX4.js} +3 -3
- package/dist/cli/index.js +46 -102
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-MPVGBBJF.js → mcp-JP5OWD6R.js} +2 -2
- package/dist/cli/{mcp-browse-4XOTC3FJ.js → mcp-browse-ONCJJPJN.js} +2 -2
- package/dist/cli/{mcp-inspect-CEMGKKAH.js → mcp-inspect-TPLHW5JA.js} +4 -4
- package/dist/cli/{prompt-2D7ID24X.js → prompt-RJDNCQAP.js} +3 -3
- package/dist/cli/{prune-sessions-OJEYYLHY.js → prune-sessions-MKEATRVL.js} +2 -2
- package/dist/cli/{replay-HIQYWBEK.js → replay-4NILJG4U.js} +8 -8
- package/dist/cli/{run-5DPQFSP6.js → run-WFGXB4SB.js} +17 -18
- package/dist/cli/run-WFGXB4SB.js.map +1 -0
- package/dist/cli/{server-TQ2IHYQJ.js → server-5VFQP3PV.js} +13 -13
- package/dist/cli/{sessions-KY54NG45.js → sessions-5XDJDALO.js} +28 -14
- package/dist/cli/sessions-5XDJDALO.js.map +1 -0
- package/dist/cli/{setup-DDNOMMAB.js → setup-F6XSWLRA.js} +7 -7
- package/dist/cli/setup-F6XSWLRA.js.map +1 -0
- package/dist/cli/{stats-X2VTWKNS.js → stats-ALHBZICE.js} +6 -6
- package/dist/cli/{version-7O6A5T7Q.js → version-JVRAHBMM.js} +14 -14
- package/dist/index.d.ts +23 -13
- package/dist/index.js +1112 -1090
- package/dist/index.js.map +1 -1
- package/package.json +5 -16
- package/dist/cli/chat-I7UTQO5L.js +0 -51
- package/dist/cli/chunk-AVFXO2EZ.js.map +0 -1
- package/dist/cli/chunk-IBJIK2DD.js.map +0 -1
- package/dist/cli/chunk-IJ7JA32V.js.map +0 -1
- package/dist/cli/chunk-OLLQ76U6.js.map +0 -1
- package/dist/cli/chunk-V26WPN3J.js.map +0 -1
- package/dist/cli/chunk-WL6SNQ5T.js.map +0 -1
- package/dist/cli/chunk-XSU4QVFW.js.map +0 -1
- package/dist/cli/chunk-ZZYBBX5N.js.map +0 -1
- package/dist/cli/code-D7V2TQX2.js.map +0 -1
- package/dist/cli/run-5DPQFSP6.js.map +0 -1
- package/dist/cli/sessions-KY54NG45.js.map +0 -1
- package/dist/cli/setup-DDNOMMAB.js.map +0 -1
- /package/dist/cli/{acp-LGBLHBKY.js.map → acp-LKJU5DZX.js.map} +0 -0
- /package/dist/cli/{chat-I7UTQO5L.js.map → chat-W7LAWEN6.js.map} +0 -0
- /package/dist/cli/{chunk-HVUZWNSP.js.map → chunk-3AAG2CUT.js.map} +0 -0
- /package/dist/cli/{chunk-LIR2HBQH.js.map → chunk-7LOJS3LV.js.map} +0 -0
- /package/dist/cli/{chunk-CBIQWMS6.js.map → chunk-7YW6TPXK.js.map} +0 -0
- /package/dist/cli/{chunk-A3TSSDS2.js.map → chunk-C72TNHDE.js.map} +0 -0
- /package/dist/cli/{chunk-JNAQYELD.js.map → chunk-DHRVZJ2D.js.map} +0 -0
- /package/dist/cli/{chunk-5ACMUK4Q.js.map → chunk-E7TAHQ4A.js.map} +0 -0
- /package/dist/cli/{chunk-C53JQES5.js.map → chunk-EAOL43HB.js.map} +0 -0
- /package/dist/cli/{chunk-QJDDIK3Z.js.map → chunk-IYQ325V7.js.map} +0 -0
- /package/dist/cli/{chunk-4CTDEJUF.js.map → chunk-JLQDNLZF.js.map} +0 -0
- /package/dist/cli/{chunk-RDRC3XDT.js.map → chunk-JVFEJAJX.js.map} +0 -0
- /package/dist/cli/{chunk-GTZTQNX5.js.map → chunk-JVQT5IYP.js.map} +0 -0
- /package/dist/cli/{chunk-4HCP2UQW.js.map → chunk-NCBP5D6E.js.map} +0 -0
- /package/dist/cli/{chunk-HKWSPKMU.js.map → chunk-R2ASNSEO.js.map} +0 -0
- /package/dist/cli/{chunk-W7YGWUWU.js.map → chunk-SE7C5ZSI.js.map} +0 -0
- /package/dist/cli/{chunk-WK3UFQY3.js.map → chunk-TDSBASOF.js.map} +0 -0
- /package/dist/cli/{chunk-R3CTO2HM.js.map → chunk-WRONKNIH.js.map} +0 -0
- /package/dist/cli/{chunk-MJ6W5UN3.js.map → chunk-XPAUNFOL.js.map} +0 -0
- /package/dist/cli/{chunk-NVURFF27.js.map → chunk-YRLC2EDF.js.map} +0 -0
- /package/dist/cli/{commands-OCU42XG4.js.map → commands-OPT5AJNH.js.map} +0 -0
- /package/dist/cli/{commit-XCQIQCYG.js.map → commit-KA37H6GM.js.map} +0 -0
- /package/dist/cli/{desktop-ZCUG7LMF.js.map → desktop-5ONTRU3C.js.map} +0 -0
- /package/dist/cli/{diff-66B2KWOJ.js.map → diff-SOIA7AKH.js.map} +0 -0
- /package/dist/cli/{doctor-Y73CPPRZ.js.map → doctor-RCUP4XRV.js.map} +0 -0
- /package/dist/cli/{events-NGZ2OJYH.js.map → events-6KHITNX4.js.map} +0 -0
- /package/dist/cli/{mcp-MPVGBBJF.js.map → mcp-JP5OWD6R.js.map} +0 -0
- /package/dist/cli/{mcp-browse-4XOTC3FJ.js.map → mcp-browse-ONCJJPJN.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-CEMGKKAH.js.map → mcp-inspect-TPLHW5JA.js.map} +0 -0
- /package/dist/cli/{prompt-2D7ID24X.js.map → prompt-RJDNCQAP.js.map} +0 -0
- /package/dist/cli/{prune-sessions-OJEYYLHY.js.map → prune-sessions-MKEATRVL.js.map} +0 -0
- /package/dist/cli/{replay-HIQYWBEK.js.map → replay-4NILJG4U.js.map} +0 -0
- /package/dist/cli/{server-TQ2IHYQJ.js.map → server-5VFQP3PV.js.map} +0 -0
- /package/dist/cli/{stats-X2VTWKNS.js.map → stats-ALHBZICE.js.map} +0 -0
- /package/dist/cli/{version-7O6A5T7Q.js.map → version-JVRAHBMM.js.map} +0 -0
package/README.md
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
<a href="./docs/ARCHITECTURE.md">Architecture</a>
|
|
15
15
|
·
|
|
16
16
|
<a href="./benchmarks/">Benchmarks</a>
|
|
17
|
+
·
|
|
18
|
+
<a href="https://discord.gg/XF78rEME2D">Discord</a>
|
|
17
19
|
</p>
|
|
18
20
|
|
|
19
21
|
<p align="center">
|
|
@@ -25,6 +27,7 @@
|
|
|
25
27
|
<a href="https://github.com/esengine/reasonix/stargazers"><img src="https://img.shields.io/github/stars/esengine/reasonix.svg?style=flat-square&color=dbab09&labelColor=161b22&logo=github&logoColor=white" alt="GitHub stars"/></a>
|
|
26
28
|
<a href="https://github.com/esengine/reasonix/graphs/contributors"><img src="https://img.shields.io/github/contributors/esengine/reasonix.svg?style=flat-square&color=bc8cff&labelColor=161b22&logo=github&logoColor=white" alt="contributors"/></a>
|
|
27
29
|
<a href="https://github.com/esengine/reasonix/discussions"><img src="https://img.shields.io/github/discussions/esengine/reasonix.svg?style=flat-square&color=58a6ff&labelColor=161b22&logo=github&logoColor=white" alt="Discussions"/></a>
|
|
30
|
+
<a href="https://discord.gg/XF78rEME2D"><img src="https://img.shields.io/badge/discord-join-5865F2.svg?style=flat-square&labelColor=161b22&logo=discord&logoColor=white" alt="Discord"/></a>
|
|
28
31
|
</p>
|
|
29
32
|
|
|
30
33
|
<p align="center">
|
|
@@ -86,14 +89,6 @@ Bare `reasonix` (no subcommand) launches `code` in the current directory — typ
|
|
|
86
89
|
| `reasonix doctor` | Health check: Node, API key, MCP wiring. |
|
|
87
90
|
| `reasonix update` | Upgrade Reasonix itself. |
|
|
88
91
|
|
|
89
|
-
### Terminal renderer (Rust by default)
|
|
90
|
-
|
|
91
|
-
Since 0.44.0, Reasonix ships a native ratatui renderer (`reasonix-render`) as the default TUI. `npm install` resolves one of five pre-built `@reasonix/render-{platform}-{arch}` sub-packages via `optionalDependencies` so install is zero-config on **win32-x64 · linux-x64 · linux-arm64 · darwin-x64 · darwin-arm64**. No cargo, no toolchain, nothing extra to fetch.
|
|
92
|
-
|
|
93
|
-
- Want the old Ink/Node TUI back? Pass `--node` to any subcommand (`reasonix --node`, `reasonix code --node`, `reasonix chat --node`) or set `REASONIX_RENDERER=node` in your shell.
|
|
94
|
-
- Running on a platform without a published sub-package (Linux musl, FreeBSD, ARM v7, etc.)? Reasonix prints a one-line warning and auto-falls-back to the Ink renderer — nothing breaks.
|
|
95
|
-
- Building rust from source? `cargo build --release --bin reasonix-render` inside the repo; the dev flow (`npm run dev`) does this automatically. The resolver also accepts `REASONIX_RENDER_BIN=/path/to/binary` to pin a specific build for testing.
|
|
96
|
-
|
|
97
92
|
Other subcommands (`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`) are in `reasonix --help` and the [CLI reference](https://esengine.github.io/DeepSeek-Reasonix/#cli).
|
|
98
93
|
|
|
99
94
|
### QQ channel
|
package/README.zh-CN.md
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
<a href="./docs/ARCHITECTURE.md">架构文档</a>
|
|
15
15
|
·
|
|
16
16
|
<a href="./benchmarks/">基准测试</a>
|
|
17
|
+
·
|
|
18
|
+
<a href="https://discord.gg/XF78rEME2D">Discord</a>
|
|
17
19
|
</p>
|
|
18
20
|
|
|
19
21
|
<p align="center">
|
|
@@ -25,6 +27,7 @@
|
|
|
25
27
|
<a href="https://github.com/esengine/reasonix/stargazers"><img src="https://img.shields.io/github/stars/esengine/reasonix.svg?style=flat-square&color=dbab09&labelColor=161b22&logo=github&logoColor=white" alt="GitHub stars"/></a>
|
|
26
28
|
<a href="https://github.com/esengine/reasonix/graphs/contributors"><img src="https://img.shields.io/github/contributors/esengine/reasonix.svg?style=flat-square&color=bc8cff&labelColor=161b22&logo=github&logoColor=white" alt="contributors"/></a>
|
|
27
29
|
<a href="https://github.com/esengine/reasonix/discussions"><img src="https://img.shields.io/github/discussions/esengine/reasonix.svg?style=flat-square&color=58a6ff&labelColor=161b22&logo=github&logoColor=white" alt="Discussions"/></a>
|
|
30
|
+
<a href="https://discord.gg/XF78rEME2D"><img src="https://img.shields.io/badge/discord-join-5865F2.svg?style=flat-square&labelColor=161b22&logo=discord&logoColor=white" alt="Discord"/></a>
|
|
28
31
|
</p>
|
|
29
32
|
|
|
30
33
|
<p align="center">
|
package/dashboard/dist/app.js
CHANGED
|
@@ -25059,12 +25059,22 @@ function CodeViewer(props) {
|
|
|
25059
25059
|
</div>
|
|
25060
25060
|
`;
|
|
25061
25061
|
}
|
|
25062
|
+
function summarizeTool(activeTool) {
|
|
25063
|
+
if (!activeTool) return null;
|
|
25064
|
+
const name = activeTool.toolName ?? "tool";
|
|
25065
|
+
const args = parseToolArgs(activeTool.args);
|
|
25066
|
+
const path = args?.path ?? args?.file_path ?? args?.filename;
|
|
25067
|
+
if (path) return `${name} \u2192 ${path}`;
|
|
25068
|
+
return name;
|
|
25069
|
+
}
|
|
25062
25070
|
function ChatPane(props) {
|
|
25063
25071
|
useLang();
|
|
25064
25072
|
const [messages, setMessages] = d2([]);
|
|
25065
25073
|
const [streaming, setStreaming] = d2(null);
|
|
25066
25074
|
const [activeTool, setActiveTool] = d2(null);
|
|
25067
25075
|
const [busy, setBusy] = d2(false);
|
|
25076
|
+
const [turnStartedAt, setTurnStartedAt] = d2(null);
|
|
25077
|
+
const [nowTick, setNowTick] = d2(0);
|
|
25068
25078
|
const [input, setInput] = d2("");
|
|
25069
25079
|
const [error, setError] = d2(null);
|
|
25070
25080
|
const [statusLine, setStatusLine] = d2(null);
|
|
@@ -25079,6 +25089,7 @@ function ChatPane(props) {
|
|
|
25079
25089
|
const [popoverKind, setPopoverKind] = d2(null);
|
|
25080
25090
|
const [popoverItems, setPopoverItems] = d2([]);
|
|
25081
25091
|
const [popoverSel, setPopoverSel] = d2(0);
|
|
25092
|
+
const composing = A2(false);
|
|
25082
25093
|
y2(() => {
|
|
25083
25094
|
let cancelled = false;
|
|
25084
25095
|
(async () => {
|
|
@@ -25092,6 +25103,29 @@ function ChatPane(props) {
|
|
|
25092
25103
|
cancelled = true;
|
|
25093
25104
|
};
|
|
25094
25105
|
}, []);
|
|
25106
|
+
y2(() => {
|
|
25107
|
+
if (!busy) return;
|
|
25108
|
+
const id = setInterval(() => setNowTick((n3) => n3 + 1), 500);
|
|
25109
|
+
return () => clearInterval(id);
|
|
25110
|
+
}, [busy]);
|
|
25111
|
+
y2(() => {
|
|
25112
|
+
if (busy) {
|
|
25113
|
+
if (!turnStartedAt) setTurnStartedAt(Date.now());
|
|
25114
|
+
} else {
|
|
25115
|
+
setTurnStartedAt(null);
|
|
25116
|
+
}
|
|
25117
|
+
}, [busy, turnStartedAt]);
|
|
25118
|
+
y2(() => {
|
|
25119
|
+
if (!busy) return;
|
|
25120
|
+
const handler = (e3) => {
|
|
25121
|
+
if (e3.key === "Escape") {
|
|
25122
|
+
e3.preventDefault();
|
|
25123
|
+
api("/abort", { method: "POST" }).catch(() => void 0);
|
|
25124
|
+
}
|
|
25125
|
+
};
|
|
25126
|
+
document.addEventListener("keydown", handler);
|
|
25127
|
+
return () => document.removeEventListener("keydown", handler);
|
|
25128
|
+
}, [busy]);
|
|
25095
25129
|
y2(() => {
|
|
25096
25130
|
let cancelled = false;
|
|
25097
25131
|
(async () => {
|
|
@@ -25286,6 +25320,7 @@ function ChatPane(props) {
|
|
|
25286
25320
|
(e3) => {
|
|
25287
25321
|
const v3 = e3.target.value;
|
|
25288
25322
|
setInput(v3);
|
|
25323
|
+
if (composing.current) return;
|
|
25289
25324
|
updatePopover(v3);
|
|
25290
25325
|
},
|
|
25291
25326
|
[updatePopover]
|
|
@@ -25364,8 +25399,19 @@ ${commentRefs}` : commentRefs;
|
|
|
25364
25399
|
setError(t4("changes.clearFailed", { error: err.message }));
|
|
25365
25400
|
}
|
|
25366
25401
|
}, []);
|
|
25402
|
+
const onCompositionStart = q2(() => {
|
|
25403
|
+
composing.current = true;
|
|
25404
|
+
}, []);
|
|
25405
|
+
const onCompositionEnd = q2(
|
|
25406
|
+
(e3) => {
|
|
25407
|
+
composing.current = false;
|
|
25408
|
+
void updatePopover(e3.target.value);
|
|
25409
|
+
},
|
|
25410
|
+
[updatePopover]
|
|
25411
|
+
);
|
|
25367
25412
|
const onKeyDown = q2(
|
|
25368
25413
|
(e3) => {
|
|
25414
|
+
if (composing.current) return;
|
|
25369
25415
|
if (popoverKind && popoverItems.length > 0) {
|
|
25370
25416
|
if (e3.key === "ArrowDown") {
|
|
25371
25417
|
e3.preventDefault();
|
|
@@ -25388,11 +25434,6 @@ ${commentRefs}` : commentRefs;
|
|
|
25388
25434
|
return;
|
|
25389
25435
|
}
|
|
25390
25436
|
}
|
|
25391
|
-
if (e3.key === "Escape" && busy) {
|
|
25392
|
-
e3.preventDefault();
|
|
25393
|
-
abort();
|
|
25394
|
-
return;
|
|
25395
|
-
}
|
|
25396
25437
|
if (e3.key === "Enter" && !e3.shiftKey) {
|
|
25397
25438
|
e3.preventDefault();
|
|
25398
25439
|
send();
|
|
@@ -25476,11 +25517,14 @@ ${commentRefs}` : commentRefs;
|
|
|
25476
25517
|
<textarea
|
|
25477
25518
|
class="input"
|
|
25478
25519
|
style=${{ width: "100%", resize: "none", minHeight: "36px", fontFamily: "inherit", fontSize: "13px", padding: "8px 10px", lineHeight: "1.4", background: "var(--bg-input)", border: "1px solid var(--bd)", borderRadius: "4px", color: "var(--fg-0)" }}
|
|
25479
|
-
placeholder=${props.comments.length > 0 ? "\u603B\u7ED3\u8BC4\u8BBA..." : t4("changes.chatPlaceholder")}
|
|
25520
|
+
placeholder=${busy ? t4("chat.placeholderBusy") : props.comments.length > 0 ? "\u603B\u7ED3\u8BC4\u8BBA..." : t4("changes.chatPlaceholder")}
|
|
25480
25521
|
value=${input}
|
|
25481
25522
|
onInput=${onInput}
|
|
25482
25523
|
onKeyDown=${onKeyDown}
|
|
25524
|
+
onCompositionStart=${onCompositionStart}
|
|
25525
|
+
onCompositionEnd=${onCompositionEnd}
|
|
25483
25526
|
onBlur=${() => setTimeout(() => setPopoverKind(null), 150)}
|
|
25527
|
+
disabled=${busy}
|
|
25484
25528
|
rows="2"
|
|
25485
25529
|
/>
|
|
25486
25530
|
</div>
|
|
@@ -25493,6 +25537,32 @@ ${commentRefs}` : commentRefs;
|
|
|
25493
25537
|
</div>
|
|
25494
25538
|
</div>
|
|
25495
25539
|
</div>
|
|
25540
|
+
${busy ? (() => {
|
|
25541
|
+
const elapsedMs = turnStartedAt ? Date.now() - turnStartedAt : 0;
|
|
25542
|
+
const elapsed = (elapsedMs / 1e3).toFixed(1);
|
|
25543
|
+
const textLen = streaming?.text?.length ?? 0;
|
|
25544
|
+
const reasoningLen = streaming?.reasoning?.length ?? 0;
|
|
25545
|
+
const toolSummary = summarizeTool(activeTool);
|
|
25546
|
+
const phase = toolSummary ? t4("chat.inflightRunning") : reasoningLen > 0 && textLen === 0 ? t4("chat.inflightThinking") : textLen > 0 ? t4("chat.inflightStreaming") : t4("chat.inflightWaiting");
|
|
25547
|
+
return html6`
|
|
25548
|
+
<div class="chat-inflight">
|
|
25549
|
+
<span class="spinner"></span>
|
|
25550
|
+
<span class="chat-inflight-phase">${phase}</span>
|
|
25551
|
+
<span class="chat-inflight-sep">·</span>
|
|
25552
|
+
<span class="muted">${elapsed}s</span>
|
|
25553
|
+
${toolSummary ? html6`<span class="chat-inflight-sep">·</span><span class="chat-inflight-tool" title=${toolSummary}>${toolSummary}</span>` : null}
|
|
25554
|
+
${!toolSummary && (textLen > 0 || reasoningLen > 0) ? html6`
|
|
25555
|
+
<span class="chat-inflight-sep">·</span>
|
|
25556
|
+
<span class="muted">
|
|
25557
|
+
${reasoningLen > 0 ? t4("chat.inflightReasoning", { count: reasoningLen.toLocaleString() }) : null}
|
|
25558
|
+
${reasoningLen > 0 && textLen > 0 ? html6`<span> · </span>` : null}
|
|
25559
|
+
${textLen > 0 ? t4("chat.inflightOut", { count: textLen.toLocaleString() }) : null}
|
|
25560
|
+
</span>
|
|
25561
|
+
` : null}
|
|
25562
|
+
<button class="chat-inflight-abort" onClick=${abort}>${t4("chat.abortBtn")}</button>
|
|
25563
|
+
</div>
|
|
25564
|
+
`;
|
|
25565
|
+
})() : null}
|
|
25496
25566
|
<${ChatStatusBar} stats=${stats} model=${model} />
|
|
25497
25567
|
</div>
|
|
25498
25568
|
`;
|