(backup, studio)
| 1719 | } |
| 1720 | |
| 1721 | function restoreFromBackup(backup, studio) { |
| 1722 | if (backup.studioConfig) { |
| 1723 | const merged = { |
| 1724 | ...backup.studioConfig, |
| 1725 | cloudProvider: studio.cloudProvider, |
| 1726 | cloudToken: studio.cloudToken, |
| 1727 | autoSync: studio.autoSync, |
| 1728 | lastSyncAt: studio.lastSyncAt |
| 1729 | }; |
| 1730 | saveStudioConfig(merged); |
| 1731 | } |
| 1732 | if (backup.opencodeConfig) saveConfig(backup.opencodeConfig); |
| 1733 | |
| 1734 | const sd = getActiveSkillDir(); |
| 1735 | if (sd && backup.skills && Array.isArray(backup.skills)) { |
| 1736 | if (!fs.existsSync(sd)) fs.mkdirSync(sd, { recursive: true }); |
| 1737 | backup.skills.forEach(s => { |
| 1738 | const skillDir = path.join(sd, s.name); |
| 1739 | if (!fs.existsSync(skillDir)) fs.mkdirSync(skillDir, { recursive: true }); |
| 1740 | atomicWriteFileSync(path.join(skillDir, 'SKILL.md'), s.content); |
| 1741 | }); |
| 1742 | } |
| 1743 | |
| 1744 | const pd = getActivePluginDir(); |
| 1745 | if (pd && backup.plugins && Array.isArray(backup.plugins)) { |
| 1746 | if (!fs.existsSync(pd)) fs.mkdirSync(pd, { recursive: true }); |
| 1747 | backup.plugins.forEach(p => { |
| 1748 | atomicWriteFileSync(path.join(pd, `${p.name}.js`), p.content); |
| 1749 | }); |
| 1750 | } |
| 1751 | } |
| 1752 | |
| 1753 | app.get('/api/sync/status', (req, res) => { |
| 1754 | const studio = loadStudioConfig(); |
no test coverage detected