@ipul-labs/forge 1.16.8 → 1.17.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 (280) hide show
  1. package/README.md +39 -21
  2. package/lib/bin/cli/analyze.d.ts +9 -0
  3. package/lib/bin/cli/analyze.d.ts.map +1 -0
  4. package/lib/bin/cli/analyze.js +491 -0
  5. package/lib/bin/cli/analyze.js.map +1 -0
  6. package/lib/bin/cli/apply.d.ts +2 -0
  7. package/lib/bin/cli/apply.d.ts.map +1 -0
  8. package/lib/bin/cli/apply.js +262 -0
  9. package/lib/bin/cli/apply.js.map +1 -0
  10. package/lib/bin/cli/cifix.d.ts +2 -0
  11. package/lib/bin/cli/cifix.d.ts.map +1 -0
  12. package/lib/bin/cli/cifix.js +310 -0
  13. package/lib/bin/cli/cifix.js.map +1 -0
  14. package/lib/bin/cli/close.d.ts +2 -0
  15. package/lib/bin/cli/close.d.ts.map +1 -0
  16. package/lib/bin/cli/close.js +113 -0
  17. package/lib/bin/cli/close.js.map +1 -0
  18. package/lib/bin/cli/createIssue.d.ts +2 -0
  19. package/lib/bin/cli/createIssue.d.ts.map +1 -0
  20. package/lib/bin/cli/createIssue.js +108 -0
  21. package/lib/bin/cli/createIssue.js.map +1 -0
  22. package/lib/bin/cli/doctor.d.ts +2 -0
  23. package/lib/bin/cli/doctor.d.ts.map +1 -0
  24. package/lib/bin/cli/doctor.js +145 -0
  25. package/lib/bin/cli/doctor.js.map +1 -0
  26. package/lib/bin/cli/init.d.ts +4 -0
  27. package/lib/bin/cli/init.d.ts.map +1 -0
  28. package/lib/bin/cli/init.js +288 -0
  29. package/lib/bin/cli/init.js.map +1 -0
  30. package/lib/bin/cli/ink.d.ts +23 -0
  31. package/lib/bin/cli/ink.d.ts.map +1 -0
  32. package/{bin → lib/bin}/cli/ink.js +18 -19
  33. package/lib/bin/cli/ink.js.map +1 -0
  34. package/lib/bin/cli/issue.d.ts +2 -0
  35. package/lib/bin/cli/issue.d.ts.map +1 -0
  36. package/lib/bin/cli/issue.js +114 -0
  37. package/lib/bin/cli/issue.js.map +1 -0
  38. package/lib/bin/cli/issues.d.ts +2 -0
  39. package/lib/bin/cli/issues.d.ts.map +1 -0
  40. package/lib/bin/cli/issues.js +149 -0
  41. package/lib/bin/cli/issues.js.map +1 -0
  42. package/lib/bin/cli/merge.d.ts +2 -0
  43. package/lib/bin/cli/merge.d.ts.map +1 -0
  44. package/lib/bin/cli/merge.js +162 -0
  45. package/lib/bin/cli/merge.js.map +1 -0
  46. package/lib/bin/cli/refine.d.ts +2 -0
  47. package/lib/bin/cli/refine.d.ts.map +1 -0
  48. package/lib/bin/cli/refine.js +249 -0
  49. package/lib/bin/cli/refine.js.map +1 -0
  50. package/lib/bin/cli/repl.d.ts +2 -0
  51. package/lib/bin/cli/repl.d.ts.map +1 -0
  52. package/lib/bin/cli/repl.js +309 -0
  53. package/lib/bin/cli/repl.js.map +1 -0
  54. package/lib/bin/cli/repos.d.ts +2 -0
  55. package/lib/bin/cli/repos.d.ts.map +1 -0
  56. package/lib/bin/cli/repos.js +86 -0
  57. package/lib/bin/cli/repos.js.map +1 -0
  58. package/lib/bin/cli/resolution.d.ts +2 -0
  59. package/lib/bin/cli/resolution.d.ts.map +1 -0
  60. package/lib/bin/cli/resolution.js +139 -0
  61. package/lib/bin/cli/resolution.js.map +1 -0
  62. package/lib/bin/cli/serverClient.d.ts +26 -0
  63. package/lib/bin/cli/serverClient.d.ts.map +1 -0
  64. package/lib/bin/cli/serverClient.js +111 -0
  65. package/lib/bin/cli/serverClient.js.map +1 -0
  66. package/lib/bin/cli/session.d.ts +8 -0
  67. package/lib/bin/cli/session.d.ts.map +1 -0
  68. package/lib/bin/cli/session.js +212 -0
  69. package/lib/bin/cli/session.js.map +1 -0
  70. package/lib/bin/cli/sessionStore.d.ts +69 -0
  71. package/lib/bin/cli/sessionStore.d.ts.map +1 -0
  72. package/lib/bin/cli/sessionStore.js +196 -0
  73. package/lib/bin/cli/sessionStore.js.map +1 -0
  74. package/lib/bin/cli/ship.d.ts +33 -0
  75. package/lib/bin/cli/ship.d.ts.map +1 -0
  76. package/lib/bin/cli/ship.js +737 -0
  77. package/lib/bin/cli/ship.js.map +1 -0
  78. package/lib/bin/cli/types.d.ts +59 -0
  79. package/lib/bin/cli/types.d.ts.map +1 -0
  80. package/lib/bin/cli/types.js +2 -0
  81. package/lib/bin/cli/types.js.map +1 -0
  82. package/lib/bin/cli/update.d.ts +2 -0
  83. package/lib/bin/cli/update.d.ts.map +1 -0
  84. package/lib/bin/cli/update.js +87 -0
  85. package/lib/bin/cli/update.js.map +1 -0
  86. package/lib/bin/cli/utils.d.ts +43 -0
  87. package/lib/bin/cli/utils.d.ts.map +1 -0
  88. package/lib/bin/cli/utils.js +171 -0
  89. package/lib/bin/cli/utils.js.map +1 -0
  90. package/lib/bin/cli/validate.d.ts +2 -0
  91. package/lib/bin/cli/validate.d.ts.map +1 -0
  92. package/lib/bin/cli/validate.js +283 -0
  93. package/lib/bin/cli/validate.js.map +1 -0
  94. package/lib/bin/cli/watch.d.ts +5 -0
  95. package/lib/bin/cli/watch.d.ts.map +1 -0
  96. package/lib/bin/cli/watch.js +263 -0
  97. package/lib/bin/cli/watch.js.map +1 -0
  98. package/lib/bin/forge-agent.d.ts +3 -0
  99. package/lib/bin/forge-agent.d.ts.map +1 -0
  100. package/{bin → lib/bin}/forge-agent.js +104 -105
  101. package/lib/bin/forge-agent.js.map +1 -0
  102. package/lib/server/forge/core/ForgeAgent.d.ts +260 -0
  103. package/lib/server/forge/core/ForgeAgent.d.ts.map +1 -0
  104. package/lib/server/forge/core/ForgeAgent.js +995 -0
  105. package/lib/server/forge/core/ForgeAgent.js.map +1 -0
  106. package/lib/server/forge/core/agentClient.d.ts +39 -0
  107. package/lib/server/forge/core/agentClient.d.ts.map +1 -0
  108. package/{server → lib/server}/forge/core/agentClient.js +7 -12
  109. package/lib/server/forge/core/agentClient.js.map +1 -0
  110. package/lib/server/forge/core/branchName.d.ts +20 -0
  111. package/lib/server/forge/core/branchName.d.ts.map +1 -0
  112. package/lib/server/forge/core/branchName.js +39 -0
  113. package/lib/server/forge/core/branchName.js.map +1 -0
  114. package/lib/server/forge/core/claudeClient.d.ts +60 -0
  115. package/lib/server/forge/core/claudeClient.d.ts.map +1 -0
  116. package/lib/server/forge/core/claudeClient.js +347 -0
  117. package/lib/server/forge/core/claudeClient.js.map +1 -0
  118. package/lib/server/forge/core/configStore.d.ts +76 -0
  119. package/lib/server/forge/core/configStore.d.ts.map +1 -0
  120. package/lib/server/forge/core/configStore.js +213 -0
  121. package/lib/server/forge/core/configStore.js.map +1 -0
  122. package/lib/server/forge/core/gitlabClient.d.ts +144 -0
  123. package/lib/server/forge/core/gitlabClient.d.ts.map +1 -0
  124. package/{server → lib/server}/forge/core/gitlabClient.js +98 -180
  125. package/lib/server/forge/core/gitlabClient.js.map +1 -0
  126. package/lib/server/forge/core/jobs.d.ts +67 -0
  127. package/lib/server/forge/core/jobs.d.ts.map +1 -0
  128. package/lib/server/forge/core/jobs.js +185 -0
  129. package/lib/server/forge/core/jobs.js.map +1 -0
  130. package/lib/server/forge/core/k8s.d.ts +18 -0
  131. package/lib/server/forge/core/k8s.d.ts.map +1 -0
  132. package/lib/server/forge/core/k8s.js +49 -0
  133. package/lib/server/forge/core/k8s.js.map +1 -0
  134. package/lib/server/forge/core/localRepo.d.ts +36 -0
  135. package/lib/server/forge/core/localRepo.d.ts.map +1 -0
  136. package/lib/server/forge/core/localRepo.js +165 -0
  137. package/lib/server/forge/core/localRepo.js.map +1 -0
  138. package/lib/server/forge/core/openclawClient.d.ts +61 -0
  139. package/lib/server/forge/core/openclawClient.d.ts.map +1 -0
  140. package/lib/server/forge/core/openclawClient.js +111 -0
  141. package/lib/server/forge/core/openclawClient.js.map +1 -0
  142. package/lib/server/forge/core/prompts.d.ts +96 -0
  143. package/lib/server/forge/core/prompts.d.ts.map +1 -0
  144. package/lib/server/forge/core/prompts.js +450 -0
  145. package/lib/server/forge/core/prompts.js.map +1 -0
  146. package/lib/server/forge/core/providers/azuredevops.d.ts +134 -0
  147. package/lib/server/forge/core/providers/azuredevops.d.ts.map +1 -0
  148. package/lib/server/forge/core/providers/azuredevops.js +360 -0
  149. package/lib/server/forge/core/providers/azuredevops.js.map +1 -0
  150. package/lib/server/forge/core/providers/base.d.ts +114 -0
  151. package/lib/server/forge/core/providers/base.d.ts.map +1 -0
  152. package/lib/server/forge/core/providers/base.js +98 -0
  153. package/lib/server/forge/core/providers/base.js.map +1 -0
  154. package/lib/server/forge/core/providers/github.d.ts +133 -0
  155. package/lib/server/forge/core/providers/github.d.ts.map +1 -0
  156. package/lib/server/forge/core/providers/github.js +307 -0
  157. package/lib/server/forge/core/providers/github.js.map +1 -0
  158. package/lib/server/forge/core/providers/gitlab.d.ts +144 -0
  159. package/lib/server/forge/core/providers/gitlab.d.ts.map +1 -0
  160. package/lib/server/forge/core/providers/gitlab.js +407 -0
  161. package/lib/server/forge/core/providers/gitlab.js.map +1 -0
  162. package/lib/server/forge/core/providers/index.d.ts +21 -0
  163. package/lib/server/forge/core/providers/index.d.ts.map +1 -0
  164. package/lib/server/forge/core/providers/index.js +43 -0
  165. package/lib/server/forge/core/providers/index.js.map +1 -0
  166. package/lib/server/forge/core/providers/types.d.ts +80 -0
  167. package/lib/server/forge/core/providers/types.d.ts.map +1 -0
  168. package/lib/server/forge/core/providers/types.js +2 -0
  169. package/lib/server/forge/core/providers/types.js.map +1 -0
  170. package/lib/server/forge/core/quotaClient.d.ts +48 -0
  171. package/lib/server/forge/core/quotaClient.d.ts.map +1 -0
  172. package/lib/server/forge/core/quotaClient.js +88 -0
  173. package/lib/server/forge/core/quotaClient.js.map +1 -0
  174. package/lib/server/forge/core/types.d.ts +160 -0
  175. package/lib/server/forge/core/types.d.ts.map +1 -0
  176. package/lib/server/forge/core/types.js +2 -0
  177. package/lib/server/forge/core/types.js.map +1 -0
  178. package/lib/server/forge/core/validator/attribute.d.ts +31 -0
  179. package/lib/server/forge/core/validator/attribute.d.ts.map +1 -0
  180. package/lib/server/forge/core/validator/attribute.js +82 -0
  181. package/lib/server/forge/core/validator/attribute.js.map +1 -0
  182. package/lib/server/forge/core/validator/clone.d.ts +14 -0
  183. package/lib/server/forge/core/validator/clone.d.ts.map +1 -0
  184. package/lib/server/forge/core/validator/clone.js +99 -0
  185. package/lib/server/forge/core/validator/clone.js.map +1 -0
  186. package/lib/server/forge/core/validator/cmd.d.ts +23 -0
  187. package/lib/server/forge/core/validator/cmd.d.ts.map +1 -0
  188. package/lib/server/forge/core/validator/cmd.js +87 -0
  189. package/lib/server/forge/core/validator/cmd.js.map +1 -0
  190. package/lib/server/forge/core/validator/fs.d.ts +5 -0
  191. package/lib/server/forge/core/validator/fs.d.ts.map +1 -0
  192. package/{server → lib/server}/forge/core/validator/fs.js +8 -3
  193. package/lib/server/forge/core/validator/fs.js.map +1 -0
  194. package/lib/server/forge/core/validator/overlay.d.ts +13 -0
  195. package/lib/server/forge/core/validator/overlay.d.ts.map +1 -0
  196. package/lib/server/forge/core/validator/overlay.js +53 -0
  197. package/lib/server/forge/core/validator/overlay.js.map +1 -0
  198. package/lib/server/forge/core/validator/projectType.d.ts +20 -0
  199. package/lib/server/forge/core/validator/projectType.d.ts.map +1 -0
  200. package/lib/server/forge/core/validator/projectType.js +94 -0
  201. package/lib/server/forge/core/validator/projectType.js.map +1 -0
  202. package/lib/server/forge/core/validator/runners/go.d.ts +21 -0
  203. package/lib/server/forge/core/validator/runners/go.d.ts.map +1 -0
  204. package/lib/server/forge/core/validator/runners/go.js +99 -0
  205. package/lib/server/forge/core/validator/runners/go.js.map +1 -0
  206. package/lib/server/forge/core/validator/runners/node.d.ts +12 -0
  207. package/lib/server/forge/core/validator/runners/node.d.ts.map +1 -0
  208. package/lib/server/forge/core/validator/runners/node.js +75 -0
  209. package/lib/server/forge/core/validator/runners/node.js.map +1 -0
  210. package/lib/server/forge/core/validator/tdd.d.ts +30 -0
  211. package/lib/server/forge/core/validator/tdd.d.ts.map +1 -0
  212. package/lib/server/forge/core/validator/tdd.js +96 -0
  213. package/lib/server/forge/core/validator/tdd.js.map +1 -0
  214. package/lib/server/forge/core/validator.d.ts +58 -0
  215. package/lib/server/forge/core/validator.d.ts.map +1 -0
  216. package/lib/server/forge/core/validator.js +150 -0
  217. package/lib/server/forge/core/validator.js.map +1 -0
  218. package/lib/server/forge/routes.d.ts +22 -0
  219. package/lib/server/forge/routes.d.ts.map +1 -0
  220. package/lib/server/forge/routes.js +984 -0
  221. package/lib/server/forge/routes.js.map +1 -0
  222. package/lib/server.d.ts +2 -0
  223. package/lib/server.d.ts.map +1 -0
  224. package/lib/server.js +52 -0
  225. package/lib/server.js.map +1 -0
  226. package/lib/shared/events.d.ts +12 -0
  227. package/lib/shared/events.d.ts.map +1 -0
  228. package/lib/shared/events.js +12 -0
  229. package/lib/shared/events.js.map +1 -0
  230. package/package.json +15 -13
  231. package/scripts/fix-shebang.cjs +10 -0
  232. package/bin/cli/analyze.js +0 -516
  233. package/bin/cli/apply.js +0 -264
  234. package/bin/cli/cifix.js +0 -300
  235. package/bin/cli/close.js +0 -125
  236. package/bin/cli/createIssue.js +0 -112
  237. package/bin/cli/doctor.js +0 -161
  238. package/bin/cli/init.js +0 -306
  239. package/bin/cli/issue.js +0 -116
  240. package/bin/cli/issues.js +0 -155
  241. package/bin/cli/merge.js +0 -175
  242. package/bin/cli/refine.js +0 -253
  243. package/bin/cli/repl.js +0 -301
  244. package/bin/cli/repos.js +0 -91
  245. package/bin/cli/resolution.js +0 -126
  246. package/bin/cli/session.js +0 -230
  247. package/bin/cli/sessionStore.js +0 -211
  248. package/bin/cli/ship.js +0 -762
  249. package/bin/cli/update.js +0 -95
  250. package/bin/cli/utils.js +0 -145
  251. package/bin/cli/validate.js +0 -280
  252. package/bin/cli/watch.js +0 -274
  253. package/server/forge/core/ForgeAgent.js +0 -1179
  254. package/server/forge/core/ForgeAgent.test.js +0 -179
  255. package/server/forge/core/branchName.js +0 -41
  256. package/server/forge/core/claudeClient.js +0 -378
  257. package/server/forge/core/configStore.js +0 -229
  258. package/server/forge/core/configStore.test.js +0 -89
  259. package/server/forge/core/jobs.js +0 -180
  260. package/server/forge/core/k8s.js +0 -54
  261. package/server/forge/core/localRepo.js +0 -163
  262. package/server/forge/core/openclawClient.js +0 -125
  263. package/server/forge/core/prompts.js +0 -483
  264. package/server/forge/core/prompts.test.js +0 -219
  265. package/server/forge/core/providers/azuredevops.js +0 -409
  266. package/server/forge/core/providers/base.js +0 -208
  267. package/server/forge/core/providers/github.js +0 -348
  268. package/server/forge/core/providers/gitlab.js +0 -529
  269. package/server/forge/core/providers/index.js +0 -47
  270. package/server/forge/core/quotaClient.js +0 -101
  271. package/server/forge/core/validator/attribute.js +0 -84
  272. package/server/forge/core/validator/clone.js +0 -116
  273. package/server/forge/core/validator/cmd.js +0 -98
  274. package/server/forge/core/validator/overlay.js +0 -52
  275. package/server/forge/core/validator/projectType.js +0 -87
  276. package/server/forge/core/validator/runners/go.js +0 -107
  277. package/server/forge/core/validator/runners/node.js +0 -84
  278. package/server/forge/core/validator/tdd.js +0 -105
  279. package/server/forge/core/validator.js +0 -167
  280. package/server/forge/routes.js +0 -1027
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configStore.js","sourceRoot":"","sources":["../../../../server/forge/core/configStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * server/forge/core/gitlabClient.js
3
+ *
4
+ * Thin wrapper around the GitLab REST API v4.
5
+ * All calls use process.env.GITLAB_TOKEN for auth and
6
+ * process.env.FORGE_GITLAB_PROJECT for the default project path.
7
+ *
8
+ * Required env vars:
9
+ * GITLAB_TOKEN — personal access token or CI job token
10
+ * FORGE_GITLAB_PROJECT — project path, e.g. "ipul/web-app"
11
+ */
12
+ import type { CommitAction } from "./providers/types.ts";
13
+ interface CreateMRParams {
14
+ sourceBranch: string;
15
+ targetBranch?: string;
16
+ title: string;
17
+ description?: string;
18
+ }
19
+ interface UpdateIssueFields {
20
+ title?: string;
21
+ description?: string;
22
+ }
23
+ interface GitLabMR {
24
+ source_branch?: string;
25
+ [key: string]: unknown;
26
+ }
27
+ /**
28
+ * Returns open issues for the project, newest first.
29
+ * @param {string} [project]
30
+ */
31
+ export declare function createIssue(title: string, description?: string, project?: string): Promise<unknown>;
32
+ export declare function updateIssue(issueIid: number | string, { title, description }: UpdateIssueFields, project?: string): Promise<unknown>;
33
+ export declare function closeIssue(issueIid: number | string, project?: string): Promise<unknown>;
34
+ export declare function listOpenIssues(project?: string): Promise<unknown>;
35
+ /**
36
+ * Returns a single issue by internal ID (iid).
37
+ * @param {number} issueIid
38
+ * @param {string} [project]
39
+ */
40
+ export declare function getIssue(issueIid: number | string, project?: string): Promise<unknown>;
41
+ /**
42
+ * Returns the recursive file tree under `srcPath`.
43
+ * Filters to source files only (skips build artifacts, lock files, etc.).
44
+ * @param {string} [srcPath]
45
+ * @param {string} [ref]
46
+ * @param {string} [project]
47
+ */
48
+ export declare function getFileTree(srcPath?: string, ref?: string, project?: string): Promise<string[]>;
49
+ /**
50
+ * Returns the decoded UTF-8 content of a single file.
51
+ * @param {string} filePath
52
+ * @param {string} [ref]
53
+ * @param {string} [project]
54
+ */
55
+ export declare function getFileContent(filePath: string, ref?: string, project?: string): Promise<string>;
56
+ /**
57
+ * Creates a new branch from `ref`.
58
+ * @param {string} branchName
59
+ * @param {string} [ref]
60
+ * @param {string} [project]
61
+ */
62
+ export declare function createBranch(branchName: string, ref?: string, project?: string): Promise<unknown>;
63
+ /**
64
+ * Commits multiple file changes in a single commit.
65
+ * @param {string} branch
66
+ * @param {string} commitMessage
67
+ * @param {Array<{action: string, file_path: string, content: string}>} actions
68
+ * @param {string} [project]
69
+ */
70
+ export declare function commitFiles(branch: string, commitMessage: string, actions: CommitAction[], project?: string): Promise<unknown>;
71
+ /**
72
+ * Opens a merge request from `sourceBranch` into `targetBranch`.
73
+ * @param {{ sourceBranch: string, targetBranch?: string, title: string, description?: string }} opts
74
+ * @param {string} [project]
75
+ */
76
+ export declare function createMR({ sourceBranch, targetBranch, title, description }: CreateMRParams, project?: string): Promise<unknown>;
77
+ /**
78
+ * Returns open MRs created by Forge for a specific issue (branch prefix forge/issue-{iid}-).
79
+ * @param {number} issueIid
80
+ * @param {string} [project]
81
+ */
82
+ /**
83
+ * Returns all open MRs created by Forge (branch prefix forge/).
84
+ * Includes head_pipeline for quick status display.
85
+ * @param {string} [project]
86
+ */
87
+ export declare function listAllForgeMRs(project?: string): Promise<GitLabMR[]>;
88
+ export declare function listForgeMRsForIssue(issueIid: number | string, project?: string): Promise<GitLabMR[]>;
89
+ /**
90
+ * Returns merged MRs created by Forge for a specific issue.
91
+ * @param {number} issueIid
92
+ * @param {string} [project]
93
+ */
94
+ export declare function listMergedForgeMRsForIssue(issueIid: number | string, project?: string): Promise<GitLabMR[]>;
95
+ /**
96
+ * Returns the plain-text trace (log output) for a single job.
97
+ * @param {number} jobId
98
+ * @param {string} [project]
99
+ */
100
+ export declare function getJobTrace(jobId: number | string, project?: string): Promise<string>;
101
+ /**
102
+ * Returns a single MR with full detail including conflict/rebase status.
103
+ * @param {number} mrIid
104
+ * @param {string} [project]
105
+ */
106
+ export declare function getMR(mrIid: number | string, project?: string): Promise<unknown>;
107
+ /**
108
+ * Triggers a rebase of the MR source branch onto the target branch.
109
+ * @param {number} mrIid
110
+ * @param {string} [project]
111
+ */
112
+ export declare function rebaseMR(mrIid: number | string, project?: string): Promise<unknown>;
113
+ /**
114
+ * Returns the diff for a merge request (all changed files).
115
+ * @param {number} mrIid
116
+ * @param {string} [project]
117
+ */
118
+ export declare function getMRDiffs(mrIid: number | string, project?: string): Promise<Record<string, unknown>[]>;
119
+ /**
120
+ * Returns all pipelines associated with an MR.
121
+ * @param {number} mrIid
122
+ * @param {string} [project]
123
+ */
124
+ export declare function getMRPipelines(mrIid: number | string, project?: string): Promise<unknown>;
125
+ /**
126
+ * Returns a single pipeline with full status detail.
127
+ * @param {number} pipelineId
128
+ * @param {string} [project]
129
+ */
130
+ export declare function getPipeline(pipelineId: number | string, project?: string): Promise<unknown>;
131
+ /**
132
+ * Returns all jobs for a pipeline.
133
+ * @param {number} pipelineId
134
+ * @param {string} [project]
135
+ */
136
+ export declare function getPipelineJobs(pipelineId: number | string, project?: string): Promise<unknown>;
137
+ /**
138
+ * Returns pipelines that ran on a specific commit SHA.
139
+ * @param {string} sha
140
+ * @param {string} [project]
141
+ */
142
+ export declare function getProjectPipelinesBySha(sha: string, project?: string): Promise<unknown>;
143
+ export {};
144
+ //# sourceMappingURL=gitlabClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabClient.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/gitlabClient.ts"],"names":[],"mappings":"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"}
@@ -9,86 +9,63 @@
9
9
  * GITLAB_TOKEN — personal access token or CI job token
10
10
  * FORGE_GITLAB_PROJECT — project path, e.g. "ipul/web-app"
11
11
  */
12
-
13
12
  const GITLAB_API = "https://gitlab.com/api/v4";
14
-
15
- // ─── Internal helpers ─────────────────────────────────────────────────────────
16
-
17
13
  function authHeaders() {
18
- return {
19
- "PRIVATE-TOKEN": process.env.GITLAB_TOKEN,
20
- "Content-Type": "application/json",
21
- };
14
+ return {
15
+ "PRIVATE-TOKEN": process.env.GITLAB_TOKEN,
16
+ "Content-Type": "application/json",
17
+ };
22
18
  }
23
-
24
19
  async function request(path, options = {}) {
25
- const url = `${GITLAB_API}${path}`;
26
- const res = await fetch(url, {
27
- ...options,
28
- headers: { ...authHeaders(), ...options.headers },
29
- });
30
-
31
- if (!res.ok) {
32
- const text = await res.text().catch(() => "");
33
- throw new Error(`GitLab ${res.status} on ${path}: ${text}`);
34
- }
35
-
36
- return res.json();
20
+ const url = `${GITLAB_API}${path}`;
21
+ const res = await fetch(url, {
22
+ ...options,
23
+ headers: { ...authHeaders(), ...options.headers },
24
+ });
25
+ if (!res.ok) {
26
+ const text = await res.text().catch(() => "");
27
+ throw new Error(`GitLab ${res.status} on ${path}: ${text}`);
28
+ }
29
+ return res.json();
37
30
  }
38
-
39
31
  function encodeProject(project) {
40
- return encodeURIComponent(project ?? process.env.FORGE_GITLAB_PROJECT);
32
+ return encodeURIComponent(project ?? process.env.FORGE_GITLAB_PROJECT);
41
33
  }
42
-
43
34
  // ─── Issues ───────────────────────────────────────────────────────────────────
44
-
45
35
  /**
46
36
  * Returns open issues for the project, newest first.
47
37
  * @param {string} [project]
48
38
  */
49
39
  export async function createIssue(title, description = "", project) {
50
- return request(
51
- `/projects/${encodeProject(project)}/issues`,
52
- {
53
- method: "POST",
54
- body: JSON.stringify({ title, description }),
55
- },
56
- );
40
+ return request(`/projects/${encodeProject(project)}/issues`, {
41
+ method: "POST",
42
+ body: JSON.stringify({ title, description }),
43
+ });
57
44
  }
58
-
59
45
  export async function updateIssue(issueIid, { title, description }, project) {
60
- return request(`/projects/${encodeProject(project)}/issues/${issueIid}`, {
61
- method: "PUT",
62
- body: JSON.stringify({ title, description }),
63
- });
46
+ return request(`/projects/${encodeProject(project)}/issues/${issueIid}`, {
47
+ method: "PUT",
48
+ body: JSON.stringify({ title, description }),
49
+ });
64
50
  }
65
-
66
51
  export async function closeIssue(issueIid, project) {
67
- return request(`/projects/${encodeProject(project)}/issues/${issueIid}`, {
68
- method: "PUT",
69
- body: JSON.stringify({ state_event: "close" }),
70
- });
52
+ return request(`/projects/${encodeProject(project)}/issues/${issueIid}`, {
53
+ method: "PUT",
54
+ body: JSON.stringify({ state_event: "close" }),
55
+ });
71
56
  }
72
-
73
57
  export async function listOpenIssues(project) {
74
- return request(
75
- `/projects/${encodeProject(project)}/issues?state=opened&order_by=updated_at&per_page=25`,
76
- );
58
+ return request(`/projects/${encodeProject(project)}/issues?state=opened&order_by=updated_at&per_page=25`);
77
59
  }
78
-
79
60
  /**
80
61
  * Returns a single issue by internal ID (iid).
81
62
  * @param {number} issueIid
82
63
  * @param {string} [project]
83
64
  */
84
65
  export async function getIssue(issueIid, project) {
85
- return request(
86
- `/projects/${encodeProject(project)}/issues/${issueIid}`,
87
- );
66
+ return request(`/projects/${encodeProject(project)}/issues/${issueIid}`);
88
67
  }
89
-
90
68
  // ─── Repository ───────────────────────────────────────────────────────────────
91
-
92
69
  /**
93
70
  * Returns the recursive file tree under `srcPath`.
94
71
  * Filters to source files only (skips build artifacts, lock files, etc.).
@@ -97,26 +74,22 @@ export async function getIssue(issueIid, project) {
97
74
  * @param {string} [project]
98
75
  */
99
76
  export async function getFileTree(srcPath = "src", ref = "main", project) {
100
- const proj = encodeProject(project);
101
- const allItems = [];
102
- let page = 1;
103
-
104
- while (true) {
105
- const items = await request(
106
- `/projects/${proj}/repository/tree` +
107
- `?path=${srcPath}&recursive=true&ref=${ref}&per_page=100&page=${page}`,
108
- );
109
- allItems.push(...items);
110
- if (items.length < 100) break;
111
- page++;
112
- }
113
-
114
- return allItems
115
- .filter((item) => item.type === "blob")
116
- .filter((item) => /\.(ts|tsx|js|jsx|json|css|yaml|yml|md)$/.test(item.path))
117
- .map((item) => item.path);
77
+ const proj = encodeProject(project);
78
+ const allItems = [];
79
+ let page = 1;
80
+ while (true) {
81
+ const items = await request(`/projects/${proj}/repository/tree` +
82
+ `?path=${srcPath}&recursive=true&ref=${ref}&per_page=100&page=${page}`);
83
+ allItems.push(...items);
84
+ if (items.length < 100)
85
+ break;
86
+ page++;
87
+ }
88
+ return allItems
89
+ .filter((item) => item.type === "blob")
90
+ .filter((item) => /\.(ts|tsx|js|jsx|json|css|yaml|yml|md)$/.test(item.path))
91
+ .map((item) => item.path);
118
92
  }
119
-
120
93
  /**
121
94
  * Returns the decoded UTF-8 content of a single file.
122
95
  * @param {string} filePath
@@ -124,15 +97,11 @@ export async function getFileTree(srcPath = "src", ref = "main", project) {
124
97
  * @param {string} [project]
125
98
  */
126
99
  export async function getFileContent(filePath, ref = "main", project) {
127
- const encoded = encodeURIComponent(filePath);
128
- const data = await request(
129
- `/projects/${encodeProject(project)}/repository/files/${encoded}?ref=${ref}`,
130
- );
131
- return Buffer.from(data.content, "base64").toString("utf-8");
100
+ const encoded = encodeURIComponent(filePath);
101
+ const data = await request(`/projects/${encodeProject(project)}/repository/files/${encoded}?ref=${ref}`);
102
+ return Buffer.from(data.content, "base64").toString("utf-8");
132
103
  }
133
-
134
104
  // ─── Mutations ────────────────────────────────────────────────────────────────
135
-
136
105
  /**
137
106
  * Creates a new branch from `ref`.
138
107
  * @param {string} branchName
@@ -140,15 +109,11 @@ export async function getFileContent(filePath, ref = "main", project) {
140
109
  * @param {string} [project]
141
110
  */
142
111
  export async function createBranch(branchName, ref = "main", project) {
143
- return request(
144
- `/projects/${encodeProject(project)}/repository/branches`,
145
- {
146
- method: "POST",
147
- body: JSON.stringify({ branch: branchName, ref }),
148
- },
149
- );
112
+ return request(`/projects/${encodeProject(project)}/repository/branches`, {
113
+ method: "POST",
114
+ body: JSON.stringify({ branch: branchName, ref }),
115
+ });
150
116
  }
151
-
152
117
  /**
153
118
  * Commits multiple file changes in a single commit.
154
119
  * @param {string} branch
@@ -157,39 +122,28 @@ export async function createBranch(branchName, ref = "main", project) {
157
122
  * @param {string} [project]
158
123
  */
159
124
  export async function commitFiles(branch, commitMessage, actions, project) {
160
- return request(
161
- `/projects/${encodeProject(project)}/repository/commits`,
162
- {
163
- method: "POST",
164
- body: JSON.stringify({ branch, commit_message: commitMessage, actions }),
165
- },
166
- );
125
+ return request(`/projects/${encodeProject(project)}/repository/commits`, {
126
+ method: "POST",
127
+ body: JSON.stringify({ branch, commit_message: commitMessage, actions }),
128
+ });
167
129
  }
168
-
169
130
  /**
170
131
  * Opens a merge request from `sourceBranch` into `targetBranch`.
171
132
  * @param {{ sourceBranch: string, targetBranch?: string, title: string, description?: string }} opts
172
133
  * @param {string} [project]
173
134
  */
174
- export async function createMR(
175
- { sourceBranch, targetBranch = "main", title, description = "" },
176
- project,
177
- ) {
178
- return request(
179
- `/projects/${encodeProject(project)}/merge_requests`,
180
- {
181
- method: "POST",
182
- body: JSON.stringify({
183
- source_branch: sourceBranch,
184
- target_branch: targetBranch,
185
- title,
186
- description,
187
- remove_source_branch: true,
188
- }),
189
- },
190
- );
135
+ export async function createMR({ sourceBranch, targetBranch = "main", title, description = "" }, project) {
136
+ return request(`/projects/${encodeProject(project)}/merge_requests`, {
137
+ method: "POST",
138
+ body: JSON.stringify({
139
+ source_branch: sourceBranch,
140
+ target_branch: targetBranch,
141
+ title,
142
+ description,
143
+ remove_source_branch: true,
144
+ }),
145
+ });
191
146
  }
192
-
193
147
  /**
194
148
  * Returns open MRs created by Forge for a specific issue (branch prefix forge/issue-{iid}-).
195
149
  * @param {number} issueIid
@@ -201,140 +155,104 @@ export async function createMR(
201
155
  * @param {string} [project]
202
156
  */
203
157
  export async function listAllForgeMRs(project) {
204
- const all = await request(
205
- `/projects/${encodeProject(project)}/merge_requests?state=opened&per_page=50`,
206
- );
207
- return all.filter((mr) => mr.source_branch?.startsWith("forge/"));
158
+ const all = await request(`/projects/${encodeProject(project)}/merge_requests?state=opened&per_page=50`);
159
+ return all.filter((mr) => mr.source_branch?.startsWith("forge/"));
208
160
  }
209
-
210
161
  export async function listForgeMRsForIssue(issueIid, project) {
211
- const all = await request(
212
- `/projects/${encodeProject(project)}/merge_requests?state=opened&per_page=50`,
213
- );
214
- return all.filter((mr) =>
215
- mr.source_branch?.startsWith(`forge/issue-${issueIid}-`),
216
- );
162
+ const all = await request(`/projects/${encodeProject(project)}/merge_requests?state=opened&per_page=50`);
163
+ return all.filter((mr) => mr.source_branch?.startsWith(`forge/issue-${issueIid}-`));
217
164
  }
218
-
219
165
  /**
220
166
  * Returns merged MRs created by Forge for a specific issue.
221
167
  * @param {number} issueIid
222
168
  * @param {string} [project]
223
169
  */
224
170
  export async function listMergedForgeMRsForIssue(issueIid, project) {
225
- const all = await request(
226
- `/projects/${encodeProject(project)}/merge_requests?state=merged&per_page=50`,
227
- );
228
- return all.filter((mr) =>
229
- mr.source_branch?.startsWith(`forge/issue-${issueIid}-`),
230
- );
171
+ const all = await request(`/projects/${encodeProject(project)}/merge_requests?state=merged&per_page=50`);
172
+ return all.filter((mr) => mr.source_branch?.startsWith(`forge/issue-${issueIid}-`));
231
173
  }
232
-
233
174
  // ─── Jobs ─────────────────────────────────────────────────────────────────────
234
-
235
175
  /**
236
176
  * Returns the plain-text trace (log output) for a single job.
237
177
  * @param {number} jobId
238
178
  * @param {string} [project]
239
179
  */
240
180
  export async function getJobTrace(jobId, project) {
241
- const proj = encodeProject(project);
242
- const url = `${GITLAB_API}/projects/${proj}/jobs/${jobId}/trace`;
243
- const res = await fetch(url, { headers: authHeaders() });
244
- if (!res.ok) {
245
- const text = await res.text().catch(() => "");
246
- throw new Error(`GitLab ${res.status} on jobs/${jobId}/trace: ${text}`);
247
- }
248
- return res.text();
181
+ const proj = encodeProject(project);
182
+ const url = `${GITLAB_API}/projects/${proj}/jobs/${jobId}/trace`;
183
+ const res = await fetch(url, { headers: authHeaders() });
184
+ if (!res.ok) {
185
+ const text = await res.text().catch(() => "");
186
+ throw new Error(`GitLab ${res.status} on jobs/${jobId}/trace: ${text}`);
187
+ }
188
+ return res.text();
249
189
  }
250
-
251
190
  // ─── MR detail + rebase ───────────────────────────────────────────────────────
252
-
253
191
  /**
254
192
  * Returns a single MR with full detail including conflict/rebase status.
255
193
  * @param {number} mrIid
256
194
  * @param {string} [project]
257
195
  */
258
196
  export async function getMR(mrIid, project) {
259
- return request(
260
- `/projects/${encodeProject(project)}/merge_requests/${mrIid}`,
261
- );
197
+ return request(`/projects/${encodeProject(project)}/merge_requests/${mrIid}`);
262
198
  }
263
-
264
199
  /**
265
200
  * Triggers a rebase of the MR source branch onto the target branch.
266
201
  * @param {number} mrIid
267
202
  * @param {string} [project]
268
203
  */
269
204
  export async function rebaseMR(mrIid, project) {
270
- return request(
271
- `/projects/${encodeProject(project)}/merge_requests/${mrIid}/rebase`,
272
- { method: "PUT" },
273
- );
205
+ return request(`/projects/${encodeProject(project)}/merge_requests/${mrIid}/rebase`, { method: "PUT" });
274
206
  }
275
-
276
207
  /**
277
208
  * Returns the diff for a merge request (all changed files).
278
209
  * @param {number} mrIid
279
210
  * @param {string} [project]
280
211
  */
281
212
  export async function getMRDiffs(mrIid, project) {
282
- const proj = encodeProject(project);
283
- const allDiffs = [];
284
- let page = 1;
285
- while (true) {
286
- const items = await request(
287
- `/projects/${proj}/merge_requests/${mrIid}/diffs?per_page=20&page=${page}`,
288
- );
289
- allDiffs.push(...items);
290
- if (items.length < 20) break;
291
- page++;
292
- }
293
- return allDiffs;
213
+ const proj = encodeProject(project);
214
+ const allDiffs = [];
215
+ let page = 1;
216
+ while (true) {
217
+ const items = await request(`/projects/${proj}/merge_requests/${mrIid}/diffs?per_page=20&page=${page}`);
218
+ allDiffs.push(...items);
219
+ if (items.length < 20)
220
+ break;
221
+ page++;
222
+ }
223
+ return allDiffs;
294
224
  }
295
-
296
225
  // ─── Pipelines ────────────────────────────────────────────────────────────────
297
-
298
226
  /**
299
227
  * Returns all pipelines associated with an MR.
300
228
  * @param {number} mrIid
301
229
  * @param {string} [project]
302
230
  */
303
231
  export async function getMRPipelines(mrIid, project) {
304
- return request(
305
- `/projects/${encodeProject(project)}/merge_requests/${mrIid}/pipelines`,
306
- );
232
+ return request(`/projects/${encodeProject(project)}/merge_requests/${mrIid}/pipelines`);
307
233
  }
308
-
309
234
  /**
310
235
  * Returns a single pipeline with full status detail.
311
236
  * @param {number} pipelineId
312
237
  * @param {string} [project]
313
238
  */
314
239
  export async function getPipeline(pipelineId, project) {
315
- return request(
316
- `/projects/${encodeProject(project)}/pipelines/${pipelineId}`,
317
- );
240
+ return request(`/projects/${encodeProject(project)}/pipelines/${pipelineId}`);
318
241
  }
319
-
320
242
  /**
321
243
  * Returns all jobs for a pipeline.
322
244
  * @param {number} pipelineId
323
245
  * @param {string} [project]
324
246
  */
325
247
  export async function getPipelineJobs(pipelineId, project) {
326
- return request(
327
- `/projects/${encodeProject(project)}/pipelines/${pipelineId}/jobs`,
328
- );
248
+ return request(`/projects/${encodeProject(project)}/pipelines/${pipelineId}/jobs`);
329
249
  }
330
-
331
250
  /**
332
251
  * Returns pipelines that ran on a specific commit SHA.
333
252
  * @param {string} sha
334
253
  * @param {string} [project]
335
254
  */
336
255
  export async function getProjectPipelinesBySha(sha, project) {
337
- return request(
338
- `/projects/${encodeProject(project)}/pipelines?sha=${encodeURIComponent(sha)}&per_page=5`,
339
- );
256
+ return request(`/projects/${encodeProject(project)}/pipelines?sha=${encodeURIComponent(sha)}&per_page=5`);
340
257
  }
258
+ //# sourceMappingURL=gitlabClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlabClient.js","sourceRoot":"","sources":["../../../../server/forge/core/gitlabClient.ts"],"names":[],"mappings":"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"}