@ipul-labs/forge 1.21.2 → 1.35.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 (298) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -78
  3. package/dist/apple-touch-icon.png +0 -0
  4. package/dist/assets/index-BmEuPeOG.js +27 -0
  5. package/dist/assets/index-CSH1OQYQ.css +1 -0
  6. package/dist/boot-check.js +98 -0
  7. package/dist/favicon.svg +8 -0
  8. package/dist/icon-192.png +0 -0
  9. package/dist/icon-512.png +0 -0
  10. package/dist/icon.svg +12 -0
  11. package/dist/index.html +33 -0
  12. package/dist/manifest.webmanifest +18 -0
  13. package/dist/theme-init.js +11 -0
  14. package/lib/bin/cli/analyze.d.ts.map +1 -1
  15. package/lib/bin/cli/analyze.js +3 -44
  16. package/lib/bin/cli/analyze.js.map +1 -1
  17. package/lib/bin/cli/apply.d.ts.map +1 -1
  18. package/lib/bin/cli/apply.js +2 -20
  19. package/lib/bin/cli/apply.js.map +1 -1
  20. package/lib/bin/cli/cifix.d.ts.map +1 -1
  21. package/lib/bin/cli/cifix.js +4 -28
  22. package/lib/bin/cli/cifix.js.map +1 -1
  23. package/lib/bin/cli/close.d.ts.map +1 -1
  24. package/lib/bin/cli/close.js +2 -33
  25. package/lib/bin/cli/close.js.map +1 -1
  26. package/lib/bin/cli/createIssue.d.ts.map +1 -1
  27. package/lib/bin/cli/createIssue.js +3 -12
  28. package/lib/bin/cli/createIssue.js.map +1 -1
  29. package/lib/bin/cli/doctor.d.ts.map +1 -1
  30. package/lib/bin/cli/doctor.js +3 -4
  31. package/lib/bin/cli/doctor.js.map +1 -1
  32. package/lib/bin/cli/init.js +1 -10
  33. package/lib/bin/cli/init.js.map +1 -1
  34. package/lib/bin/cli/issue.d.ts.map +1 -1
  35. package/lib/bin/cli/issue.js +3 -12
  36. package/lib/bin/cli/issue.js.map +1 -1
  37. package/lib/bin/cli/issues.d.ts.map +1 -1
  38. package/lib/bin/cli/issues.js +3 -12
  39. package/lib/bin/cli/issues.js.map +1 -1
  40. package/lib/bin/cli/merge.d.ts.map +1 -1
  41. package/lib/bin/cli/merge.js +4 -20
  42. package/lib/bin/cli/merge.js.map +1 -1
  43. package/lib/bin/cli/refine.d.ts.map +1 -1
  44. package/lib/bin/cli/refine.js +2 -26
  45. package/lib/bin/cli/refine.js.map +1 -1
  46. package/lib/bin/cli/repl.d.ts.map +1 -1
  47. package/lib/bin/cli/repl.js +4 -13
  48. package/lib/bin/cli/repl.js.map +1 -1
  49. package/lib/bin/cli/repos.d.ts.map +1 -1
  50. package/lib/bin/cli/repos.js +1 -11
  51. package/lib/bin/cli/repos.js.map +1 -1
  52. package/lib/bin/cli/resetPassword.d.ts +21 -0
  53. package/lib/bin/cli/resetPassword.d.ts.map +1 -0
  54. package/lib/bin/cli/resetPassword.js +69 -0
  55. package/lib/bin/cli/resetPassword.js.map +1 -0
  56. package/lib/bin/cli/resolution.d.ts.map +1 -1
  57. package/lib/bin/cli/resolution.js +2 -19
  58. package/lib/bin/cli/resolution.js.map +1 -1
  59. package/lib/bin/cli/serverClient.d.ts +2 -0
  60. package/lib/bin/cli/serverClient.d.ts.map +1 -1
  61. package/lib/bin/cli/serverClient.js +8 -4
  62. package/lib/bin/cli/serverClient.js.map +1 -1
  63. package/lib/bin/cli/session.d.ts.map +1 -1
  64. package/lib/bin/cli/session.js.map +1 -1
  65. package/lib/bin/cli/sessionStore.d.ts +1 -1
  66. package/lib/bin/cli/sessionStore.js +2 -2
  67. package/lib/bin/cli/sessionStore.js.map +1 -1
  68. package/lib/bin/cli/ship.d.ts.map +1 -1
  69. package/lib/bin/cli/ship.js +15 -23
  70. package/lib/bin/cli/ship.js.map +1 -1
  71. package/lib/bin/cli/update.d.ts.map +1 -1
  72. package/lib/bin/cli/update.js +34 -28
  73. package/lib/bin/cli/update.js.map +1 -1
  74. package/lib/bin/cli/updatePlan.d.ts +30 -0
  75. package/lib/bin/cli/updatePlan.d.ts.map +1 -0
  76. package/lib/bin/cli/updatePlan.js +50 -0
  77. package/lib/bin/cli/updatePlan.js.map +1 -0
  78. package/lib/bin/cli/utils.d.ts +3 -0
  79. package/lib/bin/cli/utils.d.ts.map +1 -1
  80. package/lib/bin/cli/utils.js +7 -23
  81. package/lib/bin/cli/utils.js.map +1 -1
  82. package/lib/bin/cli/validate.d.ts.map +1 -1
  83. package/lib/bin/cli/validate.js +3 -25
  84. package/lib/bin/cli/validate.js.map +1 -1
  85. package/lib/bin/cli/watch.d.ts.map +1 -1
  86. package/lib/bin/cli/watch.js +3 -12
  87. package/lib/bin/cli/watch.js.map +1 -1
  88. package/lib/bin/forge-agent.js +10 -22
  89. package/lib/bin/forge-agent.js.map +1 -1
  90. package/lib/server/app.d.ts +24 -0
  91. package/lib/server/app.d.ts.map +1 -0
  92. package/lib/server/app.js +58 -0
  93. package/lib/server/app.js.map +1 -0
  94. package/lib/server/forge/analyses/analysisStore.d.ts +53 -0
  95. package/lib/server/forge/analyses/analysisStore.d.ts.map +1 -0
  96. package/lib/server/forge/analyses/analysisStore.js +77 -0
  97. package/lib/server/forge/analyses/analysisStore.js.map +1 -0
  98. package/lib/server/forge/auth/apiTokens.d.ts +34 -0
  99. package/lib/server/forge/auth/apiTokens.d.ts.map +1 -0
  100. package/lib/server/forge/auth/apiTokens.js +44 -0
  101. package/lib/server/forge/auth/apiTokens.js.map +1 -0
  102. package/lib/server/forge/auth/auditLog.d.ts +36 -0
  103. package/lib/server/forge/auth/auditLog.d.ts.map +1 -0
  104. package/lib/server/forge/auth/auditLog.js +56 -0
  105. package/lib/server/forge/auth/auditLog.js.map +1 -0
  106. package/lib/server/forge/auth/authConfig.d.ts +13 -0
  107. package/lib/server/forge/auth/authConfig.d.ts.map +1 -0
  108. package/lib/server/forge/auth/authConfig.js +37 -0
  109. package/lib/server/forge/auth/authConfig.js.map +1 -0
  110. package/lib/server/forge/auth/createAuth.d.ts +130 -0
  111. package/lib/server/forge/auth/createAuth.d.ts.map +1 -0
  112. package/lib/server/forge/auth/createAuth.js +387 -0
  113. package/lib/server/forge/auth/createAuth.js.map +1 -0
  114. package/lib/server/forge/auth/middleware.d.ts +10 -0
  115. package/lib/server/forge/auth/middleware.d.ts.map +1 -0
  116. package/lib/server/forge/auth/middleware.js +22 -0
  117. package/lib/server/forge/auth/middleware.js.map +1 -0
  118. package/lib/server/forge/auth/oidc.d.ts +38 -0
  119. package/lib/server/forge/auth/oidc.d.ts.map +1 -0
  120. package/lib/server/forge/auth/oidc.js +63 -0
  121. package/lib/server/forge/auth/oidc.js.map +1 -0
  122. package/lib/server/forge/auth/passwords.d.ts +7 -0
  123. package/lib/server/forge/auth/passwords.d.ts.map +1 -0
  124. package/lib/server/forge/auth/passwords.js +28 -0
  125. package/lib/server/forge/auth/passwords.js.map +1 -0
  126. package/lib/server/forge/auth/resetPassword.d.ts +14 -0
  127. package/lib/server/forge/auth/resetPassword.d.ts.map +1 -0
  128. package/lib/server/forge/auth/resetPassword.js +29 -0
  129. package/lib/server/forge/auth/resetPassword.js.map +1 -0
  130. package/lib/server/forge/auth/roles.d.ts +7 -0
  131. package/lib/server/forge/auth/roles.d.ts.map +1 -0
  132. package/lib/server/forge/auth/roles.js +15 -0
  133. package/lib/server/forge/auth/roles.js.map +1 -0
  134. package/lib/server/forge/auth/sessions.d.ts +27 -0
  135. package/lib/server/forge/auth/sessions.d.ts.map +1 -0
  136. package/lib/server/forge/auth/sessions.js +37 -0
  137. package/lib/server/forge/auth/sessions.js.map +1 -0
  138. package/lib/server/forge/auth/testHarness.d.ts +104 -0
  139. package/lib/server/forge/auth/testHarness.d.ts.map +1 -0
  140. package/lib/server/forge/auth/testHarness.js +53 -0
  141. package/lib/server/forge/auth/testHarness.js.map +1 -0
  142. package/lib/server/forge/auth/tokenHash.d.ts +3 -0
  143. package/lib/server/forge/auth/tokenHash.d.ts.map +1 -0
  144. package/lib/server/forge/auth/tokenHash.js +4 -0
  145. package/lib/server/forge/auth/tokenHash.js.map +1 -0
  146. package/lib/server/forge/auth/users.d.ts +51 -0
  147. package/lib/server/forge/auth/users.d.ts.map +1 -0
  148. package/lib/server/forge/auth/users.js +118 -0
  149. package/lib/server/forge/auth/users.js.map +1 -0
  150. package/lib/server/forge/core/ForgeAgent.d.ts +58 -1
  151. package/lib/server/forge/core/ForgeAgent.d.ts.map +1 -1
  152. package/lib/server/forge/core/ForgeAgent.js +280 -32
  153. package/lib/server/forge/core/ForgeAgent.js.map +1 -1
  154. package/lib/server/forge/core/agentClient.d.ts +7 -5
  155. package/lib/server/forge/core/agentClient.d.ts.map +1 -1
  156. package/lib/server/forge/core/agentClient.js +11 -15
  157. package/lib/server/forge/core/agentClient.js.map +1 -1
  158. package/lib/server/forge/core/agentMode.d.ts +38 -0
  159. package/lib/server/forge/core/agentMode.d.ts.map +1 -0
  160. package/lib/server/forge/core/agentMode.js +43 -0
  161. package/lib/server/forge/core/agentMode.js.map +1 -0
  162. package/lib/server/forge/core/claudeClient.d.ts +63 -0
  163. package/lib/server/forge/core/claudeClient.d.ts.map +1 -1
  164. package/lib/server/forge/core/claudeClient.js +142 -50
  165. package/lib/server/forge/core/claudeClient.js.map +1 -1
  166. package/lib/server/forge/core/configStore.d.ts +12 -1
  167. package/lib/server/forge/core/configStore.d.ts.map +1 -1
  168. package/lib/server/forge/core/configStore.js +39 -2
  169. package/lib/server/forge/core/configStore.js.map +1 -1
  170. package/lib/server/forge/core/dependencyPaths.d.ts +19 -0
  171. package/lib/server/forge/core/dependencyPaths.d.ts.map +1 -0
  172. package/lib/server/forge/core/dependencyPaths.js +32 -0
  173. package/lib/server/forge/core/dependencyPaths.js.map +1 -0
  174. package/lib/server/forge/core/evidence.d.ts +43 -0
  175. package/lib/server/forge/core/evidence.d.ts.map +1 -0
  176. package/lib/server/forge/core/evidence.js +108 -0
  177. package/lib/server/forge/core/evidence.js.map +1 -0
  178. package/lib/server/forge/core/jobs.d.ts +2 -0
  179. package/lib/server/forge/core/jobs.d.ts.map +1 -1
  180. package/lib/server/forge/core/jobs.js +8 -0
  181. package/lib/server/forge/core/jobs.js.map +1 -1
  182. package/lib/server/forge/core/localRepo.d.ts +48 -7
  183. package/lib/server/forge/core/localRepo.d.ts.map +1 -1
  184. package/lib/server/forge/core/localRepo.js +123 -69
  185. package/lib/server/forge/core/localRepo.js.map +1 -1
  186. package/lib/server/forge/core/prompts.d.ts +20 -0
  187. package/lib/server/forge/core/prompts.d.ts.map +1 -1
  188. package/lib/server/forge/core/prompts.js +59 -0
  189. package/lib/server/forge/core/prompts.js.map +1 -1
  190. package/lib/server/forge/core/providers/azuredevops.d.ts +4 -2
  191. package/lib/server/forge/core/providers/azuredevops.d.ts.map +1 -1
  192. package/lib/server/forge/core/providers/azuredevops.js +12 -2
  193. package/lib/server/forge/core/providers/azuredevops.js.map +1 -1
  194. package/lib/server/forge/core/providers/base.d.ts +29 -4
  195. package/lib/server/forge/core/providers/base.d.ts.map +1 -1
  196. package/lib/server/forge/core/providers/base.js +21 -3
  197. package/lib/server/forge/core/providers/base.js.map +1 -1
  198. package/lib/server/forge/core/providers/github.d.ts +7 -7
  199. package/lib/server/forge/core/providers/github.d.ts.map +1 -1
  200. package/lib/server/forge/core/providers/github.js +13 -4
  201. package/lib/server/forge/core/providers/github.js.map +1 -1
  202. package/lib/server/forge/core/providers/gitlab.d.ts +20 -3
  203. package/lib/server/forge/core/providers/gitlab.d.ts.map +1 -1
  204. package/lib/server/forge/core/providers/gitlab.js +65 -5
  205. package/lib/server/forge/core/providers/gitlab.js.map +1 -1
  206. package/lib/server/forge/core/providers/types.d.ts +20 -0
  207. package/lib/server/forge/core/providers/types.d.ts.map +1 -1
  208. package/lib/server/forge/core/secretBox.d.ts +17 -0
  209. package/lib/server/forge/core/secretBox.d.ts.map +1 -0
  210. package/lib/server/forge/core/secretBox.js +74 -0
  211. package/lib/server/forge/core/secretBox.js.map +1 -0
  212. package/lib/server/forge/core/types.d.ts +8 -1
  213. package/lib/server/forge/core/types.d.ts.map +1 -1
  214. package/lib/server/forge/core/validator/clone.d.ts +5 -4
  215. package/lib/server/forge/core/validator/clone.d.ts.map +1 -1
  216. package/lib/server/forge/core/validator/clone.js +6 -86
  217. package/lib/server/forge/core/validator/clone.js.map +1 -1
  218. package/lib/server/forge/core/validator/cmd.d.ts.map +1 -1
  219. package/lib/server/forge/core/validator/cmd.js +4 -1
  220. package/lib/server/forge/core/validator/cmd.js.map +1 -1
  221. package/lib/server/forge/core/validator/projectType.d.ts.map +1 -1
  222. package/lib/server/forge/core/validator/projectType.js +2 -1
  223. package/lib/server/forge/core/validator/projectType.js.map +1 -1
  224. package/lib/server/forge/core/validator/runners/node.d.ts.map +1 -1
  225. package/lib/server/forge/core/validator/runners/node.js +6 -2
  226. package/lib/server/forge/core/validator/runners/node.js.map +1 -1
  227. package/lib/server/forge/core/validator.d.ts.map +1 -1
  228. package/lib/server/forge/core/validator.js +28 -22
  229. package/lib/server/forge/core/validator.js.map +1 -1
  230. package/lib/server/forge/core/workspaces.d.ts +70 -0
  231. package/lib/server/forge/core/workspaces.d.ts.map +1 -0
  232. package/lib/server/forge/core/workspaces.js +348 -0
  233. package/lib/server/forge/core/workspaces.js.map +1 -0
  234. package/lib/server/forge/db/database.d.ts +22 -0
  235. package/lib/server/forge/db/database.d.ts.map +1 -0
  236. package/lib/server/forge/db/database.js +71 -0
  237. package/lib/server/forge/db/database.js.map +1 -0
  238. package/lib/server/forge/db/migrations.d.ts +11 -0
  239. package/lib/server/forge/db/migrations.d.ts.map +1 -0
  240. package/lib/server/forge/db/migrations.js +87 -0
  241. package/lib/server/forge/db/migrations.js.map +1 -0
  242. package/lib/server/forge/routes.d.ts.map +1 -1
  243. package/lib/server/forge/routes.js +413 -163
  244. package/lib/server/forge/routes.js.map +1 -1
  245. package/lib/server/forge/sse.d.ts +10 -0
  246. package/lib/server/forge/sse.d.ts.map +1 -0
  247. package/lib/server/forge/sse.js +22 -0
  248. package/lib/server/forge/sse.js.map +1 -0
  249. package/lib/server/spa.d.ts +12 -0
  250. package/lib/server/spa.d.ts.map +1 -0
  251. package/lib/server/spa.js +23 -0
  252. package/lib/server/spa.js.map +1 -0
  253. package/lib/server.js +9 -24
  254. package/lib/server.js.map +1 -1
  255. package/lib/shared/events.d.ts +3 -0
  256. package/lib/shared/events.d.ts.map +1 -1
  257. package/lib/shared/events.js +3 -0
  258. package/lib/shared/events.js.map +1 -1
  259. package/lib/shared/packageRoot.d.ts +11 -0
  260. package/lib/shared/packageRoot.d.ts.map +1 -0
  261. package/lib/shared/packageRoot.js +23 -0
  262. package/lib/shared/packageRoot.js.map +1 -0
  263. package/lib/shared/project.d.ts +3 -0
  264. package/lib/shared/project.d.ts.map +1 -0
  265. package/lib/shared/project.js +3 -0
  266. package/lib/shared/project.js.map +1 -0
  267. package/package.json +24 -9
  268. package/lib/bin/cli/improve.d.ts +0 -2
  269. package/lib/bin/cli/improve.d.ts.map +0 -1
  270. package/lib/bin/cli/improve.js +0 -189
  271. package/lib/bin/cli/improve.js.map +0 -1
  272. package/lib/bin/cli/stats.d.ts +0 -2
  273. package/lib/bin/cli/stats.d.ts.map +0 -1
  274. package/lib/bin/cli/stats.js +0 -78
  275. package/lib/bin/cli/stats.js.map +0 -1
  276. package/lib/server/forge/core/k8s.d.ts +0 -18
  277. package/lib/server/forge/core/k8s.d.ts.map +0 -1
  278. package/lib/server/forge/core/k8s.js +0 -49
  279. package/lib/server/forge/core/k8s.js.map +0 -1
  280. package/lib/server/forge/core/openclawClient.d.ts +0 -61
  281. package/lib/server/forge/core/openclawClient.d.ts.map +0 -1
  282. package/lib/server/forge/core/openclawClient.js +0 -111
  283. package/lib/server/forge/core/openclawClient.js.map +0 -1
  284. package/lib/server/forge/core/quotaClient.d.ts +0 -48
  285. package/lib/server/forge/core/quotaClient.d.ts.map +0 -1
  286. package/lib/server/forge/core/quotaClient.js +0 -88
  287. package/lib/server/forge/core/quotaClient.js.map +0 -1
  288. package/lib/server/forge/core/selfImprove.d.ts +0 -43
  289. package/lib/server/forge/core/selfImprove.d.ts.map +0 -1
  290. package/lib/server/forge/core/selfImprove.js +0 -372
  291. package/lib/server/forge/core/selfImprove.js.map +0 -1
  292. package/lib/server/forge/core/telemetry.d.ts +0 -100
  293. package/lib/server/forge/core/telemetry.d.ts.map +0 -1
  294. package/lib/server/forge/core/telemetry.js +0 -273
  295. package/lib/server/forge/core/telemetry.js.map +0 -1
  296. package/scripts/fix-shebang.cjs +0 -11
  297. package/scripts/inject-readme.cjs +0 -23
  298. package/scripts/local-rollout.sh +0 -134
@@ -10,7 +10,8 @@
10
10
  * user-triggered probe that hits the Messages API once to read them.
11
11
  */
12
12
  import { spawn } from "child_process";
13
- import { SELECT_FILES_SCHEMA, PROPOSE_FIX_SCHEMA, CI_FIX_SCHEMA, REFINE_OR_ASK_SCHEMA, RESOLUTION_CHECK_SCHEMA, buildIdentifyFilesPrompt, buildProposeFixPrompt, buildRefineOrAskPrompt, buildRefineResumePrompt, buildCheckResolutionPrompt, classifyIssue, } from "./prompts.js";
13
+ import * as configStore from "./configStore.js";
14
+ import { SELECT_FILES_SCHEMA, PROPOSE_FIX_SCHEMA, CI_FIX_SCHEMA, REFINE_OR_ASK_SCHEMA, RESOLUTION_CHECK_SCHEMA, buildIdentifyFilesPrompt, buildProposeFixPrompt, buildRefineOrAskPrompt, buildRefineResumePrompt, buildCheckResolutionPrompt, buildAgenticFixPrompt, AGENTIC_SYSTEM_PROMPT, classifyIssue, } from "./prompts.js";
14
15
  // FORGE_MODEL env var overrides the default. Set to a cheaper model to reduce cost.
15
16
  // e.g. FORGE_MODEL=claude-haiku-4-5-20251001
16
17
  const MODEL = process.env.FORGE_MODEL ?? "claude-sonnet-4-6";
@@ -114,12 +115,70 @@ async function runClaude(prompt, jsonSchema, systemPrompt, model, options = {})
114
115
  // turn — re-passing it would stack a second system message.
115
116
  if (systemPrompt && !resumeSession)
116
117
  args.push("--system-prompt", systemPrompt);
118
+ const wrapper = await spawnClaude({ args, prompt, cwd, onEvent, signal, timeout });
119
+ const result = wrapper.result ?? "";
120
+ if (!result.trim()) {
121
+ // Claude succeeded but emitted no content. Usually means the model
122
+ // got stuck in a tool-use loop or was blocked by --disallowed-tools.
123
+ // Surface a clean, actionable message instead of dumping the wrapper.
124
+ const stopReason = wrapper.stop_reason ?? "unknown";
125
+ const turns = wrapper.num_turns ?? 0;
126
+ const hint = stopReason === "tool_use"
127
+ ? "model tried to use a blocked tool — retry or allow the tool."
128
+ : "model produced empty output — retry or switch model.";
129
+ throw new Error(`Claude returned no content (stop_reason: ${stopReason}, turns: ${turns}). ${hint}`);
130
+ }
131
+ let data;
132
+ try {
133
+ data = extractJSON(result);
134
+ }
135
+ catch (err) {
136
+ const msg = err instanceof Error ? err.message : String(err);
137
+ throw new Error(`Claude response was not valid JSON — ${msg}. First 200 chars of result: ${result.slice(0, 200)}`);
138
+ }
139
+ const wrapperSessionId = warnOnSessionMismatch(wrapper, sessionId);
140
+ return {
141
+ data,
142
+ cost: wrapper.total_cost_usd ?? 0,
143
+ serviceTier: wrapper.usage?.service_tier ?? "unknown",
144
+ inputTokens: wrapper.usage?.input_tokens ?? 0,
145
+ outputTokens: wrapper.usage?.output_tokens ?? 0,
146
+ cacheCreationTokens: wrapper.usage?.cache_creation_input_tokens ?? 0,
147
+ cacheReadTokens: wrapper.usage?.cache_read_input_tokens ?? 0,
148
+ sessionId: wrapperSessionId ?? sessionId ?? null,
149
+ };
150
+ }
151
+ /**
152
+ * Environment for the `claude` subprocess. ANTHROPIC_API_KEY from the host env
153
+ * is always stripped so the CLI uses the OAuth session (Claude Code
154
+ * subscription) rather than silently falling back to API credits. A workspace
155
+ * key saved in Settings is the one exception: hosted workspaces run Claude on
156
+ * their own Anthropic account.
157
+ */
158
+ export function buildClaudeEnv({ env, apiKey }) {
159
+ const { ANTHROPIC_API_KEY: _removed, ...cleanEnv } = env;
160
+ return { ...cleanEnv, FORCE_COLOR: "0", ...(apiKey ? { ANTHROPIC_API_KEY: apiKey } : {}) };
161
+ }
162
+ /**
163
+ * Spawns the `claude` CLI, pipes the prompt to stdin, streams tool-use logs to
164
+ * onEvent, and resolves with the parsed `result` wrapper. Shared by both the
165
+ * structured (JSON) and agentic (free-form) callers — only the args and the
166
+ * post-processing of `wrapper.result` differ between them.
167
+ */
168
+ /** The CLI ran past its time limit; whatever it already edited is still on disk. */
169
+ export class AgentTimeoutError extends Error {
170
+ minutes;
171
+ constructor(minutes) {
172
+ super(`claude CLI timed out after ${minutes} minutes`);
173
+ this.minutes = minutes;
174
+ this.name = "AgentTimeoutError";
175
+ }
176
+ }
177
+ function spawnClaude({ args, prompt, cwd, onEvent, signal, timeout }) {
178
+ const streaming = typeof onEvent === "function";
117
179
  return new Promise((resolve, reject) => {
118
- // Strip ANTHROPIC_API_KEY so the CLI uses the OAuth session
119
- // (Claude Code subscription) rather than falling back to API credits.
120
- const { ANTHROPIC_API_KEY: _removed, ...cleanEnv } = process.env;
121
180
  const proc = spawn(CLAUDE_BIN, args, {
122
- env: { ...cleanEnv, FORCE_COLOR: "0" },
181
+ env: buildClaudeEnv({ env: process.env, apiKey: configStore.getAnthropicKey() }),
123
182
  stdio: ["pipe", "pipe", "pipe"],
124
183
  ...(cwd ? { cwd } : {}),
125
184
  });
@@ -131,7 +190,7 @@ async function runClaude(prompt, jsonSchema, systemPrompt, model, options = {})
131
190
  const timeoutMin = Math.round(timeoutMs / 60_000);
132
191
  const timer = setTimeout(() => {
133
192
  proc.kill();
134
- reject(new Error(`claude CLI timed out after ${timeoutMin} minutes`));
193
+ reject(new AgentTimeoutError(timeoutMin));
135
194
  }, timeoutMs);
136
195
  // External abort (e.g. user cancelled the analysis). Kill the subprocess
137
196
  // so we stop billing the subscription / token window for work the user
@@ -199,68 +258,101 @@ async function runClaude(prompt, jsonSchema, systemPrompt, model, options = {})
199
258
  }
200
259
  return;
201
260
  }
202
- let wrapper;
203
261
  if (streaming) {
204
262
  if (!streamedResult) {
205
263
  reject(new Error(`claude CLI stream ended without a result event (${stdout.length} bytes). First 200 chars: ${stdout.slice(0, 200)}`));
206
264
  return;
207
265
  }
208
- wrapper = streamedResult;
266
+ resolve(streamedResult);
209
267
  }
210
268
  else {
211
269
  try {
212
- wrapper = JSON.parse(stdout.trim());
270
+ resolve(JSON.parse(stdout.trim()));
213
271
  }
214
272
  catch {
215
273
  reject(new Error(`claude CLI returned non-JSON output (${stdout.length} bytes). First 200 chars: ${stdout.slice(0, 200)}`));
216
- return;
217
274
  }
218
275
  }
219
- const result = wrapper.result ?? "";
220
- if (!result.trim()) {
221
- // Claude succeeded but emitted no content. Usually means the model
222
- // got stuck in a tool-use loop or was blocked by --disallowed-tools.
223
- // Surface a clean, actionable message instead of dumping the wrapper.
224
- const stopReason = wrapper.stop_reason ?? "unknown";
225
- const turns = wrapper.num_turns ?? 0;
226
- const hint = stopReason === "tool_use"
227
- ? "model tried to use a blocked tool — retry or allow the tool."
228
- : "model produced empty output — retry or switch model.";
229
- reject(new Error(`Claude returned no content (stop_reason: ${stopReason}, turns: ${turns}). ${hint}`));
230
- return;
231
- }
232
- let data;
233
- try {
234
- data = extractJSON(result);
235
- }
236
- catch (err) {
237
- const msg = err instanceof Error ? err.message : String(err);
238
- reject(new Error(`Claude response was not valid JSON — ${msg}. First 200 chars of result: ${result.slice(0, 200)}`));
239
- return;
240
- }
241
- // The CLI echoes the session id it actually used. If it doesn't match
242
- // the one we passed (CLI version drift, resume silently forked to a
243
- // new session, etc.), warn — the caller should persist the CLI's id
244
- // going forward or we'll resume the wrong conversation next turn.
245
- const wrapperSessionId = wrapper.session_id ?? null;
246
- if (sessionId && wrapperSessionId && wrapperSessionId !== sessionId) {
247
- console.warn(`[claudeClient] session_id mismatch: passed ${sessionId}, CLI returned ${wrapperSessionId}. Using CLI value.`);
248
- }
249
- resolve({
250
- data,
251
- cost: wrapper.total_cost_usd ?? 0,
252
- serviceTier: wrapper.usage?.service_tier ?? "unknown",
253
- inputTokens: wrapper.usage?.input_tokens ?? 0,
254
- outputTokens: wrapper.usage?.output_tokens ?? 0,
255
- cacheCreationTokens: wrapper.usage?.cache_creation_input_tokens ?? 0,
256
- cacheReadTokens: wrapper.usage?.cache_read_input_tokens ?? 0,
257
- sessionId: wrapperSessionId ?? sessionId ?? null,
258
- });
259
276
  });
260
277
  proc.stdin.write(prompt, "utf8");
261
278
  proc.stdin.end();
262
279
  });
263
280
  }
281
+ /**
282
+ * The CLI echoes the session id it actually used. If it doesn't match the one
283
+ * we passed (CLI version drift, resume silently forked to a new session, etc.),
284
+ * warn — the caller should persist the CLI's id or we'll resume the wrong
285
+ * conversation next turn. Returns the CLI's session id (or null).
286
+ */
287
+ function warnOnSessionMismatch(wrapper, sessionId) {
288
+ const wrapperSessionId = wrapper.session_id ?? null;
289
+ if (sessionId && wrapperSessionId && wrapperSessionId !== sessionId) {
290
+ console.warn(`[claudeClient] session_id mismatch: passed ${sessionId}, CLI returned ${wrapperSessionId}. Using CLI value.`);
291
+ }
292
+ return wrapperSessionId;
293
+ }
294
+ // ─── Agentic mode ───────────────────────────────────────────────────────────
295
+ // Instead of the single-turn JSON pipeline, run Claude as a full Claude Code
296
+ // agent inside a checkout: real tools, the project's CLAUDE.md, multi-turn loop.
297
+ // Forge captures the resulting `git diff` (see localRepo.captureChanges).
298
+ /** Tools granted to the agent in agentic mode — the editing + verification loop. */
299
+ export const AGENTIC_TOOLS = ["Read", "Glob", "Grep", "Edit", "Write", "MultiEdit", "Bash", "TodoWrite"];
300
+ /**
301
+ * Builds the CLI args for an agentic run. Deliberately the inverse of the
302
+ * structured args: tools are GRANTED (not killed with `--tools ""`), project
303
+ * settings are LOADED (so the repo's CLAUDE.md applies), and the Forge persona
304
+ * is APPENDED on top of the real harness prompt rather than replacing it.
305
+ */
306
+ export function buildAgenticArgs({ model, systemPrompt }) {
307
+ return [
308
+ "--print",
309
+ "--output-format", "stream-json",
310
+ "--verbose",
311
+ "--model", model ?? MODEL,
312
+ "--fallback-model", FALLBACK_MODEL,
313
+ "--allowed-tools", AGENTIC_TOOLS.join(","),
314
+ // Load the target repo's project settings (CLAUDE.md cascade, etc.) but
315
+ // not Forge's own user/local settings — we want the repo's conventions,
316
+ // not this machine's config.
317
+ "--setting-sources", "project",
318
+ // Append, don't replace: keep the Claude Code agent harness and add Forge's
319
+ // guardrails on top. (--system-prompt would override the harness entirely.)
320
+ ...(systemPrompt ? ["--append-system-prompt", systemPrompt] : []),
321
+ ];
322
+ }
323
+ /**
324
+ * Agentic counterpart to proposeFix: spawns Claude as an agent in `cwd` (a
325
+ * checkout of the repo) and lets it edit files directly. Returns the agent's
326
+ * final free-form message (with the trailing TITLE line) — the actual changes
327
+ * are read from the working tree by the caller via localRepo.captureChanges.
328
+ */
329
+ export async function proposeFixAgentic(params) {
330
+ const { issue, cwd, model, promptRules, userPrompt, ciContext, feedback, onEvent, signal, timeout } = params;
331
+ if (signal?.aborted) {
332
+ const err = new Error("Claude CLI call cancelled before start.");
333
+ err.name = "AbortError";
334
+ throw err;
335
+ }
336
+ const args = buildAgenticArgs({ model, systemPrompt: AGENTIC_SYSTEM_PROMPT });
337
+ const prompt = buildAgenticFixPrompt(issue, { promptRules, userPrompt, ciContext, feedback });
338
+ const wrapper = await spawnClaude({ args, prompt, cwd, onEvent, signal, timeout });
339
+ const text = wrapper.result ?? "";
340
+ if (!text.trim()) {
341
+ const stopReason = wrapper.stop_reason ?? "unknown";
342
+ const turns = wrapper.num_turns ?? 0;
343
+ throw new Error(`Claude (agentic) finished without a summary (stop_reason: ${stopReason}, turns: ${turns}). The working tree may still hold edits — retry if no changes were captured.`);
344
+ }
345
+ return {
346
+ text,
347
+ cost: wrapper.total_cost_usd ?? 0,
348
+ serviceTier: wrapper.usage?.service_tier ?? "unknown",
349
+ inputTokens: wrapper.usage?.input_tokens ?? 0,
350
+ outputTokens: wrapper.usage?.output_tokens ?? 0,
351
+ cacheCreationTokens: wrapper.usage?.cache_creation_input_tokens ?? 0,
352
+ cacheReadTokens: wrapper.usage?.cache_read_input_tokens ?? 0,
353
+ sessionId: warnOnSessionMismatch(wrapper, undefined),
354
+ };
355
+ }
264
356
  // ─── Public API ───────────────────────────────────────────────────────────────
265
357
  export async function checkResolution(issue, diffs, model, opts = {}) {
266
358
  const { data, cost, serviceTier, inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens } = await runClaude(buildCheckResolutionPrompt(issue, diffs), RESOLUTION_CHECK_SCHEMA, "You are Forge, a code review assistant. Assess whether code changes actually fix the reported issue. Be concise and direct.", model, { signal: opts.signal, timeout: opts.timeout });
@@ -1 +1 @@
1
- {"version":3,"file":"claudeClient.js","sourceRoot":"","sources":["../../../../server/forge/core/claudeClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claudeClient.js","sourceRoot":"","sources":["../../../../server/forge/core/claudeClient.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,12 @@ export declare function getConnection(provider: ProviderKey): {
38
38
  token: string;
39
39
  baseUrl?: string;
40
40
  };
41
+ /**
42
+ * Workspace Anthropic key from Settings, or "" when none is saved. Config only:
43
+ * ANTHROPIC_API_KEY in the env feeds the model list and quota check, and must
44
+ * never switch Claude itself onto API billing.
45
+ */
46
+ export declare function getAnthropicKey(): string;
41
47
  /**
42
48
  * Safe view for the API — raw tokens are replaced with a short hint and a
43
49
  * boolean so the UI can render state without ever seeing a secret.
@@ -47,13 +53,13 @@ export declare function getPublic(): {
47
53
  defaults: {
48
54
  model: string | null;
49
55
  agent: string | null;
56
+ agentMode?: "structured" | "agentic";
50
57
  autoPushOnValidatePass: boolean;
51
58
  refineRepoAccess: boolean;
52
59
  promptRules: string;
53
60
  testDeployUrlTemplate?: string;
54
61
  maxCiFixAttempts?: number;
55
62
  cliTimeout?: number;
56
- selfImproveEnabled?: boolean;
57
63
  };
58
64
  connections: {
59
65
  gitlab: {
@@ -72,6 +78,11 @@ export declare function getPublic(): {
72
78
  tokenHint: string;
73
79
  tokenSource: string;
74
80
  };
81
+ anthropic: {
82
+ hasToken: boolean;
83
+ tokenHint: string;
84
+ tokenSource: string;
85
+ };
75
86
  };
76
87
  };
77
88
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"configStore.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/configStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAwHvD,sDAAsD;AACtD,wBAAgB,GAAG,gBAElB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED,0DAA0D;AAC1D,wBAAgB,MAAM,gBAGrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,WAKhC;AAQD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW;;;EAQlD;AAQD;;;GAGG;AACH,wBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBxB"}
1
+ {"version":3,"file":"configStore.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/configStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAiJvD,sDAAsD;AACtD,wBAAgB,GAAG,gBAElB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED,0DAA0D;AAC1D,wBAAgB,MAAM,gBAGrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,WAKhC;AAQD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW;;;EAQlD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,WAE9B;AAQD;;;GAGG;AACH,wBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BxB"}
@@ -14,6 +14,8 @@ import fsSync from "node:fs";
14
14
  import fs from "node:fs/promises";
15
15
  import os from "node:os";
16
16
  import path from "node:path";
17
+ import { AGENT_MODE } from "./agentMode.js";
18
+ import { createSecretBox, defaultKeyPath, loadOrCreateKey } from "./secretBox.js";
17
19
  /** @typedef {{ id: string, label: string, projectType?: "auto" | "node" | "go" }} ForgeRepo */
18
20
  /**
19
21
  * @typedef {{ baseUrl: string, token: string }} GitLabConnection
@@ -45,6 +47,11 @@ const DEFAULT_CONFIG = {
45
47
  defaults: {
46
48
  model: null,
47
49
  agent: null,
50
+ // How Forge drives Claude to propose changes — see agentMode.ts.
51
+ // "structured" (default): two-pass JSON pipeline. "agentic": full Claude
52
+ // Code agent in a checkout, changes captured from git. Overridable per
53
+ // request and via the FORGE_AGENT_MODE env var.
54
+ agentMode: AGENT_MODE.structured,
48
55
  autoPushOnValidatePass: false,
49
56
  // When true (default), Refine gets Read/Glob/Grep access to a local
50
57
  // clone of the primary repo. Off → lighter "file tree in prompt" flow.
@@ -66,8 +73,24 @@ const DEFAULT_CONFIG = {
66
73
  gitlab: { baseUrl: BUILTIN_BASE_URLS.gitlab, token: "" },
67
74
  github: { token: "", owner: "", repo: "", baseBranch: "main" },
68
75
  azuredevops: { token: "", org: "", project: "", repo: "", baseBranch: "main" },
76
+ // Workspace Anthropic key. When set, Claude runs on this account's API
77
+ // credits instead of the host's Claude Code subscription.
78
+ anthropic: { token: "" },
69
79
  },
70
80
  };
81
+ // Connection secrets are sealed with AES-256-GCM on disk and held in plaintext
82
+ // only in memory. The key comes from FORGE_ENCRYPTION_KEY or ~/.forge/master.key.
83
+ const secretBox = createSecretBox(loadOrCreateKey({ envKey: process.env.FORGE_ENCRYPTION_KEY, keyPath: defaultKeyPath() }));
84
+ const SEALED_CONNECTIONS = ["gitlab", "github", "azuredevops", "anthropic"];
85
+ function mapTokens(cfg, fn) {
86
+ const out = structuredClone(cfg);
87
+ for (const name of SEALED_CONNECTIONS) {
88
+ const conn = out.connections?.[name];
89
+ if (conn?.token)
90
+ conn.token = fn(conn.token);
91
+ }
92
+ return out;
93
+ }
71
94
  function configPath() {
72
95
  return process.env.FORGE_CONFIG_PATH ?? path.join(os.homedir(), ".forge", "config.json");
73
96
  }
@@ -82,7 +105,8 @@ function loadSync() {
82
105
  try {
83
106
  const raw = fsSync.readFileSync(p, "utf8");
84
107
  const parsed = JSON.parse(raw);
85
- return mergeDeep(DEFAULT_CONFIG, parsed);
108
+ const merged = mergeDeep(DEFAULT_CONFIG, parsed);
109
+ return mapTokens(merged, secretBox.open);
86
110
  }
87
111
  catch (err) {
88
112
  const e = err;
@@ -99,7 +123,7 @@ async function writeToDisk(cfg) {
99
123
  const p = configPath();
100
124
  await fs.mkdir(path.dirname(p), { recursive: true });
101
125
  const tmp = `${p}.${process.pid}.${Date.now()}.tmp`;
102
- await fs.writeFile(tmp, JSON.stringify(cfg, null, 2), "utf8");
126
+ await fs.writeFile(tmp, JSON.stringify(mapTokens(cfg, secretBox.seal), null, 2), "utf8");
103
127
  // 0600 — owner read/write only. Belt-and-suspenders for when tokens land here.
104
128
  await fs.chmod(tmp, 0o600);
105
129
  await fs.rename(tmp, p);
@@ -176,6 +200,14 @@ export function getConnection(provider) {
176
200
  token: fromCfg.token || envToken,
177
201
  };
178
202
  }
203
+ /**
204
+ * Workspace Anthropic key from Settings, or "" when none is saved. Config only:
205
+ * ANTHROPIC_API_KEY in the env feeds the model list and quota check, and must
206
+ * never switch Claude itself onto API billing.
207
+ */
208
+ export function getAnthropicKey() {
209
+ return cache.connections?.anthropic?.token ?? "";
210
+ }
179
211
  function maskToken(t) {
180
212
  if (!t)
181
213
  return "";
@@ -210,6 +242,11 @@ export function getPublic() {
210
242
  tokenHint: maskToken(conn.azuredevops?.token || process.env.AZURE_DEVOPS_TOKEN || ""),
211
243
  tokenSource: conn.azuredevops?.token ? "config" : process.env.AZURE_DEVOPS_TOKEN ? "env" : "none",
212
244
  },
245
+ anthropic: {
246
+ hasToken: Boolean(getAnthropicKey()),
247
+ tokenHint: maskToken(getAnthropicKey()),
248
+ tokenSource: getAnthropicKey() ? "config" : "none",
249
+ },
213
250
  },
214
251
  };
215
252
  }
@@ -1 +1 @@
1
- {"version":3,"file":"configStore.js","sourceRoot":"","sources":["../../../../server/forge/core/configStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configStore.js","sourceRoot":"","sources":["../../../../server/forge/core/configStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * server/forge/core/dependencyPaths.ts
3
+ *
4
+ * Installed-dependency folders. Forge never captures or commits anything
5
+ * inside them, whatever the target repo's .gitignore says. A `node_modules/`
6
+ * rule (trailing slash) only matches directories, so a node_modules
7
+ * *symlink* would otherwise slip through `git add -A`.
8
+ */
9
+ export declare const DEPENDENCY_DIRS: readonly string[];
10
+ /** True when `name` (a single path segment) is a dependency folder. */
11
+ export declare function isDependencyDir(name: string): boolean;
12
+ /** True when any "/"-separated segment of a repo-relative path is a dependency folder. */
13
+ export declare function isDependencyPath(file: string): boolean;
14
+ /**
15
+ * Git pathspecs that keep dependency folders (and symlinks named like them)
16
+ * out of `git add`, at any depth. Pass after `-- .`.
17
+ */
18
+ export declare function dependencyExcludePathspecs(): string[];
19
+ //# sourceMappingURL=dependencyPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencyPaths.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/dependencyPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAC;AAIF,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * server/forge/core/dependencyPaths.ts
3
+ *
4
+ * Installed-dependency folders. Forge never captures or commits anything
5
+ * inside them, whatever the target repo's .gitignore says. A `node_modules/`
6
+ * rule (trailing slash) only matches directories, so a node_modules
7
+ * *symlink* would otherwise slip through `git add -A`.
8
+ */
9
+ export const DEPENDENCY_DIRS = [
10
+ "node_modules",
11
+ "bower_components",
12
+ "jspm_packages",
13
+ ".venv",
14
+ "__pycache__",
15
+ ];
16
+ const DEPENDENCY_DIR_SET = new Set(DEPENDENCY_DIRS);
17
+ /** True when `name` (a single path segment) is a dependency folder. */
18
+ export function isDependencyDir(name) {
19
+ return DEPENDENCY_DIR_SET.has(name);
20
+ }
21
+ /** True when any "/"-separated segment of a repo-relative path is a dependency folder. */
22
+ export function isDependencyPath(file) {
23
+ return file.split("/").some(isDependencyDir);
24
+ }
25
+ /**
26
+ * Git pathspecs that keep dependency folders (and symlinks named like them)
27
+ * out of `git add`, at any depth. Pass after `-- .`.
28
+ */
29
+ export function dependencyExcludePathspecs() {
30
+ return DEPENDENCY_DIRS.flatMap((dir) => [`:(exclude,glob)**/${dir}`, `:(exclude,glob)**/${dir}/**`]);
31
+ }
32
+ //# sourceMappingURL=dependencyPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencyPaths.js","sourceRoot":"","sources":["../../../../server/forge/core/dependencyPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAsB;IACjD,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,OAAO;IACP,aAAa;CACb,CAAC;AAEF,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAEzE,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACzC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,qBAAqB,GAAG,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,CAAC,CAAC;AACtG,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * server/forge/core/evidence.ts
3
+ *
4
+ * Evidence an agentic run gathers to prove its change — a write-up plus
5
+ * screenshots — so Forge can attach it to the merge request. Forge doesn't
6
+ * capture anything itself: the agent runs whatever it needs (Playwright, the
7
+ * test suite, …) and drops the results in EVIDENCE_DIR at the checkout root.
8
+ *
9
+ * The folder is listed in the clone's .git/info/exclude, so captureChanges
10
+ * never picks it up and nothing in it is committed.
11
+ */
12
+ export declare const EVIDENCE_DIR = ".forge-evidence";
13
+ export declare const EVIDENCE_NOTES_FILE = "EVIDENCE.md";
14
+ export declare const EVIDENCE_LIMITS: {
15
+ maxImages: number;
16
+ maxImageBytes: number;
17
+ };
18
+ export interface EvidenceImage {
19
+ /** Path relative to EVIDENCE_DIR, "/"-separated. */
20
+ name: string;
21
+ data: Buffer;
22
+ }
23
+ export interface EvidenceUpload {
24
+ name: string;
25
+ url: string;
26
+ }
27
+ /** Empties the evidence folder (it survives `git clean`) and keeps it out of git. */
28
+ export declare function prepareEvidenceDir(dir: string): Promise<string>;
29
+ /** Reads what the agent left in the evidence folder. `skipped` lists images over the limits. */
30
+ export declare function collectEvidence(dir: string): Promise<{
31
+ notes: string | null;
32
+ images: EvidenceImage[];
33
+ skipped: string[];
34
+ }>;
35
+ /**
36
+ * Builds the markdown for the MR: the notes with image links pointed at the
37
+ * uploads, then any uploaded image the notes didn't mention. Null when empty.
38
+ */
39
+ export declare function renderEvidence({ notes, uploads }: {
40
+ notes: string | null;
41
+ uploads: EvidenceUpload[];
42
+ }): string | null;
43
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../../server/forge/core/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAKF,MAAM,WAAW,aAAa;IAC7B,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ;AAeD,qFAAqF;AACrF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAarE;AAaD,gGAAgG;AAChG,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBhI;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAerH"}