agent-Specialization/easyagent/src/core/context.js

61 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
const os = require('os');
const path = require('path');
const { execSync } = require('child_process');
function getTerminalType() {
if (process.platform === 'win32') {
if (process.env.PSModulePath || process.env.POWERSHELL_DISTRIBUTION_CHANNEL) return 'powershell';
return 'cmd';
}
return 'terminal';
}
function getGitInfo(workspace) {
try {
const branch = execSync('git rev-parse --abbrev-ref HEAD', { cwd: workspace, stdio: ['ignore', 'pipe', 'ignore'] })
.toString()
.trim();
if (!branch) return '未初始化';
const status = execSync('git status --porcelain', { cwd: workspace, stdio: ['ignore', 'pipe', 'ignore'] })
.toString()
.trim();
const dirty = status ? 'dirty' : 'clean';
return `${branch} (${dirty})`;
} catch (_) {
return '未初始化';
}
}
function buildSystemPrompt(basePrompt, opts) {
const now = new Date();
const tzOffset = now.getTimezoneOffset();
const localMs = now.getTime() - tzOffset * 60 * 1000;
const localIso = new Date(localMs).toISOString().slice(0, 16);
const platform = os.platform();
const systemName = platform === 'darwin' ? 'macos' : platform === 'win32' ? 'windows' : 'linux';
let prompt = basePrompt;
const allowModeValue = opts.allowMode === 'read_only'
? `${opts.allowMode}\n 已禁用 edit_file、run_command。若用户要求使用请告知当前无权限需要用户输入 /allow 切换权限。`
: opts.allowMode;
const replacements = {
current_time: localIso,
path: opts.workspace,
workspace: opts.workspace,
system: `${systemName} (${os.release()})`,
terminal: getTerminalType(),
allow_mode: allowModeValue,
permissions: allowModeValue,
git: getGitInfo(opts.workspace),
model_id: opts.modelId || '',
};
for (const [key, value] of Object.entries(replacements)) {
const token = `{${key}}`;
prompt = prompt.split(token).join(String(value));
}
return prompt.trim();
}
module.exports = { buildSystemPrompt };