Files
kandev/apps/backend/internal/agent/runtime/lifecycle/managed_runtime_recovery.go
T
2026-08-24 21:05:02 +00:00

44 lines
1.2 KiB
Go

package lifecycle
import (
"strings"
"github.com/kandev/kandev/internal/agent/agents"
"github.com/kandev/kandev/internal/agent/managedruntime"
)
// onlineManagedRuntimeArgs returns a copy of a trusted managed-npm launch
// command with only npm's metadata preference changed. The package spec is
// returned separately so cache invalidation can target the exact execution
// tree used by the failed launch.
func onlineManagedRuntimeArgs(args []string, spec agents.ManagedNPMRuntimeSpec) ([]string, string, bool) {
packageName := strings.TrimSpace(spec.Package)
if packageName == "" || len(args) < 4 {
return nil, "", false
}
for npxIndex, arg := range args {
if arg != "npx" || npxIndex+3 >= len(args) {
continue
}
if args[npxIndex+1] != "--yes" || args[npxIndex+2] != "--prefer-offline" {
continue
}
packageSpec := args[npxIndex+3]
versionPrefix := packageName + "@"
if !strings.HasPrefix(packageSpec, versionPrefix) {
return nil, "", false
}
if err := managedruntime.ValidateExactPackageSpec(packageSpec); err != nil {
return nil, "", false
}
recovered := append([]string(nil), args...)
recovered[npxIndex+2] = "--prefer-online"
return recovered, packageSpec, true
}
return nil, "", false
}