Skip to content

Commit 81b54cb

Browse files
committed
feat(pi-config): add Pi config history snapshots and apply-pi-config-history action
1 parent 83789c6 commit 81b54cb

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

cli.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
13371376
function 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

Comments
 (0)