erosolar-cli 1.7.341 → 1.7.342
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 +24 -148
- package/dist/bin/erosolar.js +5 -21
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
- package/dist/capabilities/agentSpawningCapability.js +56 -31
- package/dist/capabilities/agentSpawningCapability.js.map +1 -1
- package/dist/contracts/agent-schemas.json +0 -15
- package/dist/contracts/tools.schema.json +0 -9
- package/dist/core/agent.d.ts +2 -2
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js.map +1 -1
- package/dist/core/customCommands.d.ts +1 -0
- package/dist/core/customCommands.d.ts.map +1 -1
- package/dist/core/customCommands.js +3 -0
- package/dist/core/customCommands.js.map +1 -1
- package/dist/core/hooks.d.ts +113 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +267 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/metricsTracker.d.ts +122 -0
- package/dist/core/metricsTracker.d.ts.map +1 -0
- package/dist/{alpha-zero → core}/metricsTracker.js +2 -5
- package/dist/core/metricsTracker.js.map +1 -0
- package/dist/core/securityAssessment.d.ts +91 -0
- package/dist/core/securityAssessment.d.ts.map +1 -0
- package/dist/core/securityAssessment.js +580 -0
- package/dist/core/securityAssessment.js.map +1 -0
- package/dist/core/sessionStore.d.ts +2 -0
- package/dist/core/sessionStore.d.ts.map +1 -1
- package/dist/core/sessionStore.js +1 -0
- package/dist/core/sessionStore.js.map +1 -1
- package/dist/core/toolPreconditions.d.ts.map +1 -1
- package/dist/core/toolPreconditions.js +0 -14
- package/dist/core/toolPreconditions.js.map +1 -1
- package/dist/core/toolRuntime.d.ts +22 -1
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +0 -5
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/core/toolValidation.d.ts.map +1 -1
- package/dist/core/toolValidation.js +14 -3
- package/dist/core/toolValidation.js.map +1 -1
- package/dist/core/validationRunner.d.ts +1 -3
- package/dist/core/validationRunner.d.ts.map +1 -1
- package/dist/core/validationRunner.js.map +1 -1
- package/dist/core/verification.d.ts +137 -0
- package/dist/core/verification.d.ts.map +1 -0
- package/dist/core/verification.js +323 -0
- package/dist/core/verification.js.map +1 -0
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +21 -0
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +9 -18
- package/dist/mcp/sseClient.js.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.d.ts +0 -6
- package/dist/plugins/tools/build/buildPlugin.d.ts.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.js +4 -10
- package/dist/plugins/tools/build/buildPlugin.js.map +1 -1
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +0 -2
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/runtime/agentSession.d.ts +2 -2
- package/dist/runtime/agentSession.d.ts.map +1 -1
- package/dist/runtime/agentSession.js +2 -2
- package/dist/runtime/agentSession.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +19 -7
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +271 -166
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.d.ts +2 -0
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +82 -9
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +1 -4
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +215 -120
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +926 -537
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +99 -21
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +131 -30
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/subagents/agentConfig.d.ts +27 -0
- package/dist/subagents/agentConfig.d.ts.map +1 -0
- package/dist/subagents/agentConfig.js +89 -0
- package/dist/subagents/agentConfig.js.map +1 -0
- package/dist/subagents/agentRegistry.d.ts +33 -0
- package/dist/subagents/agentRegistry.d.ts.map +1 -0
- package/dist/subagents/agentRegistry.js +162 -0
- package/dist/subagents/agentRegistry.js.map +1 -0
- package/dist/subagents/taskRunner.d.ts +7 -1
- package/dist/subagents/taskRunner.d.ts.map +1 -1
- package/dist/subagents/taskRunner.js +180 -47
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +13 -12
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/display.d.ts +24 -45
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +140 -259
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +6 -8
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/toolDisplay.d.ts +0 -158
- package/dist/ui/toolDisplay.d.ts.map +1 -1
- package/dist/ui/toolDisplay.js +0 -348
- package/dist/ui/toolDisplay.js.map +1 -1
- package/dist/ui/unified/layout.d.ts +1 -0
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +25 -179
- package/dist/ui/unified/layout.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +10 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +78 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/package.json +4 -4
- package/dist/alpha-zero/agentWrapper.d.ts +0 -84
- package/dist/alpha-zero/agentWrapper.d.ts.map +0 -1
- package/dist/alpha-zero/agentWrapper.js +0 -171
- package/dist/alpha-zero/agentWrapper.js.map +0 -1
- package/dist/alpha-zero/codeEvaluator.d.ts +0 -25
- package/dist/alpha-zero/codeEvaluator.d.ts.map +0 -1
- package/dist/alpha-zero/codeEvaluator.js +0 -273
- package/dist/alpha-zero/codeEvaluator.js.map +0 -1
- package/dist/alpha-zero/competitiveRunner.d.ts +0 -66
- package/dist/alpha-zero/competitiveRunner.d.ts.map +0 -1
- package/dist/alpha-zero/competitiveRunner.js +0 -224
- package/dist/alpha-zero/competitiveRunner.js.map +0 -1
- package/dist/alpha-zero/index.d.ts +0 -67
- package/dist/alpha-zero/index.d.ts.map +0 -1
- package/dist/alpha-zero/index.js +0 -99
- package/dist/alpha-zero/index.js.map +0 -1
- package/dist/alpha-zero/introspection.d.ts +0 -128
- package/dist/alpha-zero/introspection.d.ts.map +0 -1
- package/dist/alpha-zero/introspection.js +0 -300
- package/dist/alpha-zero/introspection.js.map +0 -1
- package/dist/alpha-zero/metricsTracker.d.ts +0 -71
- package/dist/alpha-zero/metricsTracker.d.ts.map +0 -1
- package/dist/alpha-zero/metricsTracker.js.map +0 -1
- package/dist/alpha-zero/security/core.d.ts +0 -125
- package/dist/alpha-zero/security/core.d.ts.map +0 -1
- package/dist/alpha-zero/security/core.js +0 -271
- package/dist/alpha-zero/security/core.js.map +0 -1
- package/dist/alpha-zero/security/google.d.ts +0 -125
- package/dist/alpha-zero/security/google.d.ts.map +0 -1
- package/dist/alpha-zero/security/google.js +0 -311
- package/dist/alpha-zero/security/google.js.map +0 -1
- package/dist/alpha-zero/security/googleLoader.d.ts +0 -17
- package/dist/alpha-zero/security/googleLoader.d.ts.map +0 -1
- package/dist/alpha-zero/security/googleLoader.js +0 -41
- package/dist/alpha-zero/security/googleLoader.js.map +0 -1
- package/dist/alpha-zero/security/index.d.ts +0 -29
- package/dist/alpha-zero/security/index.d.ts.map +0 -1
- package/dist/alpha-zero/security/index.js +0 -32
- package/dist/alpha-zero/security/index.js.map +0 -1
- package/dist/alpha-zero/security/simulation.d.ts +0 -124
- package/dist/alpha-zero/security/simulation.d.ts.map +0 -1
- package/dist/alpha-zero/security/simulation.js +0 -277
- package/dist/alpha-zero/security/simulation.js.map +0 -1
- package/dist/alpha-zero/selfModification.d.ts +0 -109
- package/dist/alpha-zero/selfModification.d.ts.map +0 -1
- package/dist/alpha-zero/selfModification.js +0 -233
- package/dist/alpha-zero/selfModification.js.map +0 -1
- package/dist/alpha-zero/types.d.ts +0 -170
- package/dist/alpha-zero/types.d.ts.map +0 -1
- package/dist/alpha-zero/types.js +0 -31
- package/dist/alpha-zero/types.js.map +0 -1
- package/dist/capabilities/securityTestingCapability.d.ts +0 -13
- package/dist/capabilities/securityTestingCapability.d.ts.map +0 -1
- package/dist/capabilities/securityTestingCapability.js +0 -25
- package/dist/capabilities/securityTestingCapability.js.map +0 -1
- package/dist/core/aiFlowOptimizer.d.ts +0 -26
- package/dist/core/aiFlowOptimizer.d.ts.map +0 -1
- package/dist/core/aiFlowOptimizer.js +0 -31
- package/dist/core/aiFlowOptimizer.js.map +0 -1
- package/dist/core/aiOptimizationEngine.d.ts +0 -158
- package/dist/core/aiOptimizationEngine.d.ts.map +0 -1
- package/dist/core/aiOptimizationEngine.js +0 -428
- package/dist/core/aiOptimizationEngine.js.map +0 -1
- package/dist/core/aiOptimizationIntegration.d.ts +0 -93
- package/dist/core/aiOptimizationIntegration.d.ts.map +0 -1
- package/dist/core/aiOptimizationIntegration.js +0 -250
- package/dist/core/aiOptimizationIntegration.js.map +0 -1
- package/dist/core/enhancedErrorRecovery.d.ts +0 -100
- package/dist/core/enhancedErrorRecovery.d.ts.map +0 -1
- package/dist/core/enhancedErrorRecovery.js +0 -345
- package/dist/core/enhancedErrorRecovery.js.map +0 -1
- package/dist/core/hooksSystem.d.ts +0 -65
- package/dist/core/hooksSystem.d.ts.map +0 -1
- package/dist/core/hooksSystem.js +0 -273
- package/dist/core/hooksSystem.js.map +0 -1
- package/dist/core/memorySystem.d.ts +0 -48
- package/dist/core/memorySystem.d.ts.map +0 -1
- package/dist/core/memorySystem.js +0 -271
- package/dist/core/memorySystem.js.map +0 -1
- package/dist/core/unified/errors.d.ts +0 -189
- package/dist/core/unified/errors.d.ts.map +0 -1
- package/dist/core/unified/errors.js +0 -497
- package/dist/core/unified/errors.js.map +0 -1
- package/dist/core/unified/index.d.ts +0 -19
- package/dist/core/unified/index.d.ts.map +0 -1
- package/dist/core/unified/index.js +0 -68
- package/dist/core/unified/index.js.map +0 -1
- package/dist/core/unified/schema.d.ts +0 -101
- package/dist/core/unified/schema.d.ts.map +0 -1
- package/dist/core/unified/schema.js +0 -350
- package/dist/core/unified/schema.js.map +0 -1
- package/dist/core/unified/toolRuntime.d.ts +0 -179
- package/dist/core/unified/toolRuntime.d.ts.map +0 -1
- package/dist/core/unified/toolRuntime.js +0 -517
- package/dist/core/unified/toolRuntime.js.map +0 -1
- package/dist/core/unified/tools.d.ts +0 -127
- package/dist/core/unified/tools.d.ts.map +0 -1
- package/dist/core/unified/tools.js +0 -1333
- package/dist/core/unified/tools.js.map +0 -1
- package/dist/core/unified/types.d.ts +0 -352
- package/dist/core/unified/types.d.ts.map +0 -1
- package/dist/core/unified/types.js +0 -12
- package/dist/core/unified/types.js.map +0 -1
- package/dist/core/unified/version.d.ts +0 -209
- package/dist/core/unified/version.d.ts.map +0 -1
- package/dist/core/unified/version.js +0 -454
- package/dist/core/unified/version.js.map +0 -1
- package/dist/plugins/tools/security/securityPlugin.d.ts +0 -3
- package/dist/plugins/tools/security/securityPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/security/securityPlugin.js +0 -12
- package/dist/plugins/tools/security/securityPlugin.js.map +0 -1
- package/dist/security/active-stack-security.d.ts +0 -112
- package/dist/security/active-stack-security.d.ts.map +0 -1
- package/dist/security/active-stack-security.js +0 -296
- package/dist/security/active-stack-security.js.map +0 -1
- package/dist/security/advanced-persistence-research.d.ts +0 -92
- package/dist/security/advanced-persistence-research.d.ts.map +0 -1
- package/dist/security/advanced-persistence-research.js +0 -195
- package/dist/security/advanced-persistence-research.js.map +0 -1
- package/dist/security/advanced-targeting.d.ts +0 -119
- package/dist/security/advanced-targeting.d.ts.map +0 -1
- package/dist/security/advanced-targeting.js +0 -233
- package/dist/security/advanced-targeting.js.map +0 -1
- package/dist/security/assessment/vulnerabilityAssessment.d.ts +0 -104
- package/dist/security/assessment/vulnerabilityAssessment.d.ts.map +0 -1
- package/dist/security/assessment/vulnerabilityAssessment.js +0 -315
- package/dist/security/assessment/vulnerabilityAssessment.js.map +0 -1
- package/dist/security/authorization/securityAuthorization.d.ts +0 -88
- package/dist/security/authorization/securityAuthorization.d.ts.map +0 -1
- package/dist/security/authorization/securityAuthorization.js +0 -172
- package/dist/security/authorization/securityAuthorization.js.map +0 -1
- package/dist/security/comprehensive-targeting.d.ts +0 -85
- package/dist/security/comprehensive-targeting.d.ts.map +0 -1
- package/dist/security/comprehensive-targeting.js +0 -438
- package/dist/security/comprehensive-targeting.js.map +0 -1
- package/dist/security/global-security-integration.d.ts +0 -91
- package/dist/security/global-security-integration.d.ts.map +0 -1
- package/dist/security/global-security-integration.js +0 -218
- package/dist/security/global-security-integration.js.map +0 -1
- package/dist/security/index.d.ts +0 -38
- package/dist/security/index.d.ts.map +0 -1
- package/dist/security/index.js +0 -47
- package/dist/security/index.js.map +0 -1
- package/dist/security/persistence-analyzer.d.ts +0 -56
- package/dist/security/persistence-analyzer.d.ts.map +0 -1
- package/dist/security/persistence-analyzer.js +0 -187
- package/dist/security/persistence-analyzer.js.map +0 -1
- package/dist/security/persistence-cli.d.ts +0 -36
- package/dist/security/persistence-cli.d.ts.map +0 -1
- package/dist/security/persistence-cli.js +0 -160
- package/dist/security/persistence-cli.js.map +0 -1
- package/dist/security/persistence-research.d.ts +0 -92
- package/dist/security/persistence-research.d.ts.map +0 -1
- package/dist/security/persistence-research.js +0 -364
- package/dist/security/persistence-research.js.map +0 -1
- package/dist/security/research/persistenceResearch.d.ts +0 -97
- package/dist/security/research/persistenceResearch.d.ts.map +0 -1
- package/dist/security/research/persistenceResearch.js +0 -282
- package/dist/security/research/persistenceResearch.js.map +0 -1
- package/dist/security/security-integration.d.ts +0 -74
- package/dist/security/security-integration.d.ts.map +0 -1
- package/dist/security/security-integration.js +0 -137
- package/dist/security/security-integration.js.map +0 -1
- package/dist/security/security-testing-framework.d.ts +0 -112
- package/dist/security/security-testing-framework.d.ts.map +0 -1
- package/dist/security/security-testing-framework.js +0 -364
- package/dist/security/security-testing-framework.js.map +0 -1
- package/dist/security/simulation/attackSimulation.d.ts +0 -93
- package/dist/security/simulation/attackSimulation.d.ts.map +0 -1
- package/dist/security/simulation/attackSimulation.js +0 -341
- package/dist/security/simulation/attackSimulation.js.map +0 -1
- package/dist/security/strategic-operations.d.ts +0 -100
- package/dist/security/strategic-operations.d.ts.map +0 -1
- package/dist/security/strategic-operations.js +0 -276
- package/dist/security/strategic-operations.js.map +0 -1
- package/dist/security/tool-security-wrapper.d.ts +0 -58
- package/dist/security/tool-security-wrapper.d.ts.map +0 -1
- package/dist/security/tool-security-wrapper.js +0 -156
- package/dist/security/tool-security-wrapper.js.map +0 -1
- package/dist/shell/claudeCodeStreamHandler.d.ts +0 -145
- package/dist/shell/claudeCodeStreamHandler.d.ts.map +0 -1
- package/dist/shell/claudeCodeStreamHandler.js +0 -322
- package/dist/shell/claudeCodeStreamHandler.js.map +0 -1
- package/dist/shell/inputQueueManager.d.ts +0 -144
- package/dist/shell/inputQueueManager.d.ts.map +0 -1
- package/dist/shell/inputQueueManager.js +0 -290
- package/dist/shell/inputQueueManager.js.map +0 -1
- package/dist/shell/metricsTracker.d.ts +0 -60
- package/dist/shell/metricsTracker.d.ts.map +0 -1
- package/dist/shell/metricsTracker.js +0 -119
- package/dist/shell/metricsTracker.js.map +0 -1
- package/dist/shell/streamingOutputManager.d.ts +0 -115
- package/dist/shell/streamingOutputManager.d.ts.map +0 -1
- package/dist/shell/streamingOutputManager.js +0 -225
- package/dist/shell/streamingOutputManager.js.map +0 -1
- package/dist/tools/securityTools.d.ts +0 -22
- package/dist/tools/securityTools.d.ts.map +0 -1
- package/dist/tools/securityTools.js +0 -448
- package/dist/tools/securityTools.js.map +0 -1
- package/dist/ui/persistentPrompt.d.ts +0 -50
- package/dist/ui/persistentPrompt.d.ts.map +0 -1
- package/dist/ui/persistentPrompt.js +0 -92
- package/dist/ui/persistentPrompt.js.map +0 -1
- package/dist/ui/terminalUISchema.d.ts +0 -195
- package/dist/ui/terminalUISchema.d.ts.map +0 -1
- package/dist/ui/terminalUISchema.js +0 -113
- package/dist/ui/terminalUISchema.js.map +0 -1
- package/scripts/deploy-security-capabilities.js +0 -178
package/dist/ui/display.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOtD,KAAK,YAAY,GAAG,MAAM,CAAC,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/display.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSpinner } from 'nanospinner';
|
|
2
|
-
import { clearScreenDown, cursorTo
|
|
2
|
+
import { clearScreenDown, cursorTo } from 'node:readline';
|
|
3
3
|
import { theme, icons } from './theme.js';
|
|
4
4
|
import { formatRichContent, renderMessagePanel, renderMessageBody } from './richText.js';
|
|
5
5
|
import { getTerminalColumns } from './layout.js';
|
|
@@ -7,7 +7,7 @@ import { highlightError } from './textHighlighter.js';
|
|
|
7
7
|
import { renderSectionHeading } from './designSystem.js';
|
|
8
8
|
import { isPlainOutputMode } from './outputMode.js';
|
|
9
9
|
import { writeLock } from './writeLock.js';
|
|
10
|
-
import {
|
|
10
|
+
import { renderStatusLine } from './unified/layout.js';
|
|
11
11
|
import { isStreamingMode } from './globalWriteLock.js';
|
|
12
12
|
/**
|
|
13
13
|
* Output lock to prevent race conditions during spinner/stream output.
|
|
@@ -254,10 +254,10 @@ export class Display {
|
|
|
254
254
|
interceptor.beforeWrite?.();
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
|
-
notifyAfterOutput() {
|
|
257
|
+
notifyAfterOutput(content) {
|
|
258
258
|
const interceptors = Array.from(this.outputInterceptors);
|
|
259
259
|
for (let index = interceptors.length - 1; index >= 0; index -= 1) {
|
|
260
|
-
interceptors[index]?.afterWrite?.();
|
|
260
|
+
interceptors[index]?.afterWrite?.(content);
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
write(value, target = this.outputStream) {
|
|
@@ -286,29 +286,36 @@ export class Display {
|
|
|
286
286
|
if (typeof content !== 'string' || !content) {
|
|
287
287
|
return;
|
|
288
288
|
}
|
|
289
|
-
//
|
|
290
|
-
//
|
|
289
|
+
// Normalize carriage returns to avoid overwriting streamed content on the same line.
|
|
290
|
+
// Some providers emit '\r' when streaming; convert to '\n' so we append instead of rewriting.
|
|
291
|
+
const normalized = content.includes('\r')
|
|
292
|
+
? content.replace(/\r\n/g, '\n').replace(/\r/g, '\n')
|
|
293
|
+
: content;
|
|
294
|
+
// During streaming, use withLock to prevent interleaving with escape codes.
|
|
295
|
+
// This ensures the before/write/after sequence is atomic.
|
|
291
296
|
if (isStreamingMode()) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
writeLock.withLock(() => {
|
|
298
|
+
this.notifyBeforeOutput();
|
|
299
|
+
try {
|
|
300
|
+
this.outputStream.write(normalized);
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
// Ignore write failures to keep UI resilient
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
this.notifyAfterOutput(normalized);
|
|
307
|
+
}
|
|
308
|
+
}, 'display.writeRaw.streaming');
|
|
302
309
|
return;
|
|
303
310
|
}
|
|
304
311
|
// Outside streaming mode, use locks to coordinate with other UI
|
|
305
312
|
writeLock.withLock(() => {
|
|
306
313
|
this.notifyBeforeOutput();
|
|
307
314
|
try {
|
|
308
|
-
this.write(
|
|
315
|
+
this.write(normalized);
|
|
309
316
|
}
|
|
310
317
|
finally {
|
|
311
|
-
this.notifyAfterOutput();
|
|
318
|
+
this.notifyAfterOutput(normalized);
|
|
312
319
|
}
|
|
313
320
|
}, 'display.writeRaw');
|
|
314
321
|
}
|
|
@@ -353,125 +360,7 @@ export class Display {
|
|
|
353
360
|
}
|
|
354
361
|
return getTerminalColumns();
|
|
355
362
|
}
|
|
356
|
-
|
|
357
|
-
bannerContext = null;
|
|
358
|
-
/**
|
|
359
|
-
* Stores banner information. When silent=true, only stores state without writing.
|
|
360
|
-
* The banner can then be rendered later via renderBannerToContent().
|
|
361
|
-
*
|
|
362
|
-
* @param silent If true, only store state without writing to stdout (default: true)
|
|
363
|
-
*/
|
|
364
|
-
showWelcome(profileLabel, profileName, model, provider, workingDir, version, silent = true) {
|
|
365
|
-
// Validate required inputs
|
|
366
|
-
if (!model?.trim() || !provider?.trim() || !workingDir?.trim()) {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
const width = this.getBannerWidth();
|
|
370
|
-
const banner = this.buildClaudeStyleBanner(profileLabel ?? '', profileName ?? '', model, provider, workingDir, width, version);
|
|
371
|
-
if (!banner) {
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
const height = this.measureBannerHeight(banner);
|
|
375
|
-
this.bannerState = {
|
|
376
|
-
startLine: 0, // Will be set when actually rendered
|
|
377
|
-
height,
|
|
378
|
-
width,
|
|
379
|
-
workingDir,
|
|
380
|
-
version: version?.trim() || undefined,
|
|
381
|
-
model,
|
|
382
|
-
provider,
|
|
383
|
-
profileLabel: profileLabel ?? '',
|
|
384
|
-
profileName: profileName ?? '',
|
|
385
|
-
};
|
|
386
|
-
this.bannerContext = {
|
|
387
|
-
workingDir,
|
|
388
|
-
model,
|
|
389
|
-
provider,
|
|
390
|
-
profileLabel: profileLabel ?? '',
|
|
391
|
-
profileName: profileName ?? '',
|
|
392
|
-
version: version?.trim() || undefined,
|
|
393
|
-
};
|
|
394
|
-
// Only write to stdout if not silent
|
|
395
|
-
if (!silent) {
|
|
396
|
-
const startLine = this.stdoutTracker.totalLines;
|
|
397
|
-
this.withOutput(() => {
|
|
398
|
-
this.writeLine(banner);
|
|
399
|
-
});
|
|
400
|
-
this.bannerState.startLine = startLine;
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
/**
|
|
404
|
-
* Get the current version string (if set during showWelcome).
|
|
405
|
-
*/
|
|
406
|
-
getVersion() {
|
|
407
|
-
return this.bannerContext?.version;
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Get the current banner content as a string.
|
|
411
|
-
* Used by TerminalInput to re-render the banner inside the scroll region.
|
|
412
|
-
* Returns null if no banner has been displayed yet.
|
|
413
|
-
*/
|
|
414
|
-
getBannerContent() {
|
|
415
|
-
const state = this.bannerState;
|
|
416
|
-
if (!state) {
|
|
417
|
-
return null;
|
|
418
|
-
}
|
|
419
|
-
const width = this.getBannerWidth();
|
|
420
|
-
return this.buildClaudeStyleBanner(state.profileLabel, state.profileName, state.model, state.provider, state.workingDir, width, state.version);
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Render banner directly to stdout (for unified UI re-rendering).
|
|
424
|
-
* This writes the banner without updating tracking state.
|
|
425
|
-
* Returns the number of lines written.
|
|
426
|
-
*/
|
|
427
|
-
renderBannerToContent() {
|
|
428
|
-
const banner = this.getBannerContent();
|
|
429
|
-
if (!banner) {
|
|
430
|
-
return 0;
|
|
431
|
-
}
|
|
432
|
-
this.withOutput(() => {
|
|
433
|
-
this.writeLine(banner);
|
|
434
|
-
});
|
|
435
|
-
return this.measureBannerHeight(banner);
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Updates the session information banner with new model/provider by appending
|
|
439
|
-
* a new banner entry in the scroll region (no pinned header rewriting).
|
|
440
|
-
*/
|
|
441
|
-
updateSessionInfo(model, provider) {
|
|
442
|
-
const state = this.bannerState;
|
|
443
|
-
if (!state) {
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
const width = this.getBannerWidth();
|
|
447
|
-
const banner = this.buildClaudeStyleBanner(state.profileLabel, state.profileName, model, provider, state.workingDir, width, state.version);
|
|
448
|
-
const height = this.measureBannerHeight(banner);
|
|
449
|
-
// If height changed or rewrite failed, do full re-render
|
|
450
|
-
if (height !== state.height || !this.tryRewriteBanner(state, banner)) {
|
|
451
|
-
this.renderAndStoreBanner(state, model, provider);
|
|
452
|
-
this.bannerContext = {
|
|
453
|
-
workingDir: state.workingDir,
|
|
454
|
-
model: state.model,
|
|
455
|
-
provider: state.provider,
|
|
456
|
-
profileLabel: state.profileLabel,
|
|
457
|
-
profileName: state.profileName,
|
|
458
|
-
version: state.version,
|
|
459
|
-
};
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
state.model = model;
|
|
463
|
-
state.provider = provider;
|
|
464
|
-
state.width = width;
|
|
465
|
-
state.height = height;
|
|
466
|
-
this.bannerContext = {
|
|
467
|
-
workingDir: state.workingDir,
|
|
468
|
-
model,
|
|
469
|
-
provider,
|
|
470
|
-
profileLabel: state.profileLabel,
|
|
471
|
-
profileName: state.profileName,
|
|
472
|
-
version: state.version,
|
|
473
|
-
};
|
|
474
|
-
}
|
|
363
|
+
// Banner is now streamed by the shell - no storage needed
|
|
475
364
|
showThinking(message = 'Thinking...') {
|
|
476
365
|
// If we already have a spinner, just update its text instead of creating a new one
|
|
477
366
|
if (this.activeSpinner) {
|
|
@@ -851,6 +740,23 @@ export class Display {
|
|
|
851
740
|
// Tools are available but not listed verbosely on startup
|
|
852
741
|
// Parameter prefixed with underscore to indicate intentionally unused
|
|
853
742
|
}
|
|
743
|
+
/**
|
|
744
|
+
* Show a compact launch panel of slash commands with wrapped descriptions.
|
|
745
|
+
*/
|
|
746
|
+
showCommandPalette(commands, options) {
|
|
747
|
+
if (!commands || commands.length === 0) {
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
const panel = this.buildCommandPalette(commands, options);
|
|
751
|
+
if (!panel.trim()) {
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
this.withOutput(() => {
|
|
755
|
+
this.writeLine();
|
|
756
|
+
this.writeLine(panel);
|
|
757
|
+
this.writeLine();
|
|
758
|
+
});
|
|
759
|
+
}
|
|
854
760
|
/**
|
|
855
761
|
* Show ready message with keyboard shortcuts hint (compact)
|
|
856
762
|
* Note: Commands are now shown in the banner, so this is a no-op
|
|
@@ -869,58 +775,17 @@ export class Display {
|
|
|
869
775
|
// Claude Code style: don't show providers on startup, keep it minimal
|
|
870
776
|
}
|
|
871
777
|
/**
|
|
872
|
-
* Show unified status bar -
|
|
873
|
-
*
|
|
778
|
+
* Show unified status bar - Claude Code style (minimal)
|
|
779
|
+
* Note: No-op - status is shown in mode controls line
|
|
874
780
|
*/
|
|
875
781
|
showUnifiedStatusBar(_providers) {
|
|
876
|
-
// No-op
|
|
782
|
+
// No-op - banner is streamed as content, status shown in control bar
|
|
877
783
|
}
|
|
878
784
|
/**
|
|
879
|
-
* Show streaming header
|
|
880
|
-
* Keeps the streaming section visually connected to the launch banner.
|
|
785
|
+
* Show streaming header - no-op, banner is streamed as content
|
|
881
786
|
*/
|
|
882
|
-
showStreamingHeader(
|
|
883
|
-
|
|
884
|
-
const model = banner ? this.formatModelLabel(banner.model) : null;
|
|
885
|
-
const provider = banner?.provider ?? '';
|
|
886
|
-
const workspace = banner?.workingDir ?? '';
|
|
887
|
-
if (!model && !provider && !workspace) {
|
|
888
|
-
return;
|
|
889
|
-
}
|
|
890
|
-
const width = Math.min(this.getColumnWidth() - 4, DISPLAY_CONSTANTS.MAX_MESSAGE_WIDTH);
|
|
891
|
-
const spaceAbove = options?.spaceAbove ?? true;
|
|
892
|
-
const spaceBelow = options?.spaceBelow ?? true;
|
|
893
|
-
// Plain output keeps the header lightweight
|
|
894
|
-
if (isPlainOutputMode()) {
|
|
895
|
-
const label = model ? `Streaming ${model}` : 'Streaming response';
|
|
896
|
-
this.withOutput(() => {
|
|
897
|
-
if (spaceAbove) {
|
|
898
|
-
this.writeLine();
|
|
899
|
-
}
|
|
900
|
-
this.writeLine(`--- ${label} ---`);
|
|
901
|
-
if (spaceBelow) {
|
|
902
|
-
this.writeLine();
|
|
903
|
-
}
|
|
904
|
-
});
|
|
905
|
-
return;
|
|
906
|
-
}
|
|
907
|
-
const sessionFrame = renderSessionFrame({
|
|
908
|
-
profileLabel: banner?.profileLabel ?? '',
|
|
909
|
-
profileName: banner?.profileName ?? '',
|
|
910
|
-
model: model ?? '',
|
|
911
|
-
provider,
|
|
912
|
-
workspace,
|
|
913
|
-
width,
|
|
914
|
-
});
|
|
915
|
-
this.withOutput(() => {
|
|
916
|
-
if (spaceAbove) {
|
|
917
|
-
this.writeLine();
|
|
918
|
-
}
|
|
919
|
-
this.writeLine(sessionFrame);
|
|
920
|
-
if (spaceBelow) {
|
|
921
|
-
this.writeLine();
|
|
922
|
-
}
|
|
923
|
-
});
|
|
787
|
+
showStreamingHeader(_options) {
|
|
788
|
+
// No-op - banner is streamed as content by the shell
|
|
924
789
|
}
|
|
925
790
|
/**
|
|
926
791
|
* Show model commands help
|
|
@@ -985,78 +850,14 @@ export class Display {
|
|
|
985
850
|
}
|
|
986
851
|
});
|
|
987
852
|
this.stdoutTracker.reset();
|
|
988
|
-
|
|
989
|
-
this.renderAndStoreBanner(this.bannerState, this.bannerState.model, this.bannerState.provider);
|
|
990
|
-
}
|
|
853
|
+
// Banner is streamed content - no re-render on clear
|
|
991
854
|
}
|
|
992
855
|
newLine() {
|
|
993
856
|
this.withOutput(() => {
|
|
994
857
|
this.writeLine();
|
|
995
858
|
});
|
|
996
859
|
}
|
|
997
|
-
|
|
998
|
-
const availableColumns = this.getColumnWidth();
|
|
999
|
-
const effectiveWidth = Math.max(DISPLAY_CONSTANTS.MIN_BANNER_WIDTH, availableColumns - DISPLAY_CONSTANTS.BANNER_PADDING);
|
|
1000
|
-
return Math.min(Math.max(effectiveWidth, DISPLAY_CONSTANTS.MIN_BANNER_WIDTH), DISPLAY_CONSTANTS.MAX_BANNER_WIDTH);
|
|
1001
|
-
}
|
|
1002
|
-
measureBannerHeight(banner) {
|
|
1003
|
-
if (!banner) {
|
|
1004
|
-
return 0;
|
|
1005
|
-
}
|
|
1006
|
-
return banner.split('\n').length;
|
|
1007
|
-
}
|
|
1008
|
-
/**
|
|
1009
|
-
* Attempts to rewrite the banner in place using terminal cursor manipulation.
|
|
1010
|
-
* Returns true if successful, false if rewrite is not possible.
|
|
1011
|
-
*/
|
|
1012
|
-
tryRewriteBanner(state, banner) {
|
|
1013
|
-
if (!this.outputStream.isTTY) {
|
|
1014
|
-
return false;
|
|
1015
|
-
}
|
|
1016
|
-
if (!banner || state.height <= 0) {
|
|
1017
|
-
return false;
|
|
1018
|
-
}
|
|
1019
|
-
const linesWritten = this.stdoutTracker.totalLines;
|
|
1020
|
-
const linesAfterBanner = linesWritten - (state.startLine + state.height);
|
|
1021
|
-
if (linesAfterBanner < 0) {
|
|
1022
|
-
return false;
|
|
1023
|
-
}
|
|
1024
|
-
const totalOffset = linesAfterBanner + state.height;
|
|
1025
|
-
const maxRows = this.outputStream.rows;
|
|
1026
|
-
if (typeof maxRows === 'number' && maxRows > 0 && totalOffset > maxRows) {
|
|
1027
|
-
return false;
|
|
1028
|
-
}
|
|
1029
|
-
try {
|
|
1030
|
-
this.withOutput(() => {
|
|
1031
|
-
moveCursor(this.outputStream, 0, -totalOffset);
|
|
1032
|
-
cursorTo(this.outputStream, 0);
|
|
1033
|
-
this.stdoutTracker.withSuspended(() => {
|
|
1034
|
-
this.outputStream.write(`${banner}\n`);
|
|
1035
|
-
});
|
|
1036
|
-
if (linesAfterBanner > 0) {
|
|
1037
|
-
moveCursor(this.outputStream, 0, linesAfterBanner);
|
|
1038
|
-
}
|
|
1039
|
-
cursorTo(this.outputStream, 0);
|
|
1040
|
-
});
|
|
1041
|
-
return true;
|
|
1042
|
-
}
|
|
1043
|
-
catch {
|
|
1044
|
-
return false;
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
renderAndStoreBanner(state, model, provider) {
|
|
1048
|
-
const width = this.getBannerWidth();
|
|
1049
|
-
const banner = this.buildClaudeStyleBanner(state.profileLabel, state.profileName, model, provider, state.workingDir, width, state.version);
|
|
1050
|
-
const startLine = this.stdoutTracker.totalLines;
|
|
1051
|
-
this.withOutput(() => {
|
|
1052
|
-
this.writeLine(banner);
|
|
1053
|
-
});
|
|
1054
|
-
state.startLine = startLine;
|
|
1055
|
-
state.height = this.measureBannerHeight(banner);
|
|
1056
|
-
state.width = width;
|
|
1057
|
-
state.model = model;
|
|
1058
|
-
state.provider = provider;
|
|
1059
|
-
}
|
|
860
|
+
// Legacy banner methods removed - banner is streamed as content by the shell
|
|
1060
861
|
formatModelLabel(model) {
|
|
1061
862
|
if (/gpt-5\.1-?codex/i.test(model)) {
|
|
1062
863
|
return model;
|
|
@@ -1154,16 +955,96 @@ export class Display {
|
|
|
1154
955
|
}
|
|
1155
956
|
return `${seconds}s`;
|
|
1156
957
|
}
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
958
|
+
buildCommandPalette(commands, options) {
|
|
959
|
+
if (!commands.length) {
|
|
960
|
+
return '';
|
|
961
|
+
}
|
|
962
|
+
const width = Math.max(DISPLAY_CONSTANTS.MIN_MESSAGE_WIDTH, Math.min(this.getColumnWidth() - 2, DISPLAY_CONSTANTS.MAX_MESSAGE_WIDTH));
|
|
963
|
+
const indent = ' ';
|
|
964
|
+
const grouped = this.groupPaletteCommands(commands);
|
|
965
|
+
const commandWidth = this.computeCommandColumnWidth(commands, width, indent.length);
|
|
966
|
+
const descWidth = Math.max(DISPLAY_CONSTANTS.MIN_WRAP_WIDTH, width - indent.length - commandWidth - 1);
|
|
967
|
+
const title = options?.title ?? 'Slash commands';
|
|
968
|
+
const intro = options?.intro ?? 'Describe a task or pick a command below:';
|
|
969
|
+
const lines = [];
|
|
970
|
+
lines.push(theme.gradient.primary(title));
|
|
971
|
+
const introLines = this.wrapLine(intro, width);
|
|
972
|
+
for (const line of introLines) {
|
|
973
|
+
lines.push(theme.ui.muted(line));
|
|
974
|
+
}
|
|
975
|
+
lines.push('');
|
|
976
|
+
grouped.forEach(({ category, items }, index) => {
|
|
977
|
+
const label = this.formatPaletteCategory(category);
|
|
978
|
+
if (label) {
|
|
979
|
+
lines.push(theme.bold(label));
|
|
980
|
+
}
|
|
981
|
+
for (const item of items) {
|
|
982
|
+
const wrappedDesc = this.wrapLine(item.description, descWidth);
|
|
983
|
+
const paddedCommand = item.command.padEnd(commandWidth);
|
|
984
|
+
const commandLabel = theme.primary(paddedCommand);
|
|
985
|
+
const firstLine = wrappedDesc[0] ?? '';
|
|
986
|
+
lines.push(`${indent}${commandLabel} ${this.colorizePaletteText(firstLine, item.tone)}`);
|
|
987
|
+
for (const extra of wrappedDesc.slice(1)) {
|
|
988
|
+
lines.push(`${indent}${' '.repeat(commandWidth)} ${this.colorizePaletteText(extra, item.tone)}`);
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
if (index < grouped.length - 1) {
|
|
992
|
+
lines.push('');
|
|
993
|
+
}
|
|
1166
994
|
});
|
|
995
|
+
return lines.join('\n').trimEnd();
|
|
996
|
+
}
|
|
997
|
+
groupPaletteCommands(commands) {
|
|
998
|
+
const FALLBACK = 'other';
|
|
999
|
+
const groups = new Map();
|
|
1000
|
+
for (const item of commands) {
|
|
1001
|
+
const key = (item.category ?? FALLBACK).toLowerCase();
|
|
1002
|
+
const bucket = groups.get(key) ?? [];
|
|
1003
|
+
bucket.push(item);
|
|
1004
|
+
groups.set(key, bucket);
|
|
1005
|
+
}
|
|
1006
|
+
const order = ['configuration', 'workspace', 'diagnostics', 'other'];
|
|
1007
|
+
const orderedKeys = [
|
|
1008
|
+
...order.filter((key) => groups.has(key)),
|
|
1009
|
+
...Array.from(groups.keys()).filter((key) => !order.includes(key)),
|
|
1010
|
+
];
|
|
1011
|
+
return orderedKeys.map((category) => ({ category, items: groups.get(category) ?? [] }));
|
|
1012
|
+
}
|
|
1013
|
+
computeCommandColumnWidth(commands, totalWidth, indentWidth) {
|
|
1014
|
+
const longest = commands.reduce((max, item) => Math.max(max, this.visibleLength(item.command)), 0);
|
|
1015
|
+
const maxAllowed = Math.max(12, Math.min(longest + 2, Math.floor(totalWidth * 0.35)));
|
|
1016
|
+
const budget = Math.max(10, totalWidth - indentWidth - DISPLAY_CONSTANTS.MIN_WRAP_WIDTH);
|
|
1017
|
+
return Math.min(maxAllowed, budget);
|
|
1018
|
+
}
|
|
1019
|
+
formatPaletteCategory(category) {
|
|
1020
|
+
if (!category) {
|
|
1021
|
+
return 'Other';
|
|
1022
|
+
}
|
|
1023
|
+
switch (category.toLowerCase()) {
|
|
1024
|
+
case 'configuration':
|
|
1025
|
+
return 'Configuration';
|
|
1026
|
+
case 'workspace':
|
|
1027
|
+
return 'Workspace';
|
|
1028
|
+
case 'diagnostics':
|
|
1029
|
+
return 'Diagnostics';
|
|
1030
|
+
case 'other':
|
|
1031
|
+
return 'Other';
|
|
1032
|
+
default:
|
|
1033
|
+
return category[0]?.toUpperCase() + category.slice(1);
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
colorizePaletteText(text, tone) {
|
|
1037
|
+
switch (tone) {
|
|
1038
|
+
case 'warn':
|
|
1039
|
+
return theme.warning(text);
|
|
1040
|
+
case 'success':
|
|
1041
|
+
return theme.success(text);
|
|
1042
|
+
case 'info':
|
|
1043
|
+
return theme.info(text);
|
|
1044
|
+
case 'muted':
|
|
1045
|
+
default:
|
|
1046
|
+
return theme.ui.muted(text);
|
|
1047
|
+
}
|
|
1167
1048
|
}
|
|
1168
1049
|
/**
|
|
1169
1050
|
* Wraps text with a prefix on the first line and optional continuation prefix.
|