(linkPath: string)
| 140 | } |
| 141 | |
| 142 | function resolveSymlinkTarget(linkPath: string): string | null { |
| 143 | try { |
| 144 | const target = readlinkSync(linkPath); |
| 145 | return path.resolve(path.dirname(linkPath), target); |
| 146 | } catch { |
| 147 | return null; |
| 148 | } |
| 149 | } |
| 150 | |
| 151 | function looksLikeOpenClawPackagePath(candidate: string): boolean { |
| 152 | const normalized = candidate.replace(/\\/g, '/'); |
no test coverage detected