scream-code 0.19.0 → 0.19.2

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.
@@ -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 { A as sharedMemoStore, B as buildProjectTagCloud, C as applyConsolidation, D as parseMemoryMemos, E as buildExitExtractionPrompt, F as probeLocalEmbeddingSupport, G as join$1, H as basename$1, I as createMemoryMemo, J as relative$1, K as normalize, L as toSummary, M as clearEmbeddingModelCache, N as createEmbeddingEngine, O as stripMemoryTags, P as hasEmbeddingModelCache$1, R as generateTags, S as DreamTracker, T as EXIT_EXTRACTION_SYSTEM_PROMPT, U as dirname$2, V as rankMemos, W as isAbsolute$1, Y as resolve$2, a as isSupportedFile, b as sharedKnowledgeStoreReady, i as ingestFile, j as classifyEmbeddingFailure, k as MemoryMemoStore, q as parse$7, r as ingestDirectory, t as multiSearch, w as buildConsolidationPlan, y as sharedKnowledgeStore, z as normalizeTags } from "./src-Cu3sUIJK.mjs";
8
8
  import { n as require_base64_js, t as XMLParser } from "./XMLParser-DFAnGqkc.mjs";
9
- import { a as assertScreamHostIdentity, i as t, n as getLocale, o as createScreamDefaultHeaders, r as setLocale, t as TextInputDialogComponent } from "./text-input-dialog-CCDiUbcL.mjs";
9
+ import { a as assertScreamHostIdentity, i as t, n as getLocale, o as createScreamDefaultHeaders, r as setLocale, t as TextInputDialogComponent } from "./text-input-dialog-N0mGJvxm.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";
@@ -91560,7 +91560,6 @@ const REVERSIBLE_TOOLS = new Set([
91560
91560
  "SendSubagentMessage",
91561
91561
  "Agent",
91562
91562
  "WolfPack",
91563
- "message_bot",
91564
91563
  "CreateGoal",
91565
91564
  "GetGoal",
91566
91565
  "UpdateGoal",
@@ -117148,8 +117147,8 @@ function readSessionAgentProfile(value) {
117148
117147
  /**
117149
117148
  * Composes a serializable session profile onto the built-in main-agent
117150
117149
  * profile: the base renderer runs first and the role text is appended after
117151
- * it, so a bot keeps the built-in operating instructions and adds its own
117152
- * role on top instead of replacing them.
117150
+ * it, so a pinned profile keeps the built-in operating instructions and adds
117151
+ * its own role on top instead of replacing them.
117153
117152
  */
117154
117153
  function composeSessionAgentProfile(profile) {
117155
117154
  const base = DEFAULT_AGENT_PROFILES["agent"];
@@ -137134,8 +137133,6 @@ const TuiLikePreferencesSchema = z.object({
137134
137133
  const TuiConfigFileSchema = z.object({
137135
137134
  theme: TuiThemeSchema.optional(),
137136
137135
  language: z.enum(["zh", "en"]).optional(),
137137
- /** Auto-enter the welcome page after the loading splash finishes. */
137138
- autoStart: z.boolean().optional(),
137139
137136
  editor: z.object({ command: z.string().optional() }).optional(),
137140
137137
  notifications: z.object({
137141
137138
  enabled: z.boolean().optional(),
@@ -137161,7 +137158,6 @@ const TuiConfigFileSchema = z.object({
137161
137158
  const TuiConfigSchema = z.object({
137162
137159
  theme: TuiThemeSchema,
137163
137160
  language: z.enum(["zh", "en"]),
137164
- autoStart: z.boolean(),
137165
137161
  editorCommand: z.string().nullable(),
137166
137162
  notifications: NotificationsConfigSchema,
137167
137163
  like: TuiLikePreferencesSchema,
@@ -137178,7 +137174,6 @@ const DEFAULT_NOTIFICATIONS_CONFIG = {
137178
137174
  const DEFAULT_TUI_CONFIG = TuiConfigSchema.parse({
137179
137175
  theme: "auto",
137180
137176
  language: getLocale(),
137181
- autoStart: false,
137182
137177
  editorCommand: null,
137183
137178
  notifications: DEFAULT_NOTIFICATIONS_CONFIG,
137184
137179
  like: {},
@@ -137231,7 +137226,6 @@ function normalizeTuiConfig(config) {
137231
137226
  return TuiConfigSchema.parse({
137232
137227
  theme: config.theme ?? DEFAULT_TUI_CONFIG.theme,
137233
137228
  language: config.language ?? DEFAULT_TUI_CONFIG.language,
137234
- autoStart: config.autoStart ?? DEFAULT_TUI_CONFIG.autoStart,
137235
137229
  editorCommand: command === void 0 || command.length === 0 ? null : command,
137236
137230
  notifications: {
137237
137231
  enabled: config.notifications?.enabled ?? DEFAULT_NOTIFICATIONS_CONFIG.enabled,
@@ -137278,7 +137272,6 @@ function renderTuiConfig(config) {
137278
137272
 
137279
137273
  theme = "${config.theme}" # "auto" | "dark" | "light"
137280
137274
  language = "${config.language}" # "zh" | "en"
137281
- autoStart = ${String(config.autoStart)} # true = auto-enter welcome after loading
137282
137275
 
137283
137276
  [editor]
137284
137277
  command = "${escapeTomlBasicString(config.editorCommand ?? "")}" # Empty uses $VISUAL / $EDITOR
@@ -138558,6 +138551,17 @@ async function readExistingImageConfig() {
138558
138551
  } catch {}
138559
138552
  }
138560
138553
  //#endregion
138554
+ //#region src/tui/utils/app-state.ts
138555
+ /** True when a model turn is in progress (waiting / thinking / composing). */
138556
+ function isStreaming(state) {
138557
+ return state.streamingPhase !== "idle";
138558
+ }
138559
+ /** True when the session is busy and should reject state-changing operations.
138560
+ * Covers both active streaming and context compaction. */
138561
+ function isBusy(state) {
138562
+ return isStreaming(state) || state.isCompacting || state.isSwitchingSession;
138563
+ }
138564
+ //#endregion
138561
138565
  //#region src/tui/components/dialogs/api-key-input-dialog.ts
138562
138566
  function getFooter() {
138563
138567
  return t("apikey.footer");
@@ -139278,6 +139282,10 @@ async function runCatalogConnectFlow(host, url) {
139278
139282
  host.showStatus(`Connected: ${entry.name ?? providerId} · ${selection.model.id}`);
139279
139283
  }
139280
139284
  async function handleLogoutCommand(host) {
139285
+ if (isBusy(host.state.appState)) {
139286
+ host.showError(t("auth.logout_busy"));
139287
+ return;
139288
+ }
139281
139289
  const config = await host.harness.getConfig();
139282
139290
  const providerIds = Object.keys(config.providers ?? {}).toSorted();
139283
139291
  if (providerIds.length === 0) {
@@ -139300,14 +139308,15 @@ async function handleLogoutCommand(host) {
139300
139308
  await host.harness.removeProvider(target);
139301
139309
  if (target === currentProvider) {
139302
139310
  await host.authFlow.refreshConfigAfterLogout();
139303
- await host.authFlow.clearActiveSessionAfterLogout();
139304
- } else {
139305
- const updated = await host.harness.getConfig({ reload: true });
139306
- host.setAppState({
139307
- availableModels: updated.models ?? {},
139308
- availableProviders: updated.providers ?? {}
139309
- });
139311
+ await host.authFlow.detachModelAfterLogout();
139312
+ host.showStatus(t("auth.deleted_current", { name: target }));
139313
+ return;
139310
139314
  }
139315
+ const updated = await host.harness.getConfig({ reload: true });
139316
+ host.setAppState({
139317
+ availableModels: updated.models ?? {},
139318
+ availableProviders: updated.providers ?? {}
139319
+ });
139311
139320
  host.showStatus(t("auth.deleted", { name: target }));
139312
139321
  }
139313
139322
  async function handleDiyConfig(host) {
@@ -141859,17 +141868,6 @@ async function applyLanguageChoice(host, locale) {
141859
141868
  host.showNotice(t("language.switched", { locale: label }), t("language.restart_hint"));
141860
141869
  }
141861
141870
  //#endregion
141862
- //#region src/tui/utils/app-state.ts
141863
- /** True when a model turn is in progress (waiting / thinking / composing). */
141864
- function isStreaming(state) {
141865
- return state.streamingPhase !== "idle";
141866
- }
141867
- /** True when the session is busy and should reject state-changing operations.
141868
- * Covers both active streaming and context compaction. */
141869
- function isBusy(state) {
141870
- return isStreaming(state) || state.isCompacting || state.isSwitchingSession;
141871
- }
141872
- //#endregion
141873
141871
  //#region src/tui/constant/terminal.ts
141874
141872
  const QUERY_TERMINAL_THEME = `[?996n`;
141875
141873
  const TERMINAL_THEME_DARK = `[?997;1n`;
@@ -143637,6 +143635,7 @@ async function performModelSwitch(host, alias, thinkingLevel) {
143637
143635
  }
143638
143636
  host.setAppState({
143639
143637
  model: effectiveAlias,
143638
+ detachedModel: null,
143640
143639
  thinkingLevel: effectiveThinking,
143641
143640
  providerBalance: null
143642
143641
  });
@@ -144568,7 +144567,7 @@ async function guidedGoalSetup(host) {
144568
144567
  host.showNotice(t("goal.storm_breaker"), t("goal.conflict_loop"));
144569
144568
  return;
144570
144569
  }
144571
- const { TextInputDialogComponent } = await import("./text-input-dialog-BmdLwvYc.mjs");
144570
+ const { TextInputDialogComponent } = await import("./text-input-dialog-CxeTM7z0.mjs");
144572
144571
  const initialDesc = await promptText(host, TextInputDialogComponent, {
144573
144572
  title: t("goal.setup_title_initial"),
144574
144573
  subtitle: t("goal.setup_desc_hint"),
@@ -144589,7 +144588,7 @@ async function guidedGoalSetup(host) {
144589
144588
  await showGoalConfigWizard(host, session, confirmed.trim() || objective, false);
144590
144589
  }
144591
144590
  async function showGoalConfigWizard(host, session, objective, replace) {
144592
- const { TextInputDialogComponent } = await import("./text-input-dialog-BmdLwvYc.mjs");
144591
+ const { TextInputDialogComponent } = await import("./text-input-dialog-CxeTM7z0.mjs");
144593
144592
  const turnInput = await promptNumber(host, TextInputDialogComponent, {
144594
144593
  title: t("goal.wizard_title", { objective }),
144595
144594
  subtitle: t("goal.budget_turns_hint"),
@@ -145091,7 +145090,7 @@ function centerText(text, width) {
145091
145090
  return " ".repeat(leftPad) + text + " ".repeat(rightPad);
145092
145091
  }
145093
145092
  /**
145094
- * Colour a single logo line matching the loading splash scheme:
145093
+ * Colour a single logo line matching the welcome logo scheme:
145095
145094
  * - `█` blocks → white (the "font")
145096
145095
  * - shadow chars → breathing primary colour (the "stroke")
145097
145096
  * - others → dim grey
@@ -156936,4 +156935,4 @@ async function handleBuiltInSlashCommand(host, name, args) {
156936
156935
  }
156937
156936
  }
156938
156937
  //#endregion
156939
- export { handleExportDebugZipCommand as $, normalizeWorkDir as $n, lerpHex as $t, renderDiffLinesClustered as A, embeddingProgressLabel as An, toggleEmptySessionHint as At, AssistantMessageComponent as B, detectShellEnvironment as Bn, OSC11_QUERY as Bt, readJsonlFile as C, getLlmNotSetMessage as Cn, showStatusReport as Ct, UserMessageComponent as D, sortSlashCommands as Dn, createMarkdownTheme as Dt, handleRevokeCommand as E, BUILTIN_SLASH_COMMANDS as En, createEditorTheme as Et, NoticeMessageComponent as F, PIXEL_PULSE_FRAMES as Fn, parseOsc11BackgroundTheme as Ft, BackgroundAgentStatusComponent as G, CLI_COMMAND_NAME as Gn, TERMINAL_FOCUS_IN as Gt, charsForTokenBudget as H, getInputHistoryFile as Hn, OSC11_RESPONSE_PREFIX as Ht, StatusMessageComponent as I, PULSE_WAVE_FRAMES as In, DISABLE_TERMINAL_FOCUS_REPORTING as It, BREATHE_CYCLE_MS as J, PRODUCT_NAME as Jn, TERMINAL_THEME_LIGHT as Jt, AgentGroupComponent as K, CLI_UI_MODE as Kn, TERMINAL_FOCUS_OUT as Kt, replaceTabs as L, TuiConfigParseError as Ln, DISABLE_TERMINAL_THEME_REPORTING as Lt, langFromPath as M, getKnowledgeStore as Mn, contrastTextHex as Mt, CachedContainer as N, hasEmbeddingModelCache as Nn, getColorPalette as Nt, ToolCallComponent as O, isExperimentalFlagEnabled as On, isEmptySessionHintDismissed as Ot, ThinkingComponent as P, startManualEmbeddingDownload as Pn, detectTerminalTheme as Pt, clearGoalState as Q, ScreamHarness as Qn, lerpGradient as Qt, sanitizeShellOutput as R, loadTuiConfig as Rn, ENABLE_TERMINAL_FOCUS_REPORTING as Rt, appendJsonlLine as S, getCtrlDHint as Sn, clearInfoPanelState as St, getDaemonInstructions as T, buildSkillSlashCommands as Tn, resolveThemeSync as Tt, estimateTokens as U, getLogDir as Un, OSC11_RESPONSE_PREFIX_NO_ESC as Ut, ActivityGroupComponent as V, getDataDir as Vn, OSC11_RESPONSE as Vt, getSharedSpeedTracker as W, detectInstallSource as Wn, QUERY_TERMINAL_THEME as Wt, resetBreathingClock as X, fetchCatalog as Xn, isStreaming as Xt, getBreathingFrame as Y, DEFAULT_CATALOG_URL as Yn, isBusy as Yt, CompactionComponent as Z, saveCatalogCache as Zn, FooterComponent as Zt, handleMcpCommand as _, EXIT_CONFIRM_WINDOW_MS as _n, showModelPicker as _t, writeTextClipboard as a, printableChar as an, resolveGlobalLogPath as ar, changeThinkingLevel as at, refreshUpdateCache as b, TIP_ROTATION_INTERVAL_MS as bn, refreshProviderBalance as bt, handleSkillCommand as c, appendStreamingArgsPreview as cn, SCREAM_ERROR_INFO as cr, handleBotCommand as ct, isExpandable as d, isTodoItemShape as dn, handleFusionPlanCommand as dt, SubagentSlots as en, MCP_OAUTH_AUTHORIZATION_URL_TOOL_UPDATE as er, handleExportMdCommand as et, isPlanExpandable as f, parseStreamingArgs as fn, handleModelCommand as ft, handleChannelCommand as g, EMPTY_SESSION_HINT_URL as gn, handleYoloCommand as gt, handleMemoryCommand as h, truncateErrorMessage as hn, handleWolfpackCommand as ht, openUrl as i, handleLogoutCommand as in, log as ir, toTerminalHyperlink as it, highlightLines as j, embeddingFailureDetail as jn, createThemeStyles as jt, renderDiffLines as k, setExperimentalFlags as kn, isTurnElapsedEnabled as kt, disposeChildren as l, argsRecord as ln, handleCompactCommand as lt, formatMemoryMemoForInjection as m, stringValue as mn, handleThemeCommand as mt, clearEvalPanelState as n, handleSearchCommand as nn, resolveScreamHome as nr, handleInitCommand as nt, syncDiagramCapabilityPrompt as o, STATUS_BULLET as on, isScreamError as or, getModelCycleLevel as ot, MoonLoader as p, serializeToolResultOutput as pn, handlePlanCommand as pt, WelcomeComponent as q, CLI_USER_AGENT_PRODUCT as qn, TERMINAL_THEME_DARK as qt, handleGrantsCommand as r, handleConnectCommand as rn, flushDiagnosticLogs as rr, handleTitleCommand as rt, handleExtensionCommand as s, appendSessionHeaderHint as sn, isOrphanedToolCallError as sr, handleAutoCommand as st, dispatchInput as t, handleTraceCommand as tn, isRealUserPrompt as tr, handleForkCommand as tt, hasDispose as u, formatErrorMessage as un, handleEditorCommand as ut, handleUpdateCommand as v, MAIN_AGENT_ID$1 as vn, showPermissionPicker as vt, handleCcCommand as w, getNoActiveSessionMessage as wn, showUsage as wt, readUpdateCache as x, getCtrlCHint as xn, supportsBalance as xt, selectUpdateTarget as y, SESSION_TIPS as yn, showSettingsSelector as yt, SkillActivationComponent as z, saveTuiConfig as zn, ENABLE_TERMINAL_THEME_REPORTING as zt };
156938
+ export { handleExportDebugZipCommand as $, MCP_OAUTH_AUTHORIZATION_URL_TOOL_UPDATE as $n, handleTraceCommand as $t, renderDiffLinesClustered as A, embeddingProgressLabel as An, toggleEmptySessionHint as At, AssistantMessageComponent as B, getDataDir as Bn, OSC11_QUERY as Bt, readJsonlFile as C, getLlmNotSetMessage as Cn, showStatusReport as Ct, UserMessageComponent as D, sortSlashCommands as Dn, createMarkdownTheme as Dt, handleRevokeCommand as E, BUILTIN_SLASH_COMMANDS as En, createEditorTheme as Et, NoticeMessageComponent as F, PIXEL_PULSE_FRAMES as Fn, parseOsc11BackgroundTheme as Ft, BackgroundAgentStatusComponent as G, CLI_UI_MODE as Gn, TERMINAL_FOCUS_IN as Gt, charsForTokenBudget as H, getLogDir as Hn, OSC11_RESPONSE_PREFIX as Ht, StatusMessageComponent as I, PULSE_WAVE_FRAMES as In, DISABLE_TERMINAL_FOCUS_REPORTING as It, BREATHE_CYCLE_MS as J, DEFAULT_CATALOG_URL as Jn, TERMINAL_THEME_LIGHT as Jt, AgentGroupComponent as K, CLI_USER_AGENT_PRODUCT as Kn, TERMINAL_FOCUS_OUT as Kt, replaceTabs as L, TuiConfigParseError as Ln, DISABLE_TERMINAL_THEME_REPORTING as Lt, langFromPath as M, getKnowledgeStore as Mn, contrastTextHex as Mt, CachedContainer as N, hasEmbeddingModelCache as Nn, getColorPalette as Nt, ToolCallComponent as O, isExperimentalFlagEnabled as On, isEmptySessionHintDismissed as Ot, ThinkingComponent as P, startManualEmbeddingDownload as Pn, detectTerminalTheme as Pt, clearGoalState as Q, normalizeWorkDir as Qn, SubagentSlots as Qt, sanitizeShellOutput as R, loadTuiConfig as Rn, ENABLE_TERMINAL_FOCUS_REPORTING as Rt, appendJsonlLine as S, getCtrlDHint as Sn, clearInfoPanelState as St, getDaemonInstructions as T, buildSkillSlashCommands as Tn, resolveThemeSync as Tt, estimateTokens as U, detectInstallSource as Un, OSC11_RESPONSE_PREFIX_NO_ESC as Ut, ActivityGroupComponent as V, getInputHistoryFile as Vn, OSC11_RESPONSE as Vt, getSharedSpeedTracker as W, CLI_COMMAND_NAME as Wn, QUERY_TERMINAL_THEME as Wt, resetBreathingClock as X, saveCatalogCache as Xn, lerpGradient as Xt, getBreathingFrame as Y, fetchCatalog as Yn, FooterComponent as Yt, CompactionComponent as Z, ScreamHarness as Zn, lerpHex as Zt, handleMcpCommand as _, EXIT_CONFIRM_WINDOW_MS as _n, showModelPicker as _t, writeTextClipboard as a, printableChar as an, isScreamError as ar, changeThinkingLevel as at, refreshUpdateCache as b, TIP_ROTATION_INTERVAL_MS as bn, refreshProviderBalance as bt, handleSkillCommand as c, appendStreamingArgsPreview as cn, handleBotCommand as ct, isExpandable as d, isTodoItemShape as dn, handleFusionPlanCommand as dt, handleSearchCommand as en, isRealUserPrompt as er, handleExportMdCommand as et, isPlanExpandable as f, parseStreamingArgs as fn, handleModelCommand as ft, handleChannelCommand as g, EMPTY_SESSION_HINT_URL as gn, handleYoloCommand as gt, handleMemoryCommand as h, truncateErrorMessage as hn, handleWolfpackCommand as ht, openUrl as i, isStreaming as in, resolveGlobalLogPath as ir, toTerminalHyperlink as it, highlightLines as j, embeddingFailureDetail as jn, createThemeStyles as jt, renderDiffLines as k, setExperimentalFlags as kn, isTurnElapsedEnabled as kt, disposeChildren as l, argsRecord as ln, handleCompactCommand as lt, formatMemoryMemoForInjection as m, stringValue as mn, handleThemeCommand as mt, clearEvalPanelState as n, handleLogoutCommand as nn, flushDiagnosticLogs as nr, handleInitCommand as nt, syncDiagramCapabilityPrompt as o, STATUS_BULLET as on, isOrphanedToolCallError as or, getModelCycleLevel as ot, MoonLoader as p, serializeToolResultOutput as pn, handlePlanCommand as pt, WelcomeComponent as q, PRODUCT_NAME as qn, TERMINAL_THEME_DARK as qt, handleGrantsCommand as r, isBusy as rn, log as rr, handleTitleCommand as rt, handleExtensionCommand as s, appendSessionHeaderHint as sn, SCREAM_ERROR_INFO as sr, handleAutoCommand as st, dispatchInput as t, handleConnectCommand as tn, resolveScreamHome as tr, handleForkCommand as tt, hasDispose as u, formatErrorMessage as un, handleEditorCommand as ut, handleUpdateCommand as v, MAIN_AGENT_ID$1 as vn, showPermissionPicker as vt, handleCcCommand as w, getNoActiveSessionMessage as wn, showUsage as wt, readUpdateCache as x, getCtrlCHint as xn, supportsBalance as xt, selectUpdateTarget as y, SESSION_TIPS as yn, showSettingsSelector as yt, SkillActivationComponent as z, detectShellEnvironment as zn, ENABLE_TERMINAL_THEME_REPORTING as zt };
@@ -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 { rn as handleConnectCommand } from "./dispatch-NoArU5dN.mjs";
6
+ import { tn as handleConnectCommand } from "./dispatch-DJaTHdEQ.mjs";
7
7
  export { handleConnectCommand };
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-CMbpupvJ.mjs")).main();
9
+ (await import("./app-EAybRJki.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);
@@ -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-CCDiUbcL.mjs";
6
+ import { t as TextInputDialogComponent } from "./text-input-dialog-N0mGJvxm.mjs";
7
7
  export { TextInputDialogComponent };
@@ -273,13 +273,6 @@ const dictionaries = {
273
273
  "welcome.like_active": "like已激活",
274
274
  "welcome.like_inactive": "like未加载",
275
275
  "welcome.help_hint": "/help 查看帮助",
276
- "loading.ai": "Ai正在加载中...",
277
- "loading.waking": "正在唤醒核心...",
278
- "loading.press_enter": "按下 ENTER 唤醒核心",
279
- "loading.quit_hint": "按住 Ctrl+C 即可退出 Scream Code",
280
- "loading.auto_start_hint": "Ctrl+E 即可切换一键启动",
281
- "loading.auto_start_on": "Ctrl+E 即可切换一键启动(默认启动开)",
282
- "loading.auto_start_off": "Ctrl+E 即可切换一键启动(默认启动关)",
283
276
  "language.picker_title": "语言 / Language",
284
277
  "language.picker_hint": "↑↓ 选择 · Enter 确认 · Esc 取消",
285
278
  "language.unchanged": "语言未更改:\"{locale}\"。",
@@ -496,6 +489,8 @@ const dictionaries = {
496
489
  "auth.catalog_fetch_failed": "拉取远程模型目录失败: {error}。请检查网络(目录站点在你的网络环境下可能无法访问)后重试,或使用 /config diy 自行配置服务商。",
497
490
  "auth.no_providers": "没有已配置的模型商。",
498
491
  "auth.deleted": "已删除模型商: {name}",
492
+ "auth.deleted_current": "已删除模型商: {name}。当前会话已保留,重新选择模型后即可继续(/config 或 /model)。",
493
+ "auth.logout_busy": "正在执行任务时无法删除模型商 — 请先按 Esc 或 Ctrl-C。",
499
494
  "auth.input_api_url": "输入服务商 API 地址",
500
495
  "auth.api_url_hint": "例如 https://api.example.com(可粘贴)",
501
496
  "auth.api_url_hint_google": "例如 https://generativelanguage.googleapis.com(官方)或代理/网关地址(可粘贴)",
@@ -1265,6 +1260,7 @@ const dictionaries = {
1265
1260
  "dispatch.eval_suggest_tool": "文件读写工具执行未成功,请检查工作目录权限;若重试后仍失败,请反馈",
1266
1261
  "dispatch.eval_suggest_answer": "模型回答可能不完整或不正确,可尝试更换更强的模型后重试",
1267
1262
  "constant.llm_not_set": "LLM 未设置,运行 /config 自定义模型配置",
1263
+ "constant.model_detached": "当前模型已被移除,请用 /config 或 /model 重新选择。",
1268
1264
  "constant.no_active_session": "没有活动会话。运行 /config 自定义模型配置。",
1269
1265
  "constant.ctrl_d_hint": "再次按 Ctrl+D 退出",
1270
1266
  "constant.ctrl_c_hint": "再次按 Ctrl+C 退出",
@@ -1417,11 +1413,11 @@ const dictionaries = {
1417
1413
  "registry.title_desc": "设置或显示会话标题",
1418
1414
  "config.entry_title": "配置模型服务",
1419
1415
  "config.entry_hint": "使用 ↑/↓ 选择,Enter 确认,Esc 取消",
1420
- "config.entry_quick": "快捷选择模型提供商",
1416
+ "config.entry_quick": "快速选择",
1421
1417
  "config.entry_quick_desc": "从内置目录挑选服务商与模型,自动完成配置",
1422
- "config.entry_diy": "自定义Diy配置模型商",
1418
+ "config.entry_diy": "自定义",
1423
1419
  "config.entry_diy_desc": "手动填写接口类型、地址、密钥与模型参数",
1424
- "config.entry_image": "生图能力模型配置",
1420
+ "config.entry_image": "生图配置",
1425
1421
  "config.entry_image_desc": "配置生图服务(服务商 / 地址 / 密钥 / 模型)",
1426
1422
  "registry.config_desc": "配置模型服务(快捷选择 / 自定义 / 生图)",
1427
1423
  "registry.permission_desc": "选择权限模式",
@@ -1660,13 +1656,6 @@ const dictionaries = {
1660
1656
  "welcome.like_active": "like active",
1661
1657
  "welcome.like_inactive": "like not loaded",
1662
1658
  "welcome.help_hint": "/help for help",
1663
- "loading.ai": "AI is loading...",
1664
- "loading.waking": "Waking core...",
1665
- "loading.press_enter": "Press ENTER to wake core",
1666
- "loading.quit_hint": "Hold Ctrl+C to quit Scream Code",
1667
- "loading.auto_start_hint": "Ctrl+E to toggle auto-start",
1668
- "loading.auto_start_on": "Ctrl+E to toggle auto-start (ON)",
1669
- "loading.auto_start_off": "Ctrl+E to toggle auto-start (OFF)",
1670
1659
  "language.picker_title": "Language / 语言",
1671
1660
  "language.picker_hint": "↑↓ Select · Enter confirm · Esc cancel",
1672
1661
  "language.unchanged": "Language unchanged: \"{locale}\".",
@@ -1883,6 +1872,8 @@ const dictionaries = {
1883
1872
  "auth.catalog_fetch_failed": "Failed to fetch the remote model catalog: {error}. Check your network (the catalog host may be unreachable in your region) and retry, or use /config diy to set up a provider manually.",
1884
1873
  "auth.no_providers": "No model providers configured.",
1885
1874
  "auth.deleted": "Deleted provider: {name}",
1875
+ "auth.deleted_current": "Deleted provider: {name}. The current session is kept — pick a model to continue (/config or /model).",
1876
+ "auth.logout_busy": "Cannot remove a provider while a turn is running — press Esc or Ctrl-C first.",
1886
1877
  "auth.input_api_url": "Enter provider API URL",
1887
1878
  "auth.api_url_hint": "e.g. https://api.example.com (paste supported)",
1888
1879
  "auth.api_url_hint_google": "e.g. https://generativelanguage.googleapis.com (official) or a proxy/gateway URL (paste supported)",
@@ -2652,6 +2643,7 @@ const dictionaries = {
2652
2643
  "dispatch.eval_suggest_tool": "A file read/write tool did not complete. Please check directory permissions; if it still fails after retrying, please report it",
2653
2644
  "dispatch.eval_suggest_answer": "The model answer may be incomplete or incorrect. Try a stronger model and retry",
2654
2645
  "constant.llm_not_set": "LLM not set, run /config to configure model",
2646
+ "constant.model_detached": "The current model was removed — pick one with /config or /model.",
2655
2647
  "constant.no_active_session": "No active session. Run /config to configure model.",
2656
2648
  "constant.ctrl_d_hint": "Press Ctrl+D again to exit",
2657
2649
  "constant.ctrl_c_hint": "Press Ctrl+C again to exit",
@@ -2804,11 +2796,11 @@ const dictionaries = {
2804
2796
  "registry.title_desc": "Set or show session title",
2805
2797
  "config.entry_title": "Configure a model service",
2806
2798
  "config.entry_hint": "↑/↓ to choose · Enter to confirm · Esc to cancel",
2807
- "config.entry_quick": "Pick a model provider",
2799
+ "config.entry_quick": "Quick pick",
2808
2800
  "config.entry_quick_desc": "Choose from the built-in directory; configuration is applied automatically",
2809
- "config.entry_diy": "Custom DIY provider setup",
2801
+ "config.entry_diy": "Custom",
2810
2802
  "config.entry_diy_desc": "Enter the wire type, endpoint, key and model parameters yourself",
2811
- "config.entry_image": "Image generation model setup",
2803
+ "config.entry_image": "Image",
2812
2804
  "config.entry_image_desc": "Configure the image service (provider, URL, key, model)",
2813
2805
  "registry.config_desc": "Configure model services (quick pick / custom / image)",
2814
2806
  "registry.permission_desc": "Select permission mode",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scream-code",
3
- "version": "0.19.0",
3
+ "version": "0.19.2",
4
4
  "description": "A terminal-native AI agent for builders",
5
5
  "license": "MIT",
6
6
  "author": "ScreamCli",
@@ -39,17 +39,13 @@
39
39
  "access": "public"
40
40
  },
41
41
  "scripts": {
42
- "build": "tsdown && vite build --config vite.bot.config.ts",
42
+ "build": "tsdown",
43
43
  "build:cli": "tsdown",
44
44
  "dev": "node scripts/dev.mjs",
45
45
  "dev:cli-only": "tsx --import ../../build/register-raw-text-loader.mjs ./src/main.ts",
46
46
  "dev:prod": "node dist/main.mjs",
47
- "bot:dev": "vite --config vite.bot.config.ts",
48
- "bot:server": "tsx src/bot/server/main.ts",
49
- "bot:serve": "pnpm bot:build && pnpm bot:server",
50
- "bot:build": "vite build --config vite.bot.config.ts",
51
47
  "clean": "rm -rf dist",
52
- "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p src/bot/ui/tsconfig.json --noEmit",
48
+ "typecheck": "tsc -p tsconfig.json --noEmit",
53
49
  "test": "pnpm -w run build:packages && vitest run",
54
50
  "e2e": "pnpm -w run build:packages && SCREAM_E2E=1 vitest run test/e2e",
55
51
  "e2e:real": "pnpm -w run build:packages && SCREAM_E2E_REAL=1 vitest run test/e2e/real-llm-smoke.e2e.test.ts",
@@ -58,32 +54,20 @@
58
54
  "bench:startup": "node scripts/startup-bench.mjs"
59
55
  },
60
56
  "dependencies": {
61
- "@base-ui/react": "^1.6.0",
62
57
  "@earendil-works/pi-codemode": "^1.1.0",
63
- "@hono/node-server": "^1.19.0",
64
58
  "@huggingface/tokenizers": "^0.2.0",
65
59
  "@liutod-scream/pi-tui": "^1.1.0",
66
60
  "@mariozechner/clipboard": "^0.3.2",
67
- "@tabler/icons-react": "^3.36.1",
68
- "@tanstack/react-query": "^5.101.4",
69
- "@tanstack/react-router": "^1.170.27",
70
61
  "chalk": "^5.4.1",
71
- "class-variance-authority": "^0.7.1",
72
62
  "cli-highlight": "^2.1.11",
73
- "clsx": "^2.1.1",
74
63
  "commander": "^13.1.0",
75
64
  "diff": "^9.0.0",
76
65
  "grok-mermaid": "^0.2.3",
77
- "hono": "^4.10.0",
78
66
  "marked": "^15.0.7",
79
- "motion": "^13.1.0",
80
67
  "mupdf": "^1.28.0",
81
68
  "onnxruntime-web": "1.21.0",
82
- "react": "^19.2.0",
83
- "react-dom": "^19.2.0",
84
69
  "semver": "^7.7.4",
85
70
  "smol-toml": "^1.6.1",
86
- "tailwind-merge": "^3.6.0",
87
71
  "zod": "^4.3.6"
88
72
  },
89
73
  "devDependencies": {
@@ -95,17 +79,8 @@
95
79
  "@scream-code/knowledge": "workspace:*",
96
80
  "@scream-code/memory": "workspace:*",
97
81
  "@scream-code/scream-code-sdk": "workspace:^",
98
- "@tailwindcss/vite": "^4.1.0",
99
- "@testing-library/jest-dom": "^6.6.0",
100
- "@testing-library/react": "^16.1.0",
101
- "@types/react": "^19.2.0",
102
- "@types/react-dom": "^19.2.0",
103
82
  "@types/semver": "^7.7.0",
104
- "@vitejs/plugin-react": "^5.0.0",
105
- "jsdom": "^24.1.3",
106
- "tailwindcss": "^4.1.0",
107
- "tsx": "^4.21.0",
108
- "vite": "^6.3.5"
83
+ "tsx": "^4.21.0"
109
84
  },
110
85
  "engines": {
111
86
  "node": ">=22.19.0"