@sylphx/flow 3.12.0 → 3.13.0
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,18 @@
|
|
|
1
1
|
# @sylphx/flow
|
|
2
2
|
|
|
3
|
+
## 3.13.0 (2026-02-04)
|
|
4
|
+
|
|
5
|
+
### ✨ Features
|
|
6
|
+
|
|
7
|
+
- **auto-upgrade:** add periodic background update check every 30 minutes ([4a14414](https://github.com/SylphxAI/flow/commit/4a14414350f31899a5dadaf596216c53406f7ffc))
|
|
8
|
+
|
|
9
|
+
## 3.12.1 (2026-02-04)
|
|
10
|
+
|
|
11
|
+
### 🐛 Bug Fixes
|
|
12
|
+
|
|
13
|
+
- **builder:** use EnterPlanMode for planning complex changes ([7457ce6](https://github.com/SylphxAI/flow/commit/7457ce633e359086b7fada5d72731d6df5a23c3a))
|
|
14
|
+
- **builder:** specify TaskCreate/TaskUpdate/TaskList tools for todo tracking ([b19516d](https://github.com/SylphxAI/flow/commit/b19516d282e87eeda85b99a599887577688387ef))
|
|
15
|
+
|
|
3
16
|
## 3.12.0 (2026-02-04)
|
|
4
17
|
|
|
5
18
|
### ✨ Features
|
package/assets/agents/builder.md
CHANGED
|
@@ -69,14 +69,14 @@ State-of-the-art industrial standard. Every time. Would you stake your reputatio
|
|
|
69
69
|
**Automate.** If automation exists for a task, manual execution is prohibited.
|
|
70
70
|
|
|
71
71
|
**Plan before doing.** For any non-trivial task:
|
|
72
|
-
1.
|
|
73
|
-
2.
|
|
74
|
-
3. Execute systematically,
|
|
72
|
+
1. Use EnterPlanMode to plan the implementation
|
|
73
|
+
2. Use TaskCreate to create todos for each step
|
|
74
|
+
3. Execute systematically, using TaskUpdate to mark progress
|
|
75
75
|
|
|
76
76
|
**Never forget, never drop.** Work in progress must be tracked:
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
- If interrupted, leave clear notes
|
|
77
|
+
- Use TaskCreate BEFORE starting work
|
|
78
|
+
- Use TaskUpdate to mark in_progress when starting, completed when done
|
|
79
|
+
- If interrupted, leave clear notes in task description
|
|
80
80
|
|
|
81
81
|
**Document decisions.** Every significant choice needs rationale:
|
|
82
82
|
- Why this approach over alternatives?
|
|
@@ -87,11 +87,11 @@ State-of-the-art industrial standard. Every time. Would you stake your reputatio
|
|
|
87
87
|
|
|
88
88
|
**Atomic commits.** Commit continuously. Each commit = one logical change. Semantic commit messages (feat, fix, docs, refactor, test, chore). This is your memory of what was done.
|
|
89
89
|
|
|
90
|
-
**Todos.**
|
|
90
|
+
**Todos.** Use TaskCreate/TaskUpdate to track what needs to be done. This is your memory of what to do.
|
|
91
91
|
|
|
92
92
|
**CLAUDE.md** — Your persistent memory file. Commands, env setup, architecture decisions, patterns, gotchas. Read first. Summarize, don't append. Remove resolved. Consolidate duplicates.
|
|
93
93
|
|
|
94
|
-
**Recovery:** Lost context? → `git log`. Forgot next steps? →
|
|
94
|
+
**Recovery:** Lost context? → `git log`. Forgot next steps? → TaskList.
|
|
95
95
|
|
|
96
96
|
## Issue Ownership
|
|
97
97
|
|
package/package.json
CHANGED
|
@@ -242,6 +242,9 @@ export async function executeFlowV2(
|
|
|
242
242
|
const autoUpgrade = new AutoUpgrade(projectPath);
|
|
243
243
|
const upgradeResult = await autoUpgrade.runAutoUpgrade(selectedTargetId);
|
|
244
244
|
|
|
245
|
+
// Start periodic background checks (every 30 minutes)
|
|
246
|
+
autoUpgrade.startPeriodicCheck(selectedTargetId);
|
|
247
|
+
|
|
245
248
|
// Show upgrade notice (minimal - only if upgraded)
|
|
246
249
|
if (upgradeResult.flowUpgraded && upgradeResult.flowVersion) {
|
|
247
250
|
console.log(chalk.dim(`↑ flow ${upgradeResult.flowVersion.latest}`));
|
|
@@ -43,10 +43,14 @@ export interface AutoUpgradeOptions {
|
|
|
43
43
|
skipTarget?: boolean;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
// Default interval: 30 minutes
|
|
47
|
+
const DEFAULT_CHECK_INTERVAL_MS = 30 * 60 * 1000;
|
|
48
|
+
|
|
46
49
|
export class AutoUpgrade {
|
|
47
50
|
private projectPath: string;
|
|
48
51
|
private options: AutoUpgradeOptions;
|
|
49
52
|
private targetInstaller: TargetInstaller;
|
|
53
|
+
private periodicCheckInterval: NodeJS.Timeout | null = null;
|
|
50
54
|
|
|
51
55
|
constructor(projectPath: string = process.cwd(), options: AutoUpgradeOptions = {}) {
|
|
52
56
|
this.projectPath = projectPath;
|
|
@@ -396,4 +400,64 @@ export class AutoUpgrade {
|
|
|
396
400
|
return false;
|
|
397
401
|
}
|
|
398
402
|
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Start periodic background checks for updates
|
|
406
|
+
* Runs every intervalMs (default 30 minutes)
|
|
407
|
+
* Silently upgrades if updates are available
|
|
408
|
+
* @param targetId - Optional target CLI ID to check
|
|
409
|
+
* @param intervalMs - Check interval in milliseconds (default 30 minutes)
|
|
410
|
+
*/
|
|
411
|
+
startPeriodicCheck(targetId?: string, intervalMs: number = DEFAULT_CHECK_INTERVAL_MS): void {
|
|
412
|
+
// Clear any existing interval
|
|
413
|
+
this.stopPeriodicCheck();
|
|
414
|
+
|
|
415
|
+
// Start periodic check
|
|
416
|
+
this.periodicCheckInterval = setInterval(() => {
|
|
417
|
+
this.performPeriodicUpgrade(targetId).catch(() => {
|
|
418
|
+
// Silent fail
|
|
419
|
+
});
|
|
420
|
+
}, intervalMs);
|
|
421
|
+
|
|
422
|
+
// Don't prevent process from exiting
|
|
423
|
+
this.periodicCheckInterval.unref();
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Stop periodic background checks
|
|
428
|
+
*/
|
|
429
|
+
stopPeriodicCheck(): void {
|
|
430
|
+
if (this.periodicCheckInterval) {
|
|
431
|
+
clearInterval(this.periodicCheckInterval);
|
|
432
|
+
this.periodicCheckInterval = null;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Perform periodic upgrade check and silent upgrade
|
|
438
|
+
*/
|
|
439
|
+
private async performPeriodicUpgrade(targetId?: string): Promise<void> {
|
|
440
|
+
// Perform background check first (updates version info)
|
|
441
|
+
await this.performBackgroundCheck(targetId);
|
|
442
|
+
|
|
443
|
+
// Read the fresh version info
|
|
444
|
+
const info = await this.readVersionInfo();
|
|
445
|
+
if (!info) return;
|
|
446
|
+
|
|
447
|
+
const currentVersion = await this.getCurrentFlowVersion();
|
|
448
|
+
|
|
449
|
+
// Silently upgrade Flow if needed
|
|
450
|
+
if (info.flowLatest && info.flowLatest !== currentVersion) {
|
|
451
|
+
await this.upgradeFlowSilent();
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Silently upgrade target if needed
|
|
455
|
+
if (targetId && info.targetLatest?.[targetId] && info.targetCurrent?.[targetId]) {
|
|
456
|
+
const current = info.targetCurrent[targetId];
|
|
457
|
+
const latest = info.targetLatest[targetId];
|
|
458
|
+
if (current !== latest) {
|
|
459
|
+
await this.upgradeTargetSilent(targetId);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
399
463
|
}
|