scream-code 0.14.6 → 0.14.7
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/dist/{app-755L4Xpi.mjs → app-D_n0flAk.mjs} +73 -15
- package/dist/{dispatch-Vy7eCkPt.mjs → dispatch-CmY89ob7.mjs} +1 -1
- package/dist/{dispatch-DEFMbHSe.mjs → dispatch-MWaAkj2l.mjs} +6 -7
- package/dist/main.mjs +1 -1
- package/dist/{text-input-dialog-C7gjr4Gk.mjs → text-input-dialog-B0yHChBj.mjs} +10 -2
- package/dist/{text-input-dialog-FGVh3qGR.mjs → text-input-dialog-B9uwX1Uy.mjs} +1 -1
- package/package.json +1 -1
|
@@ -4,8 +4,8 @@ import { dirname as __cjsShimDirname } from 'node:path';
|
|
|
4
4
|
const __filename = __cjsShimFileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = __cjsShimDirname(__filename);
|
|
6
6
|
import "./suppress-sqlite-warning-C2VB0doZ.mjs";
|
|
7
|
-
import { $t as isTodoItemShape, A as renderDiffLinesClustered, An as CLI_COMMAND_NAME, At as ENABLE_TERMINAL_FOCUS_REPORTING, B as BackgroundAgentStatusComponent, Bn as MemoryMemoStore, Bt as TERMINAL_THEME_LIGHT, Cn as loadTuiConfig, Ct as createThemeStyles, D as toggleEmptySessionHint, Dn as getInputHistoryFile, Dt as parseOsc11BackgroundTheme, E as isTurnElapsedEnabled, En as getDataDir, Et as detectTerminalTheme, F as estimateTokens, Fn as fetchCatalog, Ft as OSC11_RESPONSE_PREFIX_NO_ESC, G as getBreathingFrame, Gn as isOrphanedToolCallError, H as AgentGroupComponent, Hn as log, Ht as isStreaming, I as getSharedSpeedTracker, In as saveCatalogCache, It as QUERY_TERMINAL_THEME, J as refineGoal, Jt as printableChar, K as resetBreathingClock, Kn as ErrorCodes, L as SkillActivationComponent, Ln as ScreamHarness, Lt as TERMINAL_FOCUS_IN, M as langFromPath, Mn as CLI_USER_AGENT_PRODUCT, Mt as OSC11_QUERY, N as CachedContainer, Nn as PRODUCT_NAME, Nt as OSC11_RESPONSE, O as ToolCallComponent, On as getLogDir, Ot as DISABLE_TERMINAL_FOCUS_REPORTING, P as ThinkingComponent, Pn as DEFAULT_CATALOG_URL, Pt as OSC11_RESPONSE_PREFIX, Qt as formatErrorMessage, R as ReadGroupComponent, Rt as TERMINAL_FOCUS_OUT, S as getDaemonInstructions, Sn as TuiLikePreferencesSchema, St as createMarkdownTheme, T as isEmptySessionHintDismissed, Tn as detectShellEnvironment, Tt as getColorPalette, U as WelcomeComponent, Un as resolveGlobalLogPath, Ut as FooterComponent, V as AssistantMessageComponent, Vn as flushDiagnosticLogs, Vt as isBusy, W as BREATHE_CYCLE_MS, Wn as isScreamError, Xt as appendStreamingArgsPreview, Yt as STATUS_BULLET, Zt as argsRecord, _ as refreshUpdateCache, _n as isExperimentalFlagEnabled, _t as clearInfoPanelState, an as EMPTY_SESSION_HINT_URL, b as readJsonlFile, bn as PULSE_WAVE_FRAMES, bt as resolveThemeSync, c as hasDispose, cn as SESSION_TIPS, ct as handlePlanCommand, d as formatMemoryMemoForInjection, dn as getCtrlDHint, en as parseStreamingArgs, et as toTerminalHyperlink, fn as getLlmNotSetMessage, g as selectUpdateTarget, gn as sortSlashCommands, gt as supportsBalance, hn as BUILTIN_SLASH_COMMANDS, ht as refreshProviderBalance, i as buildRoleAdditionalText, in as CHARS_PER_TOKEN, j as highlightLines, jn as CLI_UI_MODE, jt as ENABLE_TERMINAL_THEME_REPORTING, k as renderDiffLines, kn as detectInstallSource, kt as DISABLE_TERMINAL_THEME_REPORTING, l as isPlanExpandable, ln as TIP_ROTATION_INTERVAL_MS, mn as buildSkillSlashCommands, n as clearEvalPanelState, nn as stringValue, nt as getModelCycleLevel, on as EXIT_CONFIRM_WINDOW_MS, ot as handleFusionPlanCommand, pn as getNoActiveSessionMessage, q as clearGoalState, qn as SCREAM_ERROR_INFO, r as openUrl, rn as truncateErrorMessage, s as disposeChildren, sn as MAIN_AGENT_ID, t as dispatchInput, tn as serializeToolResultOutput, tt as changeThinkingLevel, u as MoonLoader, un as getCtrlCHint, v as readUpdateCache, vn as setExperimentalFlags, w as UserMessageComponent, wn as saveTuiConfig, wt as contrastTextHex, xn as TuiConfigParseError, xt as createEditorTheme, y as appendJsonlLine, yn as PIXEL_PULSE_FRAMES, z as parseReadGroupOutput, zn as resolveScreamHome, zt as TERMINAL_THEME_DARK } from "./dispatch-
|
|
8
|
-
import { a as setLocale, o as t } from "./text-input-dialog-
|
|
7
|
+
import { $t as isTodoItemShape, A as renderDiffLinesClustered, An as CLI_COMMAND_NAME, At as ENABLE_TERMINAL_FOCUS_REPORTING, B as BackgroundAgentStatusComponent, Bn as MemoryMemoStore, Bt as TERMINAL_THEME_LIGHT, Cn as loadTuiConfig, Ct as createThemeStyles, D as toggleEmptySessionHint, Dn as getInputHistoryFile, Dt as parseOsc11BackgroundTheme, E as isTurnElapsedEnabled, En as getDataDir, Et as detectTerminalTheme, F as estimateTokens, Fn as fetchCatalog, Ft as OSC11_RESPONSE_PREFIX_NO_ESC, G as getBreathingFrame, Gn as isOrphanedToolCallError, H as AgentGroupComponent, Hn as log, Ht as isStreaming, I as getSharedSpeedTracker, In as saveCatalogCache, It as QUERY_TERMINAL_THEME, J as refineGoal, Jt as printableChar, K as resetBreathingClock, Kn as ErrorCodes, L as SkillActivationComponent, Ln as ScreamHarness, Lt as TERMINAL_FOCUS_IN, M as langFromPath, Mn as CLI_USER_AGENT_PRODUCT, Mt as OSC11_QUERY, N as CachedContainer, Nn as PRODUCT_NAME, Nt as OSC11_RESPONSE, O as ToolCallComponent, On as getLogDir, Ot as DISABLE_TERMINAL_FOCUS_REPORTING, P as ThinkingComponent, Pn as DEFAULT_CATALOG_URL, Pt as OSC11_RESPONSE_PREFIX, Qt as formatErrorMessage, R as ReadGroupComponent, Rt as TERMINAL_FOCUS_OUT, S as getDaemonInstructions, Sn as TuiLikePreferencesSchema, St as createMarkdownTheme, T as isEmptySessionHintDismissed, Tn as detectShellEnvironment, Tt as getColorPalette, U as WelcomeComponent, Un as resolveGlobalLogPath, Ut as FooterComponent, V as AssistantMessageComponent, Vn as flushDiagnosticLogs, Vt as isBusy, W as BREATHE_CYCLE_MS, Wn as isScreamError, Xt as appendStreamingArgsPreview, Yt as STATUS_BULLET, Zt as argsRecord, _ as refreshUpdateCache, _n as isExperimentalFlagEnabled, _t as clearInfoPanelState, an as EMPTY_SESSION_HINT_URL, b as readJsonlFile, bn as PULSE_WAVE_FRAMES, bt as resolveThemeSync, c as hasDispose, cn as SESSION_TIPS, ct as handlePlanCommand, d as formatMemoryMemoForInjection, dn as getCtrlDHint, en as parseStreamingArgs, et as toTerminalHyperlink, fn as getLlmNotSetMessage, g as selectUpdateTarget, gn as sortSlashCommands, gt as supportsBalance, hn as BUILTIN_SLASH_COMMANDS, ht as refreshProviderBalance, i as buildRoleAdditionalText, in as CHARS_PER_TOKEN, j as highlightLines, jn as CLI_UI_MODE, jt as ENABLE_TERMINAL_THEME_REPORTING, k as renderDiffLines, kn as detectInstallSource, kt as DISABLE_TERMINAL_THEME_REPORTING, l as isPlanExpandable, ln as TIP_ROTATION_INTERVAL_MS, mn as buildSkillSlashCommands, n as clearEvalPanelState, nn as stringValue, nt as getModelCycleLevel, on as EXIT_CONFIRM_WINDOW_MS, ot as handleFusionPlanCommand, pn as getNoActiveSessionMessage, q as clearGoalState, qn as SCREAM_ERROR_INFO, r as openUrl, rn as truncateErrorMessage, s as disposeChildren, sn as MAIN_AGENT_ID, t as dispatchInput, tn as serializeToolResultOutput, tt as changeThinkingLevel, u as MoonLoader, un as getCtrlCHint, v as readUpdateCache, vn as setExperimentalFlags, w as UserMessageComponent, wn as saveTuiConfig, wt as contrastTextHex, xn as TuiConfigParseError, xt as createEditorTheme, y as appendJsonlLine, yn as PIXEL_PULSE_FRAMES, z as parseReadGroupOutput, zn as resolveScreamHome, zt as TERMINAL_THEME_DARK } from "./dispatch-MWaAkj2l.mjs";
|
|
8
|
+
import { a as setLocale, o as t } from "./text-input-dialog-B0yHChBj.mjs";
|
|
9
9
|
import { createRequire } from "node:module";
|
|
10
10
|
import { randomUUID } from "node:crypto";
|
|
11
11
|
import { access, mkdir, mkdtemp, readFile, readdir, realpath, rm, unlink, writeFile } from "node:fs/promises";
|
|
@@ -23,14 +23,14 @@ import process$1 from "node:process";
|
|
|
23
23
|
import { Command, Option } from "commander";
|
|
24
24
|
import { createInterface } from "node:readline/promises";
|
|
25
25
|
import chalk, { chalkStderr } from "chalk";
|
|
26
|
-
import { CombinedAutocompleteProvider, Container, Editor,
|
|
26
|
+
import { CombinedAutocompleteProvider, Container, Editor, Input, Key, ProcessTerminal, ScrollView, Spacer, Text, TuiAltScreen, VStack, decodeKittyPrintable, deleteAllKittyImages, fuzzyFilter, fuzzyMatch, getCapabilities, isKeyRelease, matchesKey, truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@liutod-scream/pi-tui";
|
|
27
27
|
import { createInterface as createInterface$1 } from "node:readline";
|
|
28
28
|
//#region src/cli/build-info.ts
|
|
29
29
|
function optionalBuildString(value) {
|
|
30
30
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
31
31
|
}
|
|
32
32
|
const SCREAM_BUILD_INFO = {
|
|
33
|
-
version: optionalBuildString("0.14.
|
|
33
|
+
version: optionalBuildString("0.14.7"),
|
|
34
34
|
channel: optionalBuildString(""),
|
|
35
35
|
commit: optionalBuildString(""),
|
|
36
36
|
buildTarget: optionalBuildString("darwin-arm64")
|
|
@@ -2542,7 +2542,13 @@ var SessionEventHandler = class {
|
|
|
2542
2542
|
handleStepRetrying(event) {
|
|
2543
2543
|
this.host.streamingUI.resetLiveText();
|
|
2544
2544
|
this.host.streamingUI.resetToolUi();
|
|
2545
|
-
this.host.setAppState({
|
|
2545
|
+
this.host.setAppState({
|
|
2546
|
+
reconnectAttempt: event.nextAttempt,
|
|
2547
|
+
reconnectMaxAttempts: event.maxAttempts,
|
|
2548
|
+
reconnectDelayMs: event.delayMs,
|
|
2549
|
+
reconnectStatusCode: event.statusCode,
|
|
2550
|
+
reconnectErrorName: event.errorName
|
|
2551
|
+
});
|
|
2546
2552
|
}
|
|
2547
2553
|
maybeShowDebugTiming(event) {
|
|
2548
2554
|
if (process.env["SCREAM_CODE_DEBUG"] !== "1") return;
|
|
@@ -6154,6 +6160,30 @@ var GutterContainer = class extends Container {
|
|
|
6154
6160
|
//#endregion
|
|
6155
6161
|
//#region src/tui/components/panes/status-bar-pane.ts
|
|
6156
6162
|
/**
|
|
6163
|
+
* Single-line row: pulse wave immediately followed by its label.
|
|
6164
|
+
*
|
|
6165
|
+
* HStack cannot produce this layout: pi-tui's Text.render pads every line to
|
|
6166
|
+
* the full row width, so each child's intrinsic width equals the full width
|
|
6167
|
+
* and HStack's shrink distribution pushes the label far to the right.
|
|
6168
|
+
* Composing the line manually from the loader's unpadded frame text keeps
|
|
6169
|
+
* the label snug against the wave, and it re-reads the frame on every render
|
|
6170
|
+
* so the wave keeps animating.
|
|
6171
|
+
*/
|
|
6172
|
+
var PulseWaveLabelRow = class {
|
|
6173
|
+
wave;
|
|
6174
|
+
label;
|
|
6175
|
+
constructor(wave, label) {
|
|
6176
|
+
this.wave = wave;
|
|
6177
|
+
this.label = label;
|
|
6178
|
+
}
|
|
6179
|
+
render(width) {
|
|
6180
|
+
return [truncateToWidth(` ${this.wave.getFrameText()} ${this.label}`, Math.max(1, width))];
|
|
6181
|
+
}
|
|
6182
|
+
invalidate() {
|
|
6183
|
+
this.wave.invalidate();
|
|
6184
|
+
}
|
|
6185
|
+
};
|
|
6186
|
+
/**
|
|
6157
6187
|
* A fixed one-line status bar shown directly above the input editor: it
|
|
6158
6188
|
* displays the current work phase (idle / waiting / thinking / composing /
|
|
6159
6189
|
* tool) with its spinner, pinned to the bottom of the terminal via the dock
|
|
@@ -6179,12 +6209,8 @@ var StatusBarPaneComponent = class extends Container {
|
|
|
6179
6209
|
}
|
|
6180
6210
|
if (options.mode === "waiting" || options.mode === "tool" || options.mode === "composing" || options.mode === "thinking") {
|
|
6181
6211
|
if (options.pulseWave !== void 0) {
|
|
6182
|
-
if (options.label.length > 0)
|
|
6183
|
-
|
|
6184
|
-
row.addChild(options.pulseWave);
|
|
6185
|
-
row.addChild(new Text(` ${options.label}`, 1, 0));
|
|
6186
|
-
this.addChild(row);
|
|
6187
|
-
} else this.addChild(options.pulseWave);
|
|
6212
|
+
if (options.label.length > 0) this.addChild(new PulseWaveLabelRow(options.pulseWave, options.label));
|
|
6213
|
+
else this.addChild(options.pulseWave);
|
|
6188
6214
|
return;
|
|
6189
6215
|
}
|
|
6190
6216
|
if (options.spinner !== void 0) {
|
|
@@ -6445,6 +6471,14 @@ var PulseWaveLoader = class extends Text {
|
|
|
6445
6471
|
intervalId = null;
|
|
6446
6472
|
ui;
|
|
6447
6473
|
colorHex;
|
|
6474
|
+
/** Raw frame text without Text's full-width render padding, exposed so
|
|
6475
|
+
* callers can compose the wave inline with trailing content (e.g. the
|
|
6476
|
+
* reconnect label in the status bar). */
|
|
6477
|
+
frameText = "";
|
|
6478
|
+
/** The current frame's cells ("■ ⬝ ⬝"), unpadded. */
|
|
6479
|
+
getFrameText() {
|
|
6480
|
+
return this.frameText;
|
|
6481
|
+
}
|
|
6448
6482
|
constructor(ui, colorHex) {
|
|
6449
6483
|
super("", 1, 0);
|
|
6450
6484
|
this.ui = ui;
|
|
@@ -6475,7 +6509,8 @@ var PulseWaveLoader = class extends Text {
|
|
|
6475
6509
|
1,
|
|
6476
6510
|
2
|
|
6477
6511
|
].map((idx) => this.renderCell(idx, step.active, step.forward));
|
|
6478
|
-
this.
|
|
6512
|
+
this.frameText = cells.join(" ");
|
|
6513
|
+
this.setText(this.frameText);
|
|
6479
6514
|
this.ui.requestRender();
|
|
6480
6515
|
}
|
|
6481
6516
|
renderCell(index, active, forward) {
|
|
@@ -6499,6 +6534,7 @@ var LifecycleController = class LifecycleController {
|
|
|
6499
6534
|
terminalFocusTrackingDispose;
|
|
6500
6535
|
terminalThemeTrackingDispose;
|
|
6501
6536
|
lastActivityMode;
|
|
6537
|
+
lastReconnectAttempt = 0;
|
|
6502
6538
|
/** The active status-bar loader (PulseWaveLoader or MoonLoader). Owned by
|
|
6503
6539
|
* this controller; stopped before replacement to avoid leaking timers. */
|
|
6504
6540
|
statusBarLoader;
|
|
@@ -6741,8 +6777,11 @@ var LifecycleController = class LifecycleController {
|
|
|
6741
6777
|
updateActivityPane() {
|
|
6742
6778
|
const effectiveMode = this.resolveActivityPaneMode();
|
|
6743
6779
|
this.syncTerminalProgress(this.shouldShowTerminalProgress(effectiveMode));
|
|
6744
|
-
|
|
6780
|
+
const reconnectAttempt = this.host.state.appState.reconnectAttempt;
|
|
6781
|
+
const reconnectChanged = reconnectAttempt !== this.lastReconnectAttempt;
|
|
6782
|
+
if (effectiveMode === this.lastActivityMode && !reconnectChanged) return;
|
|
6745
6783
|
this.lastActivityMode = effectiveMode;
|
|
6784
|
+
this.lastReconnectAttempt = reconnectAttempt;
|
|
6746
6785
|
this.updateStatusBar(effectiveMode);
|
|
6747
6786
|
const { state } = this.host;
|
|
6748
6787
|
state.activityContainer.clear();
|
|
@@ -6787,7 +6826,7 @@ var LifecycleController = class LifecycleController {
|
|
|
6787
6826
|
this.statusBarLoader = loader;
|
|
6788
6827
|
state.statusBarContainer.addChild(new StatusBarPaneComponent({
|
|
6789
6828
|
mode,
|
|
6790
|
-
label:
|
|
6829
|
+
label: this.buildReconnectLabel(state),
|
|
6791
6830
|
pulseWave: loader
|
|
6792
6831
|
}));
|
|
6793
6832
|
}
|
|
@@ -6808,6 +6847,25 @@ var LifecycleController = class LifecycleController {
|
|
|
6808
6847
|
}
|
|
6809
6848
|
state.ui.requestRender();
|
|
6810
6849
|
}
|
|
6850
|
+
/** Builds the reconnect label shown next to the status-bar pulse wave
|
|
6851
|
+
* while a step retry is in flight, e.g. "重连中 3/10 · 限流 · 20s 后重试".
|
|
6852
|
+
* Returns an empty string when no retry is active. Static by design: the
|
|
6853
|
+
* delay shown is the value from the latest retry event, not a ticking
|
|
6854
|
+
* countdown. */
|
|
6855
|
+
buildReconnectLabel(state) {
|
|
6856
|
+
const a = state.appState;
|
|
6857
|
+
if (a.reconnectAttempt <= 0) return "";
|
|
6858
|
+
const reasonKey = a.reconnectStatusCode === 429 ? "status.reason_rate_limit" : a.reconnectStatusCode !== void 0 && a.reconnectStatusCode >= 500 ? "status.reason_server" : (a.reconnectErrorName ?? "").includes("Timeout") ? "status.reason_timeout" : "status.reason_connection";
|
|
6859
|
+
const reason = a.reconnectStatusCode !== void 0 ? `${t(reasonKey)} (${String(a.reconnectStatusCode)})` : a.reconnectErrorName !== void 0 && a.reconnectErrorName.length > 0 ? `${t(reasonKey)} (${a.reconnectErrorName})` : t(reasonKey);
|
|
6860
|
+
const delaySec = Math.max(1, Math.round((a.reconnectDelayMs ?? 0) / 1e3));
|
|
6861
|
+
const label = t("status.reconnecting_detail", {
|
|
6862
|
+
attempt: String(a.reconnectAttempt),
|
|
6863
|
+
max: String(a.reconnectMaxAttempts ?? 0),
|
|
6864
|
+
reason,
|
|
6865
|
+
delay: String(delaySec)
|
|
6866
|
+
});
|
|
6867
|
+
return chalk.hex(state.theme.colors.textDim)(label);
|
|
6868
|
+
}
|
|
6811
6869
|
/** Force a status-bar refresh even when the mode is unchanged. Used after
|
|
6812
6870
|
* session switches/clears: the transcript is emptied, so the empty-session
|
|
6813
6871
|
* hint must (re)appear even though idle -> idle normally short-circuits. */
|
|
@@ -12190,7 +12248,7 @@ var ScreamTUI = class {
|
|
|
12190
12248
|
const card = new OnboardingCardComponent({
|
|
12191
12249
|
colors: this.state.theme.colors,
|
|
12192
12250
|
onConfigure: () => {
|
|
12193
|
-
import("./dispatch-
|
|
12251
|
+
import("./dispatch-CmY89ob7.mjs").then(({ handleConnectCommand }) => handleConnectCommand(this, "")).finally(() => {
|
|
12194
12252
|
this.restoreEditor();
|
|
12195
12253
|
});
|
|
12196
12254
|
},
|
|
@@ -3,5 +3,5 @@ import { fileURLToPath as __cjsShimFileURLToPath } from 'node:url';
|
|
|
3
3
|
import { dirname as __cjsShimDirname } from 'node:path';
|
|
4
4
|
const __filename = __cjsShimFileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = __cjsShimDirname(__filename);
|
|
6
|
-
import { Kt as handleConnectCommand } from "./dispatch-
|
|
6
|
+
import { Kt as handleConnectCommand } from "./dispatch-MWaAkj2l.mjs";
|
|
7
7
|
export { handleConnectCommand };
|
|
@@ -6,7 +6,7 @@ const __dirname = __cjsShimDirname(__filename);
|
|
|
6
6
|
import { i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./chunk-D90kvbyJ.mjs";
|
|
7
7
|
import { C as join$1, D as resolve$1, E as relative$1, S as isAbsolute$1, T as parse$7, a as isSupportedFile, b as basename$1, i as ingestFile, r as ingestDirectory, t as multiSearch, w as normalize, x as dirname$2, y as KnowledgeStore } from "./src-BH9W5k24.mjs";
|
|
8
8
|
import { t as require_base64_js } from "./base64-js-DzVmk6Nb.mjs";
|
|
9
|
-
import { a as setLocale, i as getLocale, n as assertScreamHostIdentity, o as t, r as createScreamDefaultHeaders, t as TextInputDialogComponent } from "./text-input-dialog-
|
|
9
|
+
import { a as setLocale, i as getLocale, n as assertScreamHostIdentity, o as t, r as createScreamDefaultHeaders, t as TextInputDialogComponent } from "./text-input-dialog-B0yHChBj.mjs";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
import { createHash, randomBytes, randomInt, randomUUID } from "node:crypto";
|
|
12
12
|
import * as fs$1 from "node:fs/promises";
|
|
@@ -127027,9 +127027,8 @@ function lerpGradient(t) {
|
|
|
127027
127027
|
const b = Math.round(b0 + (b1 - b0) * localT);
|
|
127028
127028
|
return `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
|
|
127029
127029
|
}
|
|
127030
|
-
function buildStatusLine(streamingPhase, streamingStartTime
|
|
127030
|
+
function buildStatusLine(streamingPhase, streamingStartTime) {
|
|
127031
127031
|
if (streamingPhase === "idle") return t("status.idle");
|
|
127032
|
-
if (reconnectAttempt > 0 && streamingPhase === "waiting") return chalk.hex("#E85454").bold("◎") + " " + chalk.hex("#E85454")(`${t("status.reconnecting")} ${String(reconnectAttempt)}`);
|
|
127033
127032
|
let label;
|
|
127034
127033
|
if (streamingPhase === "tool") label = t("status.tool");
|
|
127035
127034
|
else if (streamingPhase === "waiting") label = t("status.waiting");
|
|
@@ -127207,7 +127206,7 @@ var FooterComponent = class {
|
|
|
127207
127206
|
let rightText;
|
|
127208
127207
|
if (this.transientHint) rightText = chalk.hex(colors.warning).bold(this.transientHint);
|
|
127209
127208
|
else {
|
|
127210
|
-
const statusLine = buildStatusLine(state.streamingPhase, state.streamingStartTime
|
|
127209
|
+
const statusLine = buildStatusLine(state.streamingPhase, state.streamingStartTime);
|
|
127211
127210
|
const ccDot = state.ccConnectActive ? chalk.hex(colors.success)("●") : chalk.hex(colors.textDim)("●");
|
|
127212
127211
|
const sessionUsage = state.sessionUsage ?? {
|
|
127213
127212
|
inputOther: 0,
|
|
@@ -129526,7 +129525,7 @@ async function guidedGoalSetup(host) {
|
|
|
129526
129525
|
host.showNotice(t("goal.storm_breaker"), t("goal.conflict_loop"));
|
|
129527
129526
|
return;
|
|
129528
129527
|
}
|
|
129529
|
-
const { TextInputDialogComponent } = await import("./text-input-dialog-
|
|
129528
|
+
const { TextInputDialogComponent } = await import("./text-input-dialog-B9uwX1Uy.mjs");
|
|
129530
129529
|
const initialDesc = await promptText(host, TextInputDialogComponent, {
|
|
129531
129530
|
title: t("goal.setup_title_initial"),
|
|
129532
129531
|
subtitle: t("goal.setup_desc_hint"),
|
|
@@ -129547,7 +129546,7 @@ async function guidedGoalSetup(host) {
|
|
|
129547
129546
|
await showGoalConfigWizard(host, session, confirmed.trim() || objective, false);
|
|
129548
129547
|
}
|
|
129549
129548
|
async function showGoalConfigWizard(host, session, objective, replace) {
|
|
129550
|
-
const { TextInputDialogComponent } = await import("./text-input-dialog-
|
|
129549
|
+
const { TextInputDialogComponent } = await import("./text-input-dialog-B9uwX1Uy.mjs");
|
|
129551
129550
|
const turnInput = await promptNumber(host, TextInputDialogComponent, {
|
|
129552
129551
|
title: t("goal.wizard_title", { objective }),
|
|
129553
129552
|
subtitle: t("goal.budget_turns_hint"),
|
|
@@ -131629,7 +131628,7 @@ var TruncatedOutputComponent = class {
|
|
|
131629
131628
|
const remaining = contentLines.length - this.maxLines;
|
|
131630
131629
|
const tail = this.maxLines <= 0 ? [] : contentLines.slice(-this.maxLines);
|
|
131631
131630
|
const expandHint = this.hintFormatter ? this.hintFormatter(remaining) : t("shell.more_lines", { count: String(remaining) });
|
|
131632
|
-
return [chalk.dim(expandHint), ...tail];
|
|
131631
|
+
return [...new Text(chalk.dim(expandHint), 2, 0).render(width), ...tail];
|
|
131633
131632
|
}
|
|
131634
131633
|
};
|
|
131635
131634
|
const renderTruncated = (_toolCall, result, ctx) => {
|
package/dist/main.mjs
CHANGED
|
@@ -6,7 +6,7 @@ const __dirname = __cjsShimDirname(__filename);
|
|
|
6
6
|
import "./suppress-sqlite-warning-C2VB0doZ.mjs";
|
|
7
7
|
//#region src/main.ts
|
|
8
8
|
try {
|
|
9
|
-
(await import("./app-
|
|
9
|
+
(await import("./app-D_n0flAk.mjs")).main();
|
|
10
10
|
} catch (error) {
|
|
11
11
|
process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
|
|
12
12
|
process.exit(1);
|
|
@@ -126,7 +126,11 @@ const dictionaries = {
|
|
|
126
126
|
"status.composing": "输出中",
|
|
127
127
|
"status.tool": "执行中",
|
|
128
128
|
"status.waiting": "等待中",
|
|
129
|
-
"status.
|
|
129
|
+
"status.reconnecting_detail": "重连中 {attempt}/{max} · {reason} · {delay}s 后重试",
|
|
130
|
+
"status.reason_rate_limit": "限流",
|
|
131
|
+
"status.reason_server": "服务器错误",
|
|
132
|
+
"status.reason_timeout": "网络超时",
|
|
133
|
+
"status.reason_connection": "连接问题",
|
|
130
134
|
"approval.allow_once": "批准一次",
|
|
131
135
|
"approval.allow_session": "批准(当前会话)",
|
|
132
136
|
"approval.deny": "拒绝",
|
|
@@ -1224,7 +1228,11 @@ const dictionaries = {
|
|
|
1224
1228
|
"status.composing": "Writing",
|
|
1225
1229
|
"status.tool": "Running",
|
|
1226
1230
|
"status.waiting": "Waiting",
|
|
1227
|
-
"status.
|
|
1231
|
+
"status.reconnecting_detail": "Reconnecting {attempt}/{max} · {reason} · retry in {delay}s",
|
|
1232
|
+
"status.reason_rate_limit": "rate limited",
|
|
1233
|
+
"status.reason_server": "server error",
|
|
1234
|
+
"status.reason_timeout": "network timeout",
|
|
1235
|
+
"status.reason_connection": "connection issue",
|
|
1228
1236
|
"approval.allow_once": "Allow Once",
|
|
1229
1237
|
"approval.allow_session": "Allow Session",
|
|
1230
1238
|
"approval.deny": "Deny",
|
|
@@ -3,5 +3,5 @@ import { fileURLToPath as __cjsShimFileURLToPath } from 'node:url';
|
|
|
3
3
|
import { dirname as __cjsShimDirname } from 'node:path';
|
|
4
4
|
const __filename = __cjsShimFileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = __cjsShimDirname(__filename);
|
|
6
|
-
import { t as TextInputDialogComponent } from "./text-input-dialog-
|
|
6
|
+
import { t as TextInputDialogComponent } from "./text-input-dialog-B0yHChBj.mjs";
|
|
7
7
|
export { TextInputDialogComponent };
|