scream-code 0.15.3 → 0.15.4

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
@@ -139,7 +139,7 @@ Website: [scream.chat](https://scream.chat)
139
139
 
140
140
  ### Contributing
141
141
 
142
- Free and open — forks, feedback and pull requests are welcome. Scream is a lightweight agent foundation: maximize the model's own capability, don't over-constrain it with framework. Inspired by pi, pi-tui, gork, kimicli, Gemini, ohmypi, zero and others.
142
+ Free and open — forks, feedback and pull requests are welcome. Scream is a lightweight agent foundation: maximize the model's own capability, don't over-constrain it with framework. Inspired by pi, pi-tui, gork, kimicli, Gemini, ohmypi, and others.
143
143
 
144
144
  ---
145
145
 
@@ -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 getInputHistoryFile, At as ENABLE_TERMINAL_FOCUS_REPORTING, B as BackgroundAgentStatusComponent, Bn as ScreamHarness, Bt as TERMINAL_THEME_LIGHT, Cn as PULSE_WAVE_FRAMES, Ct as createThemeStyles, D as toggleEmptySessionHint, Dn as saveTuiConfig, Dt as parseOsc11BackgroundTheme, E as isTurnElapsedEnabled, En as loadTuiConfig, Et as detectTerminalTheme, F as estimateTokens, Fn as CLI_USER_AGENT_PRODUCT, Ft as OSC11_RESPONSE_PREFIX_NO_ESC, G as getBreathingFrame, Gn as log, H as AgentGroupComponent, Hn as resolveScreamHome, Ht as isStreaming, I as getSharedSpeedTracker, In as PRODUCT_NAME, It as QUERY_TERMINAL_THEME, J as refineGoal, Jn as isOrphanedToolCallError, Jt as printableChar, K as resetBreathingClock, Kn as resolveGlobalLogPath, L as SkillActivationComponent, Ln as DEFAULT_CATALOG_URL, Lt as TERMINAL_FOCUS_IN, M as langFromPath, Mn as detectInstallSource, Mt as OSC11_QUERY, N as CachedContainer, Nn as CLI_COMMAND_NAME, Nt as OSC11_RESPONSE, O as ToolCallComponent, On as detectShellEnvironment, Ot as DISABLE_TERMINAL_FOCUS_REPORTING, P as ThinkingComponent, Pn as CLI_UI_MODE, Pt as OSC11_RESPONSE_PREFIX, Qt as formatErrorMessage, R as ReadGroupComponent, Rn as fetchCatalog, Rt as TERMINAL_FOCUS_OUT, S as getDaemonInstructions, Sn as PIXEL_PULSE_FRAMES, St as createMarkdownTheme, T as isEmptySessionHintDismissed, Tn as TuiLikePreferencesSchema, Tt as getColorPalette, U as WelcomeComponent, Un as MemoryMemoStore, Ut as FooterComponent, V as AssistantMessageComponent, Vt as isBusy, W as BREATHE_CYCLE_MS, Wn as flushDiagnosticLogs, Xn as SCREAM_ERROR_INFO, Xt as appendStreamingArgsPreview, Yn as ErrorCodes, 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 isEmbeddingModelCached, 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 getLogDir, jt as ENABLE_TERMINAL_THEME_REPORTING, k as renderDiffLines, kn as getDataDir, 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 isScreamError, 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 TuiConfigParseError, wt as contrastTextHex, xn as startManualEmbeddingDownload, xt as createEditorTheme, y as appendJsonlLine, yn as getKnowledgeStore, z as parseReadGroupOutput, zn as saveCatalogCache, zt as TERMINAL_THEME_DARK } from "./dispatch-DGeogib-.mjs";
8
- import { a as setLocale, o as t } from "./text-input-dialog-BUXAKycx.mjs";
7
+ import { $t as isTodoItemShape, A as renderDiffLinesClustered, An as getInputHistoryFile, At as ENABLE_TERMINAL_FOCUS_REPORTING, B as BackgroundAgentStatusComponent, Bn as ScreamHarness, Bt as TERMINAL_THEME_LIGHT, Cn as PULSE_WAVE_FRAMES, Ct as createThemeStyles, D as toggleEmptySessionHint, Dn as saveTuiConfig, Dt as parseOsc11BackgroundTheme, E as isTurnElapsedEnabled, En as loadTuiConfig, Et as detectTerminalTheme, F as estimateTokens, Fn as CLI_USER_AGENT_PRODUCT, Ft as OSC11_RESPONSE_PREFIX_NO_ESC, G as getBreathingFrame, Gn as log, H as AgentGroupComponent, Hn as resolveScreamHome, Ht as isStreaming, I as getSharedSpeedTracker, In as PRODUCT_NAME, It as QUERY_TERMINAL_THEME, J as refineGoal, Jn as isOrphanedToolCallError, Jt as printableChar, K as resetBreathingClock, Kn as resolveGlobalLogPath, L as SkillActivationComponent, Ln as DEFAULT_CATALOG_URL, Lt as TERMINAL_FOCUS_IN, M as langFromPath, Mn as detectInstallSource, Mt as OSC11_QUERY, N as CachedContainer, Nn as CLI_COMMAND_NAME, Nt as OSC11_RESPONSE, O as ToolCallComponent, On as detectShellEnvironment, Ot as DISABLE_TERMINAL_FOCUS_REPORTING, P as ThinkingComponent, Pn as CLI_UI_MODE, Pt as OSC11_RESPONSE_PREFIX, Qt as formatErrorMessage, R as ReadGroupComponent, Rn as fetchCatalog, Rt as TERMINAL_FOCUS_OUT, S as getDaemonInstructions, Sn as PIXEL_PULSE_FRAMES, St as createMarkdownTheme, T as isEmptySessionHintDismissed, Tn as TuiLikePreferencesSchema, Tt as getColorPalette, U as WelcomeComponent, Un as MemoryMemoStore, Ut as FooterComponent, V as AssistantMessageComponent, Vt as isBusy, W as BREATHE_CYCLE_MS, Wn as flushDiagnosticLogs, Xn as SCREAM_ERROR_INFO, Xt as appendStreamingArgsPreview, Yn as ErrorCodes, 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 isEmbeddingModelCached, 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 getLogDir, jt as ENABLE_TERMINAL_THEME_REPORTING, k as renderDiffLines, kn as getDataDir, 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 isScreamError, 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 TuiConfigParseError, wt as contrastTextHex, xn as startManualEmbeddingDownload, xt as createEditorTheme, y as appendJsonlLine, yn as getKnowledgeStore, z as parseReadGroupOutput, zn as saveCatalogCache, zt as TERMINAL_THEME_DARK } from "./dispatch-m6mYTI1M.mjs";
8
+ import { a as setLocale, o as t } from "./text-input-dialog-B2a6Ks8f.mjs";
9
9
  import { createRequire } from "node:module";
10
10
  import { randomBytes, randomUUID, scryptSync, timingSafeEqual } from "node:crypto";
11
11
  import { access, chmod, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
@@ -32,7 +32,7 @@ function optionalBuildString(value) {
32
32
  return typeof value === "string" && value.length > 0 ? value : void 0;
33
33
  }
34
34
  const SCREAM_BUILD_INFO = {
35
- version: optionalBuildString("0.15.3"),
35
+ version: optionalBuildString("0.15.4"),
36
36
  channel: optionalBuildString(""),
37
37
  commit: optionalBuildString(""),
38
38
  buildTarget: optionalBuildString("darwin-arm64")
@@ -2338,6 +2338,10 @@ var SessionEventHandler = class {
2338
2338
  */
2339
2339
  lastCompactionTrigger;
2340
2340
  backgroundTaskTranscriptedTerminal = /* @__PURE__ */ new Set();
2341
+ /** Active foreground (non-background) subagents. Footer badge counts them
2342
+ * separately from background agents: foreground subagents are transient
2343
+ * (spawned by the current turn's Agent tool), background agents persist. */
2344
+ foregroundSubagentCount = 0;
2341
2345
  subagentInfo = /* @__PURE__ */ new Map();
2342
2346
  renderedSkillActivationIds = /* @__PURE__ */ new Set();
2343
2347
  renderedMcpServerStatusKeys = /* @__PURE__ */ new Map();
@@ -3096,6 +3100,8 @@ var SessionEventHandler = class {
3096
3100
  this.syncBackgroundAgentBadge();
3097
3101
  return;
3098
3102
  }
3103
+ this.foregroundSubagentCount += 1;
3104
+ this.syncBackgroundAgentBadge();
3099
3105
  let tc = streamingUI.getToolComponent(event.parentToolCallId);
3100
3106
  if (tc === void 0) {
3101
3107
  const toolCall = streamingUI.getActiveToolCall(event.parentToolCallId);
@@ -3137,6 +3143,8 @@ var SessionEventHandler = class {
3137
3143
  this.appendBackgroundAgentEntry("completed", backgroundMeta, extras);
3138
3144
  return;
3139
3145
  }
3146
+ this.foregroundSubagentCount = Math.max(0, this.foregroundSubagentCount - 1);
3147
+ this.syncBackgroundAgentBadge();
3140
3148
  const routingId = this.subagentInfo.get(event.subagentId)?.parentToolCallId ?? event.parentToolCallId;
3141
3149
  const tc = streamingUI.getToolComponent(routingId);
3142
3150
  if (tc === void 0) return;
@@ -3166,6 +3174,8 @@ var SessionEventHandler = class {
3166
3174
  this.appendBackgroundAgentEntry("failed", backgroundMeta, { error: event.error });
3167
3175
  return;
3168
3176
  }
3177
+ this.foregroundSubagentCount = Math.max(0, this.foregroundSubagentCount - 1);
3178
+ this.syncBackgroundAgentBadge();
3169
3179
  const tc = streamingUI.getToolComponent(this.subagentInfo.get(event.subagentId)?.parentToolCallId ?? event.parentToolCallId);
3170
3180
  if (tc === void 0) return;
3171
3181
  tc.onSubagentFailed({ error: event.error });
@@ -3295,11 +3305,12 @@ var SessionEventHandler = class {
3295
3305
  if (info.taskId.startsWith("agent-")) agentTasks += 1;
3296
3306
  else bashTasks += 1;
3297
3307
  }
3298
- state.footer.setBackgroundCounts({
3308
+ state.footer?.setBackgroundCounts({
3299
3309
  bashTasks,
3300
- agentTasks
3310
+ agentTasks,
3311
+ foregroundSubagents: this.foregroundSubagentCount
3301
3312
  });
3302
- state.ui.requestRender();
3313
+ state.ui?.requestRender();
3303
3314
  }
3304
3315
  };
3305
3316
  //#endregion
@@ -3605,7 +3616,10 @@ var SessionReplayRenderer = class {
3605
3616
  sessionEventHandler.backgroundTasks = new Map(agent.background.map((info) => [info.taskId, info]));
3606
3617
  sessionEventHandler.backgroundTaskTranscriptedTerminal.clear();
3607
3618
  for (const info of agent.background) if (isTerminalBackgroundTask(info)) sessionEventHandler.backgroundTaskTranscriptedTerminal.add(info.taskId);
3608
- state.footer.setBackgroundCounts(countActiveBackgroundTasks(sessionEventHandler.backgroundTasks));
3619
+ state.footer.setBackgroundCounts({
3620
+ ...countActiveBackgroundTasks(sessionEventHandler.backgroundTasks),
3621
+ foregroundSubagents: 0
3622
+ });
3609
3623
  state.ui.requestRender();
3610
3624
  }
3611
3625
  renderRecords(agent) {
@@ -9741,7 +9755,8 @@ var SessionManager$1 = class {
9741
9755
  this.host.tasksBrowserController.close();
9742
9756
  this.host.state.footer.setBackgroundCounts({
9743
9757
  bashTasks: 0,
9744
- agentTasks: 0
9758
+ agentTasks: 0,
9759
+ foregroundSubagents: 0
9745
9760
  });
9746
9761
  this.host.streamingUI.setTodoList([]);
9747
9762
  this.host.streamingUI.setTurnId(void 0);
@@ -12425,7 +12440,7 @@ var ScreamTUI = class {
12425
12440
  const card = new OnboardingCardComponent({
12426
12441
  colors: this.state.theme.colors,
12427
12442
  onConfigure: () => {
12428
- import("./dispatch-CweYoXh3.mjs").then(({ handleConnectCommand }) => handleConnectCommand(this, "")).finally(() => {
12443
+ import("./dispatch-CULU8xVW.mjs").then(({ handleConnectCommand }) => handleConnectCommand(this, "")).finally(() => {
12429
12444
  this.restoreEditor();
12430
12445
  onDone?.();
12431
12446
  });
@@ -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-DGeogib-.mjs";
6
+ import { Kt as handleConnectCommand } from "./dispatch-m6mYTI1M.mjs";
7
7
  export { handleConnectCommand };