@aligndottech/cli 0.1.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.
Files changed (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/dist/commands/capture.d.ts +3 -0
  4. package/dist/commands/capture.d.ts.map +1 -0
  5. package/dist/commands/capture.js +74 -0
  6. package/dist/commands/capture.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +94 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/connector/index.d.ts +3 -0
  12. package/dist/commands/connector/index.d.ts.map +1 -0
  13. package/dist/commands/connector/index.js +145 -0
  14. package/dist/commands/connector/index.js.map +1 -0
  15. package/dist/commands/decisions/index.d.ts +3 -0
  16. package/dist/commands/decisions/index.d.ts.map +1 -0
  17. package/dist/commands/decisions/index.js +91 -0
  18. package/dist/commands/decisions/index.js.map +1 -0
  19. package/dist/commands/dev/index.d.ts +3 -0
  20. package/dist/commands/dev/index.d.ts.map +1 -0
  21. package/dist/commands/dev/index.js +226 -0
  22. package/dist/commands/dev/index.js.map +1 -0
  23. package/dist/commands/drift.d.ts +3 -0
  24. package/dist/commands/drift.d.ts.map +1 -0
  25. package/dist/commands/drift.js +51 -0
  26. package/dist/commands/drift.js.map +1 -0
  27. package/dist/commands/env.d.ts +3 -0
  28. package/dist/commands/env.d.ts.map +1 -0
  29. package/dist/commands/env.js +28 -0
  30. package/dist/commands/env.js.map +1 -0
  31. package/dist/commands/import/confluence.d.ts +3 -0
  32. package/dist/commands/import/confluence.d.ts.map +1 -0
  33. package/dist/commands/import/confluence.js +43 -0
  34. package/dist/commands/import/confluence.js.map +1 -0
  35. package/dist/commands/import/git.d.ts +3 -0
  36. package/dist/commands/import/git.d.ts.map +1 -0
  37. package/dist/commands/import/git.js +59 -0
  38. package/dist/commands/import/git.js.map +1 -0
  39. package/dist/commands/import/github.d.ts +3 -0
  40. package/dist/commands/import/github.d.ts.map +1 -0
  41. package/dist/commands/import/github.js +36 -0
  42. package/dist/commands/import/github.js.map +1 -0
  43. package/dist/commands/import/gitlab.d.ts +3 -0
  44. package/dist/commands/import/gitlab.d.ts.map +1 -0
  45. package/dist/commands/import/gitlab.js +37 -0
  46. package/dist/commands/import/gitlab.js.map +1 -0
  47. package/dist/commands/import/jira.d.ts +3 -0
  48. package/dist/commands/import/jira.d.ts.map +1 -0
  49. package/dist/commands/import/jira.js +43 -0
  50. package/dist/commands/import/jira.js.map +1 -0
  51. package/dist/commands/import/linear.d.ts +3 -0
  52. package/dist/commands/import/linear.d.ts.map +1 -0
  53. package/dist/commands/import/linear.js +36 -0
  54. package/dist/commands/import/linear.js.map +1 -0
  55. package/dist/commands/import/notion.d.ts +3 -0
  56. package/dist/commands/import/notion.d.ts.map +1 -0
  57. package/dist/commands/import/notion.js +41 -0
  58. package/dist/commands/import/notion.js.map +1 -0
  59. package/dist/commands/import/slack.d.ts +3 -0
  60. package/dist/commands/import/slack.d.ts.map +1 -0
  61. package/dist/commands/import/slack.js +46 -0
  62. package/dist/commands/import/slack.js.map +1 -0
  63. package/dist/commands/import.d.ts +3 -0
  64. package/dist/commands/import.d.ts.map +1 -0
  65. package/dist/commands/import.js +285 -0
  66. package/dist/commands/import.js.map +1 -0
  67. package/dist/commands/links.d.ts +3 -0
  68. package/dist/commands/links.d.ts.map +1 -0
  69. package/dist/commands/links.js +59 -0
  70. package/dist/commands/links.js.map +1 -0
  71. package/dist/commands/login.d.ts +3 -0
  72. package/dist/commands/login.d.ts.map +1 -0
  73. package/dist/commands/login.js +90 -0
  74. package/dist/commands/login.js.map +1 -0
  75. package/dist/commands/mcp.d.ts +3 -0
  76. package/dist/commands/mcp.d.ts.map +1 -0
  77. package/dist/commands/mcp.js +162 -0
  78. package/dist/commands/mcp.js.map +1 -0
  79. package/dist/commands/search.d.ts +3 -0
  80. package/dist/commands/search.d.ts.map +1 -0
  81. package/dist/commands/search.js +42 -0
  82. package/dist/commands/search.js.map +1 -0
  83. package/dist/commands/spaces.d.ts +3 -0
  84. package/dist/commands/spaces.d.ts.map +1 -0
  85. package/dist/commands/spaces.js +39 -0
  86. package/dist/commands/spaces.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +43 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/lib/config.d.ts +18 -0
  92. package/dist/lib/config.d.ts.map +1 -0
  93. package/dist/lib/config.js +49 -0
  94. package/dist/lib/config.js.map +1 -0
  95. package/dist/lib/env-resolver.d.ts +5 -0
  96. package/dist/lib/env-resolver.d.ts.map +1 -0
  97. package/dist/lib/env-resolver.js +14 -0
  98. package/dist/lib/env-resolver.js.map +1 -0
  99. package/dist/lib/fetchers/confluence.d.ts +8 -0
  100. package/dist/lib/fetchers/confluence.d.ts.map +1 -0
  101. package/dist/lib/fetchers/confluence.js +27 -0
  102. package/dist/lib/fetchers/confluence.js.map +1 -0
  103. package/dist/lib/fetchers/github.d.ts +6 -0
  104. package/dist/lib/fetchers/github.d.ts.map +1 -0
  105. package/dist/lib/fetchers/github.js +43 -0
  106. package/dist/lib/fetchers/github.js.map +1 -0
  107. package/dist/lib/fetchers/gitlab.d.ts +7 -0
  108. package/dist/lib/fetchers/gitlab.d.ts.map +1 -0
  109. package/dist/lib/fetchers/gitlab.js +24 -0
  110. package/dist/lib/fetchers/gitlab.js.map +1 -0
  111. package/dist/lib/fetchers/jira.d.ts +8 -0
  112. package/dist/lib/fetchers/jira.d.ts.map +1 -0
  113. package/dist/lib/fetchers/jira.js +45 -0
  114. package/dist/lib/fetchers/jira.js.map +1 -0
  115. package/dist/lib/fetchers/linear.d.ts +6 -0
  116. package/dist/lib/fetchers/linear.d.ts.map +1 -0
  117. package/dist/lib/fetchers/linear.js +58 -0
  118. package/dist/lib/fetchers/linear.js.map +1 -0
  119. package/dist/lib/fetchers/notion.d.ts +6 -0
  120. package/dist/lib/fetchers/notion.d.ts.map +1 -0
  121. package/dist/lib/fetchers/notion.js +47 -0
  122. package/dist/lib/fetchers/notion.js.map +1 -0
  123. package/dist/lib/fetchers/slack.d.ts +7 -0
  124. package/dist/lib/fetchers/slack.d.ts.map +1 -0
  125. package/dist/lib/fetchers/slack.js +62 -0
  126. package/dist/lib/fetchers/slack.js.map +1 -0
  127. package/dist/lib/gateway-client.d.ts +205 -0
  128. package/dist/lib/gateway-client.d.ts.map +1 -0
  129. package/dist/lib/gateway-client.js +187 -0
  130. package/dist/lib/gateway-client.js.map +1 -0
  131. package/dist/lib/git.d.ts +23 -0
  132. package/dist/lib/git.d.ts.map +1 -0
  133. package/dist/lib/git.js +92 -0
  134. package/dist/lib/git.js.map +1 -0
  135. package/dist/lib/personal-import.d.ts +8 -0
  136. package/dist/lib/personal-import.d.ts.map +1 -0
  137. package/dist/lib/personal-import.js +64 -0
  138. package/dist/lib/personal-import.js.map +1 -0
  139. package/dist/lib/process.d.ts +7 -0
  140. package/dist/lib/process.d.ts.map +1 -0
  141. package/dist/lib/process.js +48 -0
  142. package/dist/lib/process.js.map +1 -0
  143. package/dist/lib/resolve-env.d.ts +3 -0
  144. package/dist/lib/resolve-env.d.ts.map +1 -0
  145. package/dist/lib/resolve-env.js +13 -0
  146. package/dist/lib/resolve-env.js.map +1 -0
  147. package/dist/lib/table.d.ts +7 -0
  148. package/dist/lib/table.d.ts.map +1 -0
  149. package/dist/lib/table.js +16 -0
  150. package/dist/lib/table.js.map +1 -0
  151. package/dist/types.d.ts +4 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +25 -0
  154. package/dist/types.js.map +1 -0
  155. package/package.json +43 -0
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDevCommands(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoM1D"}
@@ -0,0 +1,226 @@
1
+ import * as p from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { execa } from 'execa';
4
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { createConfigStore } from '../../lib/config.js';
7
+ import { resolveOAuthRedirectUri, resolveWebhookUrl } from '../../lib/env-resolver.js';
8
+ import { getNgrokTunnelUrl, isDockerRunning, isK3dRunning, isNgrokInstalled, } from '../../lib/process.js';
9
+ import { SLACK_REQUIRED_SCOPES } from '../../types.js';
10
+ const REQUIRED_SLACK_ENV_VARS = [
11
+ 'SLACK_CLIENT_ID',
12
+ 'SLACK_CLIENT_SECRET',
13
+ 'SLACK_SIGNING_SECRET',
14
+ ];
15
+ function loadEnvFile(path) {
16
+ if (!existsSync(path))
17
+ return {};
18
+ const lines = readFileSync(path, 'utf-8').split('\n');
19
+ const env = {};
20
+ for (const line of lines) {
21
+ const trimmed = line.trim();
22
+ if (!trimmed || trimmed.startsWith('#'))
23
+ continue;
24
+ const eq = trimmed.indexOf('=');
25
+ if (eq === -1)
26
+ continue;
27
+ env[trimmed.slice(0, eq)] = trimmed.slice(eq + 1).replace(/^["']|["']$/g, '');
28
+ }
29
+ return env;
30
+ }
31
+ function updateEnvVar(envPath, key, value) {
32
+ let content = existsSync(envPath) ? readFileSync(envPath, 'utf-8') : '';
33
+ const regex = new RegExp(`^${key}=.*$`, 'm');
34
+ if (regex.test(content)) {
35
+ content = content.replace(regex, `${key}=${value}`);
36
+ }
37
+ else {
38
+ content += `\n${key}=${value}`;
39
+ }
40
+ writeFileSync(envPath, content);
41
+ }
42
+ export function registerDevCommands(program) {
43
+ const dev = program
44
+ .command('dev')
45
+ .description('Local development commands');
46
+ dev
47
+ .command('setup')
48
+ .description('Interactive wizard to set up local Slack development')
49
+ .action(async () => {
50
+ p.intro(chalk.bgBlue.white(' align dev setup '));
51
+ const config = createConfigStore();
52
+ const repoRoot = process.cwd();
53
+ const envPath = join(repoRoot, '.env');
54
+ // 1. Check runtime environment
55
+ const [k3d, docker] = await Promise.all([isK3dRunning(), isDockerRunning()]);
56
+ p.log.info(`Runtime: k3d ${k3d ? chalk.green('running') : chalk.dim('not running')}, docker ${docker ? chalk.green('running') : chalk.dim('not running')}`);
57
+ if (!k3d && !docker) {
58
+ const choice = await p.select({
59
+ message: 'No local stack running. Start with:',
60
+ options: [
61
+ { value: 'k3d', label: 'k3d + Tilt (recommended)' },
62
+ { value: 'docker', label: 'Docker Compose (simpler)' },
63
+ { value: 'skip', label: 'Skip - I will start it manually' },
64
+ ],
65
+ });
66
+ if (p.isCancel(choice)) {
67
+ p.cancel('Cancelled.');
68
+ process.exit(0);
69
+ }
70
+ if (choice === 'k3d') {
71
+ p.log.step('Run: make k3d-start && tilt up');
72
+ }
73
+ else if (choice === 'docker') {
74
+ p.log.step('Run: make docker-up');
75
+ }
76
+ }
77
+ // 2. Check .env file
78
+ const envExists = existsSync(envPath);
79
+ if (!envExists) {
80
+ p.log.warn('.env not found. Creating from .env.example...');
81
+ const examplePath = join(repoRoot, '.env.example');
82
+ if (existsSync(examplePath)) {
83
+ const example = readFileSync(examplePath, 'utf-8');
84
+ writeFileSync(envPath, example);
85
+ p.log.success('.env created from .env.example');
86
+ }
87
+ else {
88
+ p.log.warn('.env.example not found. Create .env manually.');
89
+ }
90
+ }
91
+ const currentEnv = loadEnvFile(envPath);
92
+ const missingVars = REQUIRED_SLACK_ENV_VARS.filter(v => !currentEnv[v] || currentEnv[v] === `your_${v.toLowerCase()}`);
93
+ if (missingVars.length) {
94
+ p.log.warn(`Missing Slack credentials: ${missingVars.join(', ')}`);
95
+ p.note('Get these from https://api.slack.com/apps\nCreate a new app or use an existing one.', 'Slack App Credentials');
96
+ for (const varName of missingVars) {
97
+ const value = await p.text({
98
+ message: `${varName}:`,
99
+ validate: (v) => !v.trim() ? 'Required' : undefined,
100
+ });
101
+ if (p.isCancel(value)) {
102
+ p.cancel('Cancelled.');
103
+ process.exit(0);
104
+ }
105
+ updateEnvVar(envPath, varName, value);
106
+ }
107
+ p.log.success('Credentials saved to .env');
108
+ }
109
+ else {
110
+ p.log.success('Slack credentials already configured');
111
+ }
112
+ // 3. ngrok setup
113
+ const wantNgrok = await p.confirm({ message: 'Set up ngrok tunnel for OAuth callbacks and webhooks?' });
114
+ if (p.isCancel(wantNgrok)) {
115
+ p.cancel('Cancelled.');
116
+ process.exit(0);
117
+ }
118
+ let ngrokUrl = null;
119
+ if (wantNgrok) {
120
+ const ngrokInstalled = await isNgrokInstalled();
121
+ if (!ngrokInstalled) {
122
+ p.log.warn('ngrok is not installed. Install: https://ngrok.com/download');
123
+ p.note('After installing ngrok, run: align dev setup again', 'Next step');
124
+ process.exit(0);
125
+ }
126
+ // Check if ngrok is already running
127
+ ngrokUrl = await getNgrokTunnelUrl();
128
+ if (ngrokUrl) {
129
+ p.log.success(`ngrok already running: ${ngrokUrl}`);
130
+ }
131
+ else {
132
+ p.log.step('Starting ngrok tunnel on port 8080...');
133
+ // Start ngrok in background
134
+ const ngrokProc = execa('ngrok', ['http', '8080'], { detached: true, stdio: 'ignore' });
135
+ ngrokProc.unref();
136
+ const spinner = p.spinner();
137
+ spinner.start('Waiting for ngrok tunnel...');
138
+ for (let i = 0; i < 15; i++) {
139
+ await new Promise(r => setTimeout(r, 1000));
140
+ ngrokUrl = await getNgrokTunnelUrl();
141
+ if (ngrokUrl)
142
+ break;
143
+ }
144
+ spinner.stop(ngrokUrl ? `Tunnel started: ${ngrokUrl}` : 'Could not get ngrok URL');
145
+ }
146
+ if (ngrokUrl) {
147
+ config.setNgrokUrl(ngrokUrl);
148
+ updateEnvVar(envPath, 'SLACK_REDIRECT_URI', `${ngrokUrl}/oauth/callback/slack`);
149
+ p.log.success('.env updated with ngrok URL');
150
+ }
151
+ }
152
+ const localEnv = config.getEnvironment('local');
153
+ if (ngrokUrl)
154
+ localEnv.ngrokUrl = ngrokUrl;
155
+ // 4. Print Slack app configuration instructions
156
+ const redirectUri = resolveOAuthRedirectUri('slack', localEnv);
157
+ const webhookUrl = resolveWebhookUrl('slack', localEnv);
158
+ p.note([
159
+ `${chalk.bold('OAuth Redirect URL')} (add to Slack app):`,
160
+ ` ${chalk.cyan(redirectUri)}`,
161
+ '',
162
+ `${chalk.bold('Events API Request URL')} (add to Slack app):`,
163
+ ` ${chalk.cyan(webhookUrl)}`,
164
+ '',
165
+ `${chalk.bold('Required Bot Token Scopes')} (add in Slack app OAuth & Permissions):`,
166
+ SLACK_REQUIRED_SCOPES.map(s => ` ${s}`).join('\n'),
167
+ ].join('\n'), 'Configure your Slack app');
168
+ p.outro(chalk.green('Setup complete. Run: tilt up (or make docker-up)'));
169
+ });
170
+ dev
171
+ .command('start')
172
+ .description('Start the local development stack')
173
+ .option('--mode <mode>', 'Stack mode: k3d or docker', 'k3d')
174
+ .option('--minimal', 'Start gateway only (no tilt)')
175
+ .action(async (opts) => {
176
+ if (opts.mode === 'docker') {
177
+ console.log(chalk.dim('Starting Docker Compose stack...'));
178
+ await execa('make', ['docker-up'], { stdout: process.stdout, stderr: process.stderr });
179
+ }
180
+ else {
181
+ if (!opts.minimal) {
182
+ console.log(chalk.dim('Starting k3d cluster...'));
183
+ await execa('make', ['k3d-start'], { stdout: process.stdout, stderr: process.stderr });
184
+ }
185
+ console.log(chalk.dim('Starting Tilt...'));
186
+ await execa('tilt', ['up'], { stdout: process.stdout, stderr: process.stderr });
187
+ }
188
+ });
189
+ dev
190
+ .command('stop')
191
+ .description('Stop the local development stack')
192
+ .option('--mode <mode>', 'Stack mode: k3d or docker', 'k3d')
193
+ .action(async (opts) => {
194
+ if (opts.mode === 'docker') {
195
+ await execa('make', ['docker-down'], { stdout: process.stdout, stderr: process.stderr });
196
+ }
197
+ else {
198
+ await execa('tilt', ['down'], { stdout: process.stdout, stderr: process.stderr });
199
+ }
200
+ });
201
+ dev
202
+ .command('status')
203
+ .description('Show health of local services')
204
+ .action(async () => {
205
+ const endpoints = [
206
+ { name: 'Gateway', url: 'http://localhost:8080/health' },
207
+ { name: 'Brain', url: 'http://localhost:8090/health' },
208
+ { name: 'Slack connector', url: 'http://localhost:8081/health' },
209
+ { name: 'Jira connector', url: 'http://localhost:8083/health' },
210
+ { name: 'GitHub connector', url: 'http://localhost:8085/health' },
211
+ ];
212
+ console.log(chalk.bold('\nLocal service health:\n'));
213
+ await Promise.all(endpoints.map(async (ep) => {
214
+ try {
215
+ const res = await fetch(ep.url, { signal: AbortSignal.timeout(2000) });
216
+ const ok = res.ok;
217
+ console.log(` ${ok ? chalk.green('UP') : chalk.red('DOWN')} ${ep.name.padEnd(20)} ${chalk.dim(ep.url)}`);
218
+ }
219
+ catch {
220
+ console.log(` ${chalk.dim('N/A')} ${ep.name.padEnd(20)} ${chalk.dim(ep.url)}`);
221
+ }
222
+ }));
223
+ console.log('');
224
+ });
225
+ }
226
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDriftCommand(program: Command): void;
3
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC3D"}
@@ -0,0 +1,51 @@
1
+ import { resolveEnv } from '../lib/resolve-env.js';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { createConfigStore } from '../lib/config.js';
5
+ import { createGatewayClient } from '../lib/gateway-client.js';
6
+ import { renderTable } from '../lib/table.js';
7
+ const SEVERITY_COLOR = {
8
+ critical: chalk.bgRed.white,
9
+ major: chalk.red,
10
+ moderate: chalk.yellow,
11
+ minor: chalk.dim,
12
+ none: chalk.dim,
13
+ };
14
+ export function registerDriftCommand(program) {
15
+ program
16
+ .command('drift')
17
+ .description('Show org-wide drift summary (decisions that may be out of date)')
18
+ .option('--env <env>', 'Environment')
19
+ .action(async (opts) => {
20
+ const client = createGatewayClient(createConfigStore().getEnvironment(resolveEnv(opts.env)));
21
+ const spinner = ora('Fetching drift summary...').start();
22
+ try {
23
+ const summary = await client.getDriftSummary();
24
+ spinner.stop();
25
+ if (!summary.length) {
26
+ console.log(chalk.green('\nNo drift detected.\n'));
27
+ return;
28
+ }
29
+ console.log(chalk.bold(`\nDrift Summary (${summary.length} decisions)\n`));
30
+ renderTable([
31
+ { header: 'SEVERITY', width: 12 },
32
+ { header: 'TITLE', width: 50 },
33
+ { header: 'SUMMARY', width: 50 },
34
+ { header: 'CHECKED', width: 20 },
35
+ ], summary.map(d => {
36
+ const color = SEVERITY_COLOR[d.drift_severity] ?? chalk.dim;
37
+ return [
38
+ color(d.drift_severity),
39
+ d.title,
40
+ d.drift_summary,
41
+ new Date(d.checked_at).toLocaleDateString(),
42
+ ];
43
+ }));
44
+ }
45
+ catch (err) {
46
+ spinner.fail(chalk.red(err.message));
47
+ process.exit(1);
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/commands/drift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,cAAc,GAA0C;IAC5D,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;IAC3B,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,QAAQ,EAAE,KAAK,CAAC,MAAM;IACtB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,IAAI,EAAE,KAAK,CAAC,GAAG;CAChB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC;YAC3E,WAAW,CACT;gBACE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;gBACjC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC9B,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;gBAChC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;aACjC,EACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACd,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC;gBAC5D,OAAO;oBACL,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;oBACvB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,aAAa;oBACf,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;iBAC5C,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerEnvCommand(program: Command): void;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyBzD"}
@@ -0,0 +1,28 @@
1
+ import chalk from 'chalk';
2
+ import { createConfigStore } from '../lib/config.js';
3
+ const VALID_ENVS = ['local', 'preview', 'prod'];
4
+ export function registerEnvCommand(program) {
5
+ const env = program
6
+ .command('env')
7
+ .description('Get or set the default environment (local, preview, prod)');
8
+ env
9
+ .command('set <env>')
10
+ .description('Set the default environment for all commands')
11
+ .action((name) => {
12
+ if (!VALID_ENVS.includes(name)) {
13
+ console.error(chalk.red(`Invalid env "${name}". Must be one of: ${VALID_ENVS.join(', ')}`));
14
+ process.exit(1);
15
+ }
16
+ createConfigStore().setDefaultEnv(name);
17
+ console.log(chalk.green(`Default env set to ${chalk.bold(name)}`));
18
+ console.log(chalk.dim('All commands will now target this environment unless --env is passed.'));
19
+ });
20
+ env
21
+ .command('get')
22
+ .description('Show the current default environment')
23
+ .action(() => {
24
+ const current = createConfigStore().getDefaultEnv();
25
+ console.log(current);
26
+ });
27
+ }
28
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AAEnE,MAAM,UAAU,GAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2DAA2D,CAAC,CAAC;IAE5E,GAAG;SACA,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAe,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,sBAAsB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,iBAAiB,EAAE,CAAC,aAAa,CAAC,IAAe,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC,aAAa,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerImportConfluenceCommand(importCmd: Command): void;
3
+ //# sourceMappingURL=confluence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../src/commands/import/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkCxE"}
@@ -0,0 +1,43 @@
1
+ import * as p from '@clack/prompts';
2
+ import { createConfigStore } from '../../lib/config.js';
3
+ import { createGatewayClient } from '../../lib/gateway-client.js';
4
+ import { resolveEnv } from '../../lib/resolve-env.js';
5
+ import { resolveAppUrl } from '../../lib/env-resolver.js';
6
+ import { fetchConfluenceItems } from '../../lib/fetchers/confluence.js';
7
+ import { runPersonalImport } from '../../lib/personal-import.js';
8
+ export function registerImportConfluenceCommand(importCmd) {
9
+ importCmd
10
+ .command('confluence')
11
+ .description('Import your Confluence pages (Atlassian API token)')
12
+ .requiredOption('--email <email>', 'Your Atlassian account email')
13
+ .requiredOption('--token <token>', 'Atlassian API token (from id.atlassian.com/manage-profile/security/api-tokens)')
14
+ .requiredOption('--domain <domain>', 'Your Confluence domain (e.g. company.atlassian.net)')
15
+ .option('--limit <n>', 'Max pages to import', '50')
16
+ .option('--approve', 'Skip confirmation prompt')
17
+ .option('--env <env>', 'Environment')
18
+ .action(async (opts) => {
19
+ const config = createConfigStore();
20
+ const envName = resolveEnv(opts.env);
21
+ const env = config.getEnvironment(envName);
22
+ const client = createGatewayClient(env);
23
+ p.intro('align import confluence');
24
+ const spinner = p.spinner();
25
+ spinner.start('Fetching your Confluence pages...');
26
+ try {
27
+ const items = await fetchConfluenceItems({
28
+ email: opts.email,
29
+ token: opts.token,
30
+ domain: opts.domain,
31
+ limit: parseInt(opts.limit, 10),
32
+ });
33
+ spinner.stop(`Found ${items.length} pages`);
34
+ await runPersonalImport(items, client, { label: 'Confluence', approve: opts.approve, appUrl: resolveAppUrl(env) });
35
+ }
36
+ catch (err) {
37
+ spinner.stop('');
38
+ p.log.error(err.message);
39
+ process.exit(1);
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=confluence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/commands/import/confluence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAWjE,MAAM,UAAU,+BAA+B,CAAC,SAAkB;IAChE,SAAS;SACN,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oDAAoD,CAAC;SACjE,cAAc,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACjE,cAAc,CAAC,iBAAiB,EAAE,gFAAgF,CAAC;SACnH,cAAc,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;SAC1F,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,IAAI,CAAC;SAClD,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAA0B,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAExC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC;gBACvC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5C,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerImportGitCommand(importCmd: Command): void;
3
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/commands/import/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAwDjE"}
@@ -0,0 +1,59 @@
1
+ import * as p from '@clack/prompts';
2
+ import { createConfigStore } from '../../lib/config.js';
3
+ import { createGatewayClient } from '../../lib/gateway-client.js';
4
+ import { resolveEnv } from '../../lib/resolve-env.js';
5
+ import { resolveAppUrl } from '../../lib/env-resolver.js';
6
+ import { buildCommitUrl, formatCommitAsText, getCommitHistory, getRemoteUrl, isGitRepo } from '../../lib/git.js';
7
+ import { runPersonalImport } from '../../lib/personal-import.js';
8
+ export function registerImportGitCommand(importCmd) {
9
+ importCmd
10
+ .command('git')
11
+ .description('Import local git commit history (no auth required)')
12
+ .option('--limit <n>', 'Max commits to import', '100')
13
+ .option('--from <date>', 'Start date (ISO e.g. 2025-01-01)')
14
+ .option('--to <date>', 'End date (ISO)')
15
+ .option('--branch <name>', 'Branch to scan (default: current)')
16
+ .option('--approve', 'Skip confirmation prompt')
17
+ .option('--env <env>', 'Environment')
18
+ .action(async (opts) => {
19
+ if (!(await isGitRepo())) {
20
+ p.log.error('Not in a git repository. Run from inside your project directory.');
21
+ process.exit(1);
22
+ }
23
+ const config = createConfigStore();
24
+ const envName = resolveEnv(opts.env);
25
+ const env = config.getEnvironment(envName);
26
+ const client = createGatewayClient(env);
27
+ p.intro('align import git');
28
+ const spinner = p.spinner();
29
+ spinner.start('Reading git history...');
30
+ const commits = await getCommitHistory({
31
+ limit: parseInt(opts.limit, 10),
32
+ from: opts.from,
33
+ to: opts.to,
34
+ branch: opts.branch,
35
+ });
36
+ const remoteUrl = await getRemoteUrl();
37
+ spinner.stop(`Found ${commits.length} commits worth importing`);
38
+ if (remoteUrl) {
39
+ const remote = remoteUrl.includes('github.com') ? 'GitHub'
40
+ : remoteUrl.includes('gitlab.com') ? 'GitLab' : 'remote';
41
+ p.log.info(`Detected ${remote} remote - commits will have clickable links`);
42
+ }
43
+ const items = commits.map(c => {
44
+ const url = buildCommitUrl(remoteUrl, c.sha);
45
+ return {
46
+ source_url: url,
47
+ platform: 'git',
48
+ raw_text: formatCommitAsText(c, url),
49
+ title: c.subject,
50
+ };
51
+ });
52
+ await runPersonalImport(items, client, {
53
+ label: 'git history',
54
+ approve: opts.approve,
55
+ appUrl: resolveAppUrl(env),
56
+ });
57
+ });
58
+ }
59
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/commands/import/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerImportGitHubCommand(importCmd: Command): void;
3
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/commands/import/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA2BpE"}
@@ -0,0 +1,36 @@
1
+ import * as p from '@clack/prompts';
2
+ import { createConfigStore } from '../../lib/config.js';
3
+ import { createGatewayClient } from '../../lib/gateway-client.js';
4
+ import { resolveEnv } from '../../lib/resolve-env.js';
5
+ import { resolveAppUrl } from '../../lib/env-resolver.js';
6
+ import { fetchGitHubItems } from '../../lib/fetchers/github.js';
7
+ import { runPersonalImport } from '../../lib/personal-import.js';
8
+ export function registerImportGitHubCommand(importCmd) {
9
+ importCmd
10
+ .command('github')
11
+ .description('Import your GitHub PRs and issues (personal access token)')
12
+ .requiredOption('--token <token>', 'GitHub personal access token (ghp_...)')
13
+ .option('--limit <n>', 'Max items to import', '100')
14
+ .option('--approve', 'Skip confirmation prompt')
15
+ .option('--env <env>', 'Environment')
16
+ .action(async (opts) => {
17
+ const config = createConfigStore();
18
+ const envName = resolveEnv(opts.env);
19
+ const env = config.getEnvironment(envName);
20
+ const client = createGatewayClient(env);
21
+ p.intro('align import github');
22
+ const spinner = p.spinner();
23
+ spinner.start('Fetching your GitHub PRs and issues...');
24
+ try {
25
+ const items = await fetchGitHubItems({ token: opts.token, limit: parseInt(opts.limit, 10) });
26
+ spinner.stop(`Found ${items.length} items`);
27
+ await runPersonalImport(items, client, { label: 'GitHub', approve: opts.approve, appUrl: resolveAppUrl(env) });
28
+ }
29
+ catch (err) {
30
+ spinner.stop('');
31
+ p.log.error(err.message);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ }
36
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/commands/import/github.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AASjE,MAAM,UAAU,2BAA2B,CAAC,SAAkB;IAC5D,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,cAAc,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SAC3E,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAExC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7F,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5C,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerImportGitLabCommand(importCmd: Command): void;
3
+ //# sourceMappingURL=gitlab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../../src/commands/import/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA4BpE"}
@@ -0,0 +1,37 @@
1
+ import * as p from '@clack/prompts';
2
+ import { createConfigStore } from '../../lib/config.js';
3
+ import { createGatewayClient } from '../../lib/gateway-client.js';
4
+ import { resolveEnv } from '../../lib/resolve-env.js';
5
+ import { resolveAppUrl } from '../../lib/env-resolver.js';
6
+ import { fetchGitLabItems } from '../../lib/fetchers/gitlab.js';
7
+ import { runPersonalImport } from '../../lib/personal-import.js';
8
+ export function registerImportGitLabCommand(importCmd) {
9
+ importCmd
10
+ .command('gitlab')
11
+ .description('Import your GitLab merge requests (personal access token)')
12
+ .requiredOption('--token <token>', 'GitLab personal access token (glpat-...)')
13
+ .option('--domain <domain>', 'GitLab domain for self-hosted (default: gitlab.com)')
14
+ .option('--limit <n>', 'Max items to import', '100')
15
+ .option('--approve', 'Skip confirmation prompt')
16
+ .option('--env <env>', 'Environment')
17
+ .action(async (opts) => {
18
+ const config = createConfigStore();
19
+ const envName = resolveEnv(opts.env);
20
+ const env = config.getEnvironment(envName);
21
+ const client = createGatewayClient(env);
22
+ p.intro('align import gitlab');
23
+ const spinner = p.spinner();
24
+ spinner.start('Fetching your GitLab merge requests...');
25
+ try {
26
+ const items = await fetchGitLabItems({ token: opts.token, domain: opts.domain, limit: parseInt(opts.limit, 10) });
27
+ spinner.stop(`Found ${items.length} items`);
28
+ await runPersonalImport(items, client, { label: 'GitLab', approve: opts.approve, appUrl: resolveAppUrl(env) });
29
+ }
30
+ catch (err) {
31
+ spinner.stop('');
32
+ p.log.error(err.message);
33
+ process.exit(1);
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=gitlab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../src/commands/import/gitlab.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAUjE,MAAM,UAAU,2BAA2B,CAAC,SAAkB;IAC5D,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,cAAc,CAAC,iBAAiB,EAAE,0CAA0C,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,qDAAqD,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,KAAK,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAExC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAClH,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC5C,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerImportJiraCommand(importCmd: Command): void;
3
+ //# sourceMappingURL=jira.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/commands/import/jira.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkClE"}