8bf88049bf
- assembleSystemPrompt() now injects '# Runtime Context' with current date/time - New system.info tool: date, time, hostname, platform, arch, uptime, memory, Node.js version - Tool available in all profiles (minimal/messaging/coding/full) - 983 tests passing (+7 new)
64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import os from 'os';
|
|
import type { Tool, ToolResult } from '../types.js';
|
|
|
|
function formatUptime(seconds: number): string {
|
|
const days = Math.floor(seconds / 86400);
|
|
const hours = Math.floor((seconds % 86400) / 3600);
|
|
const minutes = Math.floor((seconds % 3600) / 60);
|
|
return `${days}d ${hours}h ${minutes}m`;
|
|
}
|
|
|
|
function formatBytes(bytes: number): string {
|
|
return (bytes / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
|
|
}
|
|
|
|
export const systemInfoTool: Tool = {
|
|
name: 'system.info',
|
|
description: 'Get current system information including date, time, hostname, OS, platform, architecture, uptime, Node.js version, and memory usage.',
|
|
inputSchema: {
|
|
type: 'object',
|
|
properties: {},
|
|
required: [],
|
|
},
|
|
execute: async (_rawArgs: unknown): Promise<ToolResult> => {
|
|
try {
|
|
const now = new Date();
|
|
const dateStr = now.toLocaleDateString('en-US', {
|
|
weekday: 'long',
|
|
year: 'numeric',
|
|
month: 'long',
|
|
day: 'numeric',
|
|
});
|
|
const timeStr = now.toLocaleTimeString('en-US', {
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
timeZoneName: 'short',
|
|
hour12: false,
|
|
});
|
|
const isoStr = now.toISOString();
|
|
|
|
const totalMem = os.totalmem();
|
|
const freeMem = os.freemem();
|
|
|
|
const lines = [
|
|
`Date: ${dateStr}`,
|
|
`Time: ${timeStr}`,
|
|
`ISO 8601: ${isoStr}`,
|
|
`Hostname: ${os.hostname()}`,
|
|
`Platform: ${os.platform()}`,
|
|
`Architecture: ${os.arch()}`,
|
|
`OS Release: ${os.release()}`,
|
|
`Uptime: ${formatUptime(os.uptime())}`,
|
|
`Node.js: ${process.version}`,
|
|
`Memory Total: ${formatBytes(totalMem)}`,
|
|
`Memory Free: ${formatBytes(freeMem)}`,
|
|
`Working Dir: ${process.cwd()}`,
|
|
];
|
|
|
|
return { success: true, output: lines.join('\n') };
|
|
} catch (error) {
|
|
return { success: false, output: '', error: error instanceof Error ? error.message : String(error) };
|
|
}
|
|
},
|
|
};
|