@sylphx/flow 2.4.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/src/core/backup-manager.ts +16 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @sylphx/flow
|
|
2
2
|
|
|
3
|
+
## 2.4.1 (2025-12-10)
|
|
4
|
+
|
|
5
|
+
### 🐛 Bug Fixes
|
|
6
|
+
|
|
7
|
+
- **backup:** handle Windows symlink permission error ([8f1337f](https://github.com/SylphxAI/flow/commit/8f1337f6d1381ecceebc8751460a6cf710a62978))
|
|
8
|
+
|
|
3
9
|
## 2.4.0 (2025-12-09)
|
|
4
10
|
|
|
5
11
|
### ✨ Features
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylphx/flow",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "One CLI to rule them all. Unified orchestration layer for Claude Code, OpenCode, Cursor and all AI development tools. Auto-detection, auto-installation, auto-upgrade.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -128,12 +128,26 @@ export class BackupManager {
|
|
|
128
128
|
|
|
129
129
|
await fs.writeFile(path.join(backupPath, 'manifest.json'), JSON.stringify(manifest, null, 2));
|
|
130
130
|
|
|
131
|
-
// Create symlink to latest
|
|
131
|
+
// Create symlink to latest (with fallback for Windows)
|
|
132
132
|
const latestLink = paths.latestBackup;
|
|
133
133
|
if (existsSync(latestLink)) {
|
|
134
134
|
await fs.unlink(latestLink);
|
|
135
135
|
}
|
|
136
|
-
|
|
136
|
+
try {
|
|
137
|
+
await fs.symlink(sessionId, latestLink);
|
|
138
|
+
} catch (symlinkError: unknown) {
|
|
139
|
+
// Windows without admin/Developer Mode can't create symlinks
|
|
140
|
+
// Fall back to writing session ID to a file
|
|
141
|
+
if (
|
|
142
|
+
symlinkError instanceof Error &&
|
|
143
|
+
'code' in symlinkError &&
|
|
144
|
+
symlinkError.code === 'EPERM'
|
|
145
|
+
) {
|
|
146
|
+
await fs.writeFile(latestLink, sessionId, 'utf-8');
|
|
147
|
+
} else {
|
|
148
|
+
throw symlinkError;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
137
151
|
|
|
138
152
|
spinner.succeed(`Backup created: ${sessionId}`);
|
|
139
153
|
|