mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
|
|
export type RuntimeShellDialect = 'windows-cmd' | 'posix-sh';
|
||
|
|
export type RuntimeOsName = 'Windows' | 'macOS' | 'Linux' | 'Unknown';
|
||
|
|
|
||
|
|
export interface RuntimeContext {
|
||
|
|
platform: NodeJS.Platform;
|
||
|
|
osName: RuntimeOsName;
|
||
|
|
shellDialect: RuntimeShellDialect;
|
||
|
|
shellExecutable: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getExecutionShell(platform: NodeJS.Platform = process.platform): string {
|
||
|
|
return platform === 'win32' ? (process.env.ComSpec || 'cmd.exe') : '/bin/sh';
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getRuntimeContext(platform: NodeJS.Platform = process.platform): RuntimeContext {
|
||
|
|
if (platform === 'win32') {
|
||
|
|
return {
|
||
|
|
platform,
|
||
|
|
osName: 'Windows',
|
||
|
|
shellDialect: 'windows-cmd',
|
||
|
|
shellExecutable: getExecutionShell(platform),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
if (platform === 'darwin') {
|
||
|
|
return {
|
||
|
|
platform,
|
||
|
|
osName: 'macOS',
|
||
|
|
shellDialect: 'posix-sh',
|
||
|
|
shellExecutable: getExecutionShell(platform),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
if (platform === 'linux') {
|
||
|
|
return {
|
||
|
|
platform,
|
||
|
|
osName: 'Linux',
|
||
|
|
shellDialect: 'posix-sh',
|
||
|
|
shellExecutable: getExecutionShell(platform),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
platform,
|
||
|
|
osName: 'Unknown',
|
||
|
|
shellDialect: 'posix-sh',
|
||
|
|
shellExecutable: getExecutionShell(platform),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getRuntimeContextPrompt(runtime: RuntimeContext): string {
|
||
|
|
if (runtime.shellDialect === 'windows-cmd') {
|
||
|
|
return `## Runtime Platform (CRITICAL)
|
||
|
|
- Detected platform: **${runtime.platform}**
|
||
|
|
- Detected OS: **${runtime.osName}**
|
||
|
|
- Shell used by executeCommand: **${runtime.shellExecutable}** (Windows Command Prompt / cmd syntax)
|
||
|
|
- Use Windows command syntax for executeCommand (for example: \`dir\`, \`type\`, \`copy\`, \`move\`, \`del\`, \`rmdir\`).
|
||
|
|
- Use Windows-style absolute paths when outside workspace (for example: \`C:\\Users\\...\`).
|
||
|
|
- Do not assume macOS/Linux command syntax when the runtime is Windows.`;
|
||
|
|
}
|
||
|
|
|
||
|
|
return `## Runtime Platform (CRITICAL)
|
||
|
|
- Detected platform: **${runtime.platform}**
|
||
|
|
- Detected OS: **${runtime.osName}**
|
||
|
|
- Shell used by executeCommand: **${runtime.shellExecutable}** (POSIX sh syntax)
|
||
|
|
- Use POSIX command syntax for executeCommand (for example: \`ls\`, \`cat\`, \`cp\`, \`mv\`, \`rm\`).
|
||
|
|
- Use POSIX paths when outside workspace (for example: \`~/Desktop\`, \`/Users/.../\` on macOS, \`/home/.../\` on Linux).
|
||
|
|
- Do not assume Windows command syntax when the runtime is POSIX.`;
|
||
|
|
}
|