@radkode/neo 1.1.2 → 1.2.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.d.ts.map +1 -1
- package/dist/cli.js +46 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent/context/index.d.ts.map +1 -1
- package/dist/commands/agent/context/index.js +72 -21
- package/dist/commands/agent/context/index.js.map +1 -1
- package/dist/commands/agent/index.d.ts.map +1 -1
- package/dist/commands/agent/index.js +7 -1
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/alias/setup/index.d.ts.map +1 -1
- package/dist/commands/alias/setup/index.js +55 -41
- package/dist/commands/alias/setup/index.js.map +1 -1
- package/dist/commands/gh/pr/create/index.d.ts.map +1 -1
- package/dist/commands/gh/pr/create/index.js +84 -44
- package/dist/commands/gh/pr/create/index.js.map +1 -1
- package/dist/commands/git/branch/index.d.ts.map +1 -1
- package/dist/commands/git/branch/index.js +55 -31
- package/dist/commands/git/branch/index.js.map +1 -1
- package/dist/commands/git/commit/index.d.ts.map +1 -1
- package/dist/commands/git/commit/index.js +65 -33
- package/dist/commands/git/commit/index.js.map +1 -1
- package/dist/commands/git/pull/index.d.ts +7 -1
- package/dist/commands/git/pull/index.d.ts.map +1 -1
- package/dist/commands/git/pull/index.js +60 -58
- package/dist/commands/git/pull/index.js.map +1 -1
- package/dist/commands/git/push/index.d.ts +2 -0
- package/dist/commands/git/push/index.d.ts.map +1 -1
- package/dist/commands/git/push/index.js +61 -38
- package/dist/commands/git/push/index.js.map +1 -1
- package/dist/commands/git/stash/index.d.ts.map +1 -1
- package/dist/commands/git/stash/index.js +42 -10
- package/dist/commands/git/stash/index.js.map +1 -1
- package/dist/commands/git/worktree/add.d.ts.map +1 -1
- package/dist/commands/git/worktree/add.js +4 -3
- package/dist/commands/git/worktree/add.js.map +1 -1
- package/dist/commands/git/worktree/remove.d.ts.map +1 -1
- package/dist/commands/git/worktree/remove.js +17 -7
- package/dist/commands/git/worktree/remove.js.map +1 -1
- package/dist/commands/git/worktree/switch.d.ts.map +1 -1
- package/dist/commands/git/worktree/switch.js +23 -8
- package/dist/commands/git/worktree/switch.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +50 -16
- package/dist/commands/init/index.js.map +1 -1
- package/dist/commands/schema/index.d.ts +44 -0
- package/dist/commands/schema/index.d.ts.map +1 -0
- package/dist/commands/schema/index.js +120 -0
- package/dist/commands/schema/index.js.map +1 -0
- package/dist/commands/update/index.d.ts.map +1 -1
- package/dist/commands/update/index.js +107 -81
- package/dist/commands/update/index.js.map +1 -1
- package/dist/types/schemas.d.ts +2 -2
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +52 -11
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/output.d.ts +15 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +50 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/prompt.d.ts +17 -2
- package/dist/utils/prompt.d.ts.map +1 -1
- package/dist/utils/prompt.js +66 -11
- package/dist/utils/prompt.js.map +1 -1
- package/dist/utils/run-action.d.ts +3 -0
- package/dist/utils/run-action.d.ts.map +1 -0
- package/dist/utils/run-action.js +19 -0
- package/dist/utils/run-action.js.map +1 -0
- package/dist/utils/runtime-context.d.ts +27 -0
- package/dist/utils/runtime-context.d.ts.map +1 -0
- package/dist/utils/runtime-context.js +74 -0
- package/dist/utils/runtime-context.js.map +1 -0
- package/dist/utils/ui-types.d.ts +2 -0
- package/dist/utils/ui-types.d.ts.map +1 -1
- package/dist/utils/ui.d.ts +2 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +96 -22
- package/dist/utils/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWvD;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { createUpdateCommand } from './update/index.js';
|
|
|
7
7
|
import { createAliasCommand } from './alias/index.js';
|
|
8
8
|
import { createAgentCommand } from './agent/index.js';
|
|
9
9
|
import { createCompletionsCommand } from './completions/index.js';
|
|
10
|
+
import { createSchemaCommand } from './schema/index.js';
|
|
10
11
|
export function registerCommands(program) {
|
|
11
12
|
program.addCommand(createInitCommand());
|
|
12
13
|
program.addCommand(createConfigCommand());
|
|
@@ -17,6 +18,7 @@ export function registerCommands(program) {
|
|
|
17
18
|
program.addCommand(createUpdateCommand());
|
|
18
19
|
program.addCommand(createAgentCommand());
|
|
19
20
|
program.addCommand(createCompletionsCommand());
|
|
21
|
+
program.addCommand(createSchemaCommand());
|
|
20
22
|
}
|
|
21
23
|
export { createInitCommand } from './init/index.js';
|
|
22
24
|
export { createConfigCommand } from './config/index.js';
|
|
@@ -27,4 +29,5 @@ export { createAliasCommand } from './alias/index.js';
|
|
|
27
29
|
export { createUpdateCommand } from './update/index.js';
|
|
28
30
|
export { createAgentCommand } from './agent/index.js';
|
|
29
31
|
export { createCompletionsCommand } from './completions/index.js';
|
|
32
|
+
export { createSchemaCommand } from './schema/index.js';
|
|
30
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAiBtD,wBAAgB,iBAAiB,IAAI,OAAO,CA2N3C"}
|
|
@@ -8,6 +8,10 @@ import { configManager } from '../../utils/config.js';
|
|
|
8
8
|
import { GlobalInstaller } from '../../utils/installer.js';
|
|
9
9
|
import { ZshIntegration } from '../../utils/shell.js';
|
|
10
10
|
import { CompletionGenerator } from '../../utils/completions.js';
|
|
11
|
+
import { getRuntimeContext } from '../../utils/runtime-context.js';
|
|
12
|
+
import { NonInteractiveError } from '../../utils/prompt.js';
|
|
13
|
+
import { emitJson } from '../../utils/output.js';
|
|
14
|
+
import { runAction } from '../../utils/run-action.js';
|
|
11
15
|
import { join } from 'path';
|
|
12
16
|
export function createInitCommand() {
|
|
13
17
|
const command = new Command('init');
|
|
@@ -15,7 +19,7 @@ export function createInitCommand() {
|
|
|
15
19
|
.description('Install and configure Neo CLI globally')
|
|
16
20
|
.option('--force', 'force reconfiguration if already initialized')
|
|
17
21
|
.option('--skip-install', 'skip global installation (configuration only)')
|
|
18
|
-
.action(async (options) => {
|
|
22
|
+
.action(runAction(async (options) => {
|
|
19
23
|
let validatedOptions;
|
|
20
24
|
try {
|
|
21
25
|
validatedOptions = validate(initOptionsSchema, options, 'init options');
|
|
@@ -38,18 +42,29 @@ export function createInitCommand() {
|
|
|
38
42
|
const config = await configManager.read();
|
|
39
43
|
ui.info(`Neo CLI is already initialized (v${config.installation.version})`);
|
|
40
44
|
ui.info(`Config location: ${configManager.getConfigFile()}`);
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
const rtCtx = getRuntimeContext();
|
|
46
|
+
let action;
|
|
47
|
+
if (rtCtx.yes) {
|
|
48
|
+
action = 'update';
|
|
49
|
+
}
|
|
50
|
+
else if (rtCtx.nonInteractive) {
|
|
51
|
+
throw new NonInteractiveError('Neo is already initialized; pass --force to reset or run without --non-interactive', '--force');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const answer = await inquirer.prompt([
|
|
55
|
+
{
|
|
56
|
+
choices: [
|
|
57
|
+
{ name: 'Update configuration', short: 'Update configuration', value: 'update' },
|
|
58
|
+
{ name: 'Reset everything', short: 'Reset everything', value: 'reset' },
|
|
59
|
+
{ name: 'Cancel', short: 'Cancel', value: 'cancel' },
|
|
60
|
+
],
|
|
61
|
+
message: 'What would you like to do?',
|
|
62
|
+
name: 'action',
|
|
63
|
+
type: 'list',
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
action = answer.action;
|
|
67
|
+
}
|
|
53
68
|
if (action === 'cancel') {
|
|
54
69
|
ui.info('Initialization cancelled');
|
|
55
70
|
return;
|
|
@@ -140,7 +155,7 @@ export function createInitCommand() {
|
|
|
140
155
|
await shell.applyConfig(newConfig);
|
|
141
156
|
shellSpinner.succeed('Shell integration configured');
|
|
142
157
|
ui.success('Neo CLI has been successfully initialized!');
|
|
143
|
-
|
|
158
|
+
ui.newline();
|
|
144
159
|
ui.info('What was configured:');
|
|
145
160
|
ui.list([
|
|
146
161
|
'Global installation: neo command available',
|
|
@@ -148,20 +163,39 @@ export function createInitCommand() {
|
|
|
148
163
|
'Shell alias: n → neo',
|
|
149
164
|
'Shell completions: enabled',
|
|
150
165
|
]);
|
|
151
|
-
|
|
166
|
+
ui.newline();
|
|
152
167
|
ui.info('Next steps:');
|
|
153
168
|
ui.list([
|
|
154
169
|
'Restart your terminal or run: source ~/.zshrc',
|
|
155
170
|
'Try: neo --help or n --help',
|
|
156
171
|
'Configure settings: neo config',
|
|
157
172
|
]);
|
|
173
|
+
emitJson({
|
|
174
|
+
ok: true,
|
|
175
|
+
command: 'init',
|
|
176
|
+
version: installStatus.packageVersion ?? null,
|
|
177
|
+
configFile: configManager.getConfigFile(),
|
|
178
|
+
});
|
|
158
179
|
}
|
|
159
180
|
catch (error) {
|
|
181
|
+
if (error instanceof NonInteractiveError)
|
|
182
|
+
throw error;
|
|
160
183
|
spinner.fail('Initialization failed');
|
|
161
184
|
ui.error(`Error: ${error}`);
|
|
162
185
|
throw error;
|
|
163
186
|
}
|
|
164
|
-
});
|
|
187
|
+
}));
|
|
188
|
+
command.addHelpText('after', `
|
|
189
|
+
Examples:
|
|
190
|
+
Fresh install:
|
|
191
|
+
$ neo init
|
|
192
|
+
|
|
193
|
+
Force reconfigure:
|
|
194
|
+
$ neo init --force
|
|
195
|
+
|
|
196
|
+
Configuration only (no global install):
|
|
197
|
+
$ neo init --skip-install
|
|
198
|
+
`);
|
|
165
199
|
return command;
|
|
166
200
|
}
|
|
167
201
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAkB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO;SACJ,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,8CAA8C,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,+CAA+C,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,OAAgB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Command } from '@commander-js/extra-typings';
|
|
2
|
+
interface SchemaOption {
|
|
3
|
+
flags: string;
|
|
4
|
+
long?: string;
|
|
5
|
+
short?: string;
|
|
6
|
+
description: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
defaultValue?: unknown;
|
|
9
|
+
takesArg: boolean;
|
|
10
|
+
choices?: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
interface SchemaArgument {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
required: boolean;
|
|
16
|
+
variadic: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface SchemaCommand {
|
|
19
|
+
name: string;
|
|
20
|
+
path: string;
|
|
21
|
+
description: string;
|
|
22
|
+
aliases: string[];
|
|
23
|
+
arguments: SchemaArgument[];
|
|
24
|
+
options: SchemaOption[];
|
|
25
|
+
subcommands: SchemaCommand[];
|
|
26
|
+
}
|
|
27
|
+
interface SchemaRoot {
|
|
28
|
+
$schema: 'opencli-lite/v1';
|
|
29
|
+
name: string;
|
|
30
|
+
version: string;
|
|
31
|
+
description: string;
|
|
32
|
+
globalOptions: SchemaOption[];
|
|
33
|
+
commands: SchemaCommand[];
|
|
34
|
+
agentNotes: {
|
|
35
|
+
nonInteractive: string;
|
|
36
|
+
json: string;
|
|
37
|
+
exitCodes: Record<string, string>;
|
|
38
|
+
envVars: Record<string, string>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare function buildFullSchema(root: Command): Promise<SchemaRoot>;
|
|
42
|
+
export declare function createSchemaCommand(): Command;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/schema/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAU,MAAM,6BAA6B,CAAC;AAK9D,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH;AAkED,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCxE;AAUD,wBAAgB,mBAAmB,IAAI,OAAO,CAoC7C"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Command } from '@commander-js/extra-typings';
|
|
2
|
+
import packageJson from '../../../package.json' with { type: 'json' };
|
|
3
|
+
import { emitJson } from '../../utils/output.js';
|
|
4
|
+
import { ui } from '../../utils/ui.js';
|
|
5
|
+
function describeOption(opt) {
|
|
6
|
+
const o = opt;
|
|
7
|
+
const takesArg = /[<[]/.test(o.flags);
|
|
8
|
+
const schema = {
|
|
9
|
+
flags: o.flags,
|
|
10
|
+
description: o.description,
|
|
11
|
+
required: Boolean(o.required),
|
|
12
|
+
takesArg,
|
|
13
|
+
};
|
|
14
|
+
if (o.long)
|
|
15
|
+
schema.long = o.long;
|
|
16
|
+
if (o.short)
|
|
17
|
+
schema.short = o.short;
|
|
18
|
+
if (o.defaultValue !== undefined)
|
|
19
|
+
schema.defaultValue = o.defaultValue;
|
|
20
|
+
if (o.argChoices && o.argChoices.length > 0)
|
|
21
|
+
schema.choices = o.argChoices;
|
|
22
|
+
return schema;
|
|
23
|
+
}
|
|
24
|
+
function describeArguments(cmd) {
|
|
25
|
+
const args = cmd
|
|
26
|
+
.registeredArguments;
|
|
27
|
+
if (!args || args.length === 0)
|
|
28
|
+
return [];
|
|
29
|
+
return args.map((a) => ({
|
|
30
|
+
name: a.name(),
|
|
31
|
+
description: a.description,
|
|
32
|
+
required: a.required,
|
|
33
|
+
variadic: a.variadic,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
function buildCommandSchema(cmd, parentPath = []) {
|
|
37
|
+
const name = cmd.name();
|
|
38
|
+
const path = [...parentPath, name].join(' ');
|
|
39
|
+
const options = (cmd.options ?? []).map(describeOption);
|
|
40
|
+
const schema = {
|
|
41
|
+
name,
|
|
42
|
+
path,
|
|
43
|
+
description: cmd.description() || '',
|
|
44
|
+
aliases: cmd.aliases(),
|
|
45
|
+
arguments: describeArguments(cmd),
|
|
46
|
+
options,
|
|
47
|
+
subcommands: cmd.commands
|
|
48
|
+
.filter((c) => c.name() !== 'help')
|
|
49
|
+
.map((c) => buildCommandSchema(c, [...parentPath, name])),
|
|
50
|
+
};
|
|
51
|
+
return schema;
|
|
52
|
+
}
|
|
53
|
+
export async function buildFullSchema(root) {
|
|
54
|
+
const globalOptions = (root.options ?? []).map(describeOption);
|
|
55
|
+
const commands = root.commands
|
|
56
|
+
.filter((c) => c.name() !== 'help' && c.name() !== 'schema')
|
|
57
|
+
.map((c) => buildCommandSchema(c));
|
|
58
|
+
return {
|
|
59
|
+
$schema: 'opencli-lite/v1',
|
|
60
|
+
name: root.name(),
|
|
61
|
+
version: packageJson.version,
|
|
62
|
+
description: packageJson.description ?? '',
|
|
63
|
+
globalOptions,
|
|
64
|
+
commands,
|
|
65
|
+
agentNotes: {
|
|
66
|
+
nonInteractive: 'Pass --json (implies --non-interactive and --quiet) or --yes to skip interactive prompts. Required fields that cannot be inferred will exit with code 2.',
|
|
67
|
+
json: 'stdout is reserved for final JSON payloads; logs/spinners/banners go to stderr. Under --json, errors emit as {"error": {...}} on stdout.',
|
|
68
|
+
exitCodes: {
|
|
69
|
+
'0': 'Success',
|
|
70
|
+
'1': 'Command failure',
|
|
71
|
+
'2': 'Non-interactive prompt required — missing flag',
|
|
72
|
+
},
|
|
73
|
+
envVars: {
|
|
74
|
+
NEO_JSON: 'Equivalent to --json',
|
|
75
|
+
NEO_YES: 'Equivalent to --yes',
|
|
76
|
+
NEO_NON_INTERACTIVE: 'Equivalent to --non-interactive',
|
|
77
|
+
NEO_QUIET: 'Equivalent to --quiet',
|
|
78
|
+
NO_COLOR: 'Standard — disables colors',
|
|
79
|
+
CI: 'When set, implies --non-interactive and suppresses banner/update-check',
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function getRootProgram(cmd) {
|
|
85
|
+
let current = cmd;
|
|
86
|
+
while (current.parent) {
|
|
87
|
+
current = current.parent;
|
|
88
|
+
}
|
|
89
|
+
return current;
|
|
90
|
+
}
|
|
91
|
+
export function createSchemaCommand() {
|
|
92
|
+
const command = new Command('schema');
|
|
93
|
+
command
|
|
94
|
+
.description('Emit a machine-readable JSON description of every command and option')
|
|
95
|
+
.option('--pretty', 'pretty-print the JSON')
|
|
96
|
+
.addHelpText('after', `
|
|
97
|
+
Agents: use this to discover commands and flags dynamically.
|
|
98
|
+
|
|
99
|
+
Example:
|
|
100
|
+
$ neo schema | jq '.commands[] | .path'
|
|
101
|
+
$ neo schema --pretty > neo-schema.json
|
|
102
|
+
`)
|
|
103
|
+
.action(async (opts) => {
|
|
104
|
+
const root = getRootProgram(command);
|
|
105
|
+
const schema = await buildFullSchema(root);
|
|
106
|
+
if (opts.pretty) {
|
|
107
|
+
process.stdout.write(`${JSON.stringify(schema, null, 2)}\n`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
emitJson(schema, {
|
|
111
|
+
text: () => process.stdout.write(`${JSON.stringify(schema)}\n`),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (process.stdout.isTTY) {
|
|
115
|
+
ui.muted('Tip: pipe through `jq` to filter. Use --pretty for indented output.');
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
return command;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/schema/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAU,MAAM,6BAA6B,CAAC;AAC9D,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AA6CnC,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,CAAC,GAAG,GAST,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7B,QAAQ;KACT,CAAC;IACF,IAAI,CAAC,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,CAAC,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IACvE,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AASD,SAAS,iBAAiB,CAAC,GAAY;IACrC,MAAM,IAAI,GAAI,GAAiE;SAC5E,mBAAmB,CAAC;IACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY,EAAE,aAAuB,EAAE;IACjE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExD,MAAM,MAAM,GAAkB;QAC5B,IAAI;QACJ,IAAI;QACJ,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QACpC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QACtB,SAAS,EAAE,iBAAiB,CAAC,GAAG,CAAC;QACjC,OAAO;QACP,WAAW,EAAG,GAAG,CAAC,QAAsB;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;KAC5D,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAsB;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC;SAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;QAC1C,aAAa;QACb,QAAQ;QACR,UAAU,EAAE;YACV,cAAc,EACZ,0JAA0J;YAC5J,IAAI,EAAE,0IAA0I;YAChJ,SAAS,EAAE;gBACT,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE,iBAAiB;gBACtB,GAAG,EAAE,gDAAgD;aACtD;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,sBAAsB;gBAChC,OAAO,EAAE,qBAAqB;gBAC9B,mBAAmB,EAAE,iCAAiC;gBACtD,SAAS,EAAE,uBAAuB;gBAClC,QAAQ,EAAE,4BAA4B;gBACtC,EAAE,EAAE,wEAAwE;aAC7E;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,GAAG,OAAO,CAAC,MAAiB,CAAC;IACtC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO;SACJ,WAAW,CAAC,sEAAsE,CAAC;SACnF,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;SAC3C,WAAW,CACV,OAAO,EACP;;;;;;CAML,CACI;SACA,MAAM,CAAC,KAAK,EAAE,IAA0B,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAEhB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,MAA4C,EAAE;gBACrD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,EAAE,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0FtD,wBAAgB,mBAAmB,IAAI,OAAO,CAyK7C"}
|
|
@@ -7,6 +7,10 @@ import { ui } from '../../utils/ui.js';
|
|
|
7
7
|
import { validate, isValidationError } from '../../utils/validation.js';
|
|
8
8
|
import { updateOptionsSchema } from '../../types/schemas.js';
|
|
9
9
|
import { compareVersions, fetchLatestCliVersion } from '../../utils/update-check.js';
|
|
10
|
+
import { getRuntimeContext } from '../../utils/runtime-context.js';
|
|
11
|
+
import { emitJson } from '../../utils/output.js';
|
|
12
|
+
import { NonInteractiveError } from '../../utils/prompt.js';
|
|
13
|
+
import { runAction } from '../../utils/run-action.js';
|
|
10
14
|
function getCurrentVersion() {
|
|
11
15
|
try {
|
|
12
16
|
return packageJson.version;
|
|
@@ -55,7 +59,7 @@ async function executeUpdate(packageManager, force) {
|
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
61
|
await execa(packageManager, commands[packageManager], {
|
|
58
|
-
stdio: '
|
|
62
|
+
stdio: ['ignore', process.stderr, process.stderr],
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
65
|
export function createUpdateCommand() {
|
|
@@ -64,7 +68,7 @@ export function createUpdateCommand() {
|
|
|
64
68
|
.description('Update Neo CLI to the latest version')
|
|
65
69
|
.option('--check-only', 'only check for updates without installing')
|
|
66
70
|
.option('--force', 'force update even if already on latest version')
|
|
67
|
-
.action(async (options) => {
|
|
71
|
+
.action(runAction(async (options) => {
|
|
68
72
|
let validatedOptions;
|
|
69
73
|
try {
|
|
70
74
|
validatedOptions = validate(updateOptionsSchema, options, 'update options');
|
|
@@ -75,65 +79,84 @@ export function createUpdateCommand() {
|
|
|
75
79
|
}
|
|
76
80
|
throw error;
|
|
77
81
|
}
|
|
82
|
+
const currentVersion = getCurrentVersion();
|
|
83
|
+
logger.debug(`Current version: ${currentVersion}`);
|
|
84
|
+
const spinner = ui.spinner('Checking for updates');
|
|
85
|
+
spinner.start();
|
|
86
|
+
let latestVersion;
|
|
78
87
|
try {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
spinner.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const comparison = compareVersions(latestVersion, currentVersion);
|
|
94
|
-
if (comparison === 0) {
|
|
95
|
-
spinner.succeed('You are already on the latest version!');
|
|
96
|
-
ui.info(`Current version: ${currentVersion}`);
|
|
97
|
-
if (!validatedOptions.force) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
ui.warn('--force flag detected, proceeding with reinstall');
|
|
88
|
+
latestVersion = await getLatestVersion();
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
spinner.fail('Failed to check for updates');
|
|
92
|
+
ui.error('Could not connect to npm registry. Please check your internet connection');
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
logger.debug(`Latest version: ${latestVersion}`);
|
|
96
|
+
const comparison = compareVersions(latestVersion, currentVersion);
|
|
97
|
+
if (comparison === 0) {
|
|
98
|
+
spinner.succeed('You are already on the latest version!');
|
|
99
|
+
ui.info(`Current version: ${currentVersion}`);
|
|
100
|
+
if (!validatedOptions.force) {
|
|
101
|
+
return;
|
|
101
102
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
default: false,
|
|
111
|
-
},
|
|
112
|
-
]);
|
|
113
|
-
if (!shouldDowngrade) {
|
|
114
|
-
ui.muted('Update cancelled');
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
103
|
+
ui.warn('--force flag detected, proceeding with reinstall');
|
|
104
|
+
}
|
|
105
|
+
else if (comparison < 0) {
|
|
106
|
+
spinner.warn(`You are on a newer version (${currentVersion}) than the latest stable (${latestVersion})`);
|
|
107
|
+
if (!validatedOptions.force && !validatedOptions.checkOnly) {
|
|
108
|
+
const rtCtx = getRuntimeContext();
|
|
109
|
+
if (rtCtx.nonInteractive || rtCtx.yes) {
|
|
110
|
+
throw new NonInteractiveError(`Downgrade from ${currentVersion} to ${latestVersion} requires explicit --force`, '--force');
|
|
117
111
|
}
|
|
118
|
-
|
|
112
|
+
const { shouldDowngrade } = await inquirer.prompt([
|
|
113
|
+
{
|
|
114
|
+
type: 'confirm',
|
|
115
|
+
name: 'shouldDowngrade',
|
|
116
|
+
message: 'Do you want to downgrade to the latest stable version?',
|
|
117
|
+
default: false,
|
|
118
|
+
},
|
|
119
|
+
]);
|
|
120
|
+
if (!shouldDowngrade) {
|
|
121
|
+
ui.muted('Update cancelled');
|
|
119
122
|
return;
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
|
-
else {
|
|
123
|
-
spinner.succeed('Update available!');
|
|
124
|
-
ui.keyValue([
|
|
125
|
-
['Current version', currentVersion],
|
|
126
|
-
['Latest version', latestVersion],
|
|
127
|
-
]);
|
|
128
|
-
}
|
|
129
|
-
if (validatedOptions.checkOnly) {
|
|
130
|
-
if (comparison > 0) {
|
|
131
|
-
ui.muted('Run neo update to install the latest version');
|
|
132
|
-
}
|
|
125
|
+
else if (!validatedOptions.force) {
|
|
133
126
|
return;
|
|
134
127
|
}
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
spinner.succeed('Update available!');
|
|
131
|
+
ui.keyValue([
|
|
132
|
+
['Current version', currentVersion],
|
|
133
|
+
['Latest version', latestVersion],
|
|
134
|
+
]);
|
|
135
|
+
}
|
|
136
|
+
if (validatedOptions.checkOnly) {
|
|
137
|
+
emitJson({
|
|
138
|
+
ok: true,
|
|
139
|
+
command: 'update',
|
|
140
|
+
currentVersion,
|
|
141
|
+
latestVersion,
|
|
142
|
+
updateAvailable: comparison > 0,
|
|
143
|
+
});
|
|
144
|
+
if (comparison > 0) {
|
|
145
|
+
ui.muted('Run neo update to install the latest version');
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!validatedOptions.force && comparison !== 0) {
|
|
150
|
+
const rtCtx = getRuntimeContext();
|
|
151
|
+
let confirm;
|
|
152
|
+
if (rtCtx.yes) {
|
|
153
|
+
confirm = true;
|
|
154
|
+
}
|
|
155
|
+
else if (rtCtx.nonInteractive) {
|
|
156
|
+
throw new NonInteractiveError(`Update to ${latestVersion} requires confirmation`, '--yes');
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
const answer = await inquirer.prompt([
|
|
137
160
|
{
|
|
138
161
|
type: 'confirm',
|
|
139
162
|
name: 'confirm',
|
|
@@ -141,41 +164,44 @@ export function createUpdateCommand() {
|
|
|
141
164
|
default: true,
|
|
142
165
|
},
|
|
143
166
|
]);
|
|
144
|
-
|
|
145
|
-
ui.muted('Update cancelled');
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
const updateSpinner = ui.spinner('Detecting package manager');
|
|
150
|
-
updateSpinner.start();
|
|
151
|
-
const packageManager = await detectPackageManager();
|
|
152
|
-
updateSpinner.text = `Updating via ${packageManager}...`;
|
|
153
|
-
logger.debug(`Using package manager: ${packageManager}`);
|
|
154
|
-
try {
|
|
155
|
-
await executeUpdate(packageManager, validatedOptions.force || false);
|
|
156
|
-
updateSpinner.succeed(`Successfully updated to version ${latestVersion}!`);
|
|
157
|
-
ui.muted('Run neo --version to verify the installation');
|
|
167
|
+
confirm = Boolean(answer.confirm);
|
|
158
168
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (errorMessage.includes('EACCES') || errorMessage.includes('permission denied')) {
|
|
163
|
-
ui.error('Permission denied. Try running with sudo:');
|
|
164
|
-
ui.muted(` sudo ${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} -g @radkode/neo@latest`);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
ui.error(`Update failed: ${errorMessage}`);
|
|
168
|
-
ui.muted(`Try updating manually: ${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} -g @radkode/neo@latest`);
|
|
169
|
-
}
|
|
170
|
-
process.exit(1);
|
|
169
|
+
if (!confirm) {
|
|
170
|
+
ui.muted('Update cancelled');
|
|
171
|
+
return;
|
|
171
172
|
}
|
|
172
173
|
}
|
|
174
|
+
const updateSpinner = ui.spinner('Detecting package manager');
|
|
175
|
+
updateSpinner.start();
|
|
176
|
+
const packageManager = await detectPackageManager();
|
|
177
|
+
updateSpinner.text = `Updating via ${packageManager}...`;
|
|
178
|
+
logger.debug(`Using package manager: ${packageManager}`);
|
|
179
|
+
try {
|
|
180
|
+
await executeUpdate(packageManager, validatedOptions.force || false);
|
|
181
|
+
updateSpinner.succeed(`Successfully updated to version ${latestVersion}!`);
|
|
182
|
+
emitJson({
|
|
183
|
+
ok: true,
|
|
184
|
+
command: 'update',
|
|
185
|
+
from: currentVersion,
|
|
186
|
+
to: latestVersion,
|
|
187
|
+
packageManager,
|
|
188
|
+
});
|
|
189
|
+
ui.muted('Run neo --version to verify the installation');
|
|
190
|
+
}
|
|
173
191
|
catch (error) {
|
|
192
|
+
updateSpinner.fail('Update failed');
|
|
174
193
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
175
|
-
|
|
194
|
+
if (errorMessage.includes('EACCES') || errorMessage.includes('permission denied')) {
|
|
195
|
+
ui.error('Permission denied. Try running with sudo:');
|
|
196
|
+
ui.muted(` sudo ${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} -g @radkode/neo@latest`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
ui.error(`Update failed: ${errorMessage}`);
|
|
200
|
+
ui.muted(`Try updating manually: ${packageManager} ${packageManager === 'npm' ? 'install' : 'add'} -g @radkode/neo@latest`);
|
|
201
|
+
}
|
|
176
202
|
process.exit(1);
|
|
177
203
|
}
|
|
178
|
-
});
|
|
204
|
+
}));
|
|
179
205
|
return command;
|
|
180
206
|
}
|
|
181
207
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/update/index.ts"],"names":[],"mappings":"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"}
|