phantomx-tool-client 1.0.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 (34) hide show
  1. package/bin/tool-server.js +16 -0
  2. package/dist/Services/EditTool.d.ts +86 -0
  3. package/dist/Services/EditTool.d.ts.map +1 -0
  4. package/dist/Services/EditTool.js +516 -0
  5. package/dist/Services/EditTool.js.map +1 -0
  6. package/dist/Services/Logger.d.ts +32 -0
  7. package/dist/Services/Logger.d.ts.map +1 -0
  8. package/dist/Services/Logger.js +185 -0
  9. package/dist/Services/Logger.js.map +1 -0
  10. package/dist/Services/ReadFileTool.d.ts +49 -0
  11. package/dist/Services/ReadFileTool.d.ts.map +1 -0
  12. package/dist/Services/ReadFileTool.js +239 -0
  13. package/dist/Services/ReadFileTool.js.map +1 -0
  14. package/dist/__tests__/__mocks__/tool-server.mock.d.ts +4 -0
  15. package/dist/__tests__/__mocks__/tool-server.mock.d.ts.map +1 -0
  16. package/dist/__tests__/__mocks__/tool-server.mock.js +8 -0
  17. package/dist/__tests__/__mocks__/tool-server.mock.js.map +1 -0
  18. package/dist/__tests__/toolExecutionService_tempAI.test.d.ts +13 -0
  19. package/dist/__tests__/toolExecutionService_tempAI.test.d.ts.map +1 -0
  20. package/dist/__tests__/toolExecutionService_tempAI.test.js +491 -0
  21. package/dist/__tests__/toolExecutionService_tempAI.test.js.map +1 -0
  22. package/dist/githubOperationsHanlder.d.ts +274 -0
  23. package/dist/githubOperationsHanlder.d.ts.map +1 -0
  24. package/dist/githubOperationsHanlder.js +1487 -0
  25. package/dist/githubOperationsHanlder.js.map +1 -0
  26. package/dist/tool-server.d.ts +4 -0
  27. package/dist/tool-server.d.ts.map +1 -0
  28. package/dist/tool-server.js +190 -0
  29. package/dist/tool-server.js.map +1 -0
  30. package/dist/toolExecutionService.d.ts +28 -0
  31. package/dist/toolExecutionService.d.ts.map +1 -0
  32. package/dist/toolExecutionService.js +464 -0
  33. package/dist/toolExecutionService.js.map +1 -0
  34. package/package.json +58 -0
@@ -0,0 +1,274 @@
1
+ import { Socket } from 'socket.io';
2
+ export declare function getGithubOrganizationName(): Promise<string>;
3
+ export declare function fetchInstallationToken(): Promise<any>;
4
+ export declare function getRepoList(): Promise<any>;
5
+ export declare function getRepoBranch(owner: string, repo: string): Promise<any[]>;
6
+ interface ConflictMarker {
7
+ startLine: number;
8
+ endLine: number;
9
+ currentContent: string;
10
+ incomingContent: string;
11
+ baseContent?: string;
12
+ currentBranch: string;
13
+ incomingBranch: string;
14
+ }
15
+ interface MergeConflictFile {
16
+ file: string;
17
+ conflicts: ConflictMarker[];
18
+ fullContent: string;
19
+ }
20
+ export declare class GithubOperationsService {
21
+ private escapeSingleQuotedShell;
22
+ private resolveBranchReference;
23
+ /**
24
+ * Get repository list for an installation
25
+ */
26
+ getRepositoryList(): Promise<{
27
+ repositories: any[];
28
+ count: number;
29
+ }>;
30
+ /**
31
+ * List branches for a repository
32
+ */
33
+ listBranches(owner: string, repo: string): Promise<{
34
+ repo: string;
35
+ branches: any[];
36
+ count: number;
37
+ }>;
38
+ /**
39
+ * Pull repository from remote
40
+ */
41
+ pullRepository(repoName: string, socket: Socket): Promise<{
42
+ repoName: string;
43
+ branchName: string;
44
+ lastCommit: string;
45
+ mergeConflicts: any;
46
+ }>;
47
+ /**
48
+ * Push repository to remote
49
+ */
50
+ pushRepository(repoName: string, socket?: Socket): Promise<{
51
+ repoName: string;
52
+ branchName: string;
53
+ commitHash: string;
54
+ commitsAhead: number;
55
+ pushedAt: string;
56
+ }>;
57
+ /**
58
+ * Check repository status
59
+ */
60
+ checkRepositoryStatus(repoName: string, socket: Socket): Promise<{
61
+ repoName: string;
62
+ branchName: string;
63
+ currentCommitHash: string;
64
+ remoteCommitHash: string;
65
+ commitsBehind: number;
66
+ commitsAhead: number;
67
+ hasUncommittedChanges: boolean;
68
+ isUpToDate: boolean;
69
+ needsPull: boolean;
70
+ needsPush: boolean;
71
+ mergeConflicts: any;
72
+ status: string;
73
+ }>;
74
+ /**
75
+ * Get repository history
76
+ */
77
+ getRepositoryHistory(repoName: string, remoteBranchName: string, limit?: number): Promise<{
78
+ repoName: string;
79
+ currentBranch: string;
80
+ latestCommitHash: string;
81
+ totalCommits: number;
82
+ reflog: any[];
83
+ commits: any[];
84
+ summary: any;
85
+ }>;
86
+ /**
87
+ * Commit local changes
88
+ */
89
+ commitLocalChanges(repoName: string, remoteBranchName: string, commitMessage: string, userInfo: any, socket?: Socket, userId?: string): Promise<{
90
+ repoName: string;
91
+ branchName: string;
92
+ commitMessage: string;
93
+ commitHash: string;
94
+ shortHash: string;
95
+ changedFiles: number;
96
+ author: string;
97
+ email: string;
98
+ committedAt: string;
99
+ }>;
100
+ /**
101
+ * Create pull request
102
+ */
103
+ createPullRequest(repoName: string, targetBranch: string, title?: string, body?: string, socket?: Socket): Promise<{
104
+ repoName: string;
105
+ headBranch: string;
106
+ targetBranch: string;
107
+ prNumber: number;
108
+ prUrl: string;
109
+ prTitle: string;
110
+ commitsAhead: number;
111
+ createdAt: string;
112
+ alreadyExists?: boolean;
113
+ }>;
114
+ /**
115
+ * Check if pull request exists
116
+ */
117
+ mergeBranchIntoBranch(repoName: string, sourceBranch: string, targetBranch: string, pushToRemote?: boolean, socket?: Socket): Promise<{
118
+ repoName: string;
119
+ sourceBranch: string;
120
+ targetBranch: string;
121
+ merged: boolean;
122
+ hasConflicts: boolean;
123
+ conflictFiles: string[];
124
+ currentBranch: string;
125
+ commitHash?: string;
126
+ pushedToRemote: boolean;
127
+ mergedAt: string;
128
+ message: string;
129
+ }>;
130
+ checkPullRequestExists(repoName: string, targetBranch: string): Promise<{
131
+ repoName: string;
132
+ headBranch: string;
133
+ targetBranch: string;
134
+ prExists: boolean;
135
+ prNumber?: number;
136
+ prUrl?: string;
137
+ prTitle?: string;
138
+ commitsAhead: number;
139
+ createdAt?: string;
140
+ }>;
141
+ /**
142
+ * Get commit list with commit IDs for a branch
143
+ */
144
+ getCommitList(repoName: string, branchName?: string, limit?: number): Promise<{
145
+ repoName: string;
146
+ branchName: string;
147
+ totalCommits: number;
148
+ commits: Array<{
149
+ hash: string;
150
+ fullHash: string;
151
+ author: string;
152
+ email: string;
153
+ date: string;
154
+ message: string;
155
+ }>;
156
+ }>;
157
+ /**
158
+ * Get latest commit diff for a given branch
159
+ */
160
+ getLatestCommitDiff(repoName: string, branchName?: string): Promise<{
161
+ repoName: string;
162
+ branchName: string;
163
+ commit: {
164
+ hash: string;
165
+ fullHash: string;
166
+ author: string;
167
+ email: string;
168
+ date: string;
169
+ message: string;
170
+ };
171
+ diff: string;
172
+ summary: {
173
+ filesChanged: number;
174
+ totalAdditions: number;
175
+ totalDeletions: number;
176
+ totalChanges: number;
177
+ };
178
+ }>;
179
+ /**
180
+ * Get diff for a specific commit hash
181
+ */
182
+ getCommitDiffByHash(repoName: string, commitHash: string): Promise<{
183
+ repoName: string;
184
+ commit: {
185
+ hash: string;
186
+ fullHash: string;
187
+ author: string;
188
+ email: string;
189
+ date: string;
190
+ message: string;
191
+ };
192
+ diff: string;
193
+ summary: {
194
+ filesChanged: number;
195
+ totalAdditions: number;
196
+ totalDeletions: number;
197
+ totalChanges: number;
198
+ };
199
+ }>;
200
+ /**
201
+ * Get commit details
202
+ */
203
+ getCommitDetails(repoName: string, commitHash: string): Promise<{
204
+ repoName: string;
205
+ commit: {
206
+ hash: string;
207
+ fullHash: string;
208
+ author: string;
209
+ email: string;
210
+ date: string;
211
+ message: string;
212
+ };
213
+ files: Array<{
214
+ filename: string;
215
+ additions: number;
216
+ deletions: number;
217
+ changes: number;
218
+ status: string;
219
+ }>;
220
+ summary: {
221
+ totalFiles: number;
222
+ totalAdditions: number;
223
+ totalDeletions: number;
224
+ totalChanges: number;
225
+ filesByStatus: {
226
+ added: number;
227
+ modified: number;
228
+ deleted: number;
229
+ binary: number;
230
+ };
231
+ };
232
+ }>;
233
+ parseConflictMarkers(filePath: string, repoPath: string): Promise<ConflictMarker[]>;
234
+ getMergeConflictsImplementation(repoName: string, folderPath: string): Promise<{
235
+ success: boolean;
236
+ error: string;
237
+ folderPath: string;
238
+ repoName: string;
239
+ hasConflicts?: undefined;
240
+ conflicts?: undefined;
241
+ message?: undefined;
242
+ currentBranch?: undefined;
243
+ totalFiles?: undefined;
244
+ totalConflicts?: undefined;
245
+ } | {
246
+ success: boolean;
247
+ hasConflicts: boolean;
248
+ conflicts: never[];
249
+ message: string;
250
+ currentBranch: string;
251
+ folderPath: string;
252
+ repoName: string;
253
+ error?: undefined;
254
+ totalFiles?: undefined;
255
+ totalConflicts?: undefined;
256
+ } | {
257
+ success: boolean;
258
+ hasConflicts: boolean;
259
+ conflicts: MergeConflictFile[];
260
+ message: string;
261
+ currentBranch: string;
262
+ totalFiles: number;
263
+ totalConflicts: number;
264
+ folderPath: string;
265
+ repoName: string;
266
+ error?: undefined;
267
+ }>;
268
+ /**
269
+ * Helper method to get merge conflicts
270
+ */
271
+ private getMergeConflicts;
272
+ }
273
+ export {};
274
+ //# sourceMappingURL=githubOperationsHanlder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubOperationsHanlder.d.ts","sourceRoot":"","sources":["../src/githubOperationsHanlder.ts"],"names":[],"mappings":"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"}