agileflow 2.84.0 → 2.84.2
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 +10 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/scripts/agileflow-statusline.sh +3 -3
- package/scripts/agileflow-welcome.js +40 -11
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.84.2] - 2026-01-11
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Auto-update retry with npm cache clean on stale registry
|
|
14
|
+
|
|
15
|
+
## [2.84.1] - 2026-01-11
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Status line and welcome table formatting fixes
|
|
19
|
+
|
|
10
20
|
## [2.84.0] - 2026-01-11
|
|
11
21
|
|
|
12
22
|
### Added
|
package/README.md
CHANGED
|
@@ -144,7 +144,7 @@ docs/
|
|
|
144
144
|
|
|
145
145
|
## Online Documentation
|
|
146
146
|
|
|
147
|
-
Visit [projectquestorg.com](https://projectquestorg.com) for the full documentation site.
|
|
147
|
+
Visit [docs.agileflow.projectquestorg.com](https://docs.agileflow.projectquestorg.com) for the full documentation site.
|
|
148
148
|
|
|
149
149
|
---
|
|
150
150
|
|
package/package.json
CHANGED
|
@@ -385,11 +385,11 @@ PYTHON
|
|
|
385
385
|
SESSION_COLOR="$SESSION_GREEN" # Light green - plenty of time
|
|
386
386
|
fi
|
|
387
387
|
|
|
388
|
-
# Build compact display: "
|
|
388
|
+
# Build compact display: "⧗2h15m" or "⧗45m" (hourglass indicates remaining time)
|
|
389
389
|
if [ "$RH" -gt 0 ]; then
|
|
390
|
-
SESSION_DISPLAY="${SESSION_COLOR}
|
|
390
|
+
SESSION_DISPLAY="${SESSION_COLOR}⧗${RH}h${RM}m${RESET}"
|
|
391
391
|
else
|
|
392
|
-
SESSION_DISPLAY="${SESSION_COLOR}
|
|
392
|
+
SESSION_DISPLAY="${SESSION_COLOR}⧗${RM}m${RESET}"
|
|
393
393
|
fi
|
|
394
394
|
fi
|
|
395
395
|
fi
|
|
@@ -495,18 +495,36 @@ function getChangelogEntries(version) {
|
|
|
495
495
|
|
|
496
496
|
// Run auto-update if enabled
|
|
497
497
|
async function runAutoUpdate(rootDir) {
|
|
498
|
-
|
|
499
|
-
console.log(`${c.skyBlue}Updating AgileFlow...${c.reset}`);
|
|
500
|
-
// Use --force to skip prompts for non-interactive auto-update
|
|
498
|
+
const runUpdate = () => {
|
|
501
499
|
execSync('npx agileflow@latest update --force', {
|
|
502
500
|
cwd: rootDir,
|
|
503
501
|
encoding: 'utf8',
|
|
504
502
|
stdio: 'inherit',
|
|
505
503
|
timeout: 120000, // 2 minute timeout
|
|
506
504
|
});
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
try {
|
|
508
|
+
console.log(`${c.skyBlue}Updating AgileFlow...${c.reset}`);
|
|
509
|
+
// Use --force to skip prompts for non-interactive auto-update
|
|
510
|
+
runUpdate();
|
|
507
511
|
console.log(`${c.mintGreen}Update complete!${c.reset}`);
|
|
508
512
|
return true;
|
|
509
513
|
} catch (e) {
|
|
514
|
+
// Check if this is a stale npm cache issue (ETARGET = version not found)
|
|
515
|
+
if (e.message && (e.message.includes('ETARGET') || e.message.includes('notarget'))) {
|
|
516
|
+
console.log(`${c.dim}Clearing npm cache and retrying...${c.reset}`);
|
|
517
|
+
try {
|
|
518
|
+
execSync('npm cache clean --force', { stdio: 'pipe', timeout: 30000 });
|
|
519
|
+
runUpdate();
|
|
520
|
+
console.log(`${c.mintGreen}Update complete!${c.reset}`);
|
|
521
|
+
return true;
|
|
522
|
+
} catch (retryError) {
|
|
523
|
+
console.log(`${c.peach}Auto-update failed after cache clean: ${retryError.message}${c.reset}`);
|
|
524
|
+
console.log(`${c.dim}Run manually: npx agileflow update${c.reset}`);
|
|
525
|
+
return false;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
510
528
|
console.log(`${c.peach}Auto-update failed: ${e.message}${c.reset}`);
|
|
511
529
|
console.log(`${c.dim}Run manually: npx agileflow update${c.reset}`);
|
|
512
530
|
return false;
|
|
@@ -675,8 +693,8 @@ function formatTable(
|
|
|
675
693
|
expertise = {},
|
|
676
694
|
damageControl = {}
|
|
677
695
|
) {
|
|
678
|
-
const W = 58; // inner width
|
|
679
|
-
const R = W -
|
|
696
|
+
const W = 58; // inner width (total table = W + 2 = 60)
|
|
697
|
+
const R = W - 25; // right column width (33 chars) to match total of 60
|
|
680
698
|
const lines = [];
|
|
681
699
|
|
|
682
700
|
// Helper to create a row (auto-truncates right content to fit)
|
|
@@ -688,16 +706,26 @@ function formatTable(
|
|
|
688
706
|
};
|
|
689
707
|
|
|
690
708
|
// Helper for full-width row (spans both columns)
|
|
709
|
+
// Content width = W - 2 (for the two spaces after │ and before │)
|
|
691
710
|
const fullRow = (content, color = '') => {
|
|
692
711
|
const contentStr = `${color}${content}${color ? c.reset : ''}`;
|
|
693
|
-
return `${c.dim}${box.v}${c.reset} ${pad(contentStr, W -
|
|
712
|
+
return `${c.dim}${box.v}${c.reset} ${pad(contentStr, W - 2)} ${c.dim}${box.v}${c.reset}`;
|
|
694
713
|
};
|
|
695
714
|
|
|
715
|
+
// Two-column dividers: ├ + 22 dashes + ┼ + 35 dashes + ┤ = 60 total
|
|
696
716
|
const divider = () =>
|
|
697
|
-
`${c.dim}${box.lT}${box.h.repeat(22)}${box.cross}${box.h.repeat(W -
|
|
717
|
+
`${c.dim}${box.lT}${box.h.repeat(22)}${box.cross}${box.h.repeat(W - 23)}${box.rT}${c.reset}`;
|
|
718
|
+
// Full-width divider: ├ + 58 dashes + ┤ = 60 total
|
|
698
719
|
const fullDivider = () => `${c.dim}${box.lT}${box.h.repeat(W)}${box.rT}${c.reset}`;
|
|
699
|
-
|
|
700
|
-
const
|
|
720
|
+
// Transition: full-width TO two-column
|
|
721
|
+
const splitDivider = () =>
|
|
722
|
+
`${c.dim}${box.lT}${box.h.repeat(22)}${box.tT}${box.h.repeat(W - 23)}${box.rT}${c.reset}`;
|
|
723
|
+
// Transition: two-column TO full-width
|
|
724
|
+
const mergeDivider = () =>
|
|
725
|
+
`${c.dim}${box.lT}${box.h.repeat(22)}${box.bT}${box.h.repeat(W - 23)}${box.rT}${c.reset}`;
|
|
726
|
+
// Borders
|
|
727
|
+
const topBorder = `${c.dim}${box.tl}${box.h.repeat(W)}${box.tr}${c.reset}`;
|
|
728
|
+
const bottomBorder = `${c.dim}${box.bl}${box.h.repeat(22)}${box.bT}${box.h.repeat(W - 23)}${box.br}${c.reset}`;
|
|
701
729
|
|
|
702
730
|
// Header with version and optional update indicator
|
|
703
731
|
// Use vibrant colors for branch
|
|
@@ -725,7 +753,7 @@ function formatTable(
|
|
|
725
753
|
: info.branch;
|
|
726
754
|
|
|
727
755
|
const header = `${c.brand}${c.bold}agileflow${c.reset} ${c.dim}${versionStr}${c.reset} ${branchColor}${branchDisplay}${c.reset} ${c.dim}(${info.commit})${c.reset}`;
|
|
728
|
-
const headerLine = `${c.dim}${box.v}${c.reset} ${pad(header, W -
|
|
756
|
+
const headerLine = `${c.dim}${box.v}${c.reset} ${pad(header, W - 2)} ${c.dim}${box.v}${c.reset}`;
|
|
729
757
|
|
|
730
758
|
lines.push(topBorder);
|
|
731
759
|
lines.push(headerLine);
|
|
@@ -760,7 +788,8 @@ function formatTable(
|
|
|
760
788
|
lines.push(fullRow(` Run ${c.skyBlue}/agileflow:whats-new${c.reset} for full changelog`, ''));
|
|
761
789
|
}
|
|
762
790
|
|
|
763
|
-
|
|
791
|
+
// Transition from full-width sections to two-column stories section
|
|
792
|
+
lines.push(splitDivider());
|
|
764
793
|
|
|
765
794
|
// Stories section (always colorful labels like obtain-context)
|
|
766
795
|
lines.push(
|