@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.
Files changed (119) hide show
  1. package/bin/cli.ts +7 -0
  2. package/dist/bun-path.d.ts.map +1 -1
  3. package/dist/bun-path.js +1 -3
  4. package/dist/bun-path.js.map +1 -1
  5. package/dist/cli.js +3 -3
  6. package/dist/cmd/ai/index.d.ts.map +1 -1
  7. package/dist/cmd/ai/index.js +1 -0
  8. package/dist/cmd/ai/index.js.map +1 -1
  9. package/dist/cmd/build/ast.d.ts.map +1 -1
  10. package/dist/cmd/build/ast.js +5 -0
  11. package/dist/cmd/build/ast.js.map +1 -1
  12. package/dist/cmd/build/bundler.d.ts.map +1 -1
  13. package/dist/cmd/build/bundler.js +152 -7
  14. package/dist/cmd/build/bundler.js.map +1 -1
  15. package/dist/cmd/build/config-loader.d.ts +16 -0
  16. package/dist/cmd/build/config-loader.d.ts.map +1 -0
  17. package/dist/cmd/build/config-loader.js +165 -0
  18. package/dist/cmd/build/config-loader.js.map +1 -0
  19. package/dist/cmd/build/patch/_util.js +6 -6
  20. package/dist/cmd/build/patch/_util.js.map +1 -1
  21. package/dist/cmd/build/patch/llm.js +1 -1
  22. package/dist/cmd/build/patch/llm.js.map +1 -1
  23. package/dist/cmd/build/plugin.d.ts.map +1 -1
  24. package/dist/cmd/build/plugin.js +36 -15
  25. package/dist/cmd/build/plugin.js.map +1 -1
  26. package/dist/cmd/build/route-discovery.d.ts +8 -4
  27. package/dist/cmd/build/route-discovery.d.ts.map +1 -1
  28. package/dist/cmd/build/route-discovery.js +10 -5
  29. package/dist/cmd/build/route-discovery.js.map +1 -1
  30. package/dist/cmd/build/workbench.d.ts +1 -0
  31. package/dist/cmd/build/workbench.d.ts.map +1 -1
  32. package/dist/cmd/build/workbench.js +8 -1
  33. package/dist/cmd/build/workbench.js.map +1 -1
  34. package/dist/cmd/cloud/index.d.ts.map +1 -1
  35. package/dist/cmd/cloud/index.js +2 -0
  36. package/dist/cmd/cloud/index.js.map +1 -1
  37. package/dist/cmd/cloud/redis/get.d.ts +2 -0
  38. package/dist/cmd/cloud/redis/get.d.ts.map +1 -0
  39. package/dist/cmd/cloud/redis/get.js +62 -0
  40. package/dist/cmd/cloud/redis/get.js.map +1 -0
  41. package/dist/cmd/cloud/redis/index.d.ts +2 -0
  42. package/dist/cmd/cloud/redis/index.d.ts.map +1 -0
  43. package/dist/cmd/cloud/redis/index.js +13 -0
  44. package/dist/cmd/cloud/redis/index.js.map +1 -0
  45. package/dist/cmd/cloud/scp/download.js +3 -3
  46. package/dist/cmd/cloud/scp/download.js.map +1 -1
  47. package/dist/cmd/cloud/scp/upload.js +3 -3
  48. package/dist/cmd/cloud/scp/upload.js.map +1 -1
  49. package/dist/cmd/cloud/ssh.js +3 -3
  50. package/dist/cmd/cloud/ssh.js.map +1 -1
  51. package/dist/cmd/dev/index.d.ts.map +1 -1
  52. package/dist/cmd/dev/index.js +5 -0
  53. package/dist/cmd/dev/index.js.map +1 -1
  54. package/dist/cmd/index.d.ts.map +1 -1
  55. package/dist/cmd/index.js +7 -0
  56. package/dist/cmd/index.js.map +1 -1
  57. package/dist/cmd/profile/create.d.ts.map +1 -1
  58. package/dist/cmd/profile/create.js +1 -0
  59. package/dist/cmd/profile/create.js.map +1 -1
  60. package/dist/cmd/upgrade/index.d.ts +20 -0
  61. package/dist/cmd/upgrade/index.d.ts.map +1 -0
  62. package/dist/cmd/upgrade/index.js +307 -0
  63. package/dist/cmd/upgrade/index.js.map +1 -0
  64. package/dist/cmd/version/index.d.ts.map +1 -1
  65. package/dist/cmd/version/index.js +1 -0
  66. package/dist/cmd/version/index.js.map +1 -1
  67. package/dist/config.d.ts +1 -1
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js +12 -94
  70. package/dist/config.js.map +1 -1
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/tui.d.ts +5 -0
  75. package/dist/tui.d.ts.map +1 -1
  76. package/dist/tui.js +23 -0
  77. package/dist/tui.js.map +1 -1
  78. package/dist/types.d.ts +73 -0
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/types.js.map +1 -1
  81. package/dist/utils/dependency-checker.d.ts +20 -0
  82. package/dist/utils/dependency-checker.d.ts.map +1 -0
  83. package/dist/utils/dependency-checker.js +161 -0
  84. package/dist/utils/dependency-checker.js.map +1 -0
  85. package/dist/version-check.d.ts +13 -0
  86. package/dist/version-check.d.ts.map +1 -0
  87. package/dist/version-check.js +177 -0
  88. package/dist/version-check.js.map +1 -0
  89. package/package.json +6 -4
  90. package/src/bun-path.ts +1 -3
  91. package/src/cli.ts +3 -3
  92. package/src/cmd/ai/index.ts +1 -0
  93. package/src/cmd/build/ast.ts +7 -0
  94. package/src/cmd/build/bundler.ts +181 -8
  95. package/src/cmd/build/config-loader.ts +200 -0
  96. package/src/cmd/build/patch/_util.ts +6 -6
  97. package/src/cmd/build/patch/llm.ts +1 -1
  98. package/src/cmd/build/plugin.ts +40 -17
  99. package/src/cmd/build/route-discovery.ts +10 -5
  100. package/src/cmd/build/workbench.ts +9 -1
  101. package/src/cmd/cloud/index.ts +2 -0
  102. package/src/cmd/cloud/redis/get.ts +72 -0
  103. package/src/cmd/cloud/redis/index.ts +13 -0
  104. package/src/cmd/cloud/scp/download.ts +3 -3
  105. package/src/cmd/cloud/scp/upload.ts +3 -3
  106. package/src/cmd/cloud/ssh.ts +3 -3
  107. package/src/cmd/dev/index.ts +11 -0
  108. package/src/cmd/index.ts +8 -0
  109. package/src/cmd/profile/create.ts +1 -0
  110. package/src/cmd/project/download.ts +1 -1
  111. package/src/cmd/upgrade/index.ts +365 -0
  112. package/src/cmd/version/index.ts +1 -0
  113. package/src/config.ts +12 -121
  114. package/src/git-helper.ts +4 -4
  115. package/src/index.ts +4 -0
  116. package/src/tui.ts +27 -0
  117. package/src/types.ts +80 -0
  118. package/src/utils/dependency-checker.ts +207 -0
  119. package/src/version-check.ts +234 -0
@@ -0,0 +1,20 @@
1
+ import type { Logger } from '../types';
2
+ export interface UpgradeResult {
3
+ upgraded: string[];
4
+ skipped: string[];
5
+ failed: string[];
6
+ }
7
+ /**
8
+ * Checks if a version specifier should be upgraded
9
+ * @param specifier - The version specifier from package.json (e.g., "latest", "^1.0.0", "1.2.3")
10
+ * @returns true if the package should be upgraded
11
+ */
12
+ export declare function shouldUpgradeVersion(specifier: string): boolean;
13
+ /**
14
+ * Check and upgrade @agentuity/* dependencies to match CLI version
15
+ * @param projectDir - Root directory of the user's project
16
+ * @param logger - Logger instance
17
+ * @returns Result of the upgrade operation
18
+ */
19
+ export declare function checkAndUpgradeDependencies(projectDir: string, logger: Logger): Promise<UpgradeResult>;
20
+ //# sourceMappingURL=dependency-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-checker.d.ts","sourceRoot":"","sources":["../../src/utils/dependency-checker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAmB/D;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CA0JxB"}
@@ -0,0 +1,161 @@
1
+ import { $ } from 'bun';
2
+ import { join } from 'node:path';
3
+ import { readFileSync, writeFileSync } from 'node:fs';
4
+ import { getVersion } from '../version';
5
+ /**
6
+ * Checks if a version specifier should be upgraded
7
+ * @param specifier - The version specifier from package.json (e.g., "latest", "^1.0.0", "1.2.3")
8
+ * @returns true if the package should be upgraded
9
+ */
10
+ export function shouldUpgradeVersion(specifier) {
11
+ // Always upgrade "latest" and "*"
12
+ if (specifier === 'latest' || specifier === '*') {
13
+ return true;
14
+ }
15
+ // Skip pinned versions (exact semver like "1.2.3")
16
+ if (/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/.test(specifier)) {
17
+ return false;
18
+ }
19
+ // Upgrade ranges (^1.0.0, ~1.0.0, >=1.0.0, etc.)
20
+ // Check if the specifier is a range pattern
21
+ if (/^[~^>=<]/.test(specifier)) {
22
+ return true;
23
+ }
24
+ // Default to not upgrading if we can't determine
25
+ return false;
26
+ }
27
+ /**
28
+ * Check and upgrade @agentuity/* dependencies to match CLI version
29
+ * @param projectDir - Root directory of the user's project
30
+ * @param logger - Logger instance
31
+ * @returns Result of the upgrade operation
32
+ */
33
+ export async function checkAndUpgradeDependencies(projectDir, logger) {
34
+ const result = {
35
+ upgraded: [],
36
+ skipped: [],
37
+ failed: [],
38
+ };
39
+ // Skip in CI/non-interactive environments
40
+ if (!process.stdin.isTTY) {
41
+ logger.debug('Skipping dependency check in non-interactive environment');
42
+ return result;
43
+ }
44
+ const packageJsonPath = join(projectDir, 'package.json');
45
+ const cliVersion = getVersion();
46
+ logger.debug('CLI version: %s', cliVersion);
47
+ // Read package.json
48
+ let packageJson;
49
+ try {
50
+ packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
51
+ }
52
+ catch (error) {
53
+ logger.debug('Failed to read package.json: %s', error);
54
+ return result;
55
+ }
56
+ // Collect all @agentuity/* packages and their original specifiers
57
+ const allDeps = {
58
+ ...packageJson.dependencies,
59
+ ...packageJson.devDependencies,
60
+ };
61
+ const agentuitPackages = Object.entries(allDeps)
62
+ .filter(([name]) => name.startsWith('@agentuity/'))
63
+ .map(([name, specifier]) => ({ name, specifier }));
64
+ if (agentuitPackages.length === 0) {
65
+ logger.debug('No @agentuity/* packages found in package.json');
66
+ return result;
67
+ }
68
+ // Check which packages need upgrading
69
+ const packagesToUpgrade = agentuitPackages.filter(({ specifier }) => shouldUpgradeVersion(specifier));
70
+ if (packagesToUpgrade.length === 0) {
71
+ logger.debug('All @agentuity/* packages are pinned, skipping upgrade');
72
+ for (const pkg of agentuitPackages) {
73
+ result.skipped.push(pkg.name);
74
+ }
75
+ return result;
76
+ }
77
+ // Check if CLI version is different from installed packages
78
+ let needsUpgrade = false;
79
+ for (const { name } of packagesToUpgrade) {
80
+ try {
81
+ const installedPackageJson = JSON.parse(readFileSync(join(projectDir, 'node_modules', name, 'package.json'), 'utf-8'));
82
+ const installedVersion = installedPackageJson.version;
83
+ if (installedVersion !== cliVersion) {
84
+ logger.debug('%s: installed=%s, cli=%s (needs upgrade)', name, installedVersion, cliVersion);
85
+ needsUpgrade = true;
86
+ }
87
+ else {
88
+ logger.debug('%s: already at correct version %s', name, installedVersion);
89
+ }
90
+ }
91
+ catch {
92
+ // Package not installed or can't read version - needs upgrade
93
+ logger.debug('%s: not installed or unreadable, needs upgrade', name);
94
+ needsUpgrade = true;
95
+ }
96
+ }
97
+ if (!needsUpgrade) {
98
+ logger.debug('All @agentuity/* packages are already at CLI version');
99
+ for (const pkg of packagesToUpgrade) {
100
+ result.skipped.push(pkg.name);
101
+ }
102
+ return result;
103
+ }
104
+ // Upgrade packages
105
+ logger.debug('Upgrading %d @agentuity/* package(s) to %s', packagesToUpgrade.length, cliVersion);
106
+ for (const { name } of packagesToUpgrade) {
107
+ try {
108
+ logger.debug('Installing %s@%s', name, cliVersion);
109
+ const installResult = await $ `bun add ${name}@${cliVersion}`
110
+ .cwd(projectDir)
111
+ .quiet()
112
+ .nothrow();
113
+ if (installResult.exitCode !== 0) {
114
+ logger.error('Failed to install %s@%s: %s', name, cliVersion, installResult.stderr.toString());
115
+ result.failed.push(name);
116
+ }
117
+ else {
118
+ logger.debug('Successfully installed %s@%s', name, cliVersion);
119
+ result.upgraded.push(name);
120
+ }
121
+ }
122
+ catch (_error) {
123
+ logger.error('Error installing %s: %s', name, _error);
124
+ result.failed.push(name);
125
+ }
126
+ }
127
+ // Restore original version specifiers in package.json
128
+ // (bun add replaces them with specific versions)
129
+ if (result.upgraded.length > 0) {
130
+ try {
131
+ const updatedPackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
132
+ let modified = false;
133
+ for (const { name, specifier } of packagesToUpgrade) {
134
+ // Only restore if we successfully upgraded
135
+ if (!result.upgraded.includes(name)) {
136
+ continue;
137
+ }
138
+ // Check both dependencies and devDependencies
139
+ if (updatedPackageJson.dependencies?.[name]) {
140
+ updatedPackageJson.dependencies[name] = specifier;
141
+ modified = true;
142
+ logger.debug('Restored %s to "%s" in dependencies', name, specifier);
143
+ }
144
+ if (updatedPackageJson.devDependencies?.[name]) {
145
+ updatedPackageJson.devDependencies[name] = specifier;
146
+ modified = true;
147
+ logger.debug('Restored %s to "%s" in devDependencies', name, specifier);
148
+ }
149
+ }
150
+ if (modified) {
151
+ writeFileSync(packageJsonPath, JSON.stringify(updatedPackageJson, null, 2) + '\n');
152
+ logger.debug('Restored original version specifiers in package.json');
153
+ }
154
+ }
155
+ catch (_error) {
156
+ logger.warn('Failed to restore version specifiers in package.json: %s', _error);
157
+ }
158
+ }
159
+ return result;
160
+ }
161
+ //# sourceMappingURL=dependency-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-checker.js","sourceRoot":"","sources":["../../src/utils/dependency-checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Config, Logger, CommandDefinition } from './types';
2
+ /**
3
+ * Check for updates and optionally prompt to upgrade
4
+ * Should be called early in the CLI initialization, before commands execute
5
+ */
6
+ export declare function checkForUpdates(config: Config | null, logger: Logger, options: {
7
+ json?: boolean;
8
+ quiet?: boolean;
9
+ validate?: boolean;
10
+ dryRun?: boolean;
11
+ skipVersionCheck?: boolean;
12
+ }, commandDef: CommandDefinition | undefined, args: string[]): Promise<void>;
13
+ //# sourceMappingURL=version-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAqKjE;;;GAGG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACR,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B,EACD,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,IAAI,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -0,0 +1,177 @@
1
+ import { isRunningFromExecutable, fetchLatestVersion } from './cmd/upgrade';
2
+ import { getVersion } from './version';
3
+ import * as tui from './tui';
4
+ import { saveConfig } from './config';
5
+ import { $ } from 'bun';
6
+ const ONE_HOUR_MS = 60 * 60 * 1000;
7
+ /**
8
+ * Check if we should skip the version check based on environment and config
9
+ */
10
+ function shouldSkipCheck(config, options, commandDef, args) {
11
+ // Skip if running via bun/bunx (not installed executable)
12
+ if (!isRunningFromExecutable()) {
13
+ return true;
14
+ }
15
+ // Skip if no TTY (CI, redirected output, etc.)
16
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
17
+ return true;
18
+ }
19
+ // Skip if any of these flags are set
20
+ if (options.json || options.quiet || options.validate || options.dryRun) {
21
+ return true;
22
+ }
23
+ // Skip if explicitly disabled via flag
24
+ if (options.skipVersionCheck) {
25
+ return true;
26
+ }
27
+ // Skip if explicitly disabled via environment variable
28
+ if (process.env.AGENTUITY_SKIP_VERSION_CHECK === '1') {
29
+ return true;
30
+ }
31
+ // Skip if explicitly disabled via config
32
+ if (config?.overrides?.skip_version_check) {
33
+ return true;
34
+ }
35
+ // Skip if development version (0.0.x or 'dev')
36
+ const currentVersion = getVersion();
37
+ if (currentVersion.startsWith('0.0.') || currentVersion === 'dev') {
38
+ return true;
39
+ }
40
+ // Skip if command explicitly opts out of upgrade check
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ if (commandDef && commandDef.skipUpgradeCheck === true) {
43
+ return true;
44
+ }
45
+ // Skip for help commands
46
+ const helpFlags = ['--help', '-h', 'help'];
47
+ if (args.some((arg) => helpFlags.includes(arg))) {
48
+ return true;
49
+ }
50
+ return false;
51
+ }
52
+ /**
53
+ * Check if enough time has passed since last check (at least 1 hour)
54
+ */
55
+ function shouldCheckNow(config) {
56
+ const lastCheck = config?.preferences?.last_update_check;
57
+ if (!lastCheck) {
58
+ return true;
59
+ }
60
+ const now = Date.now();
61
+ const elapsed = now - lastCheck;
62
+ return elapsed >= ONE_HOUR_MS;
63
+ }
64
+ /**
65
+ * Prompt user to upgrade to a new version
66
+ * Returns true if user wants to upgrade, false otherwise
67
+ */
68
+ async function promptUpgrade(currentVersion, latestVersion) {
69
+ tui.newline();
70
+ tui.info(`${tui.bold('A new version of the CLI is available!')}`);
71
+ tui.info(`Current version: ${tui.muted(currentVersion)}`);
72
+ tui.info(`Latest version: ${tui.bold(latestVersion)}`);
73
+ tui.newline();
74
+ return await tui.confirm('Would you like to upgrade now?', true);
75
+ }
76
+ /**
77
+ * Update the last check timestamp in config
78
+ */
79
+ async function updateCheckTimestamp(config, logger) {
80
+ if (!config) {
81
+ return;
82
+ }
83
+ const updatedConfig = {
84
+ ...config,
85
+ preferences: {
86
+ ...config.preferences,
87
+ last_update_check: Date.now(),
88
+ },
89
+ };
90
+ try {
91
+ await saveConfig(updatedConfig);
92
+ }
93
+ catch (error) {
94
+ // Non-fatal - log but continue
95
+ logger.debug('Failed to save config after version check: %s', error);
96
+ }
97
+ }
98
+ /**
99
+ * Perform the upgrade and re-run the command
100
+ */
101
+ async function performUpgrade(logger) {
102
+ try {
103
+ // Run upgrade command (it will validate, download, install, etc.)
104
+ // Use process.execPath to get the actual binary path (not Bun.main which is virtual)
105
+ logger.info('Starting upgrade...');
106
+ await $ `${process.execPath} upgrade`.quiet();
107
+ // If we got here, the upgrade succeeded
108
+ // Re-run the original command with the new binary
109
+ const args = process.argv.slice(2);
110
+ const newBinaryPath = process.execPath;
111
+ logger.info('Upgrade successful! Restarting with new version...');
112
+ tui.info('');
113
+ // Spawn new process with same arguments
114
+ const proc = Bun.spawn([newBinaryPath, ...args], {
115
+ stdin: 'inherit',
116
+ stdout: 'inherit',
117
+ stderr: 'inherit',
118
+ });
119
+ // Wait for the new process to complete
120
+ await proc.exited;
121
+ // Exit with the same exit code as the new process
122
+ process.exit(proc.exitCode ?? 0);
123
+ }
124
+ catch (error) {
125
+ // Upgrade failed - log and continue with original command
126
+ logger.error('Upgrade failed: %s', error instanceof Error ? error.message : 'Unknown error');
127
+ tui.warning('Continuing with current version...');
128
+ tui.info('');
129
+ }
130
+ }
131
+ /**
132
+ * Check for updates and optionally prompt to upgrade
133
+ * Should be called early in the CLI initialization, before commands execute
134
+ */
135
+ export async function checkForUpdates(config, logger, options, commandDef, args) {
136
+ // Determine if we should skip the check
137
+ if (shouldSkipCheck(config, options, commandDef, args)) {
138
+ logger.trace('Skipping version check (disabled or not applicable)');
139
+ return;
140
+ }
141
+ // Check if enough time has passed
142
+ if (!shouldCheckNow(config)) {
143
+ logger.trace('Skipping version check (checked recently)');
144
+ return;
145
+ }
146
+ // Perform the actual version check
147
+ logger.trace('Checking for updates...');
148
+ try {
149
+ const currentVersion = getVersion();
150
+ const latestVersion = await fetchLatestVersion();
151
+ // Update the timestamp since we successfully checked
152
+ await updateCheckTimestamp(config, logger);
153
+ // Compare versions
154
+ const normalizedCurrent = currentVersion.replace(/^v/, '');
155
+ const normalizedLatest = latestVersion.replace(/^v/, '');
156
+ if (normalizedCurrent === normalizedLatest) {
157
+ logger.trace('Already on latest version: %s', currentVersion);
158
+ return;
159
+ }
160
+ // New version available - prompt user
161
+ const shouldUpgrade = await promptUpgrade(currentVersion, latestVersion);
162
+ if (!shouldUpgrade) {
163
+ // User declined - just continue
164
+ tui.info('You can upgrade later by running: agentuity upgrade');
165
+ tui.newline();
166
+ return;
167
+ }
168
+ // User wants to upgrade - perform it
169
+ await performUpgrade(logger);
170
+ }
171
+ catch (error) {
172
+ // Non-fatal - if we can't fetch the latest version (network error, timeout, etc.),
173
+ // just log at debug level and continue without interrupting the user's command
174
+ logger.debug('Version check failed: %s', error instanceof Error ? error.message : 'Unknown error');
175
+ }
176
+ }
177
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/cli",
3
- "version": "0.0.86",
3
+ "version": "0.0.88",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Agentuity employees and contributors",
6
6
  "type": "module",
@@ -35,8 +35,8 @@
35
35
  "prepublishOnly": "bun run clean && bun run build"
36
36
  },
37
37
  "dependencies": {
38
- "@agentuity/core": "0.0.86",
39
- "@agentuity/server": "0.0.86",
38
+ "@agentuity/core": "0.0.88",
39
+ "@agentuity/server": "0.0.88",
40
40
  "@datasert/cronjs-parser": "^1.4.0",
41
41
  "@terascope/fetch-github-release": "^2.2.1",
42
42
  "acorn-loose": "^8.5.2",
@@ -57,7 +57,9 @@
57
57
  "@types/adm-zip": "^0.5.7",
58
58
  "@types/bun": "latest",
59
59
  "@types/tar-fs": "^2.0.4",
60
- "bun-types": "latest"
60
+ "bun-plugin-tailwind": "^0.1.2",
61
+ "bun-types": "latest",
62
+ "tailwindcss": "^4.1.18"
61
63
  },
62
64
  "publishConfig": {
63
65
  "access": "public"
package/src/bun-path.ts CHANGED
@@ -21,8 +21,6 @@ export async function ensureBunOnPath(): Promise<void> {
21
21
  // Check if bun exists in $HOME/.bun/bin
22
22
  if (await Bun.file(bunPath).exists()) {
23
23
  // Add to PATH for this process
24
- process.env.PATH = process.env.PATH
25
- ? `${bunBinDir}:${process.env.PATH}`
26
- : bunBinDir;
24
+ process.env.PATH = process.env.PATH ? `${bunBinDir}:${process.env.PATH}` : bunBinDir;
27
25
  }
28
26
  }
package/src/cli.ts CHANGED
@@ -229,7 +229,7 @@ export async function createCLI(version: string): Promise<Command> {
229
229
  program
230
230
  .name('agentuity')
231
231
  .version(version, '-v, --version', 'Display version')
232
- .helpOption('-h, --help=[json]', 'Display help (with optional JSON output)')
232
+ .helpOption('-h, --help [json]', 'Display help (with optional JSON output)')
233
233
  .allowUnknownOption(false)
234
234
  .allowExcessArguments(false)
235
235
  .showHelpAfterError(true);
@@ -553,7 +553,7 @@ async function registerSubcommand(
553
553
  ): Promise<void> {
554
554
  const cmd = parent.command(subcommand.name, { hidden }).description(subcommand.description);
555
555
 
556
- cmd.helpOption('-h, --help=[json]', 'Display help (with optional JSON output)');
556
+ cmd.helpOption('-h, --help [json]', 'Display help (with optional JSON output)');
557
557
 
558
558
  if (subcommand.aliases) {
559
559
  cmd.aliases(subcommand.aliases);
@@ -1210,7 +1210,7 @@ export async function registerCommands(
1210
1210
  .command(cmdDef.name, { hidden: cmdDef.hidden })
1211
1211
  .description(cmdDef.description);
1212
1212
 
1213
- cmd.helpOption('-h, --help=[json]', 'Display help (with optional JSON output)');
1213
+ cmd.helpOption('-h, --help [json]', 'Display help (with optional JSON output)');
1214
1214
 
1215
1215
  if (cmdDef.aliases) {
1216
1216
  cmd.aliases(cmdDef.aliases);
@@ -7,6 +7,7 @@ import { getCommand } from '../../command-prefix';
7
7
  export const command = createCommand({
8
8
  name: 'ai',
9
9
  description: 'AI coding agent related commands',
10
+ skipUpgradeCheck: true,
10
11
  tags: ['fast'],
11
12
  examples: [
12
13
  {
@@ -465,6 +465,13 @@ export async function parseEvalMetadata(
465
465
  | 'error';
466
466
  const logger = createLogger(logLevel);
467
467
  logger.trace(`Parsing evals from ${filename}`);
468
+
469
+ // Quick string search optimization - skip AST parsing if no createEval call
470
+ if (!contents.includes('createEval')) {
471
+ logger.trace(`Skipping ${filename}: no createEval found`);
472
+ return [contents, []];
473
+ }
474
+
468
475
  const ast = acornLoose.parse(contents, {
469
476
  locations: true,
470
477
  ecmaVersion: 'latest',