@agentuity/cli 0.0.86 → 0.0.88
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/bin/cli.ts +7 -0
- package/dist/bun-path.d.ts.map +1 -1
- package/dist/bun-path.js +1 -3
- package/dist/bun-path.js.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cmd/ai/index.d.ts.map +1 -1
- package/dist/cmd/ai/index.js +1 -0
- package/dist/cmd/ai/index.js.map +1 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +5 -0
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/bundler.d.ts.map +1 -1
- package/dist/cmd/build/bundler.js +152 -7
- package/dist/cmd/build/bundler.js.map +1 -1
- package/dist/cmd/build/config-loader.d.ts +16 -0
- package/dist/cmd/build/config-loader.d.ts.map +1 -0
- package/dist/cmd/build/config-loader.js +165 -0
- package/dist/cmd/build/config-loader.js.map +1 -0
- package/dist/cmd/build/patch/_util.js +6 -6
- package/dist/cmd/build/patch/_util.js.map +1 -1
- package/dist/cmd/build/patch/llm.js +1 -1
- package/dist/cmd/build/patch/llm.js.map +1 -1
- package/dist/cmd/build/plugin.d.ts.map +1 -1
- package/dist/cmd/build/plugin.js +36 -15
- package/dist/cmd/build/plugin.js.map +1 -1
- package/dist/cmd/build/route-discovery.d.ts +8 -4
- package/dist/cmd/build/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/route-discovery.js +10 -5
- package/dist/cmd/build/route-discovery.js.map +1 -1
- package/dist/cmd/build/workbench.d.ts +1 -0
- package/dist/cmd/build/workbench.d.ts.map +1 -1
- package/dist/cmd/build/workbench.js +8 -1
- package/dist/cmd/build/workbench.js.map +1 -1
- package/dist/cmd/cloud/index.d.ts.map +1 -1
- package/dist/cmd/cloud/index.js +2 -0
- package/dist/cmd/cloud/index.js.map +1 -1
- package/dist/cmd/cloud/redis/get.d.ts +2 -0
- package/dist/cmd/cloud/redis/get.d.ts.map +1 -0
- package/dist/cmd/cloud/redis/get.js +62 -0
- package/dist/cmd/cloud/redis/get.js.map +1 -0
- package/dist/cmd/cloud/redis/index.d.ts +2 -0
- package/dist/cmd/cloud/redis/index.d.ts.map +1 -0
- package/dist/cmd/cloud/redis/index.js +13 -0
- package/dist/cmd/cloud/redis/index.js.map +1 -0
- package/dist/cmd/cloud/scp/download.js +3 -3
- package/dist/cmd/cloud/scp/download.js.map +1 -1
- package/dist/cmd/cloud/scp/upload.js +3 -3
- package/dist/cmd/cloud/scp/upload.js.map +1 -1
- package/dist/cmd/cloud/ssh.js +3 -3
- package/dist/cmd/cloud/ssh.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +5 -0
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +7 -0
- package/dist/cmd/index.js.map +1 -1
- package/dist/cmd/profile/create.d.ts.map +1 -1
- package/dist/cmd/profile/create.js +1 -0
- package/dist/cmd/profile/create.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts +20 -0
- package/dist/cmd/upgrade/index.d.ts.map +1 -0
- package/dist/cmd/upgrade/index.js +307 -0
- package/dist/cmd/upgrade/index.js.map +1 -0
- package/dist/cmd/version/index.d.ts.map +1 -1
- package/dist/cmd/version/index.js +1 -0
- package/dist/cmd/version/index.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -94
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tui.d.ts +5 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +23 -0
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +73 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/dependency-checker.d.ts +20 -0
- package/dist/utils/dependency-checker.d.ts.map +1 -0
- package/dist/utils/dependency-checker.js +161 -0
- package/dist/utils/dependency-checker.js.map +1 -0
- package/dist/version-check.d.ts +13 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +177 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +6 -4
- package/src/bun-path.ts +1 -3
- package/src/cli.ts +3 -3
- package/src/cmd/ai/index.ts +1 -0
- package/src/cmd/build/ast.ts +7 -0
- package/src/cmd/build/bundler.ts +181 -8
- package/src/cmd/build/config-loader.ts +200 -0
- package/src/cmd/build/patch/_util.ts +6 -6
- package/src/cmd/build/patch/llm.ts +1 -1
- package/src/cmd/build/plugin.ts +40 -17
- package/src/cmd/build/route-discovery.ts +10 -5
- package/src/cmd/build/workbench.ts +9 -1
- package/src/cmd/cloud/index.ts +2 -0
- package/src/cmd/cloud/redis/get.ts +72 -0
- package/src/cmd/cloud/redis/index.ts +13 -0
- package/src/cmd/cloud/scp/download.ts +3 -3
- package/src/cmd/cloud/scp/upload.ts +3 -3
- package/src/cmd/cloud/ssh.ts +3 -3
- package/src/cmd/dev/index.ts +11 -0
- package/src/cmd/index.ts +8 -0
- package/src/cmd/profile/create.ts +1 -0
- package/src/cmd/project/download.ts +1 -1
- package/src/cmd/upgrade/index.ts +365 -0
- package/src/cmd/version/index.ts +1 -0
- package/src/config.ts +12 -121
- package/src/git-helper.ts +4 -4
- package/src/index.ts +4 -0
- package/src/tui.ts +27 -0
- package/src/types.ts +80 -0
- package/src/utils/dependency-checker.ts +207 -0
- package/src/version-check.ts +234 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import type { Config, Logger, CommandDefinition } from './types';
|
|
2
|
+
import { isRunningFromExecutable, fetchLatestVersion } from './cmd/upgrade';
|
|
3
|
+
import { getVersion } from './version';
|
|
4
|
+
import * as tui from './tui';
|
|
5
|
+
import { saveConfig } from './config';
|
|
6
|
+
import { $ } from 'bun';
|
|
7
|
+
|
|
8
|
+
const ONE_HOUR_MS = 60 * 60 * 1000;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Check if we should skip the version check based on environment and config
|
|
12
|
+
*/
|
|
13
|
+
function shouldSkipCheck(
|
|
14
|
+
config: Config | null,
|
|
15
|
+
options: {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
quiet?: boolean;
|
|
18
|
+
validate?: boolean;
|
|
19
|
+
dryRun?: boolean;
|
|
20
|
+
skipVersionCheck?: boolean;
|
|
21
|
+
},
|
|
22
|
+
commandDef: CommandDefinition | undefined,
|
|
23
|
+
args: string[]
|
|
24
|
+
): boolean {
|
|
25
|
+
// Skip if running via bun/bunx (not installed executable)
|
|
26
|
+
if (!isRunningFromExecutable()) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Skip if no TTY (CI, redirected output, etc.)
|
|
31
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Skip if any of these flags are set
|
|
36
|
+
if (options.json || options.quiet || options.validate || options.dryRun) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Skip if explicitly disabled via flag
|
|
41
|
+
if (options.skipVersionCheck) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Skip if explicitly disabled via environment variable
|
|
46
|
+
if (process.env.AGENTUITY_SKIP_VERSION_CHECK === '1') {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Skip if explicitly disabled via config
|
|
51
|
+
if (config?.overrides?.skip_version_check) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Skip if development version (0.0.x or 'dev')
|
|
56
|
+
const currentVersion = getVersion();
|
|
57
|
+
if (currentVersion.startsWith('0.0.') || currentVersion === 'dev') {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Skip if command explicitly opts out of upgrade check
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
if (commandDef && (commandDef as any).skipUpgradeCheck === true) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Skip for help commands
|
|
68
|
+
const helpFlags = ['--help', '-h', 'help'];
|
|
69
|
+
if (args.some((arg) => helpFlags.includes(arg))) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Check if enough time has passed since last check (at least 1 hour)
|
|
78
|
+
*/
|
|
79
|
+
function shouldCheckNow(config: Config | null): boolean {
|
|
80
|
+
const lastCheck = config?.preferences?.last_update_check;
|
|
81
|
+
if (!lastCheck) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const now = Date.now();
|
|
86
|
+
const elapsed = now - lastCheck;
|
|
87
|
+
return elapsed >= ONE_HOUR_MS;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Prompt user to upgrade to a new version
|
|
92
|
+
* Returns true if user wants to upgrade, false otherwise
|
|
93
|
+
*/
|
|
94
|
+
async function promptUpgrade(currentVersion: string, latestVersion: string): Promise<boolean> {
|
|
95
|
+
tui.newline();
|
|
96
|
+
tui.info(`${tui.bold('A new version of the CLI is available!')}`);
|
|
97
|
+
tui.info(`Current version: ${tui.muted(currentVersion)}`);
|
|
98
|
+
tui.info(`Latest version: ${tui.bold(latestVersion)}`);
|
|
99
|
+
tui.newline();
|
|
100
|
+
|
|
101
|
+
return await tui.confirm('Would you like to upgrade now?', true);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Update the last check timestamp in config
|
|
106
|
+
*/
|
|
107
|
+
async function updateCheckTimestamp(config: Config | null, logger: Logger): Promise<void> {
|
|
108
|
+
if (!config) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const updatedConfig: Config = {
|
|
113
|
+
...config,
|
|
114
|
+
preferences: {
|
|
115
|
+
...config.preferences,
|
|
116
|
+
last_update_check: Date.now(),
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
await saveConfig(updatedConfig);
|
|
122
|
+
} catch (error) {
|
|
123
|
+
// Non-fatal - log but continue
|
|
124
|
+
logger.debug('Failed to save config after version check: %s', error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Perform the upgrade and re-run the command
|
|
130
|
+
*/
|
|
131
|
+
async function performUpgrade(logger: Logger): Promise<void> {
|
|
132
|
+
try {
|
|
133
|
+
// Run upgrade command (it will validate, download, install, etc.)
|
|
134
|
+
// Use process.execPath to get the actual binary path (not Bun.main which is virtual)
|
|
135
|
+
logger.info('Starting upgrade...');
|
|
136
|
+
await $`${process.execPath} upgrade`.quiet();
|
|
137
|
+
|
|
138
|
+
// If we got here, the upgrade succeeded
|
|
139
|
+
// Re-run the original command with the new binary
|
|
140
|
+
const args = process.argv.slice(2);
|
|
141
|
+
const newBinaryPath = process.execPath;
|
|
142
|
+
|
|
143
|
+
logger.info('Upgrade successful! Restarting with new version...');
|
|
144
|
+
tui.info('');
|
|
145
|
+
|
|
146
|
+
// Spawn new process with same arguments
|
|
147
|
+
const proc = Bun.spawn([newBinaryPath, ...args], {
|
|
148
|
+
stdin: 'inherit',
|
|
149
|
+
stdout: 'inherit',
|
|
150
|
+
stderr: 'inherit',
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// Wait for the new process to complete
|
|
154
|
+
await proc.exited;
|
|
155
|
+
|
|
156
|
+
// Exit with the same exit code as the new process
|
|
157
|
+
process.exit(proc.exitCode ?? 0);
|
|
158
|
+
} catch (error) {
|
|
159
|
+
// Upgrade failed - log and continue with original command
|
|
160
|
+
logger.error('Upgrade failed: %s', error instanceof Error ? error.message : 'Unknown error');
|
|
161
|
+
tui.warning('Continuing with current version...');
|
|
162
|
+
tui.info('');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Check for updates and optionally prompt to upgrade
|
|
168
|
+
* Should be called early in the CLI initialization, before commands execute
|
|
169
|
+
*/
|
|
170
|
+
export async function checkForUpdates(
|
|
171
|
+
config: Config | null,
|
|
172
|
+
logger: Logger,
|
|
173
|
+
options: {
|
|
174
|
+
json?: boolean;
|
|
175
|
+
quiet?: boolean;
|
|
176
|
+
validate?: boolean;
|
|
177
|
+
dryRun?: boolean;
|
|
178
|
+
skipVersionCheck?: boolean;
|
|
179
|
+
},
|
|
180
|
+
commandDef: CommandDefinition | undefined,
|
|
181
|
+
args: string[]
|
|
182
|
+
): Promise<void> {
|
|
183
|
+
// Determine if we should skip the check
|
|
184
|
+
if (shouldSkipCheck(config, options, commandDef, args)) {
|
|
185
|
+
logger.trace('Skipping version check (disabled or not applicable)');
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Check if enough time has passed
|
|
190
|
+
if (!shouldCheckNow(config)) {
|
|
191
|
+
logger.trace('Skipping version check (checked recently)');
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Perform the actual version check
|
|
196
|
+
logger.trace('Checking for updates...');
|
|
197
|
+
|
|
198
|
+
try {
|
|
199
|
+
const currentVersion = getVersion();
|
|
200
|
+
const latestVersion = await fetchLatestVersion();
|
|
201
|
+
|
|
202
|
+
// Update the timestamp since we successfully checked
|
|
203
|
+
await updateCheckTimestamp(config, logger);
|
|
204
|
+
|
|
205
|
+
// Compare versions
|
|
206
|
+
const normalizedCurrent = currentVersion.replace(/^v/, '');
|
|
207
|
+
const normalizedLatest = latestVersion.replace(/^v/, '');
|
|
208
|
+
|
|
209
|
+
if (normalizedCurrent === normalizedLatest) {
|
|
210
|
+
logger.trace('Already on latest version: %s', currentVersion);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// New version available - prompt user
|
|
215
|
+
const shouldUpgrade = await promptUpgrade(currentVersion, latestVersion);
|
|
216
|
+
|
|
217
|
+
if (!shouldUpgrade) {
|
|
218
|
+
// User declined - just continue
|
|
219
|
+
tui.info('You can upgrade later by running: agentuity upgrade');
|
|
220
|
+
tui.newline();
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// User wants to upgrade - perform it
|
|
225
|
+
await performUpgrade(logger);
|
|
226
|
+
} catch (error) {
|
|
227
|
+
// Non-fatal - if we can't fetch the latest version (network error, timeout, etc.),
|
|
228
|
+
// just log at debug level and continue without interrupting the user's command
|
|
229
|
+
logger.debug(
|
|
230
|
+
'Version check failed: %s',
|
|
231
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
}
|