jira-pilot 2.1.1 → 2.1.2

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 (87) hide show
  1. package/dist/bin/jira.d.ts +2 -0
  2. package/dist/bin/jira.js.map +1 -0
  3. package/dist/src/commands/ai-actions/plan.d.ts +1 -0
  4. package/dist/src/commands/ai-actions/plan.js +108 -0
  5. package/dist/src/commands/ai-actions/plan.js.map +1 -0
  6. package/dist/src/commands/ai-actions/review.d.ts +1 -0
  7. package/dist/src/commands/ai-actions/review.js +92 -0
  8. package/dist/src/commands/ai-actions/review.js.map +1 -0
  9. package/dist/src/commands/ai-actions/standup.d.ts +1 -0
  10. package/dist/src/commands/ai-actions/standup.js +33 -0
  11. package/dist/src/commands/ai-actions/standup.js.map +1 -0
  12. package/dist/src/commands/ai.d.ts +2 -0
  13. package/dist/src/commands/ai.js +196 -0
  14. package/dist/src/commands/ai.js.map +1 -0
  15. package/dist/src/commands/board.d.ts +2 -0
  16. package/dist/src/commands/board.js +66 -0
  17. package/dist/src/commands/board.js.map +1 -0
  18. package/dist/src/commands/bulk.d.ts +2 -0
  19. package/dist/src/commands/bulk.js +205 -0
  20. package/dist/src/commands/bulk.js.map +1 -0
  21. package/dist/src/commands/config.d.ts +2 -0
  22. package/dist/src/commands/config.js +248 -0
  23. package/dist/src/commands/config.js.map +1 -0
  24. package/dist/src/commands/dashboard.d.ts +2 -0
  25. package/dist/src/commands/dashboard.js +209 -0
  26. package/dist/src/commands/dashboard.js.map +1 -0
  27. package/dist/src/commands/filter.d.ts +2 -0
  28. package/dist/src/commands/filter.js +71 -0
  29. package/dist/src/commands/filter.js.map +1 -0
  30. package/dist/src/commands/git.d.ts +2 -0
  31. package/dist/src/commands/git.js +56 -0
  32. package/dist/src/commands/git.js.map +1 -0
  33. package/dist/src/commands/issue-attach.d.ts +2 -0
  34. package/dist/src/commands/issue-attach.js +41 -0
  35. package/dist/src/commands/issue-attach.js.map +1 -0
  36. package/dist/src/commands/issue-pr.d.ts +2 -0
  37. package/dist/src/commands/issue-pr.js +76 -0
  38. package/dist/src/commands/issue-pr.js.map +1 -0
  39. package/dist/src/commands/issue-worklog.d.ts +2 -0
  40. package/dist/src/commands/issue-worklog.js +83 -0
  41. package/dist/src/commands/issue-worklog.js.map +1 -0
  42. package/dist/src/commands/issue.d.ts +2 -0
  43. package/dist/src/commands/issue.js +1148 -0
  44. package/dist/src/commands/issue.js.map +1 -0
  45. package/dist/src/commands/mcp.d.ts +2 -0
  46. package/dist/src/commands/mcp.js +26 -0
  47. package/dist/src/commands/mcp.js.map +1 -0
  48. package/dist/src/commands/project.d.ts +2 -0
  49. package/dist/src/commands/project.js +53 -0
  50. package/dist/src/commands/project.js.map +1 -0
  51. package/dist/src/commands/sprint.d.ts +2 -0
  52. package/dist/src/commands/sprint.js +240 -0
  53. package/dist/src/commands/sprint.js.map +1 -0
  54. package/dist/src/server/mcp-server.d.ts +1 -0
  55. package/dist/src/server/mcp-server.js +505 -0
  56. package/dist/src/server/mcp-server.js.map +1 -0
  57. package/dist/src/services/ai-service.d.ts +12 -0
  58. package/dist/src/services/ai-service.js +151 -0
  59. package/dist/src/services/ai-service.js.map +1 -0
  60. package/dist/src/services/api-service.d.ts +18 -0
  61. package/dist/src/services/api-service.js +115 -0
  62. package/dist/src/services/api-service.js.map +1 -0
  63. package/dist/src/services/config-service.d.ts +6 -0
  64. package/dist/src/services/config-service.js +17 -0
  65. package/dist/src/services/config-service.js.map +1 -0
  66. package/dist/src/types.d.ts +90 -0
  67. package/dist/src/types.js +2 -0
  68. package/dist/src/types.js.map +1 -0
  69. package/dist/src/utils/adf-parser.d.ts +1 -0
  70. package/dist/src/utils/adf-parser.js +49 -0
  71. package/dist/src/utils/adf-parser.js.map +1 -0
  72. package/dist/src/utils/config-store.d.ts +15 -0
  73. package/dist/src/utils/config-store.js +98 -0
  74. package/dist/src/utils/config-store.js.map +1 -0
  75. package/dist/src/utils/config.d.ts +10 -0
  76. package/dist/src/utils/config.js +67 -0
  77. package/dist/src/utils/config.js.map +1 -0
  78. package/dist/src/utils/error-handler.d.ts +10 -0
  79. package/dist/src/utils/error-handler.js +44 -0
  80. package/dist/src/utils/error-handler.js.map +1 -0
  81. package/dist/src/utils/text-to-adf.d.ts +18 -0
  82. package/dist/src/utils/text-to-adf.js +33 -0
  83. package/dist/src/utils/text-to-adf.js.map +1 -0
  84. package/dist/src/utils/validators.d.ts +38 -0
  85. package/dist/src/utils/validators.js +77 -0
  86. package/dist/src/utils/validators.js.map +1 -0
  87. package/package.json +3 -2
@@ -0,0 +1,205 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import enquirer from 'enquirer';
5
+ import { api } from '../services/api-service.js';
6
+ import { handleCommandError } from '../utils/error-handler.js';
7
+ export function registerBulkCommand(program) {
8
+ const bulkCmd = new Command('bulk')
9
+ .description('Bulk operations on Jira issues')
10
+ .addHelpText('after', `
11
+ Common Actions:
12
+ $ jira bulk transition -j "project = PROJ AND status = 'To Do'" -s "In Progress"
13
+ `);
14
+ // ── BULK TRANSITION ──────────────────────────────────────────────
15
+ bulkCmd
16
+ .command('transition')
17
+ .description('Transition multiple issues matching a JQL filter')
18
+ .requiredOption('-j, --jql <query>', 'JQL query to select issues')
19
+ .option('-s, --status <name>', 'Target status name')
20
+ .option('-y, --yes', 'Skip confirmation prompt')
21
+ .option('-l, --limit <n>', 'Max issues to process', '50')
22
+ .addHelpText('after', `
23
+ Examples:
24
+ $ jira bulk transition -j "project = PROJ AND status = 'To Do'" -s "In Progress"
25
+ $ jira bulk transition -j "assignee = currentUser() AND status = Review" -s Done -y
26
+ `)
27
+ .action(async (options) => {
28
+ const spinner = ora('Finding matching issues...').start();
29
+ try {
30
+ const data = await api.post('/search/jql', {
31
+ jql: options.jql,
32
+ maxResults: parseInt(options.limit),
33
+ fields: ['summary', 'status']
34
+ });
35
+ spinner.stop();
36
+ if (!data.issues || data.issues.length === 0) {
37
+ console.log(chalk.yellow('No issues match the query.'));
38
+ return;
39
+ }
40
+ console.log(chalk.bold(`\nFound ${data.issues.length} issue(s):\n`));
41
+ data.issues.forEach((i) => {
42
+ console.log(` ${chalk.cyan(i.key)} ${i.fields.summary} [${i.fields.status.name}]`);
43
+ });
44
+ let targetStatus = options.status;
45
+ if (!targetStatus) {
46
+ // Get transitions from the first issue to show available statuses
47
+ const transData = await api.get(`/issue/${data.issues[0].key}/transitions`);
48
+ const { Select } = enquirer;
49
+ const statusSelect = new Select({
50
+ name: 'status',
51
+ message: 'Target status',
52
+ choices: transData.transitions.map((t) => ({ name: t.name, message: t.name }))
53
+ });
54
+ targetStatus = await statusSelect.run();
55
+ }
56
+ if (!options.yes) {
57
+ const { Confirm } = enquirer;
58
+ const confirm = new Confirm({
59
+ name: 'proceed',
60
+ message: `Transition ${data.issues.length} issue(s) to "${targetStatus}"?`
61
+ });
62
+ if (!await confirm.run()) {
63
+ console.log(chalk.yellow('Cancelled.'));
64
+ return;
65
+ }
66
+ }
67
+ const transSpinner = ora(`Transitioning ${data.issues.length} issue(s)...`).start();
68
+ let success = 0;
69
+ let failed = 0;
70
+ for (const issue of data.issues) {
71
+ try {
72
+ const transData = await api.get(`/issue/${issue.key}/transitions`);
73
+ const transition = transData.transitions.find((t) => t.name.toLowerCase() === targetStatus.toLowerCase());
74
+ if (transition) {
75
+ await api.post(`/issue/${issue.key}/transitions`, {
76
+ transition: { id: transition.id }
77
+ });
78
+ success++;
79
+ }
80
+ else {
81
+ failed++;
82
+ }
83
+ }
84
+ catch {
85
+ failed++;
86
+ }
87
+ transSpinner.text = `Transitioning... (${success + failed}/${data.issues.length})`;
88
+ }
89
+ transSpinner.succeed(`Done: ${chalk.green(`${success} succeeded`)}, ${failed > 0 ? chalk.red(`${failed} failed`) : '0 failed'}`);
90
+ }
91
+ catch (e) {
92
+ handleCommandError(spinner, e, 'Bulk transition failed');
93
+ }
94
+ });
95
+ // ── BULK ASSIGN ──────────────────────────────────────────────────
96
+ bulkCmd
97
+ .command('assign')
98
+ .description('Assign multiple issues')
99
+ .requiredOption('-j, --jql <query>', 'JQL query')
100
+ .option('-a, --assignee <id>', 'AccountId or "me"')
101
+ .option('-y, --yes', 'Skip confirmation')
102
+ .action(async (options) => {
103
+ const spinner = ora('Finding issues...').start();
104
+ try {
105
+ const data = await api.post('/search/jql', {
106
+ jql: options.jql,
107
+ maxResults: 50,
108
+ fields: ['summary', 'assignee']
109
+ });
110
+ spinner.stop();
111
+ if (!data.issues?.length) {
112
+ console.log(chalk.yellow('No issues found.'));
113
+ return;
114
+ }
115
+ console.log(chalk.bold(`Found ${data.issues.length} issue(s):`));
116
+ data.issues.forEach((i) => console.log(` ${i.key}: ${i.fields.summary} (${i.fields.assignee?.displayName || 'Unassigned'})`));
117
+ let assigneeId = options.assignee;
118
+ if (!assigneeId) {
119
+ const { userId } = await enquirer.prompt({
120
+ type: 'input',
121
+ name: 'userId',
122
+ message: 'Enter Account ID (or "me"):',
123
+ validate: (val) => val.length > 0
124
+ });
125
+ assigneeId = userId;
126
+ }
127
+ if (assigneeId === 'me') {
128
+ const me = await api.get('/myself');
129
+ assigneeId = me.accountId;
130
+ }
131
+ if (!options.yes) {
132
+ const { confirm } = await enquirer.prompt({
133
+ type: 'confirm',
134
+ name: 'confirm',
135
+ message: `Assign ${data.issues.length} issues to ${assigneeId}?`
136
+ });
137
+ if (!confirm)
138
+ return;
139
+ }
140
+ const processSpinner = ora('Assigning...').start();
141
+ for (const issue of data.issues) {
142
+ await api.put(`/issue/${issue.key}/assignee`, { accountId: assigneeId });
143
+ }
144
+ processSpinner.succeed('Bulk assign complete.');
145
+ }
146
+ catch (e) {
147
+ handleCommandError(spinner, e, 'Bulk assign failed');
148
+ }
149
+ });
150
+ // ── BULK LABEL ───────────────────────────────────────────────────
151
+ bulkCmd
152
+ .command('label')
153
+ .description('Add or remove labels from multiple issues')
154
+ .requiredOption('-j, --jql <query>', 'JQL query')
155
+ .option('--add <labels>', 'Comma-separated labels to add')
156
+ .option('--remove <labels>', 'Comma-separated labels to remove')
157
+ .option('-y, --yes', 'Skip confirmation')
158
+ .action(async (options) => {
159
+ if (!options.add && !options.remove) {
160
+ console.log(chalk.red('Must specify --add or --remove'));
161
+ return;
162
+ }
163
+ const spinner = ora('Finding issues...').start();
164
+ try {
165
+ const data = await api.post('/search/jql', {
166
+ jql: options.jql,
167
+ maxResults: 50,
168
+ fields: ['summary', 'labels']
169
+ });
170
+ spinner.stop();
171
+ if (!data.issues?.length) {
172
+ console.log(chalk.yellow('No issues found.'));
173
+ return;
174
+ }
175
+ console.log(chalk.bold(`Found ${data.issues.length} issue(s).`));
176
+ if (!options.yes) {
177
+ const { confirm } = await enquirer.prompt({
178
+ type: 'confirm',
179
+ name: 'confirm',
180
+ message: `Update labels for ${data.issues.length} issues?`
181
+ });
182
+ if (!confirm)
183
+ return;
184
+ }
185
+ const processSpinner = ora('Updating labels...').start();
186
+ const addList = options.add ? options.add.split(',').map((l) => l.trim()) : [];
187
+ const removeList = options.remove ? options.remove.split(',').map((l) => l.trim()) : [];
188
+ for (const issue of data.issues) {
189
+ const currentLabels = issue.fields.labels || [];
190
+ let newLabels = new Set(currentLabels);
191
+ addList.forEach((l) => newLabels.add(l));
192
+ removeList.forEach((l) => newLabels.delete(l));
193
+ await api.put(`/issue/${issue.key}`, {
194
+ fields: { labels: Array.from(newLabels) }
195
+ });
196
+ }
197
+ processSpinner.succeed('Bulk labels updated.');
198
+ }
199
+ catch (e) {
200
+ handleCommandError(spinner, e, 'Bulk label failed');
201
+ }
202
+ });
203
+ program.addCommand(bulkCmd);
204
+ }
205
+ //# sourceMappingURL=bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../../src/commands/bulk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConfigCommand(program: Command): void;
@@ -0,0 +1,248 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import enquirer from 'enquirer';
4
+ import { setCredentials, getCredentials, clearCredentials, saveProfile, loadProfile, deleteProfile, listProfiles, getActiveProfile } from '../utils/config.js';
5
+ import ConfigStore from '../utils/config-store.js';
6
+ import ora from 'ora';
7
+ import { api } from '../services/api-service.js';
8
+ export function registerConfigCommand(program) {
9
+ const configCmd = new Command('config')
10
+ .description('Configure Jira credentials');
11
+ configCmd
12
+ .command('setup')
13
+ .description('Interactive setup of Jira credentials')
14
+ .action(async () => {
15
+ console.log(chalk.blue('Configuring jira-pilot...'));
16
+ const current = getCredentials();
17
+ try {
18
+ const answers = await enquirer.prompt([
19
+ {
20
+ type: 'input',
21
+ name: 'jiraUrl',
22
+ message: 'Jira Site URL (e.g., https://your-domain.atlassian.net):',
23
+ initial: current.jiraUrl
24
+ },
25
+ {
26
+ type: 'input',
27
+ name: 'email',
28
+ message: 'Jira Email Address:',
29
+ initial: current.email
30
+ },
31
+ {
32
+ type: 'password',
33
+ name: 'apiToken',
34
+ message: 'Jira API Token:',
35
+ initial: current.apiToken ? '*****' : undefined
36
+ },
37
+ {
38
+ type: 'confirm',
39
+ name: 'aiEnabled',
40
+ message: 'Enable AI features?',
41
+ initial: current.aiEnabled || false
42
+ },
43
+ {
44
+ type: 'select',
45
+ name: 'aiProvider',
46
+ message: 'Select AI Provider:',
47
+ choices: ['openai', 'gemini', 'anthropic'],
48
+ initial: current.aiProvider || 'openai',
49
+ skip: function () { return !this.state.answers.aiEnabled; }
50
+ },
51
+ {
52
+ type: 'password',
53
+ name: 'aiKey',
54
+ message: 'AI API Key:',
55
+ initial: current.aiKey ? '*****' : undefined,
56
+ skip: function () { return !this.state.answers.aiEnabled; }
57
+ },
58
+ {
59
+ type: 'password',
60
+ name: 'githubToken',
61
+ message: 'GitHub Personal Access Token (for AI Code Review) [Optional, Press Enter to skip]:',
62
+ initial: current.githubToken ? '*****' : undefined,
63
+ skip: function () { return !this.state.answers.aiEnabled; }
64
+ }
65
+ ]);
66
+ // Keep existing token if user didn't change it (and entered ***** which is not real)
67
+ // Actually prompt returns text. If they leave it blank?
68
+ // Let's assume if they type nothing, we keep old? Enquirer behavior depends.
69
+ // Better to just save what we get.
70
+ // Validation check
71
+ const spinner = ora('Verifying credentials...').start();
72
+ // Temporarily set config to test
73
+ setCredentials(answers);
74
+ api.init(); // Refresh api client with new creds
75
+ try {
76
+ await api.get('/myself');
77
+ spinner.succeed(chalk.green('Credentials verified and saved!'));
78
+ }
79
+ catch (e) {
80
+ spinner.fail(chalk.red('Verification failed! Credentials saved but might be incorrect.'));
81
+ console.error(e.message);
82
+ }
83
+ }
84
+ catch (e) {
85
+ console.error(chalk.red('Setup cancelled or failed'), e);
86
+ }
87
+ });
88
+ configCmd
89
+ .command('view')
90
+ .description('View current configuration')
91
+ .action(() => {
92
+ const { jiraUrl, email } = getCredentials();
93
+ if (jiraUrl) {
94
+ console.log(chalk.green('Current Configuration:'));
95
+ console.log(`URL: ${jiraUrl}`);
96
+ console.log(`Email: ${email}`);
97
+ console.log(`Token: ************`);
98
+ }
99
+ else {
100
+ console.log(chalk.yellow('No configuration found. Run "jira config setup"'));
101
+ }
102
+ });
103
+ configCmd
104
+ .command('clear')
105
+ .description('Clear saved credentials')
106
+ .action(() => {
107
+ clearCredentials();
108
+ console.log(chalk.green('Credentials cleared.'));
109
+ });
110
+ const aiConfigCmd = new Command('ai')
111
+ .description('Manage AI settings');
112
+ aiConfigCmd
113
+ .command('enable')
114
+ .description('Enable AI features')
115
+ .action(async () => {
116
+ const current = getCredentials();
117
+ let key = current.aiKey;
118
+ if (!key) {
119
+ const response = await enquirer.prompt({
120
+ type: 'password',
121
+ name: 'aiKey',
122
+ message: 'Enter AI API Key:'
123
+ });
124
+ key = response.aiKey;
125
+ }
126
+ setCredentials({ aiEnabled: true, aiKey: key });
127
+ console.log(chalk.green('AI features enabled!'));
128
+ });
129
+ aiConfigCmd
130
+ .command('disable')
131
+ .description('Disable AI features')
132
+ .action(() => {
133
+ setCredentials({ aiEnabled: false });
134
+ console.log(chalk.yellow('AI features disabled.'));
135
+ });
136
+ aiConfigCmd
137
+ .command('status')
138
+ .description('Check AI feature status')
139
+ .action(() => {
140
+ const { aiEnabled, aiProvider } = getCredentials();
141
+ console.log(`AI Enabled: ${aiEnabled ? chalk.green('Yes') : chalk.red('No')}`);
142
+ console.log(`Provider: ${aiProvider || 'None'}`);
143
+ });
144
+ configCmd.addCommand(aiConfigCmd);
145
+ // ── PROFILE MANAGEMENT ───────────────────────────────────────────
146
+ configCmd
147
+ .command('save')
148
+ .description('Save current config as a named profile')
149
+ .argument('<name>', 'Profile name')
150
+ .action((name) => {
151
+ saveProfile(name);
152
+ console.log(chalk.green(`Profile "${name}" saved and set as active.`));
153
+ });
154
+ configCmd
155
+ .command('use')
156
+ .description('Switch to a saved profile')
157
+ .argument('<name>', 'Profile name')
158
+ .action((name) => {
159
+ if (loadProfile(name)) {
160
+ console.log(chalk.green(`Switched to profile "${name}".`));
161
+ const creds = getCredentials();
162
+ console.log(` URL: ${creds.jiraUrl}`);
163
+ console.log(` Email: ${creds.email}`);
164
+ }
165
+ else {
166
+ console.error(chalk.red(`Profile "${name}" not found.`));
167
+ const profiles = listProfiles();
168
+ if (profiles.length > 0) {
169
+ console.log(chalk.grey(`Available: ${profiles.join(', ')}`));
170
+ }
171
+ }
172
+ });
173
+ configCmd
174
+ .command('profiles')
175
+ .description('List saved profiles')
176
+ .action(() => {
177
+ const profiles = listProfiles();
178
+ const active = getActiveProfile();
179
+ if (profiles.length === 0) {
180
+ console.log(chalk.yellow('No profiles saved. Use "jira config save <name>" to save one.'));
181
+ return;
182
+ }
183
+ console.log(chalk.bold('\nSaved Profiles:\n'));
184
+ profiles.forEach(p => {
185
+ const marker = p === active ? chalk.green(' ✓ (active)') : '';
186
+ console.log(` ${chalk.cyan(p)}${marker}`);
187
+ });
188
+ console.log('');
189
+ });
190
+ configCmd
191
+ .command('delete-profile')
192
+ .description('Delete a saved profile')
193
+ .argument('<name>', 'Profile name')
194
+ .action((name) => {
195
+ const profiles = listProfiles();
196
+ if (!profiles.includes(name)) {
197
+ console.error(chalk.red(`Profile "${name}" not found.`));
198
+ return;
199
+ }
200
+ deleteProfile(name);
201
+ console.log(chalk.green(`Profile "${name}" deleted.`));
202
+ });
203
+ // ── CUSTOM FIELD MANAGEMENT ─────────────────────────────────────
204
+ const fieldCmd = new Command('field')
205
+ .description('Manage custom field aliases');
206
+ fieldCmd
207
+ .command('set')
208
+ .description('Set a custom field alias')
209
+ .argument('<alias>', 'Field Alias (e.g. storyPoints)')
210
+ .argument('<fieldId>', 'Field ID (e.g. customfield_10011)')
211
+ .action((alias, fieldId) => {
212
+ const config = new ConfigStore('jira-pilot');
213
+ config.set(`customFields.${alias}`, fieldId);
214
+ console.log(chalk.green(`Alias "${chalk.bold(alias)}" mapped to ${chalk.bold(fieldId)}.`));
215
+ });
216
+ fieldCmd
217
+ .command('list')
218
+ .description('List custom field aliases')
219
+ .action(() => {
220
+ const config = new ConfigStore('jira-pilot');
221
+ const fields = config.get('customFields') || {};
222
+ if (Object.keys(fields).length === 0) {
223
+ console.log(chalk.yellow('No custom field aliases defined.'));
224
+ return;
225
+ }
226
+ console.log(chalk.bold('\nCustom Field Aliases:\n'));
227
+ for (const [alias, id] of Object.entries(fields)) {
228
+ console.log(` ${chalk.cyan(alias)}: ${id}`);
229
+ }
230
+ console.log('');
231
+ });
232
+ fieldCmd
233
+ .command('delete')
234
+ .description('Delete a custom field alias')
235
+ .argument('<alias>', 'Field Alias')
236
+ .action((alias) => {
237
+ const config = new ConfigStore('jira-pilot');
238
+ if (!config.get(`customFields.${alias}`)) {
239
+ console.error(chalk.red(`Alias "${alias}" not found.`));
240
+ return;
241
+ }
242
+ config.delete(`customFields.${alias}`);
243
+ console.log(chalk.green(`Alias "${chalk.bold(alias)}" deleted.`));
244
+ });
245
+ configCmd.addCommand(fieldCmd);
246
+ program.addCommand(configCmd);
247
+ }
248
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC/J,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAClC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAE/C,SAAS;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAClC;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,0DAA0D;oBACnE,OAAO,EAAE,OAAO,CAAC,OAAO;iBAC3B;gBACD;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,OAAO,CAAC,KAAK;iBACzB;gBACD;oBACI,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,iBAAiB;oBAC1B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;iBAClD;gBACD;oBACI,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;iBACtC;gBACD;oBACI,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC;oBAC1C,OAAO,EAAE,OAAO,CAAC,UAAU,IAAI,QAAQ;oBACvC,IAAI,EAAE,cAAc,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC9D;gBACD;oBACI,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;oBAC5C,IAAI,EAAE,cAAc,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC9D;gBACD;oBACI,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,oFAAoF;oBAC7F,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;oBAClD,IAAI,EAAE,cAAc,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC9D;aACG,CAAQ,CAAC;YAEjB,qFAAqF;YACrF,wDAAwD;YACxD,8EAA8E;YAC9E,mCAAmC;YAEnC,mBAAmB;YACnB,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,iCAAiC;YACjC,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,oCAAoC;YAEhD,IAAI,CAAC;gBACD,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;gBAC1F,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QAEL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,SAAS;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;QACjF,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,SAAS;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,GAAG,EAAE;QACT,gBAAgB,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;SAChC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAEvC,WAAW;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACnC,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,mBAAmB;aAC/B,CAAQ,CAAC;YACV,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;QACzB,CAAC;QAED,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEP,WAAW;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,GAAG,EAAE;QACT,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEP,WAAW;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,GAAG,EAAE;QACT,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEP,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAElC,oEAAoE;IACpE,SAAS;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACrB,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,4BAA4B,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEP,SAAS;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2BAA2B,CAAC;SACxC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACrB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,SAAS;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,GAAG,EAAE;QACT,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC3F,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjB,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEP,SAAS;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,wBAAwB,CAAC;SACrC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;SAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC,CAAC;YACzD,OAAO;QACX,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEP,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;SAChC,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAEhD,QAAQ;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,0BAA0B,CAAC;SACvC,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC;SACrD,QAAQ,CAAC,WAAW,EAAE,mCAAmC,CAAC;SAC1D,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,gBAAgB,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEP,QAAQ;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,GAAG,EAAE;QACT,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC9D,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEP,QAAQ;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;SAClC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,KAAK,EAAE,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC;YACxD,OAAO;QACX,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEP,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDashboardCommand(program: Command): void;