@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 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.0",
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
- await fs.symlink(sessionId, latestLink);
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