init claude-code
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { logForDebugging } from './debug.js'
|
||||
import { gracefulShutdownSync } from './gracefulShutdown.js'
|
||||
|
||||
/**
|
||||
* Creates an idle timeout manager for SDK mode.
|
||||
* Automatically exits the process after the specified idle duration.
|
||||
*
|
||||
* @param isIdle Function that returns true if the system is currently idle
|
||||
* @returns Object with start/stop methods to control the idle timer
|
||||
*/
|
||||
export function createIdleTimeoutManager(isIdle: () => boolean): {
|
||||
start: () => void
|
||||
stop: () => void
|
||||
} {
|
||||
// Parse CLAUDE_CODE_EXIT_AFTER_STOP_DELAY environment variable
|
||||
const exitAfterStopDelay = process.env.CLAUDE_CODE_EXIT_AFTER_STOP_DELAY
|
||||
const delayMs = exitAfterStopDelay ? parseInt(exitAfterStopDelay, 10) : null
|
||||
const isValidDelay = delayMs && !isNaN(delayMs) && delayMs > 0
|
||||
|
||||
let timer: NodeJS.Timeout | null = null
|
||||
let lastIdleTime = 0
|
||||
|
||||
return {
|
||||
start() {
|
||||
// Clear any existing timer
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
timer = null
|
||||
}
|
||||
|
||||
// Only start timer if delay is configured and valid
|
||||
if (isValidDelay) {
|
||||
lastIdleTime = Date.now()
|
||||
|
||||
timer = setTimeout(() => {
|
||||
// Check if we've been continuously idle for the full duration
|
||||
const idleDuration = Date.now() - lastIdleTime
|
||||
if (isIdle() && idleDuration >= delayMs) {
|
||||
logForDebugging(`Exiting after ${delayMs}ms of idle time`)
|
||||
gracefulShutdownSync()
|
||||
}
|
||||
}, delayMs)
|
||||
}
|
||||
},
|
||||
|
||||
stop() {
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
timer = null
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user