@ateriss_/aiv-cli 0.1.0 → 1.0.1

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.
@@ -43,6 +43,7 @@ export async function selectPR(prs: PullRequest[], message: string): Promise<Pul
43
43
  }
44
44
 
45
45
  export type PostReviewAction = 'approve' | 'request_changes' | 'skip';
46
+ export type MergeStrategy = 'merge' | 'squash' | 'rebase';
46
47
 
47
48
  export async function selectPostReviewAction(message: string): Promise<PostReviewAction> {
48
49
  const inquirer = await getInquirer();
@@ -64,6 +65,34 @@ export async function selectPostReviewAction(message: string): Promise<PostRevie
64
65
  return answers['action'] as PostReviewAction;
65
66
  }
66
67
 
68
+ export async function confirmMerge(message: string): Promise<boolean> {
69
+ const inquirer = await getInquirer();
70
+ const answers = await inquirer.prompt([{
71
+ type: 'confirm',
72
+ name: 'ok',
73
+ message,
74
+ default: false,
75
+ }]);
76
+ return Boolean(answers['ok']);
77
+ }
78
+
79
+ export async function selectMergeStrategy(message: string): Promise<MergeStrategy> {
80
+ const inquirer = await getInquirer();
81
+ const answers = await inquirer.prompt([{
82
+ type: 'list',
83
+ name: 'strategy',
84
+ message,
85
+ choices: [
86
+ { name: chalk.cyan('Squash and merge'), value: 'squash', short: 'Squash' },
87
+ { name: 'Merge commit', value: 'merge', short: 'Merge' },
88
+ { name: chalk.dim('Rebase and merge'), value: 'rebase', short: 'Rebase' },
89
+ ],
90
+ pageSize: 3,
91
+ loop: false,
92
+ }]);
93
+ return answers['strategy'] as MergeStrategy;
94
+ }
95
+
67
96
  export async function confirmReview(pr: PullRequest, label: string): Promise<boolean> {
68
97
  const inquirer = await getInquirer();
69
98
 
package/src/git/github.ts CHANGED
@@ -59,6 +59,22 @@ export class GithubClient {
59
59
  return { pr, files, rawDiff };
60
60
  }
61
61
 
62
+ async mergePR(
63
+ owner: string,
64
+ repo: string,
65
+ prNumber: number,
66
+ mergeMethod: 'merge' | 'squash' | 'rebase' = 'squash',
67
+ ): Promise<void> {
68
+ const url = `${GITHUB_API}/repos/${owner}/${repo}/pulls/${prNumber}/merge`;
69
+ const { default: fetch } = await import('node-fetch');
70
+ const res = await fetch(url, {
71
+ method: 'PUT',
72
+ headers: { ...this.headers, 'Content-Type': 'application/json' },
73
+ body: JSON.stringify({ merge_method: mergeMethod }),
74
+ }) as unknown as Response;
75
+ if (!res.ok) await this.throwError(res, `merge PR #${prNumber}`);
76
+ }
77
+
62
78
  async submitReview(
63
79
  owner: string,
64
80
  repo: string,
package/src/i18n/en.ts CHANGED
@@ -175,6 +175,14 @@ export const en = {
175
175
  postReviewFailed: (msg: string) => `Failed to submit review: ${msg}`,
176
176
  postReviewRefreshing: 'Refreshing project context...',
177
177
  postReviewRefreshed: 'Context updated.',
178
+ postReviewMergeConfirm: 'Merge this PR now?',
179
+ postReviewSelectMerge: 'Select merge strategy:',
180
+ postReviewMerging: (n: number) => `Merging PR #${n}...`,
181
+ postReviewMerged: (n: number) => ` PR #${n} merged.`,
182
+ postReviewMergeFailed: (msg: string) => `Failed to merge: ${msg}`,
183
+ postReviewMergeStrategyMerge: 'Merge commit',
184
+ postReviewMergeStrategySquash: 'Squash and merge',
185
+ postReviewMergeStrategyRebase: 'Rebase and merge',
178
186
 
179
187
  // ── context generate ───────────────────────────────────────────────────────
180
188
  contextGenerateTitle: '\n Generating context and rules with AI...\n',
package/src/i18n/es.ts CHANGED
@@ -177,6 +177,14 @@ export const es: TranslationKeys = {
177
177
  postReviewFailed: (msg: string) => `Error al enviar la revisión: ${msg}`,
178
178
  postReviewRefreshing: 'Actualizando contexto del proyecto...',
179
179
  postReviewRefreshed: 'Contexto actualizado.',
180
+ postReviewMergeConfirm: '¿Hacer merge de este PR ahora?',
181
+ postReviewSelectMerge: 'Selecciona la estrategia de merge:',
182
+ postReviewMerging: (n: number) => `Haciendo merge del PR #${n}...`,
183
+ postReviewMerged: (n: number) => ` PR #${n} mergeado.`,
184
+ postReviewMergeFailed: (msg: string) => `Error al hacer merge: ${msg}`,
185
+ postReviewMergeStrategyMerge: 'Merge commit',
186
+ postReviewMergeStrategySquash: 'Squash and merge',
187
+ postReviewMergeStrategyRebase: 'Rebase and merge',
180
188
 
181
189
  // ── context generate ───────────────────────────────────────────────────────
182
190
  contextGenerateTitle: '\n Generando contexto y reglas con IA...\n',