@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,133 @@
1
+ /**
2
+ * server/forge/core/providers/github.js
3
+ *
4
+ * GitHub REST API v3 implementation of ScmProvider.
5
+ * Multi-file commits use the Git Data API (blob → tree → commit → ref).
6
+ *
7
+ * Required env vars:
8
+ * GITHUB_TOKEN — personal access token (repo + workflow scopes)
9
+ * GITHUB_OWNER — default org or user, e.g. "ipul-labs"
10
+ * GITHUB_REPO — default repository name, e.g. "web-app"
11
+ *
12
+ * Optional:
13
+ * GITHUB_BASE_BRANCH — default target branch (default: "main")
14
+ */
15
+ import { ScmProvider } from "./base.ts";
16
+ import type { CreateMRParams } from "./base.ts";
17
+ import type { NormalIssue, NormalMR, NormalPipeline, NormalJob, NormalDiff, CommitAction } from "./types.ts";
18
+ interface GitHubRawLabel {
19
+ name: string;
20
+ }
21
+ interface GitHubRawUser {
22
+ login: string;
23
+ }
24
+ interface GitHubRawIssue {
25
+ number: number;
26
+ title: string;
27
+ body?: string | null;
28
+ labels?: GitHubRawLabel[];
29
+ user?: GitHubRawUser | null;
30
+ created_at: string;
31
+ html_url: string;
32
+ pull_request?: unknown;
33
+ }
34
+ interface GitHubRawPRRef {
35
+ ref?: string;
36
+ sha?: string;
37
+ }
38
+ interface GitHubRawPR {
39
+ number: number;
40
+ title: string;
41
+ html_url: string;
42
+ head?: GitHubRawPRRef | null;
43
+ base?: GitHubRawPRRef | null;
44
+ state: string;
45
+ merged_at?: string | null;
46
+ mergeable?: boolean;
47
+ mergeable_state?: string;
48
+ draft?: boolean;
49
+ user?: GitHubRawUser | null;
50
+ created_at: string;
51
+ merge_commit_sha?: string | null;
52
+ }
53
+ interface GitHubRawWorkflowRun {
54
+ id: number;
55
+ conclusion?: string | null;
56
+ status?: string;
57
+ html_url: string;
58
+ created_at: string;
59
+ workflow_name?: string;
60
+ }
61
+ interface GitHubRawJob {
62
+ id: number;
63
+ name: string;
64
+ workflow_name?: string;
65
+ conclusion?: string | null;
66
+ status?: string;
67
+ html_url: string;
68
+ completed_at?: string | null;
69
+ started_at?: string | null;
70
+ }
71
+ interface GitHubRawDiffFile {
72
+ filename: string;
73
+ previous_filename?: string;
74
+ patch?: string;
75
+ status: string;
76
+ }
77
+ interface GitHubRequestOptions {
78
+ method?: string;
79
+ headers?: Record<string, string>;
80
+ body?: string;
81
+ }
82
+ export declare class GitHubProvider extends ScmProvider {
83
+ _owner: string;
84
+ _repo: string;
85
+ _base: string;
86
+ _defaultBranch: string;
87
+ /**
88
+ * @param {string} [repo] "owner/repo" format — overrides env vars
89
+ */
90
+ constructor(repo?: string);
91
+ get name(): string;
92
+ get supportsRebase(): boolean;
93
+ _headers(): Record<string, string>;
94
+ _repoBase(): string;
95
+ _req(path: string, options?: GitHubRequestOptions): Promise<unknown>;
96
+ /** GitHub issues map closely to NormalIssue */
97
+ _issue(raw: GitHubRawIssue): NormalIssue;
98
+ /** GitHub PRs → NormalMR. GitHub has no server-side rebase API. */
99
+ _mr(raw: GitHubRawPR): NormalMR;
100
+ /** GitHub Actions workflow runs → NormalPipeline */
101
+ _pipeline(raw: GitHubRawWorkflowRun): NormalPipeline;
102
+ _runStatus(run: GitHubRawWorkflowRun): string;
103
+ /** GitHub Actions jobs → NormalJob */
104
+ _job(raw: GitHubRawJob): NormalJob;
105
+ _diff(raw: GitHubRawDiffFile): NormalDiff;
106
+ listOpenIssues(): Promise<NormalIssue[]>;
107
+ getIssue(iid: number | string): Promise<NormalIssue>;
108
+ createIssue(title: string, description?: string): Promise<NormalIssue>;
109
+ updateIssue(iid: number | string, { title, description }: {
110
+ title?: string;
111
+ description?: string;
112
+ }): Promise<NormalIssue>;
113
+ closeIssue(iid: number | string): Promise<NormalIssue>;
114
+ getFileTree(srcPath?: string, ref?: string): Promise<string[]>;
115
+ getFileContent(filePath: string, ref?: string): Promise<string>;
116
+ createBranch(branchName: string, ref?: string): Promise<unknown>;
117
+ /**
118
+ * Multi-file commit using GitHub Git Data API.
119
+ */
120
+ commitFiles(branch: string, message: string, actions: CommitAction[]): Promise<unknown>;
121
+ createMR({ sourceBranch, targetBranch, title, description }: CreateMRParams): Promise<NormalMR>;
122
+ listAllForgeMRs(state?: string): Promise<NormalMR[]>;
123
+ listForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
124
+ listMergedForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
125
+ getMR(mrIid: number | string): Promise<NormalMR>;
126
+ getMRDiffs(mrIid: number | string): Promise<NormalDiff[]>;
127
+ getMRPipelines(mrIid: number | string): Promise<NormalPipeline[]>;
128
+ getPipeline(pipelineId: number | string): Promise<NormalPipeline>;
129
+ getPipelineJobs(pipelineId: number | string): Promise<NormalJob[]>;
130
+ getJobTrace(jobId: number | string): Promise<string>;
131
+ }
132
+ export {};
133
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../../../server/forge/core/providers/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * server/forge/core/providers/github.js
3
+ *
4
+ * GitHub REST API v3 implementation of ScmProvider.
5
+ * Multi-file commits use the Git Data API (blob → tree → commit → ref).
6
+ *
7
+ * Required env vars:
8
+ * GITHUB_TOKEN — personal access token (repo + workflow scopes)
9
+ * GITHUB_OWNER — default org or user, e.g. "ipul-labs"
10
+ * GITHUB_REPO — default repository name, e.g. "web-app"
11
+ *
12
+ * Optional:
13
+ * GITHUB_BASE_BRANCH — default target branch (default: "main")
14
+ */
15
+ import { getConnection } from "../configStore.js";
16
+ import { ScmProvider } from "./base.js";
17
+ export class GitHubProvider extends ScmProvider {
18
+ _owner;
19
+ _repo;
20
+ _base;
21
+ _defaultBranch;
22
+ /**
23
+ * @param {string} [repo] "owner/repo" format — overrides env vars
24
+ */
25
+ constructor(repo) {
26
+ super();
27
+ if (repo && repo.includes("/")) {
28
+ const [owner, repoName] = repo.split("/");
29
+ this._owner = owner;
30
+ this._repo = repoName;
31
+ }
32
+ else {
33
+ this._owner = process.env.GITHUB_OWNER ?? "";
34
+ this._repo = repo ?? process.env.GITHUB_REPO ?? "";
35
+ }
36
+ this._base = "https://api.github.com";
37
+ this._defaultBranch = process.env.GITHUB_BASE_BRANCH ?? "main";
38
+ }
39
+ get name() { return "github"; }
40
+ get supportsRebase() { return false; }
41
+ // ─── Internal helpers ──────────────────────────────────────────────────────
42
+ _headers() {
43
+ return {
44
+ Authorization: `Bearer ${getConnection("github").token}`,
45
+ Accept: "application/vnd.github+json",
46
+ "X-GitHub-Api-Version": "2022-11-28",
47
+ "Content-Type": "application/json",
48
+ };
49
+ }
50
+ _repoBase() {
51
+ return `${this._base}/repos/${this._owner}/${this._repo}`;
52
+ }
53
+ async _req(path, options = {}) {
54
+ const url = path.startsWith("http") ? path : `${this._repoBase()}${path}`;
55
+ const res = await fetch(url, {
56
+ ...options,
57
+ headers: { ...this._headers(), ...options.headers },
58
+ });
59
+ if (res.status === 204)
60
+ return null;
61
+ if (!res.ok) {
62
+ const text = await res.text().catch(() => "");
63
+ throw new Error(`GitHub ${res.status} on ${path}: ${text}`);
64
+ }
65
+ return res.json();
66
+ }
67
+ // ─── Normalizers ──────────────────────────────────────────────────────────
68
+ /** GitHub issues map closely to NormalIssue */
69
+ _issue(raw) {
70
+ return {
71
+ iid: raw.number,
72
+ title: raw.title,
73
+ description: raw.body ?? null,
74
+ labels: (raw.labels ?? []).map((l) => l.name),
75
+ author: { name: raw.user?.login ?? "" },
76
+ created_at: raw.created_at,
77
+ web_url: raw.html_url,
78
+ };
79
+ }
80
+ /** GitHub PRs → NormalMR. GitHub has no server-side rebase API. */
81
+ _mr(raw) {
82
+ return {
83
+ iid: raw.number,
84
+ title: raw.title,
85
+ web_url: raw.html_url,
86
+ source_branch: raw.head?.ref ?? "",
87
+ target_branch: raw.base?.ref ?? "",
88
+ state: raw.merged_at ? "merged" : raw.state,
89
+ has_conflicts: raw.mergeable === false,
90
+ rebase_in_progress: false,
91
+ merge_status: raw.mergeable_state ?? "",
92
+ detailed_merge_status: null,
93
+ draft: raw.draft ?? false,
94
+ head_pipeline: raw.head?.sha
95
+ ? null // populated separately via getCheckRuns if needed
96
+ : null,
97
+ author: { name: raw.user?.login ?? "" },
98
+ created_at: raw.created_at,
99
+ merged_at: raw.merged_at ?? null,
100
+ merge_commit_sha: raw.merge_commit_sha ?? null,
101
+ };
102
+ }
103
+ /** GitHub Actions workflow runs → NormalPipeline */
104
+ _pipeline(raw) {
105
+ return {
106
+ id: raw.id,
107
+ status: this._runStatus(raw),
108
+ web_url: raw.html_url,
109
+ created_at: raw.created_at,
110
+ };
111
+ }
112
+ _runStatus(run) {
113
+ if (run.conclusion)
114
+ return run.conclusion; // success / failure / cancelled
115
+ if (run.status === "in_progress")
116
+ return "running";
117
+ return run.status ?? "unknown";
118
+ }
119
+ /** GitHub Actions jobs → NormalJob */
120
+ _job(raw) {
121
+ return {
122
+ id: raw.id,
123
+ name: raw.name,
124
+ stage: raw.workflow_name ?? "",
125
+ status: raw.conclusion ?? raw.status ?? "unknown",
126
+ web_url: raw.html_url,
127
+ duration: raw.completed_at && raw.started_at
128
+ ? Math.round((new Date(raw.completed_at).getTime() - new Date(raw.started_at).getTime()) / 1000)
129
+ : null,
130
+ };
131
+ }
132
+ _diff(raw) {
133
+ return {
134
+ old_path: raw.previous_filename ?? raw.filename,
135
+ new_path: raw.filename,
136
+ diff: raw.patch ?? "",
137
+ new_file: raw.status === "added",
138
+ renamed_file: raw.status === "renamed",
139
+ deleted_file: raw.status === "removed",
140
+ };
141
+ }
142
+ // ─── Issues ───────────────────────────────────────────────────────────────
143
+ async listOpenIssues() {
144
+ const raw = await this._req(`/issues?state=open&sort=updated&per_page=25&pulls=false`);
145
+ // GitHub returns PRs as issues; filter them out
146
+ return (raw ?? []).filter((i) => !i.pull_request).map((i) => this._issue(i));
147
+ }
148
+ async getIssue(iid) {
149
+ const raw = await this._req(`/issues/${iid}`);
150
+ return this._issue(raw);
151
+ }
152
+ async createIssue(title, description = "") {
153
+ const raw = await this._req("/issues", {
154
+ method: "POST",
155
+ body: JSON.stringify({ title, body: description }),
156
+ });
157
+ return this._issue(raw);
158
+ }
159
+ async updateIssue(iid, { title, description }) {
160
+ const raw = await this._req(`/issues/${iid}`, {
161
+ method: "PATCH",
162
+ body: JSON.stringify({ title, body: description }),
163
+ });
164
+ return this._issue(raw);
165
+ }
166
+ async closeIssue(iid) {
167
+ const raw = await this._req(`/issues/${iid}`, {
168
+ method: "PATCH",
169
+ body: JSON.stringify({ state: "closed" }),
170
+ });
171
+ return this._issue(raw);
172
+ }
173
+ // ─── Repository ───────────────────────────────────────────────────────────
174
+ async getFileTree(srcPath = "", ref = this._defaultBranch) {
175
+ const data = await this._req(`/git/trees/${ref}?recursive=1`);
176
+ return (data.tree ?? [])
177
+ .filter((item) => item.type === "blob")
178
+ .filter((item) => !srcPath || item.path.startsWith(srcPath + "/") || item.path === srcPath)
179
+ .filter((item) => /\.(ts|tsx|js|jsx|json|css|yaml|yml|md|go|py|rs|java|rb|sh|toml)$/.test(item.path))
180
+ .map((item) => item.path);
181
+ }
182
+ async getFileContent(filePath, ref = this._defaultBranch) {
183
+ const encoded = encodeURIComponent(filePath);
184
+ const data = await this._req(`/contents/${encoded}?ref=${ref}`);
185
+ return Buffer.from(data.content, "base64").toString("utf-8");
186
+ }
187
+ // ─── Mutations ────────────────────────────────────────────────────────────
188
+ async createBranch(branchName, ref = this._defaultBranch) {
189
+ // Resolve ref to SHA
190
+ const refData = await this._req(`/git/refs/heads/${ref}`);
191
+ const sha = refData.object.sha;
192
+ return this._req("/git/refs", {
193
+ method: "POST",
194
+ body: JSON.stringify({ ref: `refs/heads/${branchName}`, sha }),
195
+ });
196
+ }
197
+ /**
198
+ * Multi-file commit using GitHub Git Data API.
199
+ */
200
+ async commitFiles(branch, message, actions) {
201
+ // 1. Get current HEAD
202
+ const refData = await this._req(`/git/refs/heads/${branch}`);
203
+ const headSha = refData.object.sha;
204
+ // 2. Get base tree SHA from commit
205
+ const commitData = await this._req(`/git/commits/${headSha}`);
206
+ const baseTreeSha = commitData.tree.sha;
207
+ // 3. Create blobs for each file (skip deletes)
208
+ const treeEntries = await Promise.all(actions.map(async (action) => {
209
+ if (action.action === "delete") {
210
+ return { path: action.file_path, mode: "100644", type: "blob", sha: null };
211
+ }
212
+ const blob = await this._req("/git/blobs", {
213
+ method: "POST",
214
+ body: JSON.stringify({ content: action.content, encoding: "utf-8" }),
215
+ });
216
+ return { path: action.file_path, mode: "100644", type: "blob", sha: blob.sha };
217
+ }));
218
+ // 4. Create new tree
219
+ const tree = await this._req("/git/trees", {
220
+ method: "POST",
221
+ body: JSON.stringify({ base_tree: baseTreeSha, tree: treeEntries }),
222
+ });
223
+ // 5. Create commit
224
+ const newCommit = await this._req("/git/commits", {
225
+ method: "POST",
226
+ body: JSON.stringify({ message, tree: tree.sha, parents: [headSha] }),
227
+ });
228
+ // 6. Update ref
229
+ return this._req(`/git/refs/heads/${branch}`, {
230
+ method: "PATCH",
231
+ body: JSON.stringify({ sha: newCommit.sha }),
232
+ });
233
+ }
234
+ async createMR({ sourceBranch, targetBranch = this._defaultBranch, title, description = "" }) {
235
+ const raw = await this._req("/pulls", {
236
+ method: "POST",
237
+ body: JSON.stringify({
238
+ head: sourceBranch,
239
+ base: targetBranch,
240
+ title,
241
+ body: description,
242
+ }),
243
+ });
244
+ return this._mr(raw);
245
+ }
246
+ // ─── PR queries ───────────────────────────────────────────────────────────
247
+ async listAllForgeMRs(state = "open") {
248
+ const ghState = state === "open" ? "open" : "closed";
249
+ const all = await this._req(`/pulls?state=${ghState}&per_page=50`);
250
+ const forge = (all ?? []).filter((pr) => pr.head?.ref?.startsWith("forge/"));
251
+ // GitHub rolls merged + closed-without-merge into `state=closed`; split
252
+ // them apart on merged_at so the UI tabs stay meaningful.
253
+ const filtered = state === "merged" ? forge.filter((pr) => pr.merged_at)
254
+ : state === "closed" ? forge.filter((pr) => !pr.merged_at)
255
+ : forge;
256
+ return filtered.map((pr) => this._mr(pr));
257
+ }
258
+ async listForgeMRsForIssue(issueIid) {
259
+ const all = await this._req("/pulls?state=open&per_page=50");
260
+ return (all ?? [])
261
+ .filter((pr) => pr.head?.ref?.startsWith(`forge/issue-${issueIid}-`))
262
+ .map((pr) => this._mr(pr));
263
+ }
264
+ async listMergedForgeMRsForIssue(issueIid) {
265
+ const all = await this._req("/pulls?state=closed&per_page=50");
266
+ return (all ?? [])
267
+ .filter((pr) => pr.merged_at && pr.head?.ref?.startsWith(`forge/issue-${issueIid}-`))
268
+ .map((pr) => this._mr(pr));
269
+ }
270
+ async getMR(mrIid) {
271
+ const raw = await this._req(`/pulls/${mrIid}`);
272
+ return this._mr(raw);
273
+ }
274
+ async getMRDiffs(mrIid) {
275
+ const raw = await this._req(`/pulls/${mrIid}/files?per_page=100`);
276
+ return (raw ?? []).map((f) => this._diff(f));
277
+ }
278
+ // rebaseMR not supported — supportsRebase is false
279
+ // ─── CI / Pipelines (GitHub Actions) ─────────────────────────────────────
280
+ async getMRPipelines(mrIid) {
281
+ const pr = await this._req(`/pulls/${mrIid}`);
282
+ const sha = pr.head?.sha;
283
+ if (!sha)
284
+ return [];
285
+ const data = await this._req(`/actions/runs?head_sha=${sha}&per_page=10`);
286
+ return (data.workflow_runs ?? []).map((r) => this._pipeline(r));
287
+ }
288
+ async getPipeline(pipelineId) {
289
+ const raw = await this._req(`/actions/runs/${pipelineId}`);
290
+ return this._pipeline(raw);
291
+ }
292
+ async getPipelineJobs(pipelineId) {
293
+ const data = await this._req(`/actions/runs/${pipelineId}/jobs`);
294
+ return (data.jobs ?? []).map((j) => this._job(j));
295
+ }
296
+ async getJobTrace(jobId) {
297
+ const url = `${this._repoBase()}/actions/jobs/${jobId}/logs`;
298
+ const res = await fetch(url, { headers: this._headers() });
299
+ if (!res.ok) {
300
+ const text = await res.text().catch(() => "");
301
+ throw new Error(`GitHub ${res.status} on jobs/${jobId}/logs: ${text}`);
302
+ }
303
+ // GitHub redirects to a pre-signed S3 URL; fetch follows it automatically
304
+ return res.text();
305
+ }
306
+ }
307
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../../server/forge/core/providers/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * server/forge/core/providers/gitlab.ts
3
+ *
4
+ * GitLab REST API v4 implementation of ScmProvider.
5
+ *
6
+ * Token resolved via configStore.getConnection("gitlab") — set in Settings UI
7
+ * or via GITLAB_TOKEN env var. Project resolved via configStore.getPrimaryProject()
8
+ * or the constructor argument.
9
+ */
10
+ import { ScmProvider } from "./base.ts";
11
+ import type { CreateMRParams, UpdateIssueParams, MergedMRIssueLink, CompareResult } from "./base.ts";
12
+ import type { NormalIssue, NormalMR, NormalPipeline, NormalJob, NormalDiff, CommitAction, NormalEnvironment } from "./types.ts";
13
+ interface GitLabRawAuthor {
14
+ name?: string;
15
+ }
16
+ interface GitLabRawIssue {
17
+ iid: number;
18
+ title: string;
19
+ description?: string | null;
20
+ labels?: string[];
21
+ author?: GitLabRawAuthor;
22
+ created_at: string;
23
+ web_url: string;
24
+ }
25
+ interface GitLabRawPipeline {
26
+ id: number;
27
+ status: string;
28
+ web_url: string;
29
+ created_at: string;
30
+ }
31
+ interface GitLabRawMR {
32
+ iid: number;
33
+ title: string;
34
+ web_url: string;
35
+ source_branch: string;
36
+ target_branch: string;
37
+ state: string;
38
+ has_conflicts?: boolean;
39
+ rebase_in_progress?: boolean;
40
+ merge_status?: string;
41
+ detailed_merge_status?: string | null;
42
+ merge_when_pipeline_succeeds?: boolean;
43
+ draft?: boolean;
44
+ work_in_progress?: boolean;
45
+ head_pipeline?: GitLabRawPipeline | null;
46
+ author?: GitLabRawAuthor;
47
+ created_at: string;
48
+ merged_at?: string | null;
49
+ merge_commit_sha?: string | null;
50
+ description?: string;
51
+ }
52
+ interface GitLabRawJob {
53
+ id: number;
54
+ name: string;
55
+ stage: string;
56
+ status: string;
57
+ web_url: string;
58
+ duration?: number | null;
59
+ }
60
+ interface GitLabRawDiff {
61
+ old_path: string;
62
+ new_path: string;
63
+ diff?: string;
64
+ new_file?: boolean;
65
+ renamed_file?: boolean;
66
+ deleted_file?: boolean;
67
+ }
68
+ interface GitLabRawEnvironment {
69
+ id: number;
70
+ name: string;
71
+ state?: string;
72
+ external_url?: string | null;
73
+ last_deployment?: {
74
+ ref?: string | null;
75
+ deployable?: {
76
+ ref?: string | null;
77
+ };
78
+ };
79
+ updated_at?: string | null;
80
+ web_url?: string | null;
81
+ }
82
+ interface GitLabRequestOptions {
83
+ method?: string;
84
+ headers?: Record<string, string>;
85
+ body?: string;
86
+ }
87
+ export declare class GitLabProvider extends ScmProvider {
88
+ _project: string;
89
+ constructor(project?: string);
90
+ get name(): string;
91
+ get supportsRebase(): boolean;
92
+ get _base(): string;
93
+ _headers(): Record<string, string>;
94
+ _enc(): string;
95
+ _req(path: string, options?: GitLabRequestOptions): Promise<unknown>;
96
+ _issue(raw: GitLabRawIssue): NormalIssue;
97
+ _mr(raw: GitLabRawMR): NormalMR;
98
+ _pipeline(raw: GitLabRawPipeline): NormalPipeline;
99
+ _job(raw: GitLabRawJob): NormalJob;
100
+ _diff(raw: GitLabRawDiff): NormalDiff;
101
+ listOpenIssues(): Promise<NormalIssue[]>;
102
+ getIssue(iid: number | string): Promise<NormalIssue>;
103
+ createIssue(title: string, description?: string): Promise<NormalIssue>;
104
+ updateIssue(iid: number | string, { title, description }: UpdateIssueParams): Promise<NormalIssue>;
105
+ closeIssue(iid: number | string): Promise<NormalIssue>;
106
+ getFileTree(srcPath?: string, ref?: string): Promise<string[]>;
107
+ getFileContent(filePath: string, ref?: string): Promise<string>;
108
+ createBranch(branchName: string, ref?: string): Promise<unknown>;
109
+ deleteBranch(branchName: string): Promise<void>;
110
+ commitFiles(branch: string, message: string, actions: CommitAction[]): Promise<unknown>;
111
+ createMR({ sourceBranch, targetBranch, title, description, labels }: CreateMRParams): Promise<NormalMR>;
112
+ listAllForgeMRs(state?: string): Promise<NormalMR[]>;
113
+ listForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
114
+ listMergedForgeMRsForIssue(issueIid: number | string): Promise<NormalMR[]>;
115
+ getMR(mrIid: number | string): Promise<NormalMR>;
116
+ getMRDiffs(mrIid: number | string): Promise<NormalDiff[]>;
117
+ rebaseMR(mrIid: number | string): Promise<void>;
118
+ setAutoMergeMR(mrIid: number | string): Promise<void>;
119
+ cancelAutoMergeMR(mrIid: number | string): Promise<void>;
120
+ mergeMR(mrIid: number | string): Promise<void>;
121
+ closeMR(mrIid: number | string): Promise<void>;
122
+ reopenMR(mrIid: number | string): Promise<void>;
123
+ setMRDraft(mrIid: number | string, draft: boolean): Promise<void>;
124
+ getMRPipelines(mrIid: number | string): Promise<NormalPipeline[]>;
125
+ getPipeline(pipelineId: number | string): Promise<NormalPipeline>;
126
+ getPipelineJobs(pipelineId: number | string): Promise<NormalJob[]>;
127
+ getJobTrace(jobId: number | string): Promise<string>;
128
+ getPipelinesBySha(sha: string): Promise<NormalPipeline[]>;
129
+ getPipelinesByRef(ref: string): Promise<NormalPipeline[]>;
130
+ listBranchesByPrefix(prefix: string): Promise<string[]>;
131
+ compareRefs(fromRef: string, toRef: string): Promise<CompareResult | null>;
132
+ listRecentMergedMRIssueLinks(limit?: number): Promise<MergedMRIssueLink[]>;
133
+ _environment(raw: GitLabRawEnvironment): NormalEnvironment;
134
+ /**
135
+ * Pull environments for a given branch. GitLab's `/environments` endpoint
136
+ * doesn't filter by ref, so we fetch available+stopping envs and match on
137
+ * the last-deployment ref. Limits per_page to 100 — ephemeral envs should
138
+ * never grow past that per project.
139
+ */
140
+ listEnvironmentsForBranch(branchName: string): Promise<NormalEnvironment[]>;
141
+ stopEnvironment(envId: number | string): Promise<void>;
142
+ }
143
+ export {};
144
+ //# sourceMappingURL=gitlab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../../../../server/forge/core/providers/gitlab.ts"],"names":[],"mappings":"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"}