@hyperdrive.bot/gut 0.1.6 → 0.1.9

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 (111) hide show
  1. package/README.md +1 -1
  2. package/dist/base-command.d.ts +22 -0
  3. package/dist/base-command.js +99 -0
  4. package/dist/commands/add.d.ts +14 -0
  5. package/dist/commands/add.js +70 -0
  6. package/dist/commands/affected.d.ts +23 -0
  7. package/dist/commands/affected.js +323 -0
  8. package/dist/commands/audit.d.ts +33 -0
  9. package/dist/commands/audit.js +594 -0
  10. package/dist/commands/back.d.ts +6 -0
  11. package/dist/commands/back.js +29 -0
  12. package/dist/commands/checkout.d.ts +14 -0
  13. package/dist/commands/checkout.js +124 -0
  14. package/dist/commands/commit.d.ts +11 -0
  15. package/dist/commands/commit.js +107 -0
  16. package/dist/commands/context.d.ts +6 -0
  17. package/dist/commands/context.js +32 -0
  18. package/dist/commands/contexts.d.ts +7 -0
  19. package/dist/commands/contexts.js +88 -0
  20. package/dist/commands/deps.d.ts +10 -0
  21. package/dist/commands/deps.js +100 -0
  22. package/dist/commands/entity/add.d.ts +16 -0
  23. package/dist/commands/entity/add.js +103 -0
  24. package/dist/commands/entity/clone-all.d.ts +17 -0
  25. package/dist/commands/entity/clone-all.js +127 -0
  26. package/dist/commands/entity/clone.d.ts +15 -0
  27. package/dist/commands/entity/clone.js +106 -0
  28. package/dist/commands/entity/list.d.ts +11 -0
  29. package/dist/commands/entity/list.js +80 -0
  30. package/dist/commands/entity/remove.d.ts +12 -0
  31. package/dist/commands/entity/remove.js +54 -0
  32. package/dist/commands/extract.d.ts +35 -0
  33. package/dist/commands/extract.js +483 -0
  34. package/dist/commands/focus.d.ts +19 -0
  35. package/dist/commands/focus.js +137 -0
  36. package/dist/commands/graph.d.ts +18 -0
  37. package/dist/commands/graph.js +273 -0
  38. package/dist/commands/init.d.ts +11 -0
  39. package/dist/commands/init.js +75 -0
  40. package/dist/commands/insights.d.ts +21 -0
  41. package/dist/commands/insights.js +465 -0
  42. package/dist/commands/patterns.d.ts +40 -0
  43. package/dist/commands/patterns.js +405 -0
  44. package/dist/commands/pull.d.ts +11 -0
  45. package/dist/commands/pull.js +121 -0
  46. package/dist/commands/push.d.ts +11 -0
  47. package/dist/commands/push.js +97 -0
  48. package/dist/commands/quick-setup.d.ts +20 -0
  49. package/dist/commands/quick-setup.js +417 -0
  50. package/dist/commands/recent.d.ts +9 -0
  51. package/dist/commands/recent.js +51 -0
  52. package/dist/commands/related.d.ts +23 -0
  53. package/dist/commands/related.js +255 -0
  54. package/dist/commands/repos.d.ts +17 -0
  55. package/dist/commands/repos.js +184 -0
  56. package/dist/commands/stack.d.ts +10 -0
  57. package/dist/commands/stack.js +78 -0
  58. package/dist/commands/status.d.ts +13 -0
  59. package/dist/commands/status.js +193 -0
  60. package/dist/commands/sync.d.ts +11 -0
  61. package/dist/commands/sync.js +139 -0
  62. package/dist/commands/ticket/focus.d.ts +20 -0
  63. package/dist/commands/ticket/focus.js +217 -0
  64. package/dist/commands/ticket/get.d.ts +15 -0
  65. package/dist/commands/ticket/get.js +168 -0
  66. package/dist/commands/ticket/hint.d.ts +16 -0
  67. package/dist/commands/ticket/hint.js +147 -0
  68. package/dist/commands/ticket/index.d.ts +10 -0
  69. package/dist/commands/ticket/index.js +60 -0
  70. package/dist/commands/ticket/list.d.ts +13 -0
  71. package/dist/commands/ticket/list.js +120 -0
  72. package/dist/commands/ticket/sync.d.ts +14 -0
  73. package/dist/commands/ticket/sync.js +85 -0
  74. package/dist/commands/ticket/update.d.ts +17 -0
  75. package/dist/commands/ticket/update.js +142 -0
  76. package/dist/commands/unfocus.d.ts +6 -0
  77. package/dist/commands/unfocus.js +19 -0
  78. package/dist/commands/used-by.d.ts +13 -0
  79. package/dist/commands/used-by.js +110 -0
  80. package/dist/commands/workspace.d.ts +22 -0
  81. package/dist/commands/workspace.js +372 -0
  82. package/dist/index.d.ts +14 -0
  83. package/dist/index.js +16 -0
  84. package/dist/models/entity.model.d.ts +234 -0
  85. package/dist/models/entity.model.js +1 -0
  86. package/dist/models/ticket.model.d.ts +117 -0
  87. package/dist/models/ticket.model.js +43 -0
  88. package/dist/services/auth.service.d.ts +15 -0
  89. package/dist/services/auth.service.js +26 -0
  90. package/dist/services/config.service.d.ts +34 -0
  91. package/dist/services/config.service.js +234 -0
  92. package/dist/services/entity.service.d.ts +20 -0
  93. package/dist/services/entity.service.js +127 -0
  94. package/dist/services/focus.service.d.ts +71 -0
  95. package/dist/services/focus.service.js +614 -0
  96. package/dist/services/git.service.d.ts +39 -0
  97. package/dist/services/git.service.js +188 -0
  98. package/dist/services/gut-api.service.d.ts +53 -0
  99. package/dist/services/gut-api.service.js +99 -0
  100. package/dist/services/ticket.service.d.ts +84 -0
  101. package/dist/services/ticket.service.js +207 -0
  102. package/dist/utils/display.d.ts +26 -0
  103. package/dist/utils/display.js +145 -0
  104. package/dist/utils/filesystem.d.ts +32 -0
  105. package/dist/utils/filesystem.js +198 -0
  106. package/dist/utils/index.d.ts +13 -0
  107. package/dist/utils/index.js +14 -0
  108. package/dist/utils/validation.d.ts +22 -0
  109. package/dist/utils/validation.js +192 -0
  110. package/oclif.manifest.json +2008 -0
  111. package/package.json +11 -2
@@ -0,0 +1,127 @@
1
+ import { Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { execSync } from 'node:child_process';
4
+ import * as fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import ora from 'ora';
7
+ import { BaseCommand } from '../../base-command.js';
8
+ export default class CloneAll extends BaseCommand {
9
+ static description = 'Clone all configured entities from their repositories';
10
+ static examples = [
11
+ '<%= config.bin %> <%= command.id %>',
12
+ '<%= config.bin %> <%= command.id %> --parallel',
13
+ '<%= config.bin %> <%= command.id %> --branch develop',
14
+ '<%= config.bin %> <%= command.id %> --skip-existing',
15
+ ];
16
+ static flags = {
17
+ branch: Flags.string({
18
+ char: 'b',
19
+ default: 'main',
20
+ description: 'Branch to clone for all entities',
21
+ }),
22
+ depth: Flags.integer({
23
+ char: 'd',
24
+ description: 'Create shallow clones with specified depth',
25
+ }),
26
+ force: Flags.boolean({
27
+ char: 'f',
28
+ default: false,
29
+ description: 'Force clone even if directories exist',
30
+ }),
31
+ parallel: Flags.boolean({
32
+ char: 'p',
33
+ default: false,
34
+ description: 'Clone entities in parallel',
35
+ }),
36
+ 'skip-existing': Flags.boolean({
37
+ default: false,
38
+ description: 'Skip entities that already exist',
39
+ }),
40
+ };
41
+ async run() {
42
+ const { flags } = await this.parse(CloneAll);
43
+ const { branch, depth, force, parallel, 'skip-existing': skipExisting } = flags;
44
+ const entities = await this.entityService.listEntities();
45
+ const entitiesToClone = entities.filter(e => e.repository);
46
+ if (entitiesToClone.length === 0) {
47
+ this.log(chalk.yellow('No entities with repositories configured'));
48
+ return;
49
+ }
50
+ this.log(chalk.blue(`Found ${entitiesToClone.length} entities to clone`));
51
+ const results = [];
52
+ await (parallel ? this.cloneInParallel(entitiesToClone, branch, depth, skipExisting, force, results) : this.cloneSequentially(entitiesToClone, branch, depth, skipExisting, force, results));
53
+ this.printSummary(results);
54
+ }
55
+ async cloneEntity(entity, branch, depth, skipExisting, force) {
56
+ const spinner = ora(`Cloning ${entity.name}`).start();
57
+ try {
58
+ const workspaceRoot = this.configService.getWorkspaceRoot();
59
+ const clonePath = path.resolve(workspaceRoot, entity.path);
60
+ if (fs.existsSync(clonePath)) {
61
+ if (skipExisting) {
62
+ spinner.info(`Skipped ${entity.name} (already exists)`);
63
+ return { entity, message: 'Skipped (exists)', success: true };
64
+ }
65
+ if (!force) {
66
+ spinner.fail(`${entity.name} already exists (use --force to overwrite)`);
67
+ return { entity, message: 'Already exists', success: false };
68
+ }
69
+ fs.rmSync(clonePath, { force: true, recursive: true });
70
+ }
71
+ const parentDir = path.dirname(clonePath);
72
+ if (!fs.existsSync(parentDir)) {
73
+ fs.mkdirSync(parentDir, { recursive: true });
74
+ }
75
+ let cloneCommand = 'git clone';
76
+ if (branch && branch !== 'main') {
77
+ cloneCommand += ` -b ${branch}`;
78
+ }
79
+ if (depth) {
80
+ cloneCommand += ` --depth ${depth}`;
81
+ }
82
+ cloneCommand += ` ${entity.repository || entity.repo} ${clonePath}`;
83
+ execSync(cloneCommand, { stdio: 'pipe' });
84
+ const gitBranch = execSync('git branch --show-current', {
85
+ cwd: clonePath,
86
+ encoding: 'utf8',
87
+ }).trim();
88
+ spinner.succeed(`Cloned ${entity.name} (${gitBranch})`);
89
+ return { entity, message: `Cloned (${gitBranch})`, success: true };
90
+ }
91
+ catch (error) {
92
+ spinner.fail(`Failed to clone ${entity.name}`);
93
+ return { entity, message: error instanceof Error ? error.message : String(error), success: false };
94
+ }
95
+ }
96
+ async cloneInParallel(entities, branch, depth, skipExisting, force, results) {
97
+ const promises = entities.map(entity => this.cloneEntity(entity, branch, depth, skipExisting, force));
98
+ const parallelResults = await Promise.all(promises);
99
+ results.push(...parallelResults);
100
+ }
101
+ async cloneSequentially(entities, branch, depth, skipExisting, force, results) {
102
+ for (const entity of entities) {
103
+ const result = await this.cloneEntity(entity, branch, depth, skipExisting, force);
104
+ results.push(result);
105
+ }
106
+ }
107
+ printSummary(results) {
108
+ const successful = results.filter(r => r.success);
109
+ const failed = results.filter(r => !r.success);
110
+ this.log('');
111
+ this.log(chalk.bold('Clone Summary:'));
112
+ this.log(chalk.green(` āœ“ Successful: ${successful.length}`));
113
+ if (failed.length > 0) {
114
+ this.log(chalk.red(` āœ— Failed: ${failed.length}`));
115
+ this.log('');
116
+ this.log(chalk.red('Failed entities:'));
117
+ for (const r of failed) {
118
+ this.log(chalk.red(` - ${r.entity.name}: ${r.message}`));
119
+ }
120
+ }
121
+ this.log('');
122
+ this.log(chalk.dim('Entity locations:'));
123
+ for (const r of successful) {
124
+ this.log(chalk.dim(` ${r.entity.name}: ${r.entity.path}`));
125
+ }
126
+ }
127
+ }
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Clone extends BaseCommand {
3
+ static args: {
4
+ name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ branch: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ depth: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,106 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { execSync } from 'node:child_process';
4
+ import * as fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import ora from 'ora';
7
+ import { BaseCommand } from '../../base-command.js';
8
+ export default class Clone extends BaseCommand {
9
+ static args = {
10
+ name: Args.string({
11
+ description: 'Name of the entity to clone',
12
+ name: 'name',
13
+ required: true,
14
+ }),
15
+ };
16
+ static description = 'Clone a specific entity from its repository';
17
+ static examples = [
18
+ '<%= config.bin %> <%= command.id %> my-app',
19
+ '<%= config.bin %> <%= command.id %> my-app --branch develop',
20
+ '<%= config.bin %> <%= command.id %> my-app --depth 1',
21
+ ];
22
+ static flags = {
23
+ branch: Flags.string({
24
+ char: 'b',
25
+ default: 'main',
26
+ description: 'Branch to clone',
27
+ }),
28
+ depth: Flags.integer({
29
+ char: 'd',
30
+ description: 'Create a shallow clone with specified depth',
31
+ }),
32
+ force: Flags.boolean({
33
+ char: 'f',
34
+ default: false,
35
+ description: 'Force clone even if directory exists',
36
+ }),
37
+ path: Flags.string({
38
+ char: 'p',
39
+ description: 'Custom path to clone to (relative to workspace)',
40
+ }),
41
+ };
42
+ async run() {
43
+ const { args, flags } = await this.parse(Clone);
44
+ const { name } = args;
45
+ const { branch, depth, force, path: customPath } = flags;
46
+ const spinner = ora();
47
+ try {
48
+ const entity = await this.entityService.getEntity(name);
49
+ if (!entity) {
50
+ this.error(`Entity '${name}' not found`);
51
+ }
52
+ if (!entity.repository) {
53
+ this.error(`Entity '${name}' has no repository configured`);
54
+ }
55
+ const workspaceRoot = this.configService.getWorkspaceRoot();
56
+ const clonePath = customPath
57
+ ? path.resolve(workspaceRoot, customPath)
58
+ : path.resolve(workspaceRoot, entity.path);
59
+ if (fs.existsSync(clonePath)) {
60
+ if (!force) {
61
+ this.error(`Directory already exists: ${clonePath}. Use --force to overwrite`);
62
+ }
63
+ spinner.start(`Removing existing directory: ${clonePath}`);
64
+ execSync(`rm -rf ${clonePath}`, { stdio: 'pipe' });
65
+ spinner.succeed('Removed existing directory');
66
+ }
67
+ const parentDir = path.dirname(clonePath);
68
+ if (!fs.existsSync(parentDir)) {
69
+ fs.mkdirSync(parentDir, { recursive: true });
70
+ }
71
+ let cloneCommand = 'git clone';
72
+ if (branch && branch !== 'main') {
73
+ cloneCommand += ` -b ${branch}`;
74
+ }
75
+ if (depth) {
76
+ cloneCommand += ` --depth ${depth}`;
77
+ }
78
+ cloneCommand += ` ${entity.repository} ${clonePath}`;
79
+ spinner.start(`Cloning ${name} from ${entity.repository}`);
80
+ try {
81
+ execSync(cloneCommand, { stdio: 'pipe' });
82
+ spinner.succeed(`Successfully cloned ${name}`);
83
+ }
84
+ catch (error) {
85
+ spinner.fail(`Failed to clone ${name}`);
86
+ this.error(error instanceof Error ? error.message : String(error));
87
+ }
88
+ if (customPath && customPath !== entity.path) {
89
+ entity.path = customPath;
90
+ await this.entityService.updateEntity(name, entity);
91
+ this.log(chalk.yellow(`Updated entity path to: ${customPath}`));
92
+ }
93
+ this.log(chalk.green(`āœ“ Entity '${name}' cloned to ${clonePath}`));
94
+ const gitBranch = execSync('git branch --show-current', {
95
+ cwd: clonePath,
96
+ encoding: 'utf8',
97
+ }).trim();
98
+ this.log(chalk.dim(` Branch: ${gitBranch}`));
99
+ this.log(chalk.dim(` Repository: ${entity.repository}`));
100
+ }
101
+ catch (error) {
102
+ spinner.fail();
103
+ this.error(error instanceof Error ? error.message : String(error));
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ListEntities extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,80 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { ENTITY_TYPES } from '../../models/entity.model.js';
4
+ export default class ListEntities extends BaseCommand {
5
+ static description = 'List all configured entities';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --type delivery',
9
+ '<%= config.bin %> <%= command.id %> --json',
10
+ ];
11
+ static flags = {
12
+ json: Flags.boolean({
13
+ description: 'output as JSON',
14
+ }),
15
+ type: Flags.string({
16
+ char: 't',
17
+ description: 'filter by entity type',
18
+ options: [...ENTITY_TYPES],
19
+ }),
20
+ verbose: Flags.boolean({
21
+ char: 'v',
22
+ description: 'show detailed information',
23
+ }),
24
+ };
25
+ async run() {
26
+ const { flags } = await this.parse(ListEntities);
27
+ let entities = this.entityService.getAllEntities();
28
+ // Filter by type if specified
29
+ if (flags.type) {
30
+ entities = entities.filter(e => e.type === flags.type);
31
+ }
32
+ // JSON output
33
+ if (flags.json) {
34
+ this.log(JSON.stringify(entities, null, 2));
35
+ return;
36
+ }
37
+ // Regular output
38
+ if (entities.length === 0) {
39
+ if (flags.type) {
40
+ this.log(`No ${flags.type} entities configured`);
41
+ }
42
+ else {
43
+ this.log('No entities configured');
44
+ this.log('\nAdd entities with: gut entity add <type> <name> --path <path>');
45
+ }
46
+ return;
47
+ }
48
+ this.log(`\n${entities.length} entities configured:`);
49
+ if (flags.verbose) {
50
+ // Detailed view
51
+ for (const entity of entities) {
52
+ this.log(`\n${this.getTypeEmoji(entity.type)} ${entity.name}`);
53
+ this.log(` Type: ${entity.type}`);
54
+ this.log(` Path: ${entity.path}`);
55
+ if (entity.remote) {
56
+ this.log(` Remote: ${entity.remote}`);
57
+ }
58
+ if (entity.repo) {
59
+ this.log(` Repo: ${entity.repo}`);
60
+ }
61
+ if (entity.description) {
62
+ this.log(` Description: ${entity.description}`);
63
+ }
64
+ // Check if focused
65
+ if (await this.focusService.isFocused(entity.name)) {
66
+ this.log(' Status: šŸŽÆ FOCUSED');
67
+ }
68
+ }
69
+ }
70
+ else {
71
+ // Simple view
72
+ this.printEntityList(entities);
73
+ // Show focused entities
74
+ const focusedEntities = await this.focusService.getFocusedEntities();
75
+ if (focusedEntities.length > 0) {
76
+ this.log(`\nšŸŽÆ Current focus: ${focusedEntities.map(e => e.name).join(', ')}`);
77
+ }
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class RemoveEntity extends BaseCommand {
3
+ static args: {
4
+ name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,54 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class RemoveEntity extends BaseCommand {
4
+ static args = {
5
+ name: Args.string({
6
+ description: 'Entity name to remove',
7
+ name: 'name',
8
+ required: true,
9
+ }),
10
+ };
11
+ static description = 'Remove an entity from the workspace configuration';
12
+ static examples = [
13
+ '<%= config.bin %> <%= command.id %> my-app',
14
+ '<%= config.bin %> <%= command.id %> my-app --force',
15
+ ];
16
+ static flags = {
17
+ force: Flags.boolean({
18
+ char: 'f',
19
+ description: 'skip confirmation prompt',
20
+ }),
21
+ };
22
+ async run() {
23
+ const { args, flags } = await this.parse(RemoveEntity);
24
+ const { name } = args;
25
+ // Check if entity exists
26
+ const entity = this.entityService.findEntity(name);
27
+ if (!entity) {
28
+ this.error(`Entity '${name}' not found`);
29
+ }
30
+ // Check if entity is currently focused
31
+ if (await this.focusService.isFocused(name)) {
32
+ this.warn(`Entity '${name}' is currently focused`);
33
+ if (!flags.force) {
34
+ this.error('Cannot remove focused entity. Unfocus first with "gut unfocus" or use --force');
35
+ }
36
+ // Clear focus if forcing
37
+ await this.focusService.clearFocus();
38
+ this.log('Cleared focus');
39
+ }
40
+ // Confirmation prompt if not forcing
41
+ if (!flags.force) {
42
+ this.log('\nAbout to remove entity:');
43
+ this.log(` Name: ${entity.name}`);
44
+ this.log(` Type: ${entity.type}`);
45
+ this.log(` Path: ${entity.path}`);
46
+ this.warn('\nThis will only remove the entity from gut configuration.');
47
+ this.warn('The actual files/directory will NOT be deleted.');
48
+ }
49
+ // Remove entity
50
+ this.entityService.removeEntity(name);
51
+ this.log(`\nāœ… Removed entity '${name}' from configuration`);
52
+ this.log('Note: The actual files/directory were not deleted');
53
+ }
54
+ }
@@ -0,0 +1,35 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Extract extends BaseCommand {
3
+ static args: {
4
+ folderPath: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ 'gitlab-token': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'gitlab-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'keep-temp': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ 'project-path': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'target-path': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'temp-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ protected get requiresInit(): boolean;
19
+ catch(error: Error & {
20
+ args?: Array<{
21
+ name: string;
22
+ }>;
23
+ code?: string;
24
+ }): Promise<void>;
25
+ run(): Promise<void>;
26
+ private checkExistingProject;
27
+ private cloneNewRepository;
28
+ private cloneToTemp;
29
+ private collectConfiguration;
30
+ private createGitLabProject;
31
+ private ensureGroupPath;
32
+ private filterAllBranches;
33
+ private getAllBranches;
34
+ private pushToNewRepository;
35
+ }