mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Wait for active terminals to cool down before sending api request
This commit is contained in:
@@ -1783,6 +1783,13 @@ ${
|
|||||||
|
|
||||||
const busyTerminals = this.terminalManager.getTerminals(true)
|
const busyTerminals = this.terminalManager.getTerminals(true)
|
||||||
if (busyTerminals.length > 0) {
|
if (busyTerminals.length > 0) {
|
||||||
|
// wait for terminals to cool down
|
||||||
|
await delay(500) // delay after saving file
|
||||||
|
await pWaitFor(() => busyTerminals.every((t) => !this.terminalManager.isProcessHot(t.id)), {
|
||||||
|
interval: 100,
|
||||||
|
timeout: 7_000,
|
||||||
|
}).catch(() => {})
|
||||||
|
// terminals are cool, let's retrieve their output
|
||||||
details += "\n\n# Active Terminals"
|
details += "\n\n# Active Terminals"
|
||||||
for (const busyTerminal of busyTerminals) {
|
for (const busyTerminal of busyTerminals) {
|
||||||
details += `\n## ${busyTerminal.lastCommand}`
|
details += `\n## ${busyTerminal.lastCommand}`
|
||||||
|
|||||||
@@ -221,6 +221,11 @@ export class TerminalManager {
|
|||||||
return process ? process.getUnretrievedOutput() : ""
|
return process ? process.getUnretrievedOutput() : ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isProcessHot(terminalId: number): boolean {
|
||||||
|
const process = this.processes.get(terminalId)
|
||||||
|
return process ? process.isHot : false
|
||||||
|
}
|
||||||
|
|
||||||
disposeAll() {
|
disposeAll() {
|
||||||
// for (const info of this.terminals) {
|
// for (const info of this.terminals) {
|
||||||
// //info.terminal.dispose() // dont want to dispose terminals when task is aborted
|
// //info.terminal.dispose() // dont want to dispose terminals when task is aborted
|
||||||
@@ -251,6 +256,8 @@ export class TerminalProcess extends EventEmitter<TerminalProcessEvents> {
|
|||||||
private buffer: string = ""
|
private buffer: string = ""
|
||||||
private fullOutput: string = ""
|
private fullOutput: string = ""
|
||||||
private lastRetrievedIndex: number = 0
|
private lastRetrievedIndex: number = 0
|
||||||
|
isHot: boolean = false
|
||||||
|
private hotTimer: NodeJS.Timeout | null = null
|
||||||
|
|
||||||
// constructor() {
|
// constructor() {
|
||||||
// super()
|
// super()
|
||||||
@@ -264,6 +271,14 @@ export class TerminalProcess extends EventEmitter<TerminalProcessEvents> {
|
|||||||
let didOutputNonCommand = false
|
let didOutputNonCommand = false
|
||||||
let didEmitEmptyLine = false
|
let didEmitEmptyLine = false
|
||||||
for await (let data of stream) {
|
for await (let data of stream) {
|
||||||
|
// Set to hot to stall API requests until terminal is cool again
|
||||||
|
this.isHot = true
|
||||||
|
if (this.hotTimer) {
|
||||||
|
clearTimeout(this.hotTimer)
|
||||||
|
}
|
||||||
|
this.hotTimer = setTimeout(() => {
|
||||||
|
this.isHot = false
|
||||||
|
}, 4_000)
|
||||||
if (isFirstChunk) {
|
if (isFirstChunk) {
|
||||||
/*
|
/*
|
||||||
The first chunk we get from this stream needs to be processed to be more human readable, ie remove vscode's custom escape sequences and identifiers, removing duplicate first char bug, etc.
|
The first chunk we get from this stream needs to be processed to be more human readable, ie remove vscode's custom escape sequences and identifiers, removing duplicate first char bug, etc.
|
||||||
@@ -329,6 +344,12 @@ export class TerminalProcess extends EventEmitter<TerminalProcessEvents> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.emitRemainingBufferIfListening()
|
this.emitRemainingBufferIfListening()
|
||||||
|
|
||||||
|
if (this.hotTimer) {
|
||||||
|
clearTimeout(this.hotTimer)
|
||||||
|
}
|
||||||
|
this.isHot = false
|
||||||
|
|
||||||
this.emit("completed")
|
this.emit("completed")
|
||||||
this.emit("continue")
|
this.emit("continue")
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user