@tekyzinc/gsd-t 2.10.0 → 2.10.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 +13 -0
- package/bin/gsd-t.js +59 -0
- package/commands/gsd-t-status.md +16 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GSD-T are documented here. Updated with each release.
|
|
4
4
|
|
|
5
|
+
## [2.10.2] - 2026-02-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Version update check in `gsd-t-status` slash command — works inside Claude Code and ClaudeWebCLI sessions, not just the CLI binary
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Normalized `repository.url` in package.json (`git+https://` prefix)
|
|
12
|
+
|
|
13
|
+
## [2.10.1] - 2026-02-10
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- Automatic update check — CLI queries npm registry (cached 24h, background refresh) and shows a notice box with update commands when a newer version is available
|
|
17
|
+
|
|
5
18
|
## [2.10.0] - 2026-02-10
|
|
6
19
|
|
|
7
20
|
### Added
|
package/bin/gsd-t.js
CHANGED
|
@@ -28,6 +28,7 @@ const GLOBAL_CLAUDE_MD = path.join(CLAUDE_DIR, "CLAUDE.md");
|
|
|
28
28
|
const SETTINGS_JSON = path.join(CLAUDE_DIR, "settings.json");
|
|
29
29
|
const VERSION_FILE = path.join(CLAUDE_DIR, ".gsd-t-version");
|
|
30
30
|
const PROJECTS_FILE = path.join(CLAUDE_DIR, ".gsd-t-projects");
|
|
31
|
+
const UPDATE_CHECK_FILE = path.join(CLAUDE_DIR, ".gsd-t-update-check");
|
|
31
32
|
|
|
32
33
|
// Where our package files live (relative to this script)
|
|
33
34
|
const PKG_ROOT = path.resolve(__dirname, "..");
|
|
@@ -776,6 +777,62 @@ function doRegister() {
|
|
|
776
777
|
log("");
|
|
777
778
|
}
|
|
778
779
|
|
|
780
|
+
function checkForUpdates() {
|
|
781
|
+
// Skip check for update/install/update-all (they handle it themselves)
|
|
782
|
+
const skipCommands = ["install", "update", "update-all", "--version", "-v"];
|
|
783
|
+
if (skipCommands.includes(command)) return;
|
|
784
|
+
|
|
785
|
+
// Read cache (sync, fast)
|
|
786
|
+
let cached = null;
|
|
787
|
+
try {
|
|
788
|
+
if (fs.existsSync(UPDATE_CHECK_FILE)) {
|
|
789
|
+
cached = JSON.parse(fs.readFileSync(UPDATE_CHECK_FILE, "utf8"));
|
|
790
|
+
}
|
|
791
|
+
} catch { /* ignore corrupt cache */ }
|
|
792
|
+
|
|
793
|
+
// Show notice from cache if newer version is known
|
|
794
|
+
if (cached && cached.latest && cached.latest !== PKG_VERSION) {
|
|
795
|
+
showUpdateNotice(cached.latest);
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// Refresh cache in background if stale (older than 24h) or missing
|
|
799
|
+
const isStale = !cached || (Date.now() - cached.timestamp) > 86400000;
|
|
800
|
+
if (isStale) {
|
|
801
|
+
const script = `
|
|
802
|
+
const https = require("https");
|
|
803
|
+
const fs = require("fs");
|
|
804
|
+
https.get("https://registry.npmjs.org/@tekyzinc/gsd-t/latest",
|
|
805
|
+
{ timeout: 5000 }, (res) => {
|
|
806
|
+
let d = "";
|
|
807
|
+
res.on("data", (c) => d += c);
|
|
808
|
+
res.on("end", () => {
|
|
809
|
+
try {
|
|
810
|
+
const v = JSON.parse(d).version;
|
|
811
|
+
fs.writeFileSync(${JSON.stringify(UPDATE_CHECK_FILE)},
|
|
812
|
+
JSON.stringify({ latest: v, timestamp: Date.now() }));
|
|
813
|
+
} catch {}
|
|
814
|
+
});
|
|
815
|
+
}).on("error", () => {});
|
|
816
|
+
`.replace(/\n/g, "");
|
|
817
|
+
const { spawn } = require("child_process");
|
|
818
|
+
const child = spawn(process.execPath, ["-e", script], {
|
|
819
|
+
detached: true,
|
|
820
|
+
stdio: "ignore",
|
|
821
|
+
});
|
|
822
|
+
child.unref();
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
function showUpdateNotice(latest) {
|
|
827
|
+
log("");
|
|
828
|
+
log(` ${YELLOW}╭──────────────────────────────────────────────╮${RESET}`);
|
|
829
|
+
log(` ${YELLOW}│${RESET} Update available: ${DIM}${PKG_VERSION}${RESET} → ${GREEN}${latest}${RESET} ${YELLOW}│${RESET}`);
|
|
830
|
+
log(` ${YELLOW}│${RESET} Run: ${CYAN}npm update -g @tekyzinc/gsd-t${RESET} ${YELLOW}│${RESET}`);
|
|
831
|
+
log(` ${YELLOW}│${RESET} Then: ${CYAN}gsd-t update-all${RESET} ${YELLOW}│${RESET}`);
|
|
832
|
+
log(` ${YELLOW}│${RESET} Changelog: ${CYAN}gsd-t changelog${RESET} ${YELLOW}│${RESET}`);
|
|
833
|
+
log(` ${YELLOW}╰──────────────────────────────────────────────╯${RESET}`);
|
|
834
|
+
}
|
|
835
|
+
|
|
779
836
|
function doChangelog() {
|
|
780
837
|
const openCmd =
|
|
781
838
|
process.platform === "win32" ? "start" :
|
|
@@ -868,3 +925,5 @@ switch (command) {
|
|
|
868
925
|
showHelp();
|
|
869
926
|
process.exit(1);
|
|
870
927
|
}
|
|
928
|
+
|
|
929
|
+
checkForUpdates();
|
package/commands/gsd-t-status.md
CHANGED
|
@@ -40,4 +40,20 @@ If `.gsd-t/backlog.md` exists, read and parse it. Show total count and top 3 ite
|
|
|
40
40
|
If there are blockers or issues, highlight them.
|
|
41
41
|
If the user provides $ARGUMENTS, focus the status on that specific domain or aspect.
|
|
42
42
|
|
|
43
|
+
## Version Check
|
|
44
|
+
|
|
45
|
+
After displaying the project status, check for GSD-T updates:
|
|
46
|
+
|
|
47
|
+
1. Read `~/.claude/.gsd-t-version` to get the installed version
|
|
48
|
+
2. Read `~/.claude/.gsd-t-update-check` (JSON with `latest` and `timestamp` fields) to get the latest known version
|
|
49
|
+
3. If the file doesn't exist or is unreadable, run `gsd-t status` (CLI) in the background to trigger a cache refresh, and skip the notice
|
|
50
|
+
4. If `latest` is newer than the installed version, append to the report:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
⬆️ GSD-T update available: {installed} → {latest}
|
|
54
|
+
Run: npm update -g @tekyzinc/gsd-t && gsd-t update-all
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
5. If versions match, skip — don't show anything
|
|
58
|
+
|
|
43
59
|
$ARGUMENTS
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekyzinc/gsd-t",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.2",
|
|
4
4
|
"description": "GSD-T: Contract-Driven Development for Claude Code — 35 slash commands with backlog management, impact analysis, test sync, and milestone archival",
|
|
5
5
|
"author": "Tekyz, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/Tekyz-Inc/get-stuff-done-teams.git"
|
|
9
|
+
"url": "git+https://github.com/Tekyz-Inc/get-stuff-done-teams.git"
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://github.com/Tekyz-Inc/get-stuff-done-teams#readme",
|
|
12
12
|
"keywords": [
|