dify/dify-agent-runtime/cmd/runner-exit/main.go
Yunlu Wen 302d7b1e1b
feat(agent): shellctl rewritten in go (#38841)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-15 01:58:36 +00:00

31 lines
1.0 KiB
Go

// shellctl-runner-exit persists a drained runner exit into the shellctl SQLite DB.
// It runs after the tmux output pipe reaches EOF and output.log is fully flushed.
package main
import (
"flag"
"fmt"
"os"
runnerexit "github.com/langgenius/dify/dify-agent-runtime/internal/runner_exit"
)
func main() {
stateDir := flag.String("state-dir", "", "shellctl state directory")
jobID := flag.String("job-id", "", "job identifier")
exitCode := flag.Int("exit-code", 0, "runner process exit code")
endedAt := flag.String("ended-at", "", "ISO-8601 ended_at timestamp")
busyTimeoutMs := flag.Int("sqlite-busy-timeout-ms", 5000, "SQLite busy timeout in milliseconds")
flag.Parse()
if *stateDir == "" || *jobID == "" || *endedAt == "" {
fmt.Fprintf(os.Stderr, "shellctl-runner-exit: --state-dir, --job-id, and --ended-at are required\n")
os.Exit(1)
}
if err := runnerexit.RecordRunnerExit(*stateDir, *jobID, *exitCode, *endedAt, *busyTimeoutMs); err != nil {
fmt.Fprintf(os.Stderr, "shellctl-runner-exit: %v\n", err)
os.Exit(1)
}
}