@claudetools/cli 0.9.9 → 0.10.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/dist/cli.js +16 -1
- package/dist/cli.js.map +1 -1
- package/dist/updater.d.ts +20 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +114 -0
- package/dist/updater.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
9
9
|
import { dirname, join } from 'node:path';
|
|
10
10
|
import { runInit, runCleanup } from './setup.js';
|
|
11
11
|
import { runOnboard } from './onboard/index.js';
|
|
12
|
+
import { autoUpdate, checkVersionQuiet } from './updater.js';
|
|
12
13
|
// Get version from package.json
|
|
13
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
14
15
|
const __dirname = dirname(__filename);
|
|
@@ -23,13 +24,18 @@ const { values, positionals } = parseArgs({
|
|
|
23
24
|
refresh: { type: 'boolean', short: 'r' },
|
|
24
25
|
verbose: { type: 'boolean' },
|
|
25
26
|
'skip-docs': { type: 'boolean' },
|
|
27
|
+
'no-update': { type: 'boolean' },
|
|
26
28
|
},
|
|
27
29
|
allowPositionals: true,
|
|
28
30
|
strict: false,
|
|
29
31
|
});
|
|
30
|
-
// Handle version flag
|
|
32
|
+
// Handle version flag (also check for updates)
|
|
31
33
|
if (values.version) {
|
|
34
|
+
const newer = await checkVersionQuiet(version);
|
|
32
35
|
console.log(`claudetools v${version}`);
|
|
36
|
+
if (newer) {
|
|
37
|
+
console.log(` (v${newer} available - run any command to auto-update)`);
|
|
38
|
+
}
|
|
33
39
|
process.exit(0);
|
|
34
40
|
}
|
|
35
41
|
// Handle help flag
|
|
@@ -51,6 +57,11 @@ Options:
|
|
|
51
57
|
-r, --refresh Refresh existing documentation (with onboard)
|
|
52
58
|
--verbose Show detailed output
|
|
53
59
|
--skip-docs Skip documentation generation (with onboard)
|
|
60
|
+
--no-update Skip auto-update check
|
|
61
|
+
|
|
62
|
+
Auto-Update:
|
|
63
|
+
ClaudeTools automatically checks for updates when run.
|
|
64
|
+
Set CLAUDETOOLS_NO_UPDATE=1 to disable, or use --no-update flag.
|
|
54
65
|
|
|
55
66
|
Examples:
|
|
56
67
|
claudetools init # Set up a new project
|
|
@@ -61,6 +72,10 @@ Documentation: https://github.com/claudetools/claudetools
|
|
|
61
72
|
`);
|
|
62
73
|
process.exit(0);
|
|
63
74
|
}
|
|
75
|
+
// Auto-update check (runs before commands unless --no-update)
|
|
76
|
+
if (!values['no-update']) {
|
|
77
|
+
await autoUpdate(version);
|
|
78
|
+
}
|
|
64
79
|
// Handle commands
|
|
65
80
|
const command = positionals[0];
|
|
66
81
|
switch (command) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAChF,iEAAiE;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface VersionInfo {
|
|
2
|
+
current: string;
|
|
3
|
+
latest: string;
|
|
4
|
+
needsUpdate: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Check if an update is available
|
|
8
|
+
*/
|
|
9
|
+
export declare function checkForUpdate(currentVersion: string): Promise<VersionInfo>;
|
|
10
|
+
/**
|
|
11
|
+
* Check for updates and auto-update if available
|
|
12
|
+
* Call this at CLI startup
|
|
13
|
+
*/
|
|
14
|
+
export declare function autoUpdate(currentVersion: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Quick version check without auto-update (for --version flag)
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkVersionQuiet(currentVersion: string): Promise<string | null>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAiCD;;GAEG;AACH,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAYjF;AAqBD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMtF"}
|
package/dist/updater.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Auto-Updater
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Checks for updates and auto-updates the CLI
|
|
5
|
+
import { execSync, spawn } from 'child_process';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
const PACKAGE_NAME = '@claudetools/cli';
|
|
9
|
+
/**
|
|
10
|
+
* Get latest version from npm registry
|
|
11
|
+
*/
|
|
12
|
+
async function getLatestVersion() {
|
|
13
|
+
try {
|
|
14
|
+
const output = execSync(`npm view ${PACKAGE_NAME} version 2>/dev/null`, {
|
|
15
|
+
encoding: 'utf-8',
|
|
16
|
+
timeout: 10000,
|
|
17
|
+
});
|
|
18
|
+
return output.trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Compare semver versions
|
|
26
|
+
*/
|
|
27
|
+
function isNewerVersion(current, latest) {
|
|
28
|
+
const currentParts = current.split('.').map(Number);
|
|
29
|
+
const latestParts = latest.split('.').map(Number);
|
|
30
|
+
for (let i = 0; i < 3; i++) {
|
|
31
|
+
const curr = currentParts[i] || 0;
|
|
32
|
+
const lat = latestParts[i] || 0;
|
|
33
|
+
if (lat > curr)
|
|
34
|
+
return true;
|
|
35
|
+
if (lat < curr)
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if an update is available
|
|
42
|
+
*/
|
|
43
|
+
export async function checkForUpdate(currentVersion) {
|
|
44
|
+
const latest = await getLatestVersion();
|
|
45
|
+
if (!latest) {
|
|
46
|
+
return { current: currentVersion, latest: currentVersion, needsUpdate: false };
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
current: currentVersion,
|
|
50
|
+
latest,
|
|
51
|
+
needsUpdate: isNewerVersion(currentVersion, latest),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Perform the update
|
|
56
|
+
*/
|
|
57
|
+
async function performUpdate() {
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
const proc = spawn('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
|
|
60
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
61
|
+
});
|
|
62
|
+
proc.on('close', (code) => {
|
|
63
|
+
resolve(code === 0);
|
|
64
|
+
});
|
|
65
|
+
proc.on('error', () => {
|
|
66
|
+
resolve(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check for updates and auto-update if available
|
|
72
|
+
* Call this at CLI startup
|
|
73
|
+
*/
|
|
74
|
+
export async function autoUpdate(currentVersion) {
|
|
75
|
+
// Skip update check if NO_UPDATE env var is set
|
|
76
|
+
if (process.env.CLAUDETOOLS_NO_UPDATE === '1') {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Check version silently
|
|
80
|
+
const versionInfo = await checkForUpdate(currentVersion);
|
|
81
|
+
if (!versionInfo.needsUpdate) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Show update notification
|
|
85
|
+
console.log('');
|
|
86
|
+
console.log(chalk.yellow(` ⬆ Update available: `) +
|
|
87
|
+
chalk.dim(`v${versionInfo.current}`) +
|
|
88
|
+
chalk.yellow(` → `) +
|
|
89
|
+
chalk.green(`v${versionInfo.latest}`));
|
|
90
|
+
// Auto-update
|
|
91
|
+
const spinner = ora({ text: 'Updating...', indent: 2 }).start();
|
|
92
|
+
const success = await performUpdate();
|
|
93
|
+
if (success) {
|
|
94
|
+
spinner.succeed(chalk.green(`Updated to v${versionInfo.latest}`));
|
|
95
|
+
console.log(chalk.dim(' Restart to use the new version.'));
|
|
96
|
+
console.log('');
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
spinner.fail(chalk.yellow('Auto-update failed'));
|
|
100
|
+
console.log(chalk.dim(` Run manually: npm install -g ${PACKAGE_NAME}@latest`));
|
|
101
|
+
console.log('');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Quick version check without auto-update (for --version flag)
|
|
106
|
+
*/
|
|
107
|
+
export async function checkVersionQuiet(currentVersion) {
|
|
108
|
+
const versionInfo = await checkForUpdate(currentVersion);
|
|
109
|
+
if (versionInfo.needsUpdate) {
|
|
110
|
+
return versionInfo.latest;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
|