@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.
- package/README.md +329 -324
- package/dist/index.js +50 -48
- package/package.json +1 -1
- package/src/agents/base.ts +6 -1
- package/src/cli/commands/review.ts +13 -1
- package/src/cli/selector.ts +29 -0
- package/src/git/github.ts +16 -0
- package/src/i18n/en.ts +8 -0
- package/src/i18n/es.ts +8 -0
package/src/cli/selector.ts
CHANGED
|
@@ -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',
|