@ai-agent-forge/agent-forge 0.88.1 → 0.88.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.
- package/CHANGELOG.md +44 -0
- package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
- package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
- package/bundled-plugins/coding-tools/agent-forge.json +1 -1
- package/bundled-plugins/coding-tools/plugin.json +1 -1
- package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
- package/bundled-plugins/compaction-policy/plugin.json +1 -1
- package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
- package/bundled-plugins/overflow-policy/plugin.json +1 -1
- package/bundled-plugins/provider-failover/agent-forge.json +1 -1
- package/bundled-plugins/provider-failover/plugin.json +1 -1
- package/bundled-plugins/retry-policy/agent-forge.json +1 -1
- package/bundled-plugins/retry-policy/plugin.json +1 -1
- package/dist/bundle/.build-manifest.json +68 -58
- package/dist/bundle/chunks/{chunk-D3ARGZFR.js → chunk-44I47ACN.js} +3 -3
- package/dist/bundle/chunks/{chunk-Z72JWUZ4.js → chunk-6F5JWGKE.js} +1 -1
- package/dist/bundle/chunks/{chunk-LZOEQITZ.js → chunk-HTC5K5SM.js} +56 -45
- package/dist/bundle/chunks/{chunk-AQLNTW2B.js → chunk-LSP24WNH.js} +8 -7
- package/dist/bundle/chunks/image-resize-worker.js +3 -3
- package/dist/bundle/chunks/{virtual-modules-WF6WRHP7.js → virtual-modules-MRXD3RWG.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +8 -2
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +2 -0
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-store.d.ts.map +1 -1
- package/dist/core/agent-session-store.js +6 -1
- package/dist/core/agent-session-store.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +13 -0
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +24 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +58 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.js +2 -0
- package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.js +2 -0
- package/dist/core/i18n/locales/zh-cn/index.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +5 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js +15 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/slash-commands.js +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +24 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cleanup.d.ts +49 -0
- package/dist/core/session-cleanup.d.ts.map +1 -0
- package/dist/core/session-cleanup.js +159 -0
- package/dist/core/session-cleanup.js.map +1 -0
- package/dist/core/session-index.d.ts +75 -0
- package/dist/core/session-index.d.ts.map +1 -0
- package/dist/core/session-index.js +455 -0
- package/dist/core/session-index.js.map +1 -0
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +202 -47
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +5 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +12 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/capability-mount.d.ts +40 -0
- package/dist/core/tools/capability-mount.d.ts.map +1 -0
- package/dist/core/tools/capability-mount.js +112 -0
- package/dist/core/tools/capability-mount.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +27 -5
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +5 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +9 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +17 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +43 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.d.ts +44 -0
- package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-run-group.js +121 -0
- package/dist/modes/interactive/components/tool-run-group.js.map +1 -0
- package/dist/modes/interactive/interactive-commands.d.ts +2 -0
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +7 -0
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +18 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +85 -3
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +6 -3
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +7 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +50 -3
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +28 -16
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +35 -33
- package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
- package/dist/profile/plugin-profiles.d.ts +1 -1
- package/dist/profile/plugin-profiles.d.ts.map +1 -1
- package/dist/profile/plugin-profiles.js +18 -0
- package/dist/profile/plugin-profiles.js.map +1 -1
- package/dist/profiles/builtin-suites.d.ts +14 -4
- package/dist/profiles/builtin-suites.d.ts.map +1 -1
- package/dist/profiles/builtin-suites.js +20 -5
- package/dist/profiles/builtin-suites.js.map +1 -1
- package/docs/settings.md +354 -354
- package/docs/usage.md +292 -292
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +1 -1
- package/examples/extensions/mcp-stdio/index.d.ts +0 -64
- package/examples/extensions/mcp-stdio/index.d.ts.map +0 -1
- package/examples/extensions/mcp-stdio/index.js +0 -292
- package/examples/extensions/mcp-stdio/index.js.map +0 -1
|
@@ -24,6 +24,7 @@ import { setI18nLanguage, t } from "../../core/i18n/index.js";
|
|
|
24
24
|
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
25
25
|
import { createCompactionSummaryMessage } from "../../core/messages.js";
|
|
26
26
|
import { DefaultPackageManager } from "../../core/package-manager.js";
|
|
27
|
+
import { runCleanSessions } from "../../core/session-cleanup.js";
|
|
27
28
|
import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
|
|
28
29
|
import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
|
|
29
30
|
import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
|
|
@@ -56,6 +57,7 @@ import { SettingsSelectorComponent } from "./components/settings-selector.js";
|
|
|
56
57
|
import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js";
|
|
57
58
|
import { BranchSummaryStatusIndicator, CompactionStatusIndicator, IdleStatus, RetryStatusIndicator, WorkingStatusIndicator, } from "./components/status-indicator.js";
|
|
58
59
|
import { ToolExecutionComponent } from "./components/tool-execution.js";
|
|
60
|
+
import { ToolRunGroupComponent } from "./components/tool-run-group.js";
|
|
59
61
|
import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
60
62
|
import { UserMessageComponent } from "./components/user-message.js";
|
|
61
63
|
import { WorkflowViewComponent } from "./components/workflow-view.js";
|
|
@@ -296,6 +298,9 @@ export class InteractiveMode {
|
|
|
296
298
|
streamingMessage = undefined;
|
|
297
299
|
// Tool execution tracking: toolCallId -> component
|
|
298
300
|
pendingTools = new Map();
|
|
301
|
+
// D-083 quiet transcript: the tool-run group for the current assistant
|
|
302
|
+
// turn (one group per message_start; null between turns).
|
|
303
|
+
activeToolRunGroup = undefined;
|
|
299
304
|
// Tool output expansion state
|
|
300
305
|
/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */
|
|
301
306
|
toolOutputExpanded = false;
|
|
@@ -1784,7 +1789,17 @@ export class InteractiveMode {
|
|
|
1784
1789
|
this.ui.requestRender();
|
|
1785
1790
|
}
|
|
1786
1791
|
else if (event.message.role === "assistant") {
|
|
1792
|
+
// D-083: a new assistant turn closes the previous turn's
|
|
1793
|
+
// tool-run group (tools executed between the turns) and
|
|
1794
|
+
// starts a fresh one on its first toolCall.
|
|
1795
|
+
this.activeToolRunGroup?.markRunComplete();
|
|
1796
|
+
this.activeToolRunGroup = undefined;
|
|
1787
1797
|
this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.getMarkdownTransformers());
|
|
1798
|
+
// D-083: components created after a ctrl+o toggle inherit the
|
|
1799
|
+
// current expansion so detail mode holds across turns.
|
|
1800
|
+
if (this.toolOutputExpanded) {
|
|
1801
|
+
this.streamingComponent.setExpanded(true);
|
|
1802
|
+
}
|
|
1788
1803
|
this.streamingMessage = event.message;
|
|
1789
1804
|
this.chatContainer.addChild(this.streamingComponent);
|
|
1790
1805
|
this.streamingComponent.updateContent(this.streamingMessage, true);
|
|
@@ -1803,7 +1818,7 @@ export class InteractiveMode {
|
|
|
1803
1818
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
1804
1819
|
}, this.getRegisteredToolDefinition(content.name), this.ui, this.facade.getCwd());
|
|
1805
1820
|
component.setExpanded(this.toolOutputExpanded);
|
|
1806
|
-
this.
|
|
1821
|
+
this.addToolToRunGroup(component);
|
|
1807
1822
|
this.pendingTools.set(content.id, component);
|
|
1808
1823
|
}
|
|
1809
1824
|
else {
|
|
@@ -1844,7 +1859,11 @@ export class InteractiveMode {
|
|
|
1844
1859
|
content: [{ type: "text", text: errorMessage }],
|
|
1845
1860
|
isError: true,
|
|
1846
1861
|
});
|
|
1862
|
+
this.activeToolRunGroup?.noteResult(true);
|
|
1847
1863
|
}
|
|
1864
|
+
// No tool execution follows an aborted/errored message:
|
|
1865
|
+
// finalize the group marker here.
|
|
1866
|
+
this.activeToolRunGroup?.markRunComplete();
|
|
1848
1867
|
this.pendingTools.clear();
|
|
1849
1868
|
}
|
|
1850
1869
|
else {
|
|
@@ -1857,6 +1876,11 @@ export class InteractiveMode {
|
|
|
1857
1876
|
}
|
|
1858
1877
|
this.streamingComponent = undefined;
|
|
1859
1878
|
this.streamingMessage = undefined;
|
|
1879
|
+
// D-083: a toolUse stop reason is followed by tool execution
|
|
1880
|
+
// events (start/end arrive after message_end — the session
|
|
1881
|
+
// executes tools once the streamed message completes), so the
|
|
1882
|
+
// group stays open for setActiveTool/noteResult here and is
|
|
1883
|
+
// finalized at agent_end / the next message_start.
|
|
1860
1884
|
this.footer.invalidate();
|
|
1861
1885
|
}
|
|
1862
1886
|
this.ui.requestRender();
|
|
@@ -1872,10 +1896,11 @@ export class InteractiveMode {
|
|
|
1872
1896
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
1873
1897
|
}, this.getRegisteredToolDefinition(event.toolName), this.ui, this.facade.getCwd());
|
|
1874
1898
|
component.setExpanded(this.toolOutputExpanded);
|
|
1875
|
-
this.
|
|
1899
|
+
this.addToolToRunGroup(component);
|
|
1876
1900
|
this.pendingTools.set(event.toolCallId, component);
|
|
1877
1901
|
}
|
|
1878
1902
|
component.markExecutionStarted();
|
|
1903
|
+
this.activeToolRunGroup?.setActiveTool(event.toolName);
|
|
1879
1904
|
this.ui.requestRender();
|
|
1880
1905
|
break;
|
|
1881
1906
|
}
|
|
@@ -1891,6 +1916,7 @@ export class InteractiveMode {
|
|
|
1891
1916
|
const component = this.pendingTools.get(event.toolCallId);
|
|
1892
1917
|
if (component) {
|
|
1893
1918
|
component.updateResult({ ...event.result, isError: event.isError });
|
|
1919
|
+
this.activeToolRunGroup?.noteResult(event.isError);
|
|
1894
1920
|
this.pendingTools.delete(event.toolCallId);
|
|
1895
1921
|
this.ui.requestRender();
|
|
1896
1922
|
}
|
|
@@ -1917,6 +1943,11 @@ export class InteractiveMode {
|
|
|
1917
1943
|
this.streamingMessage = undefined;
|
|
1918
1944
|
}
|
|
1919
1945
|
this.pendingTools.clear();
|
|
1946
|
+
// D-083: the whole agent turn (messages + tool executions) is
|
|
1947
|
+
// over — finalize the last group's marker (count/sole-tool name
|
|
1948
|
+
// + failure count). Completed groups stay in the transcript.
|
|
1949
|
+
this.activeToolRunGroup?.markRunComplete();
|
|
1950
|
+
this.activeToolRunGroup = undefined;
|
|
1920
1951
|
this.ui.requestRender();
|
|
1921
1952
|
break;
|
|
1922
1953
|
case "agent_settled":
|
|
@@ -2149,6 +2180,12 @@ export class InteractiveMode {
|
|
|
2149
2180
|
}
|
|
2150
2181
|
case "assistant": {
|
|
2151
2182
|
const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.getMarkdownTransformers());
|
|
2183
|
+
// D-083: restored/finished-turn thinking must follow detail mode
|
|
2184
|
+
// (ctrl+o) — the setToolsExpanded loop only reaches children on
|
|
2185
|
+
// toggle, not components created while already expanded.
|
|
2186
|
+
if (this.toolOutputExpanded) {
|
|
2187
|
+
assistantComponent.setExpanded(true);
|
|
2188
|
+
}
|
|
2152
2189
|
this.chatContainer.addChild(assistantComponent);
|
|
2153
2190
|
break;
|
|
2154
2191
|
}
|
|
@@ -2188,6 +2225,9 @@ export class InteractiveMode {
|
|
|
2188
2225
|
// Assistant messages need special handling for tool calls
|
|
2189
2226
|
if (message.role === "assistant") {
|
|
2190
2227
|
this.addMessageToChat(message);
|
|
2228
|
+
// No message_start on the restore path: reset the group pointer
|
|
2229
|
+
// so each assistant message forms its own tool-run group (D-083).
|
|
2230
|
+
this.activeToolRunGroup = undefined;
|
|
2191
2231
|
// Render tool call components
|
|
2192
2232
|
for (const content of message.content) {
|
|
2193
2233
|
if (content.type === "toolCall") {
|
|
@@ -2196,7 +2236,7 @@ export class InteractiveMode {
|
|
|
2196
2236
|
imageWidthCells: this.settingsManager.getImageWidthCells(),
|
|
2197
2237
|
}, this.getRegisteredToolDefinition(content.name), this.ui, this.facade.getCwd());
|
|
2198
2238
|
component.setExpanded(this.toolOutputExpanded);
|
|
2199
|
-
this.
|
|
2239
|
+
this.addToolToRunGroup(component);
|
|
2200
2240
|
if (message.stopReason === "aborted" || message.stopReason === "error") {
|
|
2201
2241
|
let errorMessage;
|
|
2202
2242
|
if (message.stopReason === "aborted") {
|
|
@@ -2212,12 +2252,14 @@ export class InteractiveMode {
|
|
|
2212
2252
|
errorMessage = message.errorMessage || t("Error");
|
|
2213
2253
|
}
|
|
2214
2254
|
component.updateResult({ content: [{ type: "text", text: errorMessage }], isError: true });
|
|
2255
|
+
this.noteResultInActiveToolRunGroup(true);
|
|
2215
2256
|
}
|
|
2216
2257
|
else {
|
|
2217
2258
|
renderedPendingTools.set(content.id, component);
|
|
2218
2259
|
}
|
|
2219
2260
|
}
|
|
2220
2261
|
}
|
|
2262
|
+
this.markActiveToolRunGroupComplete();
|
|
2221
2263
|
if (message.stopReason !== "aborted" && message.stopReason !== "error") {
|
|
2222
2264
|
const miss = cacheMisses.get(message);
|
|
2223
2265
|
if (miss)
|
|
@@ -2229,6 +2271,9 @@ export class InteractiveMode {
|
|
|
2229
2271
|
const component = renderedPendingTools.get(message.toolCallId);
|
|
2230
2272
|
if (component) {
|
|
2231
2273
|
component.updateResult(message);
|
|
2274
|
+
// Failure never goes silent (D-083): count it on the group
|
|
2275
|
+
// the restored tool call belongs to.
|
|
2276
|
+
this.noteResultInActiveToolRunGroup(message.isError);
|
|
2232
2277
|
renderedPendingTools.delete(message.toolCallId);
|
|
2233
2278
|
}
|
|
2234
2279
|
}
|
|
@@ -2240,6 +2285,9 @@ export class InteractiveMode {
|
|
|
2240
2285
|
for (const [toolCallId, component] of renderedPendingTools) {
|
|
2241
2286
|
this.pendingTools.set(toolCallId, component);
|
|
2242
2287
|
}
|
|
2288
|
+
// Groups stay in the transcript; reset the pointer so a live turn
|
|
2289
|
+
// starts a fresh group (D-083).
|
|
2290
|
+
this.activeToolRunGroup = undefined;
|
|
2243
2291
|
this.ui.requestRender();
|
|
2244
2292
|
}
|
|
2245
2293
|
/**
|
|
@@ -2666,6 +2714,32 @@ export class InteractiveMode {
|
|
|
2666
2714
|
toggleToolOutputExpansion() {
|
|
2667
2715
|
this.setToolsExpanded(!this.toolOutputExpanded);
|
|
2668
2716
|
}
|
|
2717
|
+
/**
|
|
2718
|
+
* D-083 quiet transcript: mount a tool component into the current
|
|
2719
|
+
* assistant turn's tool-run group (creating the group on first tool of
|
|
2720
|
+
* the turn) instead of the chat container directly. Collapsed groups
|
|
2721
|
+
* render one dim marker line for the whole turn.
|
|
2722
|
+
*/
|
|
2723
|
+
addToolToRunGroup(component) {
|
|
2724
|
+
if (!this.activeToolRunGroup) {
|
|
2725
|
+
this.activeToolRunGroup = new ToolRunGroupComponent();
|
|
2726
|
+
this.activeToolRunGroup.setExpanded(this.toolOutputExpanded);
|
|
2727
|
+
this.chatContainer.addChild(this.activeToolRunGroup);
|
|
2728
|
+
}
|
|
2729
|
+
this.activeToolRunGroup.addTool(component);
|
|
2730
|
+
}
|
|
2731
|
+
/**
|
|
2732
|
+
* Narrowing-safe faces for the active group inside renderSessionItems:
|
|
2733
|
+
* addToolToRunGroup may (re)assign this.activeToolRunGroup behind the
|
|
2734
|
+
* compiler's back, so group reads go through methods instead of the
|
|
2735
|
+
* narrowed property reference.
|
|
2736
|
+
*/
|
|
2737
|
+
noteResultInActiveToolRunGroup(isError) {
|
|
2738
|
+
this.activeToolRunGroup?.noteResult(isError);
|
|
2739
|
+
}
|
|
2740
|
+
markActiveToolRunGroupComplete() {
|
|
2741
|
+
this.activeToolRunGroup?.markRunComplete();
|
|
2742
|
+
}
|
|
2669
2743
|
setToolsExpanded(expanded) {
|
|
2670
2744
|
if (expanded === this.toolOutputExpanded)
|
|
2671
2745
|
return;
|
|
@@ -4362,6 +4436,14 @@ ${externalEditorRow}${copyMessageRow}${followUpRow}${dequeueRow}
|
|
|
4362
4436
|
// Ignore, will be emitted as an event
|
|
4363
4437
|
}
|
|
4364
4438
|
}
|
|
4439
|
+
/** /clean-sessions:会话清理两阶段流程;输出/确认走宿主既有机制(设计 §7)。 */
|
|
4440
|
+
async handleCleanSessionsCommand(arg) {
|
|
4441
|
+
await runCleanSessions({
|
|
4442
|
+
showMessage: (text) => this.showStatus(text),
|
|
4443
|
+
showError: (text) => this.showError(text),
|
|
4444
|
+
confirm: (title, message) => this.showDialogConfirm(title, message),
|
|
4445
|
+
}, arg);
|
|
4446
|
+
}
|
|
4365
4447
|
stop(fullscreenExitOutput = this.settingsManager.getFullscreenExitOutput()) {
|
|
4366
4448
|
this.disposeActiveSelector();
|
|
4367
4449
|
if (this.settingsManager.getShowTerminalProgress()) {
|