@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,360 @@
1
+ /**
2
+ * server/forge/core/providers/azuredevops.js
3
+ *
4
+ * Azure DevOps REST API implementation of ScmProvider.
5
+ * Maps Work Items → issues, Pull Requests → MRs, Pipelines → CI.
6
+ *
7
+ * Required env vars:
8
+ * AZURE_DEVOPS_TOKEN — Personal Access Token (Base64 or raw PAT)
9
+ * AZURE_DEVOPS_ORG — organization name, e.g. "ipul-labs"
10
+ * AZURE_DEVOPS_PROJECT — team project name, e.g. "web-app"
11
+ * AZURE_DEVOPS_REPO — git repo name (often same as project)
12
+ *
13
+ * Optional:
14
+ * AZURE_DEVOPS_BASE_BRANCH — default target branch (default: "main")
15
+ */
16
+ import { getConnection } from "../configStore.js";
17
+ import { ScmProvider } from "./base.js";
18
+ export class AzureDevOpsProvider extends ScmProvider {
19
+ _org;
20
+ _project;
21
+ _repo;
22
+ _defaultBranch;
23
+ _vsBase;
24
+ _vssmBase;
25
+ /**
26
+ * @param {string} [repo] "org/project/repo" — overrides env vars
27
+ */
28
+ constructor(repo) {
29
+ super();
30
+ if (repo && repo.includes("/")) {
31
+ const parts = repo.split("/");
32
+ this._org = parts[0];
33
+ this._project = parts[1];
34
+ this._repo = parts[2] ?? parts[1];
35
+ }
36
+ else {
37
+ this._org = process.env.AZURE_DEVOPS_ORG ?? "";
38
+ this._project = process.env.AZURE_DEVOPS_PROJECT ?? "";
39
+ this._repo = process.env.AZURE_DEVOPS_REPO ?? this._project;
40
+ }
41
+ this._defaultBranch = process.env.AZURE_DEVOPS_BASE_BRANCH ?? "main";
42
+ this._vsBase = `https://dev.azure.com/${this._org}`;
43
+ this._vssmBase = `https://vsrm.dev.azure.com/${this._org}`;
44
+ }
45
+ get name() { return "azuredevops"; }
46
+ get supportsRebase() { return false; }
47
+ // ─── Internal helpers ──────────────────────────────────────────────────────
48
+ _headers() {
49
+ const token = getConnection("azuredevops").token;
50
+ // ADO accepts Basic auth with a PAT as the password (username can be anything)
51
+ const encoded = Buffer.from(`:${token}`).toString("base64");
52
+ return {
53
+ Authorization: `Basic ${encoded}`,
54
+ "Content-Type": "application/json",
55
+ };
56
+ }
57
+ _gitBase() {
58
+ return `${this._vsBase}/${encodeURIComponent(this._project)}/_apis/git/repositories/${encodeURIComponent(this._repo)}`;
59
+ }
60
+ _witBase() {
61
+ return `${this._vsBase}/${encodeURIComponent(this._project)}/_apis/wit`;
62
+ }
63
+ _pipelineBase() {
64
+ return `${this._vsBase}/${encodeURIComponent(this._project)}/_apis/pipelines`;
65
+ }
66
+ _buildBase() {
67
+ return `${this._vsBase}/${encodeURIComponent(this._project)}/_apis/build`;
68
+ }
69
+ async _req(url, options = {}) {
70
+ const sep = url.includes("?") ? "&" : "?";
71
+ const versioned = url.includes("api-version") ? url : `${url}${sep}api-version=7.1`;
72
+ const res = await fetch(versioned, {
73
+ ...options,
74
+ headers: { ...this._headers(), ...options.headers },
75
+ });
76
+ if (res.status === 204)
77
+ return null;
78
+ if (!res.ok) {
79
+ const text = await res.text().catch(() => "");
80
+ throw new Error(`AzureDevOps ${res.status} on ${url}: ${text}`);
81
+ }
82
+ return res.json();
83
+ }
84
+ // ─── Normalizers ──────────────────────────────────────────────────────────
85
+ _issue(raw) {
86
+ const fields = raw.fields ?? {};
87
+ return {
88
+ iid: raw.id,
89
+ title: String(fields["System.Title"] ?? ""),
90
+ description: fields["System.Description"] != null ? String(fields["System.Description"]) : null,
91
+ labels: String(fields["System.Tags"] ?? "").split(";").map((t) => t.trim()).filter(Boolean),
92
+ author: { name: fields["System.CreatedBy"]?.displayName ?? "" },
93
+ created_at: String(fields["System.CreatedDate"] ?? ""),
94
+ web_url: raw._links?.html?.href ?? "",
95
+ };
96
+ }
97
+ _mr(raw) {
98
+ const status = raw.status ?? "";
99
+ return {
100
+ iid: raw.pullRequestId,
101
+ title: raw.title,
102
+ web_url: `${this._vsBase}/${encodeURIComponent(this._project)}/_git/${encodeURIComponent(this._repo)}/pullrequest/${raw.pullRequestId}`,
103
+ source_branch: (raw.sourceRefName ?? "").replace("refs/heads/", ""),
104
+ target_branch: (raw.targetRefName ?? "").replace("refs/heads/", ""),
105
+ state: status === "completed" ? "merged" : status === "abandoned" ? "closed" : "opened",
106
+ has_conflicts: raw.mergeStatus === "conflicts",
107
+ rebase_in_progress: false,
108
+ merge_status: raw.mergeStatus ?? "",
109
+ detailed_merge_status: null,
110
+ draft: raw.isDraft ?? false,
111
+ head_pipeline: null,
112
+ author: { name: raw.createdBy?.displayName ?? "" },
113
+ created_at: raw.creationDate ?? "",
114
+ merged_at: status === "completed" ? (raw.closedDate ?? null) : null,
115
+ merge_commit_sha: null,
116
+ };
117
+ }
118
+ _pipeline(raw) {
119
+ return {
120
+ id: raw.id,
121
+ status: this._buildStatus(raw),
122
+ web_url: raw._links?.web?.href ?? "",
123
+ created_at: raw.queueTime ?? raw.startTime ?? "",
124
+ };
125
+ }
126
+ _buildStatus(raw) {
127
+ const result = raw.result;
128
+ if (result === "succeeded")
129
+ return "success";
130
+ if (result === "failed" || result === "partiallySucceeded")
131
+ return "failed";
132
+ if (result === "canceled")
133
+ return "cancelled";
134
+ const status = raw.status;
135
+ if (status === "inProgress")
136
+ return "running";
137
+ if (status === "notStarted")
138
+ return "pending";
139
+ return status ?? "unknown";
140
+ }
141
+ _job(raw) {
142
+ return {
143
+ id: Number(raw.id),
144
+ name: raw.name,
145
+ stage: raw.stageName ?? "",
146
+ status: this._taskStatus(raw),
147
+ web_url: raw._links?.web?.href ?? "",
148
+ duration: raw.finishTime && raw.startTime
149
+ ? Math.round((new Date(raw.finishTime).getTime() - new Date(raw.startTime).getTime()) / 1000)
150
+ : null,
151
+ };
152
+ }
153
+ _taskStatus(raw) {
154
+ const result = raw.result;
155
+ if (result === "succeeded")
156
+ return "success";
157
+ if (result === "failed")
158
+ return "failed";
159
+ if (result === "skipped")
160
+ return "skipped";
161
+ const state = raw.state;
162
+ if (state === "inProgress")
163
+ return "running";
164
+ if (state === "pending")
165
+ return "pending";
166
+ return state ?? "unknown";
167
+ }
168
+ _diff(raw) {
169
+ const changeType = raw.changeType ?? "";
170
+ return {
171
+ old_path: raw.item?.path ?? "",
172
+ new_path: raw.item?.path ?? "",
173
+ diff: "", // ADO diff content requires a separate API call
174
+ new_file: changeType === "add",
175
+ renamed_file: changeType === "rename",
176
+ deleted_file: changeType === "delete",
177
+ };
178
+ }
179
+ // ─── Issues (Work Items) ──────────────────────────────────────────────────
180
+ async listOpenIssues() {
181
+ // WIQL query for open issues in the project
182
+ const wiql = {
183
+ query: `SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = '${this._project}' AND [System.State] <> 'Done' AND [System.State] <> 'Closed' AND [System.WorkItemType] IN ('Bug','Issue','Task','User Story') ORDER BY [System.ChangedDate] DESC`,
184
+ };
185
+ const result = await this._req(`${this._witBase()}/wiql?$top=25`, { method: "POST", body: JSON.stringify(wiql) });
186
+ const ids = (result?.workItems ?? []).map((w) => w.id);
187
+ if (ids.length === 0)
188
+ return [];
189
+ const batch = await this._req(`${this._witBase()}/workitems?ids=${ids.join(",")}&$expand=fields`);
190
+ return (batch?.value ?? []).map((wi) => this._issue(wi));
191
+ }
192
+ async getIssue(iid) {
193
+ const raw = await this._req(`${this._witBase()}/workitems/${iid}?$expand=fields`);
194
+ return this._issue(raw);
195
+ }
196
+ async createIssue(title, description = "") {
197
+ const patch = [
198
+ { op: "add", path: "/fields/System.Title", value: title },
199
+ { op: "add", path: "/fields/System.Description", value: description },
200
+ ];
201
+ const raw = await this._req(`${this._witBase()}/workitems/$Issue`, {
202
+ method: "POST",
203
+ headers: { "Content-Type": "application/json-patch+json" },
204
+ body: JSON.stringify(patch),
205
+ });
206
+ return this._issue(raw);
207
+ }
208
+ async updateIssue(iid, { title, description }) {
209
+ const patch = [];
210
+ if (title !== undefined)
211
+ patch.push({ op: "replace", path: "/fields/System.Title", value: title });
212
+ if (description !== undefined)
213
+ patch.push({ op: "replace", path: "/fields/System.Description", value: description });
214
+ const raw = await this._req(`${this._witBase()}/workitems/${iid}`, {
215
+ method: "PATCH",
216
+ headers: { "Content-Type": "application/json-patch+json" },
217
+ body: JSON.stringify(patch),
218
+ });
219
+ return this._issue(raw);
220
+ }
221
+ async closeIssue(iid) {
222
+ const patch = [{ op: "replace", path: "/fields/System.State", value: "Closed" }];
223
+ const raw = await this._req(`${this._witBase()}/workitems/${iid}`, {
224
+ method: "PATCH",
225
+ headers: { "Content-Type": "application/json-patch+json" },
226
+ body: JSON.stringify(patch),
227
+ });
228
+ return this._issue(raw);
229
+ }
230
+ // ─── Repository ───────────────────────────────────────────────────────────
231
+ async getFileTree(srcPath = "", ref = this._defaultBranch) {
232
+ const scopeParam = srcPath ? `&$scopePath=/${srcPath}` : "";
233
+ const data = await this._req(`${this._gitBase()}/trees/${ref}?recursive=true${scopeParam}`);
234
+ return (data?.treeEntries ?? [])
235
+ .filter((item) => item.gitObjectType === "blob")
236
+ .filter((item) => /\.(ts|tsx|js|jsx|json|css|yaml|yml|md|go|py|rs|java|rb|sh|toml)$/.test(item.relativePath))
237
+ .map((item) => item.relativePath);
238
+ }
239
+ async getFileContent(filePath, ref = this._defaultBranch) {
240
+ const encoded = encodeURIComponent(filePath);
241
+ const url = `${this._gitBase()}/items?path=${encoded}&versionDescriptor.version=${ref}&versionDescriptor.versionType=branch&$format=text&api-version=7.1`;
242
+ const res = await fetch(url, { headers: this._headers() });
243
+ if (!res.ok) {
244
+ const text = await res.text().catch(() => "");
245
+ throw new Error(`AzureDevOps ${res.status} on items/${filePath}: ${text}`);
246
+ }
247
+ return res.text();
248
+ }
249
+ // ─── Mutations ────────────────────────────────────────────────────────────
250
+ async createBranch(branchName, ref = this._defaultBranch) {
251
+ // Get current SHA for ref
252
+ const refs = await this._req(`${this._gitBase()}/refs?filter=heads/${ref}`);
253
+ const sha = refs?.value?.[0]?.objectId;
254
+ if (!sha)
255
+ throw new Error(`AzureDevOps: could not resolve ref ${ref}`);
256
+ return this._req(`${this._gitBase()}/refs`, {
257
+ method: "POST",
258
+ body: JSON.stringify([
259
+ {
260
+ name: `refs/heads/${branchName}`,
261
+ newObjectId: sha,
262
+ oldObjectId: "0000000000000000000000000000000000000000",
263
+ },
264
+ ]),
265
+ });
266
+ }
267
+ async commitFiles(branch, message, actions) {
268
+ const changes = actions.map((action) => ({
269
+ changeType: action.action === "create" ? "add" : action.action === "delete" ? "delete" : "edit",
270
+ item: { path: `/${action.file_path}` },
271
+ newContent: action.action !== "delete"
272
+ ? { content: action.content, contentType: "rawtext" }
273
+ : undefined,
274
+ }));
275
+ // Get current commit SHA
276
+ const refs = await this._req(`${this._gitBase()}/refs?filter=heads/${branch}`);
277
+ const oldSha = refs?.value?.[0]?.objectId ?? "0000000000000000000000000000000000000000";
278
+ return this._req(`${this._gitBase()}/pushes`, {
279
+ method: "POST",
280
+ body: JSON.stringify({
281
+ refUpdates: [{ name: `refs/heads/${branch}`, oldObjectId: oldSha }],
282
+ commits: [{ comment: message, changes }],
283
+ }),
284
+ });
285
+ }
286
+ async createMR({ sourceBranch, targetBranch = this._defaultBranch, title, description = "" }) {
287
+ const raw = await this._req(`${this._gitBase()}/pullrequests`, {
288
+ method: "POST",
289
+ body: JSON.stringify({
290
+ sourceRefName: `refs/heads/${sourceBranch}`,
291
+ targetRefName: `refs/heads/${targetBranch}`,
292
+ title,
293
+ description,
294
+ }),
295
+ });
296
+ return this._mr(raw);
297
+ }
298
+ // ─── PR queries ───────────────────────────────────────────────────────────
299
+ async listAllForgeMRs(state = "open") {
300
+ const adoStatus = state === "merged" ? "completed"
301
+ : state === "closed" ? "abandoned"
302
+ : "active";
303
+ const data = await this._req(`${this._gitBase()}/pullrequests?searchCriteria.status=${adoStatus}&$top=50`);
304
+ return (data?.value ?? [])
305
+ .filter((pr) => pr.sourceRefName?.includes("refs/heads/forge/"))
306
+ .map((pr) => this._mr(pr));
307
+ }
308
+ async listForgeMRsForIssue(issueIid) {
309
+ const data = await this._req(`${this._gitBase()}/pullrequests?searchCriteria.status=active&$top=50`);
310
+ return (data?.value ?? [])
311
+ .filter((pr) => pr.sourceRefName?.includes(`refs/heads/forge/issue-${issueIid}-`))
312
+ .map((pr) => this._mr(pr));
313
+ }
314
+ async listMergedForgeMRsForIssue(issueIid) {
315
+ const data = await this._req(`${this._gitBase()}/pullrequests?searchCriteria.status=completed&$top=50`);
316
+ return (data?.value ?? [])
317
+ .filter((pr) => pr.sourceRefName?.includes(`refs/heads/forge/issue-${issueIid}-`))
318
+ .map((pr) => this._mr(pr));
319
+ }
320
+ async getMR(mrIid) {
321
+ const raw = await this._req(`${this._gitBase()}/pullrequests/${mrIid}`);
322
+ return this._mr(raw);
323
+ }
324
+ async getMRDiffs(mrIid) {
325
+ const data = await this._req(`${this._gitBase()}/pullrequests/${mrIid}/iterations/1/changes`);
326
+ return (data?.changeEntries ?? []).map((c) => this._diff(c));
327
+ }
328
+ // ─── CI / Pipelines ───────────────────────────────────────────────────────
329
+ async getMRPipelines(mrIid) {
330
+ // Get PR statuses which link to builds
331
+ const data = await this._req(`${this._gitBase()}/pullrequests/${mrIid}/statuses`);
332
+ const buildIds = (data?.value ?? [])
333
+ .map((s) => s.targetUrl?.match(/buildId=(\d+)/)?.[1])
334
+ .filter(Boolean)
335
+ .map(Number);
336
+ if (buildIds.length === 0)
337
+ return [];
338
+ return Promise.all(buildIds.map((id) => this.getPipeline(id)));
339
+ }
340
+ async getPipeline(pipelineId) {
341
+ const raw = await this._req(`${this._buildBase()}/builds/${pipelineId}`);
342
+ return this._pipeline(raw);
343
+ }
344
+ async getPipelineJobs(pipelineId) {
345
+ const data = await this._req(`${this._buildBase()}/builds/${pipelineId}/timeline`);
346
+ return (data?.records ?? [])
347
+ .filter((r) => r.type === "Task")
348
+ .map((r) => this._job(r));
349
+ }
350
+ async getJobTrace(jobId) {
351
+ const url = `${this._buildBase()}/builds/${jobId}/logs/1?api-version=7.1`;
352
+ const res = await fetch(url, { headers: this._headers() });
353
+ if (!res.ok) {
354
+ const text = await res.text().catch(() => "");
355
+ throw new Error(`AzureDevOps ${res.status} on builds/${jobId}/logs: ${text}`);
356
+ }
357
+ return res.text();
358
+ }
359
+ }
360
+ //# sourceMappingURL=azuredevops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azuredevops.js","sourceRoot":"","sources":["../../../../../server/forge/core/providers/azuredevops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * server/forge/core/providers/base.ts
3
+ *
4
+ * Abstract base class that defines the interface every SCM provider must
5
+ * implement. Methods throw "not implemented" by default so subclasses get
6
+ * a clear error rather than a silent no-op when something is missing.
7
+ *
8
+ * All data shapes returned by provider methods are normalised so that
9
+ * ForgeAgent and routes.js never need to know which provider is active.
10
+ */
11
+ import type { NormalIssue, NormalMR, NormalPipeline, NormalJob, NormalDiff, CommitAction, NormalEnvironment } from "./types.ts";
12
+ export interface MergedMRIssueLink {
13
+ mrIid: number;
14
+ webUrl: string;
15
+ mergedAt: string | null;
16
+ sourceBranch: string | null;
17
+ closedIssueIids: number[];
18
+ }
19
+ export interface CompareResult {
20
+ aheadCount: number;
21
+ }
22
+ export interface CreateMRParams {
23
+ sourceBranch: string;
24
+ targetBranch?: string;
25
+ title: string;
26
+ description?: string;
27
+ labels?: string[];
28
+ }
29
+ export interface UpdateIssueParams {
30
+ title?: string;
31
+ description?: string;
32
+ }
33
+ export declare class ScmProvider {
34
+ /** Provider identifier */
35
+ get name(): string;
36
+ /** Whether the provider supports server-side rebase */
37
+ get supportsRebase(): boolean;
38
+ listOpenIssues(): Promise<NormalIssue[]>;
39
+ getIssue(iid: number | string): Promise<NormalIssue>;
40
+ createIssue(title: string, description?: string): Promise<NormalIssue>;
41
+ updateIssue(iid: number | string, { title, description }: UpdateIssueParams): Promise<NormalIssue>;
42
+ closeIssue(iid: number | string): Promise<NormalIssue>;
43
+ getFileTree(srcPath?: string, ref?: string): Promise<string[]>;
44
+ getFileContent(filePath: string, ref?: string): Promise<string>;
45
+ createBranch(branchName: string, ref?: string): Promise<unknown>;
46
+ deleteBranch(branchName: string): Promise<void>;
47
+ commitFiles(branch: string, message: string, actions: CommitAction[]): Promise<unknown>;
48
+ createMR({ sourceBranch, targetBranch, title, description }: CreateMRParams): Promise<NormalMR>;
49
+ /**
50
+ * @param state Lifecycle filter
51
+ * @returns Forge-created MRs in the requested state
52
+ */
53
+ listAllForgeMRs(_state?: string): Promise<NormalMR[]>;
54
+ /** Open Forge MRs for a specific issue */
55
+ listForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
56
+ /** Merged Forge MRs for a specific issue */
57
+ listMergedForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
58
+ getMR(mrIid: number | string): Promise<NormalMR>;
59
+ getMRDiffs(mrIid: number | string): Promise<NormalDiff[]>;
60
+ rebaseMR(mrIid: number | string): Promise<void>;
61
+ /** Merge the MR immediately. */
62
+ mergeMR(_mrIid: number | string): Promise<void>;
63
+ /** Close the MR without merging. */
64
+ closeMR(_mrIid: number | string): Promise<void>;
65
+ /** Reopen a closed MR. */
66
+ reopenMR(_mrIid: number | string): Promise<void>;
67
+ /**
68
+ * Toggle draft / work-in-progress state on the MR.
69
+ */
70
+ setMRDraft(_mrIid: number | string, _draft: boolean): Promise<void>;
71
+ getMRPipelines(mrIid: number | string): Promise<NormalPipeline[]>;
72
+ getPipeline(pipelineId: number | string): Promise<NormalPipeline>;
73
+ getPipelineJobs(pipelineId: number | string): Promise<NormalJob[]>;
74
+ getJobTrace(jobId: number | string): Promise<string>;
75
+ getPipelinesBySha(_sha: string): Promise<NormalPipeline[]>;
76
+ getPipelinesByRef(_ref: string): Promise<NormalPipeline[]>;
77
+ listBranchesByPrefix(_prefix: string): Promise<string[]>;
78
+ /**
79
+ * Count commits reachable from `toRef` but not from `fromRef`. Used to detect
80
+ * stale / empty forge branches (aheadCount === 0 means the branch has no
81
+ * pending changes vs. main). Return `null` when the provider can't compute it
82
+ * so callers can distinguish "no divergence" from "unknown".
83
+ */
84
+ compareRefs(_fromRef: string, _toRef: string): Promise<CompareResult | null>;
85
+ /**
86
+ * Scan recently merged MRs so callers can badge open issues whose fix
87
+ * already shipped. Two attribution paths the consumer can use:
88
+ * 1. `closedIssueIids` — issues named by `Closes #N` / `Fixes #N` /
89
+ * `Resolves #N` trailers in the MR description (primary signal).
90
+ * 2. `sourceBranch` — the MR's source branch; lets the consumer recover
91
+ * issue IDs from branch names like `forge/issue-42-foo` when the MR
92
+ * description has no closing keyword.
93
+ * Returned entries are NOT pre-filtered on `closedIssueIids` — drop noise
94
+ * in the caller if you only want one of the two signals. One bulk call per
95
+ * issue-list render — do NOT call per-issue.
96
+ */
97
+ listRecentMergedMRIssueLinks(_limit?: number): Promise<MergedMRIssueLink[]>;
98
+ /**
99
+ * List environments attached to a branch. Used to surface per-issue
100
+ * ephemeral URLs + status next to the pipeline on the issue detail view.
101
+ *
102
+ * Implementations that don't support environments should return `[]` so
103
+ * the UI simply doesn't render the section.
104
+ */
105
+ listEnvironmentsForBranch(_branchName: string): Promise<NormalEnvironment[]>;
106
+ /**
107
+ * Trigger teardown of an environment. GitLab supports this natively via the
108
+ * environments/:id/stop action; GitHub has no equivalent and typically
109
+ * needs a repository_dispatch event to a cleanup workflow. Implementations
110
+ * that can't stop should throw so the caller can surface the limitation.
111
+ */
112
+ stopEnvironment(_envId: number | string): Promise<void>;
113
+ }
114
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../server/forge/core/providers/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAW;IACvB,0BAA0B;IAC1B,IAAI,IAAI,IAAI,MAAM,CAAmB;IAErC,uDAAuD;IACvD,IAAI,cAAc,IAAI,OAAO,CAAkB;IAIzC,cAAc,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAExC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEpD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEtE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAElG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAItD,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAE9D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhE,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAEvF,QAAQ,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIrG;;;OAGG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE3D,0CAA0C;IACpC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE1E,4CAA4C;IACtC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE1E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEhD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAEzD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAErD,gCAAgC;IAC1B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAErD,oCAAoC;IAC9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAErD,0BAA0B;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAEjE,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAEjE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAElE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEpD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAE1D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAE1D,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAE9D;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAElF;;;;;;;;;;;OAWG;IACG,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIjF;;;;;;OAMG;IACG,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAElF;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC7D"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * server/forge/core/providers/base.ts
3
+ *
4
+ * Abstract base class that defines the interface every SCM provider must
5
+ * implement. Methods throw "not implemented" by default so subclasses get
6
+ * a clear error rather than a silent no-op when something is missing.
7
+ *
8
+ * All data shapes returned by provider methods are normalised so that
9
+ * ForgeAgent and routes.js never need to know which provider is active.
10
+ */
11
+ export class ScmProvider {
12
+ /** Provider identifier */
13
+ get name() { return "base"; }
14
+ /** Whether the provider supports server-side rebase */
15
+ get supportsRebase() { return false; }
16
+ // ─── Issues ────────────────────────────────────────────────────────────────
17
+ async listOpenIssues() { throw new Error(`${this.name}: listOpenIssues not implemented`); }
18
+ async getIssue(iid) { throw new Error(`${this.name}: getIssue not implemented`); }
19
+ async createIssue(title, description) { throw new Error(`${this.name}: createIssue not implemented`); }
20
+ async updateIssue(iid, { title, description }) { throw new Error(`${this.name}: updateIssue not implemented`); }
21
+ async closeIssue(iid) { throw new Error(`${this.name}: closeIssue not implemented`); }
22
+ // ─── Repository ────────────────────────────────────────────────────────────
23
+ async getFileTree(srcPath, ref) { throw new Error(`${this.name}: getFileTree not implemented`); }
24
+ async getFileContent(filePath, ref) { throw new Error(`${this.name}: getFileContent not implemented`); }
25
+ // ─── Mutations ─────────────────────────────────────────────────────────────
26
+ async createBranch(branchName, ref) { throw new Error(`${this.name}: createBranch not implemented`); }
27
+ async deleteBranch(branchName) { throw new Error(`${this.name}: deleteBranch not implemented`); }
28
+ async commitFiles(branch, message, actions) { throw new Error(`${this.name}: commitFiles not implemented`); }
29
+ async createMR({ sourceBranch, targetBranch, title, description }) { throw new Error(`${this.name}: createMR not implemented`); }
30
+ // ─── MR / PR queries ───────────────────────────────────────────────────────
31
+ /**
32
+ * @param state Lifecycle filter
33
+ * @returns Forge-created MRs in the requested state
34
+ */
35
+ async listAllForgeMRs(_state) { throw new Error(`${this.name}: listAllForgeMRs not implemented`); }
36
+ /** Open Forge MRs for a specific issue */
37
+ async listForgeMRsForIssue(issueIid) { throw new Error(`${this.name}: listForgeMRsForIssue not implemented`); }
38
+ /** Merged Forge MRs for a specific issue */
39
+ async listMergedForgeMRsForIssue(issueIid) { throw new Error(`${this.name}: listMergedForgeMRsForIssue not implemented`); }
40
+ async getMR(mrIid) { throw new Error(`${this.name}: getMR not implemented`); }
41
+ async getMRDiffs(mrIid) { throw new Error(`${this.name}: getMRDiffs not implemented`); }
42
+ async rebaseMR(mrIid) { throw new Error(`${this.name}: rebase not supported`); }
43
+ /** Merge the MR immediately. */
44
+ async mergeMR(_mrIid) { throw new Error(`${this.name}: mergeMR not supported`); }
45
+ /** Close the MR without merging. */
46
+ async closeMR(_mrIid) { throw new Error(`${this.name}: closeMR not supported`); }
47
+ /** Reopen a closed MR. */
48
+ async reopenMR(_mrIid) { throw new Error(`${this.name}: reopenMR not supported`); }
49
+ /**
50
+ * Toggle draft / work-in-progress state on the MR.
51
+ */
52
+ async setMRDraft(_mrIid, _draft) { throw new Error(`${this.name}: setMRDraft not supported`); }
53
+ // ─── CI / Pipelines ────────────────────────────────────────────────────────
54
+ async getMRPipelines(mrIid) { throw new Error(`${this.name}: getMRPipelines not implemented`); }
55
+ async getPipeline(pipelineId) { throw new Error(`${this.name}: getPipeline not implemented`); }
56
+ async getPipelineJobs(pipelineId) { throw new Error(`${this.name}: getPipelineJobs not implemented`); }
57
+ async getJobTrace(jobId) { throw new Error(`${this.name}: getJobTrace not implemented`); }
58
+ async getPipelinesBySha(_sha) { return []; }
59
+ async getPipelinesByRef(_ref) { return []; }
60
+ async listBranchesByPrefix(_prefix) { return []; }
61
+ /**
62
+ * Count commits reachable from `toRef` but not from `fromRef`. Used to detect
63
+ * stale / empty forge branches (aheadCount === 0 means the branch has no
64
+ * pending changes vs. main). Return `null` when the provider can't compute it
65
+ * so callers can distinguish "no divergence" from "unknown".
66
+ */
67
+ async compareRefs(_fromRef, _toRef) { return null; }
68
+ /**
69
+ * Scan recently merged MRs so callers can badge open issues whose fix
70
+ * already shipped. Two attribution paths the consumer can use:
71
+ * 1. `closedIssueIids` — issues named by `Closes #N` / `Fixes #N` /
72
+ * `Resolves #N` trailers in the MR description (primary signal).
73
+ * 2. `sourceBranch` — the MR's source branch; lets the consumer recover
74
+ * issue IDs from branch names like `forge/issue-42-foo` when the MR
75
+ * description has no closing keyword.
76
+ * Returned entries are NOT pre-filtered on `closedIssueIids` — drop noise
77
+ * in the caller if you only want one of the two signals. One bulk call per
78
+ * issue-list render — do NOT call per-issue.
79
+ */
80
+ async listRecentMergedMRIssueLinks(_limit) { return []; }
81
+ // ─── Environments (ephemeral review apps) ─────────────────────────────────
82
+ /**
83
+ * List environments attached to a branch. Used to surface per-issue
84
+ * ephemeral URLs + status next to the pipeline on the issue detail view.
85
+ *
86
+ * Implementations that don't support environments should return `[]` so
87
+ * the UI simply doesn't render the section.
88
+ */
89
+ async listEnvironmentsForBranch(_branchName) { return []; }
90
+ /**
91
+ * Trigger teardown of an environment. GitLab supports this natively via the
92
+ * environments/:id/stop action; GitHub has no equivalent and typically
93
+ * needs a repository_dispatch event to a cleanup workflow. Implementations
94
+ * that can't stop should throw so the caller can surface the limitation.
95
+ */
96
+ async stopEnvironment(_envId) { throw new Error(`${this.name}: stopEnvironment not implemented`); }
97
+ }
98
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../server/forge/core/providers/base.ts"],"names":[],"mappings":"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"}