@ariso-ai/ivan 1.0.5 → 1.0.6
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/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +202 -3
- package/dist/config.js.map +1 -1
- package/dist/database/migrations/009_create_repository_table.d.ts +3 -0
- package/dist/database/migrations/009_create_repository_table.d.ts.map +1 -0
- package/dist/database/migrations/009_create_repository_table.js +15 -0
- package/dist/database/migrations/009_create_repository_table.js.map +1 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.d.ts +3 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.d.ts.map +1 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.js +13 -0
- package/dist/database/migrations/010_add_repository_id_to_jobs_and_tasks.js.map +1 -0
- package/dist/database/migrations/011_create_learnings_table.d.ts +3 -0
- package/dist/database/migrations/011_create_learnings_table.d.ts.map +1 -0
- package/dist/database/migrations/011_create_learnings_table.js +16 -0
- package/dist/database/migrations/011_create_learnings_table.js.map +1 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.d.ts +3 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.d.ts.map +1 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.js +13 -0
- package/dist/database/migrations/012_create_learning_embeddings_table.js.map +1 -0
- package/dist/database/migrations/index.d.ts.map +1 -1
- package/dist/database/migrations/index.js +5 -1
- package/dist/database/migrations/index.js.map +1 -1
- package/dist/database/types.d.ts +11 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/services/address-executor.d.ts.map +1 -1
- package/dist/services/address-executor.js +8 -21
- package/dist/services/address-executor.js.map +1 -1
- package/dist/services/address-task-executor.d.ts.map +1 -1
- package/dist/services/address-task-executor.js +5 -6
- package/dist/services/address-task-executor.js.map +1 -1
- package/dist/services/git-interfaces.d.ts +67 -0
- package/dist/services/git-interfaces.d.ts.map +1 -0
- package/dist/services/git-interfaces.js +2 -0
- package/dist/services/git-interfaces.js.map +1 -0
- package/dist/services/git-manager-cli.d.ts +33 -0
- package/dist/services/git-manager-cli.d.ts.map +1 -0
- package/dist/services/git-manager-cli.js +734 -0
- package/dist/services/git-manager-cli.js.map +1 -0
- package/dist/services/git-manager-pat.d.ts +36 -0
- package/dist/services/git-manager-pat.d.ts.map +1 -0
- package/dist/services/git-manager-pat.js +667 -0
- package/dist/services/git-manager-pat.js.map +1 -0
- package/dist/services/github-api-client.d.ts +115 -0
- package/dist/services/github-api-client.d.ts.map +1 -0
- package/dist/services/github-api-client.js +256 -0
- package/dist/services/github-api-client.js.map +1 -0
- package/dist/services/index.d.ts +9 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +12 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/job-manager.d.ts +3 -3
- package/dist/services/job-manager.d.ts.map +1 -1
- package/dist/services/job-manager.js +14 -10
- package/dist/services/job-manager.js.map +1 -1
- package/dist/services/learn-executor.d.ts +13 -0
- package/dist/services/learn-executor.d.ts.map +1 -0
- package/dist/services/learn-executor.js +293 -0
- package/dist/services/learn-executor.js.map +1 -0
- package/dist/services/learning-service.d.ts +30 -0
- package/dist/services/learning-service.d.ts.map +1 -0
- package/dist/services/learning-service.js +88 -0
- package/dist/services/learning-service.js.map +1 -0
- package/dist/services/pr-service-cli.d.ts +12 -0
- package/dist/services/pr-service-cli.d.ts.map +1 -0
- package/dist/services/pr-service-cli.js +291 -0
- package/dist/services/pr-service-cli.js.map +1 -0
- package/dist/services/pr-service-pat.d.ts +15 -0
- package/dist/services/pr-service-pat.d.ts.map +1 -0
- package/dist/services/pr-service-pat.js +255 -0
- package/dist/services/pr-service-pat.js.map +1 -0
- package/dist/services/repository-manager-cli.d.ts +17 -0
- package/dist/services/repository-manager-cli.d.ts.map +1 -0
- package/dist/services/repository-manager-cli.js +148 -0
- package/dist/services/repository-manager-cli.js.map +1 -0
- package/dist/services/repository-manager-pat.d.ts +17 -0
- package/dist/services/repository-manager-pat.d.ts.map +1 -0
- package/dist/services/repository-manager-pat.js +148 -0
- package/dist/services/repository-manager-pat.js.map +1 -0
- package/dist/services/repository-manager.d.ts +7 -0
- package/dist/services/repository-manager.d.ts.map +1 -1
- package/dist/services/repository-manager.js +47 -0
- package/dist/services/repository-manager.js.map +1 -1
- package/dist/services/service-factory.d.ts +27 -0
- package/dist/services/service-factory.d.ts.map +1 -0
- package/dist/services/service-factory.js +79 -0
- package/dist/services/service-factory.js.map +1 -0
- package/dist/services/task-executor.d.ts.map +1 -1
- package/dist/services/task-executor.js +39 -68
- package/dist/services/task-executor.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { DatabaseManager } from '../database.js';
|
|
7
|
+
export class RepositoryManagerCLI {
|
|
8
|
+
dbManager;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.dbManager = new DatabaseManager();
|
|
11
|
+
}
|
|
12
|
+
async getValidWorkingDirectory() {
|
|
13
|
+
const currentDir = process.cwd();
|
|
14
|
+
if (this.isValidTargetRepository(currentDir)) {
|
|
15
|
+
return currentDir;
|
|
16
|
+
}
|
|
17
|
+
console.log(chalk.yellow('⚠️ Current directory is not a valid target repository'));
|
|
18
|
+
if (!this.isGitRepository(currentDir)) {
|
|
19
|
+
console.log(chalk.red('❌ Not a git repository'));
|
|
20
|
+
}
|
|
21
|
+
else if (this.isIvanRepository(currentDir)) {
|
|
22
|
+
console.log(chalk.red('❌ Cannot run Ivan on itself'));
|
|
23
|
+
}
|
|
24
|
+
return await this.promptForRepositoryPath();
|
|
25
|
+
}
|
|
26
|
+
isGitRepository(dir) {
|
|
27
|
+
try {
|
|
28
|
+
execSync('git rev-parse --git-dir', {
|
|
29
|
+
cwd: dir,
|
|
30
|
+
stdio: 'ignore'
|
|
31
|
+
});
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isIvanRepository(dir) {
|
|
39
|
+
try {
|
|
40
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
41
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
45
|
+
return packageJson.name === '@ariso-ai/ivan' || packageJson.name === 'ivan';
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
isValidTargetRepository(dir) {
|
|
52
|
+
return this.isGitRepository(dir) && !this.isIvanRepository(dir);
|
|
53
|
+
}
|
|
54
|
+
async promptForRepositoryPath() {
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(chalk.blue('📁 Please specify the repository where Ivan should work'));
|
|
57
|
+
while (true) {
|
|
58
|
+
const { repositoryPath } = await inquirer.prompt([
|
|
59
|
+
{
|
|
60
|
+
type: 'input',
|
|
61
|
+
name: 'repositoryPath',
|
|
62
|
+
message: 'Enter the path to your target repository:',
|
|
63
|
+
validate: (input) => {
|
|
64
|
+
if (!input || input.trim().length === 0) {
|
|
65
|
+
return 'Please enter a valid path';
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]);
|
|
71
|
+
const fullPath = path.resolve(repositoryPath.trim());
|
|
72
|
+
if (!fs.existsSync(fullPath)) {
|
|
73
|
+
console.log(chalk.red('❌ Path does not exist'));
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!fs.statSync(fullPath).isDirectory()) {
|
|
77
|
+
console.log(chalk.red('❌ Path is not a directory'));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (!this.isGitRepository(fullPath)) {
|
|
81
|
+
console.log(chalk.red('❌ Path is not a git repository'));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (this.isIvanRepository(fullPath)) {
|
|
85
|
+
console.log(chalk.red('❌ Cannot run Ivan on itself'));
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
console.log(chalk.green(`✅ Using repository: ${fullPath}`));
|
|
89
|
+
return fullPath;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getRepositoryInfo(workingDir) {
|
|
93
|
+
try {
|
|
94
|
+
const repoName = path.basename(workingDir);
|
|
95
|
+
const branch = execSync('git branch --show-current', {
|
|
96
|
+
cwd: workingDir,
|
|
97
|
+
encoding: 'utf8'
|
|
98
|
+
}).trim();
|
|
99
|
+
return { name: repoName, branch };
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return { name: path.basename(workingDir), branch: 'unknown' };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
getRemoteUrl(workingDir) {
|
|
106
|
+
try {
|
|
107
|
+
const remoteUrl = execSync('git config --get remote.origin.url', {
|
|
108
|
+
cwd: workingDir,
|
|
109
|
+
encoding: 'utf8'
|
|
110
|
+
}).trim();
|
|
111
|
+
return remoteUrl || null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async getOrCreateRepository(workingDir) {
|
|
118
|
+
const db = this.dbManager.getKysely();
|
|
119
|
+
// Check if repository exists
|
|
120
|
+
const existingRepo = await db
|
|
121
|
+
.selectFrom('repositories')
|
|
122
|
+
.selectAll()
|
|
123
|
+
.where('directory', '=', workingDir)
|
|
124
|
+
.executeTakeFirst();
|
|
125
|
+
if (existingRepo) {
|
|
126
|
+
return existingRepo;
|
|
127
|
+
}
|
|
128
|
+
// Create new repository
|
|
129
|
+
const { name } = this.getRepositoryInfo(workingDir);
|
|
130
|
+
const remoteUrl = this.getRemoteUrl(workingDir);
|
|
131
|
+
await db.insertInto('repositories').values({
|
|
132
|
+
remote_url: remoteUrl,
|
|
133
|
+
directory: workingDir,
|
|
134
|
+
name
|
|
135
|
+
}).execute();
|
|
136
|
+
// Fetch the created repository with its id
|
|
137
|
+
const createdRepo = await db
|
|
138
|
+
.selectFrom('repositories')
|
|
139
|
+
.selectAll()
|
|
140
|
+
.where('directory', '=', workingDir)
|
|
141
|
+
.executeTakeFirstOrThrow();
|
|
142
|
+
return createdRepo;
|
|
143
|
+
}
|
|
144
|
+
close() {
|
|
145
|
+
this.dbManager.close();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=repository-manager-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-manager-cli.js","sourceRoot":"","sources":["../../src/services/repository-manager-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Selectable } from 'kysely';
|
|
2
|
+
import { Repository } from '../database.js';
|
|
3
|
+
import { IRepositoryManager, RepositoryInfo } from './git-interfaces.js';
|
|
4
|
+
export declare class RepositoryManagerPAT implements IRepositoryManager {
|
|
5
|
+
private dbManager;
|
|
6
|
+
constructor();
|
|
7
|
+
getValidWorkingDirectory(): Promise<string>;
|
|
8
|
+
private isGitRepository;
|
|
9
|
+
private isIvanRepository;
|
|
10
|
+
private isValidTargetRepository;
|
|
11
|
+
private promptForRepositoryPath;
|
|
12
|
+
getRepositoryInfo(workingDir: string): RepositoryInfo;
|
|
13
|
+
private getRemoteUrl;
|
|
14
|
+
getOrCreateRepository(workingDir: string): Promise<Selectable<Repository>>;
|
|
15
|
+
close(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=repository-manager-pat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-manager-pat.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAmB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,SAAS,CAAkB;;IAM7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBjD,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,uBAAuB;YAIjB,uBAAuB;IA8CrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAcrD,OAAO,CAAC,YAAY;IAYd,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAkChF,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { DatabaseManager } from '../database.js';
|
|
7
|
+
export class RepositoryManagerPAT {
|
|
8
|
+
dbManager;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.dbManager = new DatabaseManager();
|
|
11
|
+
}
|
|
12
|
+
async getValidWorkingDirectory() {
|
|
13
|
+
const currentDir = process.cwd();
|
|
14
|
+
if (this.isValidTargetRepository(currentDir)) {
|
|
15
|
+
return currentDir;
|
|
16
|
+
}
|
|
17
|
+
console.log(chalk.yellow('⚠️ Current directory is not a valid target repository'));
|
|
18
|
+
if (!this.isGitRepository(currentDir)) {
|
|
19
|
+
console.log(chalk.red('❌ Not a git repository'));
|
|
20
|
+
}
|
|
21
|
+
else if (this.isIvanRepository(currentDir)) {
|
|
22
|
+
console.log(chalk.red('❌ Cannot run Ivan on itself'));
|
|
23
|
+
}
|
|
24
|
+
return await this.promptForRepositoryPath();
|
|
25
|
+
}
|
|
26
|
+
isGitRepository(dir) {
|
|
27
|
+
try {
|
|
28
|
+
execSync('git rev-parse --git-dir', {
|
|
29
|
+
cwd: dir,
|
|
30
|
+
stdio: 'ignore'
|
|
31
|
+
});
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isIvanRepository(dir) {
|
|
39
|
+
try {
|
|
40
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
41
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
45
|
+
return packageJson.name === '@ariso-ai/ivan' || packageJson.name === 'ivan';
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
isValidTargetRepository(dir) {
|
|
52
|
+
return this.isGitRepository(dir) && !this.isIvanRepository(dir);
|
|
53
|
+
}
|
|
54
|
+
async promptForRepositoryPath() {
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(chalk.blue('📁 Please specify the repository where Ivan should work'));
|
|
57
|
+
while (true) {
|
|
58
|
+
const { repositoryPath } = await inquirer.prompt([
|
|
59
|
+
{
|
|
60
|
+
type: 'input',
|
|
61
|
+
name: 'repositoryPath',
|
|
62
|
+
message: 'Enter the path to your target repository:',
|
|
63
|
+
validate: (input) => {
|
|
64
|
+
if (!input || input.trim().length === 0) {
|
|
65
|
+
return 'Please enter a valid path';
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]);
|
|
71
|
+
const fullPath = path.resolve(repositoryPath.trim());
|
|
72
|
+
if (!fs.existsSync(fullPath)) {
|
|
73
|
+
console.log(chalk.red('❌ Path does not exist'));
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!fs.statSync(fullPath).isDirectory()) {
|
|
77
|
+
console.log(chalk.red('❌ Path is not a directory'));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (!this.isGitRepository(fullPath)) {
|
|
81
|
+
console.log(chalk.red('❌ Path is not a git repository'));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (this.isIvanRepository(fullPath)) {
|
|
85
|
+
console.log(chalk.red('❌ Cannot run Ivan on itself'));
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
console.log(chalk.green(`✅ Using repository: ${fullPath}`));
|
|
89
|
+
return fullPath;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getRepositoryInfo(workingDir) {
|
|
93
|
+
try {
|
|
94
|
+
const repoName = path.basename(workingDir);
|
|
95
|
+
const branch = execSync('git branch --show-current', {
|
|
96
|
+
cwd: workingDir,
|
|
97
|
+
encoding: 'utf8'
|
|
98
|
+
}).trim();
|
|
99
|
+
return { name: repoName, branch };
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return { name: path.basename(workingDir), branch: 'unknown' };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
getRemoteUrl(workingDir) {
|
|
106
|
+
try {
|
|
107
|
+
const remoteUrl = execSync('git config --get remote.origin.url', {
|
|
108
|
+
cwd: workingDir,
|
|
109
|
+
encoding: 'utf8'
|
|
110
|
+
}).trim();
|
|
111
|
+
return remoteUrl || null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async getOrCreateRepository(workingDir) {
|
|
118
|
+
const db = this.dbManager.getKysely();
|
|
119
|
+
// Check if repository exists
|
|
120
|
+
const existingRepo = await db
|
|
121
|
+
.selectFrom('repositories')
|
|
122
|
+
.selectAll()
|
|
123
|
+
.where('directory', '=', workingDir)
|
|
124
|
+
.executeTakeFirst();
|
|
125
|
+
if (existingRepo) {
|
|
126
|
+
return existingRepo;
|
|
127
|
+
}
|
|
128
|
+
// Create new repository
|
|
129
|
+
const { name } = this.getRepositoryInfo(workingDir);
|
|
130
|
+
const remoteUrl = this.getRemoteUrl(workingDir);
|
|
131
|
+
await db.insertInto('repositories').values({
|
|
132
|
+
remote_url: remoteUrl,
|
|
133
|
+
directory: workingDir,
|
|
134
|
+
name
|
|
135
|
+
}).execute();
|
|
136
|
+
// Fetch the created repository with its id
|
|
137
|
+
const createdRepo = await db
|
|
138
|
+
.selectFrom('repositories')
|
|
139
|
+
.selectAll()
|
|
140
|
+
.where('directory', '=', workingDir)
|
|
141
|
+
.executeTakeFirstOrThrow();
|
|
142
|
+
return createdRepo;
|
|
143
|
+
}
|
|
144
|
+
close() {
|
|
145
|
+
this.dbManager.close();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=repository-manager-pat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-manager-pat.js","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import { Selectable } from 'kysely';
|
|
2
|
+
import { Repository } from '../database.js';
|
|
1
3
|
export declare class RepositoryManager {
|
|
4
|
+
private dbManager;
|
|
5
|
+
constructor();
|
|
2
6
|
getValidWorkingDirectory(): Promise<string>;
|
|
3
7
|
private isGitRepository;
|
|
4
8
|
private isIvanRepository;
|
|
@@ -8,5 +12,8 @@ export declare class RepositoryManager {
|
|
|
8
12
|
name: string;
|
|
9
13
|
branch: string;
|
|
10
14
|
};
|
|
15
|
+
private getRemoteUrl;
|
|
16
|
+
getOrCreateRepository(workingDir: string): Promise<Selectable<Repository>>;
|
|
17
|
+
close(): void;
|
|
11
18
|
}
|
|
12
19
|
//# sourceMappingURL=repository-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-manager.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository-manager.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAmB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE7D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAkB;;IAK7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBjD,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,uBAAuB;YAIjB,uBAAuB;IA8CrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAcvE,OAAO,CAAC,YAAY;IAYd,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAkChF,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -3,7 +3,12 @@ import fs from 'fs';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import inquirer from 'inquirer';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
+
import { DatabaseManager } from '../database.js';
|
|
6
7
|
export class RepositoryManager {
|
|
8
|
+
dbManager;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.dbManager = new DatabaseManager();
|
|
11
|
+
}
|
|
7
12
|
async getValidWorkingDirectory() {
|
|
8
13
|
const currentDir = process.cwd();
|
|
9
14
|
if (this.isValidTargetRepository(currentDir)) {
|
|
@@ -97,5 +102,47 @@ export class RepositoryManager {
|
|
|
97
102
|
return { name: path.basename(workingDir), branch: 'unknown' };
|
|
98
103
|
}
|
|
99
104
|
}
|
|
105
|
+
getRemoteUrl(workingDir) {
|
|
106
|
+
try {
|
|
107
|
+
const remoteUrl = execSync('git config --get remote.origin.url', {
|
|
108
|
+
cwd: workingDir,
|
|
109
|
+
encoding: 'utf8'
|
|
110
|
+
}).trim();
|
|
111
|
+
return remoteUrl || null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async getOrCreateRepository(workingDir) {
|
|
118
|
+
const db = this.dbManager.getKysely();
|
|
119
|
+
// Check if repository exists
|
|
120
|
+
const existingRepo = await db
|
|
121
|
+
.selectFrom('repositories')
|
|
122
|
+
.selectAll()
|
|
123
|
+
.where('directory', '=', workingDir)
|
|
124
|
+
.executeTakeFirst();
|
|
125
|
+
if (existingRepo) {
|
|
126
|
+
return existingRepo;
|
|
127
|
+
}
|
|
128
|
+
// Create new repository
|
|
129
|
+
const { name } = this.getRepositoryInfo(workingDir);
|
|
130
|
+
const remoteUrl = this.getRemoteUrl(workingDir);
|
|
131
|
+
await db.insertInto('repositories').values({
|
|
132
|
+
remote_url: remoteUrl,
|
|
133
|
+
directory: workingDir,
|
|
134
|
+
name
|
|
135
|
+
}).execute();
|
|
136
|
+
// Fetch the created repository with its id
|
|
137
|
+
const createdRepo = await db
|
|
138
|
+
.selectFrom('repositories')
|
|
139
|
+
.selectAll()
|
|
140
|
+
.where('directory', '=', workingDir)
|
|
141
|
+
.executeTakeFirstOrThrow();
|
|
142
|
+
return createdRepo;
|
|
143
|
+
}
|
|
144
|
+
close() {
|
|
145
|
+
this.dbManager.close();
|
|
146
|
+
}
|
|
100
147
|
}
|
|
101
148
|
//# sourceMappingURL=repository-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-manager.js","sourceRoot":"","sources":["../../src/services/repository-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"repository-manager.js","sourceRoot":"","sources":["../../src/services/repository-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IGitManager, IPRService, IRepositoryManager } from './git-interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* Factory class for creating service instances based on GitHub authentication configuration
|
|
4
|
+
*/
|
|
5
|
+
export declare class ServiceFactory {
|
|
6
|
+
private configManager;
|
|
7
|
+
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* Create a GitManager instance based on the configured authentication type
|
|
10
|
+
*/
|
|
11
|
+
createGitManager(workingDir: string): IGitManager;
|
|
12
|
+
/**
|
|
13
|
+
* Create a PRService instance based on the configured authentication type
|
|
14
|
+
*/
|
|
15
|
+
createPRService(workingDir: string): IPRService;
|
|
16
|
+
/**
|
|
17
|
+
* Create a RepositoryManager instance based on the configured authentication type
|
|
18
|
+
*/
|
|
19
|
+
createRepositoryManager(): IRepositoryManager;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convenience functions for creating service instances
|
|
23
|
+
*/
|
|
24
|
+
export declare function createGitManager(workingDir: string): IGitManager;
|
|
25
|
+
export declare function createPRService(workingDir: string): IPRService;
|
|
26
|
+
export declare function createRepositoryManager(): IRepositoryManager;
|
|
27
|
+
//# sourceMappingURL=service-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-factory.d.ts","sourceRoot":"","sources":["../../src/services/service-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQlF;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAgB;;IAMrC;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAejD;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IAe/C;;OAEG;IACH,uBAAuB,IAAI,kBAAkB;CAU9C;AAED;;GAEG;AAEH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAGhE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAG9D;AAED,wBAAgB,uBAAuB,IAAI,kBAAkB,CAG5D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ConfigManager } from '../config.js';
|
|
2
|
+
import { GitManagerCLI } from './git-manager-cli.js';
|
|
3
|
+
import { GitManagerPAT } from './git-manager-pat.js';
|
|
4
|
+
import { PRServiceCLI } from './pr-service-cli.js';
|
|
5
|
+
import { PRServicePAT } from './pr-service-pat.js';
|
|
6
|
+
import { RepositoryManagerCLI } from './repository-manager-cli.js';
|
|
7
|
+
import { RepositoryManagerPAT } from './repository-manager-pat.js';
|
|
8
|
+
/**
|
|
9
|
+
* Factory class for creating service instances based on GitHub authentication configuration
|
|
10
|
+
*/
|
|
11
|
+
export class ServiceFactory {
|
|
12
|
+
configManager;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.configManager = new ConfigManager();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a GitManager instance based on the configured authentication type
|
|
18
|
+
*/
|
|
19
|
+
createGitManager(workingDir) {
|
|
20
|
+
const authType = this.configManager.getGithubAuthType();
|
|
21
|
+
if (authType === 'pat') {
|
|
22
|
+
const pat = this.configManager.getGithubPat();
|
|
23
|
+
if (!pat) {
|
|
24
|
+
throw new Error('GitHub PAT is not configured. Please run "ivan configure" and set your PAT.');
|
|
25
|
+
}
|
|
26
|
+
return new GitManagerPAT(workingDir, pat);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Default to CLI
|
|
30
|
+
return new GitManagerCLI(workingDir);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a PRService instance based on the configured authentication type
|
|
35
|
+
*/
|
|
36
|
+
createPRService(workingDir) {
|
|
37
|
+
const authType = this.configManager.getGithubAuthType();
|
|
38
|
+
if (authType === 'pat') {
|
|
39
|
+
const pat = this.configManager.getGithubPat();
|
|
40
|
+
if (!pat) {
|
|
41
|
+
throw new Error('GitHub PAT is not configured. Please run "ivan configure" and set your PAT.');
|
|
42
|
+
}
|
|
43
|
+
return new PRServicePAT(workingDir, pat);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Default to CLI
|
|
47
|
+
return new PRServiceCLI(workingDir);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a RepositoryManager instance based on the configured authentication type
|
|
52
|
+
*/
|
|
53
|
+
createRepositoryManager() {
|
|
54
|
+
const authType = this.configManager.getGithubAuthType();
|
|
55
|
+
if (authType === 'pat') {
|
|
56
|
+
return new RepositoryManagerPAT();
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Default to CLI
|
|
60
|
+
return new RepositoryManagerCLI();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Convenience functions for creating service instances
|
|
66
|
+
*/
|
|
67
|
+
export function createGitManager(workingDir) {
|
|
68
|
+
const factory = new ServiceFactory();
|
|
69
|
+
return factory.createGitManager(workingDir);
|
|
70
|
+
}
|
|
71
|
+
export function createPRService(workingDir) {
|
|
72
|
+
const factory = new ServiceFactory();
|
|
73
|
+
return factory.createPRService(workingDir);
|
|
74
|
+
}
|
|
75
|
+
export function createRepositoryManager() {
|
|
76
|
+
const factory = new ServiceFactory();
|
|
77
|
+
return factory.createRepositoryManager();
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=service-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-factory.js","sourceRoot":"","sources":["../../src/services/service-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,aAAa,CAAgB;IAErC;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAkB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAExD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,IAAI,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAAkB;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAExD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAExD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AAEH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,uBAAuB,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/services/task-executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/services/task-executor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAI1E,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAqB;;IAU7C,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAOlB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAuLxB,0BAA0B;YAiD1B,WAAW;YA4LX,wBAAwB;IA2MhC,6BAA6B,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqJjF"}
|