@radkode/neo 1.1.2 → 1.3.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/README.md +81 -9
- 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 +84 -78
- 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/agent/init/index.d.ts.map +1 -1
- package/dist/commands/agent/init/index.js +36 -33
- package/dist/commands/agent/init/index.js.map +1 -1
- package/dist/commands/alias/setup/index.d.ts.map +1 -1
- package/dist/commands/alias/setup/index.js +57 -52
- package/dist/commands/alias/setup/index.js.map +1 -1
- package/dist/commands/completions/index.d.ts.map +1 -1
- package/dist/commands/completions/index.js +20 -12
- package/dist/commands/completions/index.js.map +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +173 -158
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/profile/index.d.ts.map +1 -1
- package/dist/commands/config/profile/index.js +169 -232
- package/dist/commands/config/profile/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 +86 -56
- 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 +56 -43
- 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 +67 -45
- 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 +62 -70
- 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 -39
- 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 -11
- 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 +21 -15
- package/dist/commands/git/worktree/add.js.map +1 -1
- package/dist/commands/git/worktree/list.d.ts.map +1 -1
- package/dist/commands/git/worktree/list.js +32 -20
- package/dist/commands/git/worktree/list.js.map +1 -1
- package/dist/commands/git/worktree/remove.d.ts.map +1 -1
- package/dist/commands/git/worktree/remove.js +17 -8
- 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 -9
- 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 +53 -28
- package/dist/commands/init/index.js.map +1 -1
- package/dist/commands/pr/index.d.ts.map +1 -1
- package/dist/commands/pr/index.js +6 -20
- package/dist/commands/pr/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 +214 -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 +103 -91
- package/dist/commands/update/index.js.map +1 -1
- package/dist/services/ai/index.d.ts.map +1 -1
- package/dist/services/ai/index.js +9 -2
- package/dist/services/ai/index.js.map +1 -1
- package/dist/services/ai/prompts.d.ts +6 -1
- package/dist/services/ai/prompts.d.ts.map +1 -1
- package/dist/services/ai/prompts.js +10 -4
- package/dist/services/ai/prompts.js.map +1 -1
- package/dist/types/schemas.d.ts +3 -7
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +3 -3
- package/dist/types/schemas.js.map +1 -1
- package/dist/utils/agent.d.ts.map +1 -1
- package/dist/utils/agent.js +5 -11
- package/dist/utils/agent.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- 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
|
@@ -2,9 +2,10 @@ import { Command } from '@commander-js/extra-typings';
|
|
|
2
2
|
import { writeFile } from 'fs/promises';
|
|
3
3
|
import { ui } from '../../../utils/ui.js';
|
|
4
4
|
import { profileManager } from '../../../utils/profiles.js';
|
|
5
|
-
import {
|
|
5
|
+
import { validate, validateArgument } from '../../../utils/validation.js';
|
|
6
6
|
import { profileNameSchema, profileCreateOptionsSchema, profileExportOptionsSchema, profileImportOptionsSchema, } from '../../../types/schemas.js';
|
|
7
|
-
import {
|
|
7
|
+
import { emitJson } from '../../../utils/output.js';
|
|
8
|
+
import { runAction } from '../../../utils/run-action.js';
|
|
8
9
|
export function createProfileCommand() {
|
|
9
10
|
const command = new Command('profile');
|
|
10
11
|
command
|
|
@@ -20,34 +21,38 @@ export function createProfileCommand() {
|
|
|
20
21
|
}
|
|
21
22
|
function createProfileListCommand() {
|
|
22
23
|
const command = new Command('list');
|
|
23
|
-
command.description('List all configuration profiles').action(async () => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
command.description('List all configuration profiles').action(runAction(async () => {
|
|
25
|
+
await profileManager.initialize();
|
|
26
|
+
const profiles = await profileManager.list();
|
|
27
|
+
const activeProfile = await profileManager.getActive();
|
|
28
|
+
emitJson({
|
|
29
|
+
ok: true,
|
|
30
|
+
command: 'config.profile.list',
|
|
31
|
+
profiles,
|
|
32
|
+
active: activeProfile,
|
|
33
|
+
profilesDir: profileManager.getProfilesDir(),
|
|
34
|
+
}, {
|
|
35
|
+
text: () => {
|
|
36
|
+
if (profiles.length === 0) {
|
|
37
|
+
ui.info('No profiles found');
|
|
38
|
+
return;
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
ui.info('Configuration Profiles:');
|
|
41
|
+
console.log('');
|
|
42
|
+
for (const profile of profiles) {
|
|
43
|
+
const isActive = profile === activeProfile;
|
|
44
|
+
if (isActive) {
|
|
45
|
+
ui.highlight(` ${profile} (active)`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
ui.muted(` ${profile}`);
|
|
49
|
+
}
|
|
41
50
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
ui.error(`Failed to list profiles: ${error}`);
|
|
48
|
-
process.exit(1);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
+
console.log('');
|
|
52
|
+
ui.muted(`Profiles directory: ${profileManager.getProfilesDir()}`);
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}));
|
|
51
56
|
return command;
|
|
52
57
|
}
|
|
53
58
|
function createProfileCreateCommand() {
|
|
@@ -56,44 +61,31 @@ function createProfileCreateCommand() {
|
|
|
56
61
|
.description('Create a new configuration profile')
|
|
57
62
|
.argument('<name>', 'profile name')
|
|
58
63
|
.option('-f, --from <profile>', 'copy configuration from existing profile')
|
|
59
|
-
.action(async (rawName, options) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
ui.success(`Created profile '${name}' (copied from '${validatedOptions.from}')`);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
await profileManager.create(name);
|
|
88
|
-
ui.success(`Created profile '${name}'`);
|
|
89
|
-
}
|
|
90
|
-
ui.muted(`Use 'neo config profile use ${name}' to switch to this profile`);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
ui.error(`Failed to create profile: ${error}`);
|
|
94
|
-
process.exit(1);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
64
|
+
.action(runAction(async (rawName, options) => {
|
|
65
|
+
const name = validateArgument(profileNameSchema, rawName, 'profile name');
|
|
66
|
+
const validatedOptions = validate(profileCreateOptionsSchema, options, 'profile create options');
|
|
67
|
+
await profileManager.initialize();
|
|
68
|
+
const copiedFrom = validatedOptions.from ?? null;
|
|
69
|
+
if (copiedFrom) {
|
|
70
|
+
await profileManager.copy(copiedFrom, name);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
await profileManager.create(name);
|
|
74
|
+
}
|
|
75
|
+
emitJson({
|
|
76
|
+
ok: true,
|
|
77
|
+
command: 'config.profile.create',
|
|
78
|
+
name,
|
|
79
|
+
copiedFrom,
|
|
80
|
+
}, {
|
|
81
|
+
text: () => {
|
|
82
|
+
ui.success(copiedFrom
|
|
83
|
+
? `Created profile '${name}' (copied from '${copiedFrom}')`
|
|
84
|
+
: `Created profile '${name}'`);
|
|
85
|
+
ui.muted(`Use 'neo config profile use ${name}' to switch to this profile`);
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}));
|
|
97
89
|
return command;
|
|
98
90
|
}
|
|
99
91
|
function createProfileUseCommand() {
|
|
@@ -101,26 +93,17 @@ function createProfileUseCommand() {
|
|
|
101
93
|
command
|
|
102
94
|
.description('Switch to a configuration profile')
|
|
103
95
|
.argument('<name>', 'profile name')
|
|
104
|
-
.action(async (rawName) => {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
try {
|
|
116
|
-
await profileManager.setActive(name);
|
|
117
|
-
ui.success(`Switched to profile '${name}'`);
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
ui.error(`Failed to switch profile: ${error}`);
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
96
|
+
.action(runAction(async (rawName) => {
|
|
97
|
+
const name = validateArgument(profileNameSchema, rawName, 'profile name');
|
|
98
|
+
await profileManager.setActive(name);
|
|
99
|
+
emitJson({
|
|
100
|
+
ok: true,
|
|
101
|
+
command: 'config.profile.use',
|
|
102
|
+
active: name,
|
|
103
|
+
}, {
|
|
104
|
+
text: () => ui.success(`Switched to profile '${name}'`),
|
|
105
|
+
});
|
|
106
|
+
}));
|
|
124
107
|
return command;
|
|
125
108
|
}
|
|
126
109
|
function createProfileDeleteCommand() {
|
|
@@ -128,26 +111,17 @@ function createProfileDeleteCommand() {
|
|
|
128
111
|
command
|
|
129
112
|
.description('Delete a configuration profile')
|
|
130
113
|
.argument('<name>', 'profile name')
|
|
131
|
-
.action(async (rawName) => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
try {
|
|
143
|
-
await profileManager.delete(name);
|
|
144
|
-
ui.success(`Deleted profile '${name}'`);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
ui.error(`Failed to delete profile: ${error}`);
|
|
148
|
-
process.exit(1);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
114
|
+
.action(runAction(async (rawName) => {
|
|
115
|
+
const name = validateArgument(profileNameSchema, rawName, 'profile name');
|
|
116
|
+
await profileManager.delete(name);
|
|
117
|
+
emitJson({
|
|
118
|
+
ok: true,
|
|
119
|
+
command: 'config.profile.delete',
|
|
120
|
+
name,
|
|
121
|
+
}, {
|
|
122
|
+
text: () => ui.success(`Deleted profile '${name}'`),
|
|
123
|
+
});
|
|
124
|
+
}));
|
|
151
125
|
return command;
|
|
152
126
|
}
|
|
153
127
|
function createProfileShowCommand() {
|
|
@@ -155,67 +129,61 @@ function createProfileShowCommand() {
|
|
|
155
129
|
command
|
|
156
130
|
.description('Show profile configuration')
|
|
157
131
|
.argument('[name]', 'profile name (defaults to active profile)')
|
|
158
|
-
.action(async (rawName) => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
132
|
+
.action(runAction(async (rawName) => {
|
|
133
|
+
await profileManager.initialize();
|
|
134
|
+
const name = rawName
|
|
135
|
+
? validateArgument(profileNameSchema, rawName, 'profile name')
|
|
136
|
+
: await profileManager.getActive();
|
|
137
|
+
const profileConfig = await profileManager.read(name);
|
|
138
|
+
const activeProfile = await profileManager.getActive();
|
|
139
|
+
const isActive = name === activeProfile;
|
|
140
|
+
emitJson({
|
|
141
|
+
ok: true,
|
|
142
|
+
command: 'config.profile.show',
|
|
143
|
+
name,
|
|
144
|
+
active: isActive,
|
|
145
|
+
config: profileConfig,
|
|
146
|
+
}, {
|
|
147
|
+
text: () => {
|
|
148
|
+
ui.info(`Profile: ${name}${isActive ? ' (active)' : ''}`);
|
|
149
|
+
console.log('');
|
|
150
|
+
ui.section('AI');
|
|
151
|
+
ui.keyValue([
|
|
152
|
+
['enabled', profileConfig.ai.enabled ? 'yes' : 'no'],
|
|
153
|
+
...(profileConfig.ai.model
|
|
154
|
+
? [['model', profileConfig.ai.model]]
|
|
155
|
+
: []),
|
|
156
|
+
]);
|
|
157
|
+
console.log('');
|
|
158
|
+
if (profileConfig.user.name || profileConfig.user.email) {
|
|
159
|
+
ui.section('User');
|
|
160
|
+
const userPairs = [];
|
|
161
|
+
if (profileConfig.user.name)
|
|
162
|
+
userPairs.push(['name', profileConfig.user.name]);
|
|
163
|
+
if (profileConfig.user.email)
|
|
164
|
+
userPairs.push(['email', profileConfig.user.email]);
|
|
165
|
+
ui.keyValue(userPairs);
|
|
166
|
+
console.log('');
|
|
165
167
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
ui.section('Preferences');
|
|
169
|
+
const prefPairs = [
|
|
170
|
+
['banner', profileConfig.preferences.banner],
|
|
171
|
+
['theme', profileConfig.preferences.theme],
|
|
172
|
+
];
|
|
173
|
+
if (profileConfig.preferences.editor) {
|
|
174
|
+
prefPairs.push(['editor', profileConfig.preferences.editor]);
|
|
171
175
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
name = await profileManager.getActive();
|
|
175
|
-
}
|
|
176
|
-
const profileConfig = await profileManager.read(name);
|
|
177
|
-
const activeProfile = await profileManager.getActive();
|
|
178
|
-
const isActive = name === activeProfile;
|
|
179
|
-
ui.info(`Profile: ${name}${isActive ? ' (active)' : ''}`);
|
|
180
|
-
console.log('');
|
|
181
|
-
ui.section('AI');
|
|
182
|
-
ui.keyValue([
|
|
183
|
-
['enabled', profileConfig.ai.enabled ? 'yes' : 'no'],
|
|
184
|
-
...(profileConfig.ai.model ? [['model', profileConfig.ai.model]] : []),
|
|
185
|
-
]);
|
|
186
|
-
console.log('');
|
|
187
|
-
if (profileConfig.user.name || profileConfig.user.email) {
|
|
188
|
-
ui.section('User');
|
|
189
|
-
const userPairs = [];
|
|
190
|
-
if (profileConfig.user.name)
|
|
191
|
-
userPairs.push(['name', profileConfig.user.name]);
|
|
192
|
-
if (profileConfig.user.email)
|
|
193
|
-
userPairs.push(['email', profileConfig.user.email]);
|
|
194
|
-
ui.keyValue(userPairs);
|
|
176
|
+
prefPairs.push(['aliases.n', profileConfig.preferences.aliases.n ? 'enabled' : 'disabled']);
|
|
177
|
+
ui.keyValue(prefPairs);
|
|
195
178
|
console.log('');
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
prefPairs.push(['aliases.n', profileConfig.preferences.aliases.n ? 'enabled' : 'disabled']);
|
|
206
|
-
ui.keyValue(prefPairs);
|
|
207
|
-
console.log('');
|
|
208
|
-
ui.section('Shell');
|
|
209
|
-
ui.keyValue([
|
|
210
|
-
['type', profileConfig.shell.type],
|
|
211
|
-
['rcFile', profileConfig.shell.rcFile],
|
|
212
|
-
]);
|
|
213
|
-
}
|
|
214
|
-
catch (error) {
|
|
215
|
-
ui.error(`Failed to show profile: ${error}`);
|
|
216
|
-
process.exit(1);
|
|
217
|
-
}
|
|
218
|
-
});
|
|
179
|
+
ui.section('Shell');
|
|
180
|
+
ui.keyValue([
|
|
181
|
+
['type', profileConfig.shell.type],
|
|
182
|
+
['rcFile', profileConfig.shell.rcFile],
|
|
183
|
+
]);
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}));
|
|
219
187
|
return command;
|
|
220
188
|
}
|
|
221
189
|
function createProfileExportCommand() {
|
|
@@ -224,42 +192,25 @@ function createProfileExportCommand() {
|
|
|
224
192
|
.description('Export a profile to JSON')
|
|
225
193
|
.argument('<name>', 'profile name')
|
|
226
194
|
.option('-o, --output <file>', 'output file (defaults to stdout)')
|
|
227
|
-
.action(async (rawName, options) => {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
throw error;
|
|
247
|
-
}
|
|
248
|
-
try {
|
|
249
|
-
const jsonContent = await profileManager.export(name);
|
|
250
|
-
if (validatedOptions.output) {
|
|
251
|
-
await writeFile(validatedOptions.output, jsonContent, 'utf-8');
|
|
252
|
-
ui.success(`Exported profile '${name}' to ${validatedOptions.output}`);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
console.log(jsonContent);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
catch (error) {
|
|
259
|
-
ui.error(`Failed to export profile: ${error}`);
|
|
260
|
-
process.exit(1);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
195
|
+
.action(runAction(async (rawName, options) => {
|
|
196
|
+
const name = validateArgument(profileNameSchema, rawName, 'profile name');
|
|
197
|
+
const validatedOptions = validate(profileExportOptionsSchema, options, 'profile export options');
|
|
198
|
+
const jsonContent = await profileManager.export(name);
|
|
199
|
+
if (validatedOptions.output) {
|
|
200
|
+
await writeFile(validatedOptions.output, jsonContent, 'utf-8');
|
|
201
|
+
emitJson({
|
|
202
|
+
ok: true,
|
|
203
|
+
command: 'config.profile.export',
|
|
204
|
+
name,
|
|
205
|
+
output: validatedOptions.output,
|
|
206
|
+
}, {
|
|
207
|
+
text: () => ui.success(`Exported profile '${name}' to ${validatedOptions.output}`),
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
process.stdout.write(`${jsonContent}\n`);
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
263
214
|
return command;
|
|
264
215
|
}
|
|
265
216
|
function createProfileImportCommand() {
|
|
@@ -268,39 +219,25 @@ function createProfileImportCommand() {
|
|
|
268
219
|
.description('Import a profile from JSON file')
|
|
269
220
|
.argument('<file>', 'JSON file to import')
|
|
270
221
|
.option('-n, --name <name>', 'profile name (defaults to filename)')
|
|
271
|
-
.action(async (filePath, options) => {
|
|
272
|
-
|
|
273
|
-
try {
|
|
274
|
-
validatedOptions = validate(profileImportOptionsSchema, options, 'profile import options');
|
|
275
|
-
}
|
|
276
|
-
catch (error) {
|
|
277
|
-
if (isValidationError(error)) {
|
|
278
|
-
process.exit(1);
|
|
279
|
-
}
|
|
280
|
-
throw error;
|
|
281
|
-
}
|
|
222
|
+
.action(runAction(async (filePath, options) => {
|
|
223
|
+
const validatedOptions = validate(profileImportOptionsSchema, options, 'profile import options');
|
|
282
224
|
if (validatedOptions.name) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
catch (error) {
|
|
300
|
-
ui.error(`Failed to import profile: ${error}`);
|
|
301
|
-
process.exit(1);
|
|
302
|
-
}
|
|
303
|
-
});
|
|
225
|
+
validateArgument(profileNameSchema, validatedOptions.name, 'profile name');
|
|
226
|
+
}
|
|
227
|
+
await profileManager.initialize();
|
|
228
|
+
const importedName = await profileManager.import(filePath, validatedOptions.name);
|
|
229
|
+
emitJson({
|
|
230
|
+
ok: true,
|
|
231
|
+
command: 'config.profile.import',
|
|
232
|
+
name: importedName,
|
|
233
|
+
sourceFile: filePath,
|
|
234
|
+
}, {
|
|
235
|
+
text: () => {
|
|
236
|
+
ui.success(`Imported profile '${importedName}' from ${filePath}`);
|
|
237
|
+
ui.muted(`Use 'neo config profile use ${importedName}' to switch to this profile`);
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
}));
|
|
304
241
|
return command;
|
|
305
242
|
}
|
|
306
243
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/config/profile/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/config/profile/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/gh/pr/create/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/gh/pr/create/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,wBAAwB,CAAC;AAwJhG,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAkQ3F;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAwC/C"}
|