@@ -1249,6 +1249,7 @@ function writePiModels(params = {}) {
12491249 fs.mkdirSync(dir, { recursive: true });
12501250 const filePath = path.join(dir, 'models.json');
12511251 if (file) {
1252+ historyBackup('pi-models', filePath);
12521253 fs.writeFileSync(filePath, JSON.stringify(file, null, 2), 'utf-8');
12531254 return { success: true };
12541255 }
@@ -1314,6 +1315,7 @@ function writePiSettings(params = {}) {
13141315 fs.mkdirSync(dir, { recursive: true });
13151316 const filePath = path.join(dir, 'settings.json');
13161317 if (fullSettings) {
1318+ historyBackup('pi-settings', filePath);
13171319 fs.writeFileSync(filePath, JSON.stringify(fullSettings, null, 2), 'utf-8');
13181320 return { success: true, settings: fullSettings };
13191321 }
@@ -1334,6 +1336,43 @@ function writePiSettings(params = {}) {
13341336 }
13351337}
13361338
1339+ function applyPiConfigHistory(params = {}) {
1340+ const target = typeof params.target === 'string' ? params.target.trim() : '';
1341+ if (target !== 'settings' && target !== 'models') {
1342+ return { error: '无效的历史记录目标' };
1343+ }
1344+ const bucket = target === 'settings' ? 'pi-settings' : 'pi-models';
1345+ const fileName = target === 'settings' ? 'settings.json' : 'models.json';
1346+ let entry;
1347+ try {
1348+ entry = readPromptHistory(bucket, String(params.id || ''));
1349+ } catch (_) {
1350+ return { error: '历史记录不存在或读取失败' };
1351+ }
1352+ const content = entry && typeof entry.content === 'string' ? entry.content : '';
1353+ let parsed = null;
1354+ if (content) {
1355+ try {
1356+ parsed = JSON.parse(content);
1357+ } catch (_) {
1358+ parsed = null;
1359+ }
1360+ }
1361+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
1362+ return { error: '历史记录内容不是有效的 JSON 对象' };
1363+ }
1364+ try {
1365+ const filePath = path.join(getPiAgentDir(), fileName);
1366+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
1367+ historyBackup(bucket, filePath);
1368+ fs.writeFileSync(filePath, JSON.stringify(parsed, null, 2), 'utf-8');
1369+ } catch (e) {
1370+ return { error: (e && e.message) || '应用历史记录失败' };
1371+ }
1372+ if (target === 'settings') return { success: true, settings: parsed };
1373+ return { success: true, file: parsed };
1374+ }
1375+
13371376function setToolConfigPermission(params = {}) {
13381377 const target = normalizeToolConfigTarget(params && params.target);
13391378 if (!target) return { error: '未知配置对象' };
@@ -13317,6 +13356,10 @@ function createWebServer({ htmlPath, assetsDir, webDir, host, port, openBrowser
1331713356 result = writePiSettings(params || {});
1331813357 break;
1331913358 }
13359+ case 'apply-pi-config-history': {
13360+ result = applyPiConfigHistory(params || {});
13361+ break;
13362+ }
1332013363 case 'fetch-pi-remote-models': {
1332113364 result = await fetchPiRemoteModels(params || {});
1332213365 break;
0 commit comments