terramend 0.2.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 (406) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +145 -0
  3. package/dist/agents/claude.d.ts +73 -0
  4. package/dist/agents/claudePretoolGate.d.ts +99 -0
  5. package/dist/agents/gateServer.d.ts +7 -0
  6. package/dist/agents/index.d.ts +6 -0
  7. package/dist/agents/nativeFsDenies.d.ts +28 -0
  8. package/dist/agents/opencode.d.ts +231 -0
  9. package/dist/agents/opencodePlugin.d.ts +85 -0
  10. package/dist/agents/opencodeShared.d.ts +40 -0
  11. package/dist/agents/postRun.d.ts +132 -0
  12. package/dist/agents/reviewer.d.ts +38 -0
  13. package/dist/agents/sessionLabeler.d.ts +97 -0
  14. package/dist/agents/shared.d.ts +189 -0
  15. package/dist/agents/subagentModels.d.ts +19 -0
  16. package/dist/agents/subagentToolGates.d.ts +55 -0
  17. package/dist/cli.mjs +197426 -0
  18. package/dist/external.d.ts +227 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.js +196783 -0
  21. package/dist/internal/index.d.ts +18 -0
  22. package/dist/internal.js +1714 -0
  23. package/dist/lifecycle.d.ts +2 -0
  24. package/dist/main.d.ts +8 -0
  25. package/dist/mcp/arkConfig.d.ts +1 -0
  26. package/dist/mcp/checkSuite.d.ts +25 -0
  27. package/dist/mcp/checkout.d.ts +77 -0
  28. package/dist/mcp/comment.d.ts +119 -0
  29. package/dist/mcp/commitInfo.d.ts +9 -0
  30. package/dist/mcp/crosswalk.d.ts +105 -0
  31. package/dist/mcp/dependencies.d.ts +8 -0
  32. package/dist/mcp/geminiSanitizer.d.ts +28 -0
  33. package/dist/mcp/git.d.ts +46 -0
  34. package/dist/mcp/guardrails.d.ts +104 -0
  35. package/dist/mcp/issue.d.ts +18 -0
  36. package/dist/mcp/issueComments.d.ts +9 -0
  37. package/dist/mcp/issueEvents.d.ts +9 -0
  38. package/dist/mcp/issueInfo.d.ts +9 -0
  39. package/dist/mcp/labels.d.ts +12 -0
  40. package/dist/mcp/localContext.d.ts +19 -0
  41. package/dist/mcp/moduleExtraction.d.ts +71 -0
  42. package/dist/mcp/moduleTests.d.ts +104 -0
  43. package/dist/mcp/modules.d.ts +179 -0
  44. package/dist/mcp/output.d.ts +12 -0
  45. package/dist/mcp/pathSafety.d.ts +14 -0
  46. package/dist/mcp/policy.d.ts +48 -0
  47. package/dist/mcp/pr.d.ts +49 -0
  48. package/dist/mcp/prInfo.d.ts +9 -0
  49. package/dist/mcp/providerSchema.d.ts +50 -0
  50. package/dist/mcp/review.d.ts +199 -0
  51. package/dist/mcp/reviewComments.d.ts +178 -0
  52. package/dist/mcp/roots.d.ts +58 -0
  53. package/dist/mcp/scope.d.ts +15 -0
  54. package/dist/mcp/selectMode.d.ts +18 -0
  55. package/dist/mcp/server.d.ts +48 -0
  56. package/dist/mcp/shared.d.ts +47 -0
  57. package/dist/mcp/shell.d.ts +37 -0
  58. package/dist/mcp/staleFix.d.ts +51 -0
  59. package/dist/mcp/terraform/cost.d.ts +55 -0
  60. package/dist/mcp/terraform/currency.d.ts +94 -0
  61. package/dist/mcp/terraform/decisions.d.ts +178 -0
  62. package/dist/mcp/terraform/findings.d.ts +75 -0
  63. package/dist/mcp/terraform/plan.d.ts +157 -0
  64. package/dist/mcp/terraform/scanners.d.ts +131 -0
  65. package/dist/mcp/terraform/tools.d.ts +63 -0
  66. package/dist/mcp/terraform/types.d.ts +172 -0
  67. package/dist/mcp/terraform.d.ts +22 -0
  68. package/dist/mcp/terratest.d.ts +83 -0
  69. package/dist/mcp/upload.d.ts +6 -0
  70. package/dist/models.d.ts +171 -0
  71. package/dist/modes.d.ts +26 -0
  72. package/dist/prep/index.d.ts +7 -0
  73. package/dist/prep/installNodeDependencies.d.ts +2 -0
  74. package/dist/prep/installPythonDependencies.d.ts +2 -0
  75. package/dist/prep/types.d.ts +31 -0
  76. package/dist/reviewQuality.d.ts +64 -0
  77. package/dist/skills/terraform-best-practices/SKILL.md +369 -0
  78. package/dist/toolState.d.ts +135 -0
  79. package/dist/utils/activity.d.ts +40 -0
  80. package/dist/utils/agent.d.ts +20 -0
  81. package/dist/utils/agentHangReport.d.ts +38 -0
  82. package/dist/utils/apiFetch.d.ts +19 -0
  83. package/dist/utils/apiKeys.d.ts +41 -0
  84. package/dist/utils/apiUrl.d.ts +20 -0
  85. package/dist/utils/assets.d.ts +8 -0
  86. package/dist/utils/billingErrors.d.ts +85 -0
  87. package/dist/utils/body.d.ts +34 -0
  88. package/dist/utils/buildTerramendFooter.d.ts +25 -0
  89. package/dist/utils/byokFallback.d.ts +85 -0
  90. package/dist/utils/claudeSubscription.d.ts +30 -0
  91. package/dist/utils/cli.d.ts +10 -0
  92. package/dist/utils/codexHome.d.ts +29 -0
  93. package/dist/utils/codexOAuth.d.ts +60 -0
  94. package/dist/utils/diffCoverage.d.ts +63 -0
  95. package/dist/utils/errorReport.d.ts +17 -0
  96. package/dist/utils/exitHandler.d.ts +8 -0
  97. package/dist/utils/fixDoubleEscapedString.d.ts +1 -0
  98. package/dist/utils/gitAuth.d.ts +84 -0
  99. package/dist/utils/gitAuthServer.d.ts +24 -0
  100. package/dist/utils/github.d.ts +78 -0
  101. package/dist/utils/globals.d.ts +3 -0
  102. package/dist/utils/install.d.ts +60 -0
  103. package/dist/utils/instructions.d.ts +48 -0
  104. package/dist/utils/leapingComment.d.ts +11 -0
  105. package/dist/utils/learnings.d.ts +62 -0
  106. package/dist/utils/learningsTruncate.d.ts +25 -0
  107. package/dist/utils/lifecycle.d.ts +57 -0
  108. package/dist/utils/log.d.ts +111 -0
  109. package/dist/utils/normalizeEnv.d.ts +30 -0
  110. package/dist/utils/openCodeModels.d.ts +11 -0
  111. package/dist/utils/overrides.d.ts +40 -0
  112. package/dist/utils/packageManager.d.ts +49 -0
  113. package/dist/utils/patchWorkflowRunFields.d.ts +29 -0
  114. package/dist/utils/payload.d.ts +105 -0
  115. package/dist/utils/prSummary.d.ts +61 -0
  116. package/dist/utils/progressComment.d.ts +146 -0
  117. package/dist/utils/providerErrors.d.ts +31 -0
  118. package/dist/utils/rangeDiff.d.ts +51 -0
  119. package/dist/utils/remediationCommand.d.ts +55 -0
  120. package/dist/utils/retry.d.ts +13 -0
  121. package/dist/utils/reviewCleanup.d.ts +14 -0
  122. package/dist/utils/run.d.ts +9 -0
  123. package/dist/utils/runContext.d.ts +60 -0
  124. package/dist/utils/runContextData.d.ts +23 -0
  125. package/dist/utils/runErrorRenderer.d.ts +64 -0
  126. package/dist/utils/runLifecycle.d.ts +86 -0
  127. package/dist/utils/runStartupLog.d.ts +15 -0
  128. package/dist/utils/secrets.d.ts +22 -0
  129. package/dist/utils/setup.d.ts +90 -0
  130. package/dist/utils/shell.d.ts +32 -0
  131. package/dist/utils/skills.d.ts +10 -0
  132. package/dist/utils/subprocess.d.ts +80 -0
  133. package/dist/utils/terraformMcp.d.ts +42 -0
  134. package/dist/utils/time.d.ts +15 -0
  135. package/dist/utils/timer.d.ts +23 -0
  136. package/dist/utils/todoTracking.d.ts +16 -0
  137. package/dist/utils/token.d.ts +39 -0
  138. package/dist/utils/version.d.ts +2 -0
  139. package/dist/utils/versioning.d.ts +7 -0
  140. package/dist/utils/vertex.d.ts +16 -0
  141. package/dist/utils/workflow.d.ts +13 -0
  142. package/package.json +119 -0
  143. package/src/agents/claude.test.ts +1016 -0
  144. package/src/agents/claude.ts +1246 -0
  145. package/src/agents/claudePretoolGate.test.ts +28 -0
  146. package/src/agents/claudePretoolGate.ts +173 -0
  147. package/src/agents/gateServer.test.ts +204 -0
  148. package/src/agents/gateServer.ts +124 -0
  149. package/src/agents/index.ts +10 -0
  150. package/src/agents/nativeFsDenies.ts +82 -0
  151. package/src/agents/opencode.test.ts +1440 -0
  152. package/src/agents/opencode.ts +1312 -0
  153. package/src/agents/opencodePlugin.ts +222 -0
  154. package/src/agents/opencodeShared.test.ts +34 -0
  155. package/src/agents/opencodeShared.ts +121 -0
  156. package/src/agents/postRun.test.ts +549 -0
  157. package/src/agents/postRun.ts +535 -0
  158. package/src/agents/reviewer.ts +104 -0
  159. package/src/agents/sessionLabeler.test.ts +247 -0
  160. package/src/agents/sessionLabeler.ts +178 -0
  161. package/src/agents/shared.test.ts +76 -0
  162. package/src/agents/shared.ts +292 -0
  163. package/src/agents/subagentModels.test.ts +113 -0
  164. package/src/agents/subagentModels.ts +40 -0
  165. package/src/agents/subagentRegistration.test.ts +41 -0
  166. package/src/agents/subagentToolGates.ts +114 -0
  167. package/src/cli.test.ts +129 -0
  168. package/src/cli.ts +105 -0
  169. package/src/commands/gha.test.ts +192 -0
  170. package/src/commands/gha.ts +188 -0
  171. package/src/commands/mcp.ts +122 -0
  172. package/src/config.ts +1 -0
  173. package/src/entry.ts +7 -0
  174. package/src/entryPost.stdlibOnly.test.ts +109 -0
  175. package/src/entryPost.ts +99 -0
  176. package/src/external.test.ts +16 -0
  177. package/src/external.ts +302 -0
  178. package/src/index.ts +11 -0
  179. package/src/internal/index.ts +71 -0
  180. package/src/lifecycle.ts +2 -0
  181. package/src/main.test.ts +873 -0
  182. package/src/main.ts +712 -0
  183. package/src/mcp/__fixtures__/terramend-scratch-pr-49-review-3485940013.json +110 -0
  184. package/src/mcp/__fixtures__/terramend-scratch-pr-64-review-3531000326.json +14 -0
  185. package/src/mcp/__fixtures__/terramend-test-repo-pr-1.diff.json +67 -0
  186. package/src/mcp/__snapshots__/checkout.test.ts.snap +109 -0
  187. package/src/mcp/__snapshots__/reviewComments.test.ts.snap +71 -0
  188. package/src/mcp/arkConfig.ts +7 -0
  189. package/src/mcp/checkSuite.test.ts +245 -0
  190. package/src/mcp/checkSuite.ts +255 -0
  191. package/src/mcp/checkout.test.ts +752 -0
  192. package/src/mcp/checkout.ts +886 -0
  193. package/src/mcp/comment.test.ts +772 -0
  194. package/src/mcp/comment.ts +582 -0
  195. package/src/mcp/commitInfo.test.ts +127 -0
  196. package/src/mcp/commitInfo.ts +61 -0
  197. package/src/mcp/crosswalk.test.ts +106 -0
  198. package/src/mcp/crosswalk.ts +339 -0
  199. package/src/mcp/dependencies.test.ts +309 -0
  200. package/src/mcp/dependencies.ts +189 -0
  201. package/src/mcp/geminiSanitizer.test.ts +287 -0
  202. package/src/mcp/geminiSanitizer.ts +207 -0
  203. package/src/mcp/git.test.ts +1083 -0
  204. package/src/mcp/git.ts +890 -0
  205. package/src/mcp/guardrails.test.ts +705 -0
  206. package/src/mcp/guardrails.ts +465 -0
  207. package/src/mcp/issue.test.ts +113 -0
  208. package/src/mcp/issue.ts +73 -0
  209. package/src/mcp/issueComments.test.ts +69 -0
  210. package/src/mcp/issueComments.ts +48 -0
  211. package/src/mcp/issueEvents.test.ts +134 -0
  212. package/src/mcp/issueEvents.ts +100 -0
  213. package/src/mcp/issueInfo.test.ts +104 -0
  214. package/src/mcp/issueInfo.ts +72 -0
  215. package/src/mcp/labels.test.ts +52 -0
  216. package/src/mcp/labels.ts +34 -0
  217. package/src/mcp/localContext.ts +28 -0
  218. package/src/mcp/localServer.test.ts +75 -0
  219. package/src/mcp/localServer.ts +131 -0
  220. package/src/mcp/moduleExtraction.test.ts +261 -0
  221. package/src/mcp/moduleExtraction.ts +313 -0
  222. package/src/mcp/moduleTests.test.ts +269 -0
  223. package/src/mcp/moduleTests.ts +421 -0
  224. package/src/mcp/modules.test.ts +640 -0
  225. package/src/mcp/modules.ts +696 -0
  226. package/src/mcp/output.test.ts +96 -0
  227. package/src/mcp/output.ts +70 -0
  228. package/src/mcp/pathSafety.test.ts +44 -0
  229. package/src/mcp/pathSafety.ts +28 -0
  230. package/src/mcp/policy.test.ts +282 -0
  231. package/src/mcp/policy.ts +199 -0
  232. package/src/mcp/pr.test.ts +387 -0
  233. package/src/mcp/pr.ts +194 -0
  234. package/src/mcp/prInfo.test.ts +96 -0
  235. package/src/mcp/prInfo.ts +91 -0
  236. package/src/mcp/providerSchema.test.ts +85 -0
  237. package/src/mcp/providerSchema.ts +175 -0
  238. package/src/mcp/review.test.ts +936 -0
  239. package/src/mcp/review.ts +923 -0
  240. package/src/mcp/reviewComments.test.ts +549 -0
  241. package/src/mcp/reviewComments.ts +896 -0
  242. package/src/mcp/roots.test.ts +175 -0
  243. package/src/mcp/roots.ts +217 -0
  244. package/src/mcp/scope.test.ts +59 -0
  245. package/src/mcp/scope.ts +65 -0
  246. package/src/mcp/security.test.ts +720 -0
  247. package/src/mcp/selectMode.test.ts +210 -0
  248. package/src/mcp/selectMode.ts +181 -0
  249. package/src/mcp/server.test.ts +292 -0
  250. package/src/mcp/server.ts +403 -0
  251. package/src/mcp/shared.ts +100 -0
  252. package/src/mcp/shell.test.ts +520 -0
  253. package/src/mcp/shell.ts +505 -0
  254. package/src/mcp/staleFix.test.ts +237 -0
  255. package/src/mcp/staleFix.ts +277 -0
  256. package/src/mcp/terraform/cost.ts +163 -0
  257. package/src/mcp/terraform/currency.test.ts +338 -0
  258. package/src/mcp/terraform/currency.ts +336 -0
  259. package/src/mcp/terraform/decisions.ts +527 -0
  260. package/src/mcp/terraform/findings.ts +333 -0
  261. package/src/mcp/terraform/plan.ts +348 -0
  262. package/src/mcp/terraform/scanners.ts +809 -0
  263. package/src/mcp/terraform/tools.test.ts +1071 -0
  264. package/src/mcp/terraform/tools.ts +908 -0
  265. package/src/mcp/terraform/types.ts +305 -0
  266. package/src/mcp/terraform.test.ts +1957 -0
  267. package/src/mcp/terraform.ts +23 -0
  268. package/src/mcp/terratest.test.ts +105 -0
  269. package/src/mcp/terratest.ts +196 -0
  270. package/src/mcp/toolFiltering.test.ts +85 -0
  271. package/src/mcp/upload.test.ts +180 -0
  272. package/src/mcp/upload.ts +112 -0
  273. package/src/models.test.ts +300 -0
  274. package/src/models.ts +708 -0
  275. package/src/modes.test.ts +107 -0
  276. package/src/modes.ts +880 -0
  277. package/src/prep/index.ts +43 -0
  278. package/src/prep/installNodeDependencies.test.ts +298 -0
  279. package/src/prep/installNodeDependencies.ts +196 -0
  280. package/src/prep/installPythonDependencies.test.ts +268 -0
  281. package/src/prep/installPythonDependencies.ts +199 -0
  282. package/src/prep/types.ts +38 -0
  283. package/src/reviewQuality.test.ts +63 -0
  284. package/src/reviewQuality.ts +134 -0
  285. package/src/runCli.test.ts +214 -0
  286. package/src/runCli.ts +282 -0
  287. package/src/skills/terraform-best-practices/SKILL.md +369 -0
  288. package/src/toolState.test.ts +45 -0
  289. package/src/toolState.ts +252 -0
  290. package/src/utils/activity.test.ts +188 -0
  291. package/src/utils/activity.ts +210 -0
  292. package/src/utils/agent.test.ts +251 -0
  293. package/src/utils/agent.ts +139 -0
  294. package/src/utils/agentHangReport.test.ts +203 -0
  295. package/src/utils/agentHangReport.ts +170 -0
  296. package/src/utils/apiFetch.test.ts +115 -0
  297. package/src/utils/apiFetch.ts +62 -0
  298. package/src/utils/apiKeys.test.ts +344 -0
  299. package/src/utils/apiKeys.ts +206 -0
  300. package/src/utils/apiUrl.test.ts +30 -0
  301. package/src/utils/apiUrl.ts +59 -0
  302. package/src/utils/assets.test.ts +153 -0
  303. package/src/utils/assets.ts +107 -0
  304. package/src/utils/billingErrors.test.ts +121 -0
  305. package/src/utils/billingErrors.ts +189 -0
  306. package/src/utils/body.test.ts +217 -0
  307. package/src/utils/body.ts +168 -0
  308. package/src/utils/buildTerramendFooter.test.ts +38 -0
  309. package/src/utils/buildTerramendFooter.ts +82 -0
  310. package/src/utils/byokFallback.test.ts +205 -0
  311. package/src/utils/byokFallback.ts +128 -0
  312. package/src/utils/claudeSubscription.test.ts +179 -0
  313. package/src/utils/claudeSubscription.ts +93 -0
  314. package/src/utils/cli.ts +31 -0
  315. package/src/utils/codexHome.test.ts +190 -0
  316. package/src/utils/codexHome.ts +191 -0
  317. package/src/utils/codexOAuth.ts +147 -0
  318. package/src/utils/codexRefreshDetect.test.ts +85 -0
  319. package/src/utils/codexRefreshDetect.ts +35 -0
  320. package/src/utils/diffCoverage.test.ts +468 -0
  321. package/src/utils/diffCoverage.ts +404 -0
  322. package/src/utils/errorReport.test.ts +135 -0
  323. package/src/utils/errorReport.ts +83 -0
  324. package/src/utils/exitHandler.ts +35 -0
  325. package/src/utils/fixDoubleEscapedString.ts +9 -0
  326. package/src/utils/ghaCore.ts +13 -0
  327. package/src/utils/gitAuth.test.ts +322 -0
  328. package/src/utils/gitAuth.ts +263 -0
  329. package/src/utils/gitAuthServer.test.ts +260 -0
  330. package/src/utils/gitAuthServer.ts +182 -0
  331. package/src/utils/github.test.ts +615 -0
  332. package/src/utils/github.ts +538 -0
  333. package/src/utils/globals.ts +9 -0
  334. package/src/utils/humanEditCapture.test.ts +100 -0
  335. package/src/utils/humanEditCapture.ts +193 -0
  336. package/src/utils/install.test.ts +768 -0
  337. package/src/utils/install.ts +492 -0
  338. package/src/utils/instructions.test.ts +240 -0
  339. package/src/utils/instructions.ts +543 -0
  340. package/src/utils/leapingComment.test.ts +51 -0
  341. package/src/utils/leapingComment.ts +18 -0
  342. package/src/utils/learnings.test.ts +87 -0
  343. package/src/utils/learnings.ts +138 -0
  344. package/src/utils/learningsTocRender.test.ts +116 -0
  345. package/src/utils/learningsTruncate.test.ts +39 -0
  346. package/src/utils/learningsTruncate.ts +42 -0
  347. package/src/utils/lifecycle.test.ts +195 -0
  348. package/src/utils/lifecycle.ts +198 -0
  349. package/src/utils/log.test.ts +402 -0
  350. package/src/utils/log.ts +432 -0
  351. package/src/utils/normalizeEnv.test.ts +91 -0
  352. package/src/utils/normalizeEnv.ts +106 -0
  353. package/src/utils/openCodeModels.ts +82 -0
  354. package/src/utils/overrides.test.ts +89 -0
  355. package/src/utils/overrides.ts +98 -0
  356. package/src/utils/packageManager.test.ts +321 -0
  357. package/src/utils/packageManager.ts +257 -0
  358. package/src/utils/patchWorkflowRunFields.test.ts +92 -0
  359. package/src/utils/patchWorkflowRunFields.ts +150 -0
  360. package/src/utils/payload.test.ts +497 -0
  361. package/src/utils/payload.ts +371 -0
  362. package/src/utils/postApiFetch.ts +51 -0
  363. package/src/utils/prSummary.test.ts +224 -0
  364. package/src/utils/prSummary.ts +147 -0
  365. package/src/utils/progressComment.ts +261 -0
  366. package/src/utils/providerErrors.test.ts +315 -0
  367. package/src/utils/providerErrors.ts +172 -0
  368. package/src/utils/rangeDiff.test.ts +236 -0
  369. package/src/utils/rangeDiff.ts +182 -0
  370. package/src/utils/remediationCommand.test.ts +163 -0
  371. package/src/utils/remediationCommand.ts +119 -0
  372. package/src/utils/retry.test.ts +153 -0
  373. package/src/utils/retry.ts +58 -0
  374. package/src/utils/reviewCleanup.ts +106 -0
  375. package/src/utils/run.ts +99 -0
  376. package/src/utils/runContext.ts +145 -0
  377. package/src/utils/runContextData.ts +58 -0
  378. package/src/utils/runErrorRenderer.test.ts +95 -0
  379. package/src/utils/runErrorRenderer.ts +259 -0
  380. package/src/utils/runFixture.ts +76 -0
  381. package/src/utils/runLifecycle.ts +237 -0
  382. package/src/utils/runStartupLog.ts +60 -0
  383. package/src/utils/secrets.test.ts +103 -0
  384. package/src/utils/secrets.ts +177 -0
  385. package/src/utils/setup.test.ts +509 -0
  386. package/src/utils/setup.ts +352 -0
  387. package/src/utils/shell.ts +103 -0
  388. package/src/utils/skills.test.ts +46 -0
  389. package/src/utils/skills.ts +67 -0
  390. package/src/utils/subprocess.test.ts +170 -0
  391. package/src/utils/subprocess.ts +438 -0
  392. package/src/utils/terraformMcp.test.ts +63 -0
  393. package/src/utils/terraformMcp.ts +83 -0
  394. package/src/utils/time.test.ts +105 -0
  395. package/src/utils/time.ts +59 -0
  396. package/src/utils/timer.test.ts +91 -0
  397. package/src/utils/timer.ts +72 -0
  398. package/src/utils/todoTracking.test.ts +223 -0
  399. package/src/utils/todoTracking.ts +167 -0
  400. package/src/utils/token.test.ts +239 -0
  401. package/src/utils/token.ts +186 -0
  402. package/src/utils/version.ts +10 -0
  403. package/src/utils/versioning.test.ts +34 -0
  404. package/src/utils/versioning.ts +44 -0
  405. package/src/utils/vertex.ts +85 -0
  406. package/src/utils/workflow.ts +25 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * HashiCorp terraform-mcp-server integration (P2.2).
3
+ *
4
+ * When the `terraform_mcp` input is on, the agent harness registers a SECOND
5
+ * MCP server next to terramend's: HashiCorp's terraform-mcp-server, run as a
6
+ * Docker container over stdio. It gives the fixing agent live Terraform
7
+ * Registry knowledge — current module versions, provider argument shapes —
8
+ * which directly powers module-source-aware fixes and generation.
9
+ *
10
+ * Security posture:
11
+ * - the image is VERSION-PINNED (`TERRAFORM_MCP_IMAGE`); bump deliberately.
12
+ * (P4's SHA-pinning sweep will move this to a digest pin.)
13
+ * - only the read-only `registry` toolset is enabled — no TFE operations,
14
+ * and no TFE_TOKEN is ever passed.
15
+ * - degrades green: docker absent → a log note, never a failed run.
16
+ */
17
+ import type { ResolvedPayload } from "#app/utils/payload";
18
+ /** pinned release of hashicorp/terraform-mcp-server. Bump deliberately. */
19
+ export declare const TERRAFORM_MCP_IMAGE = "hashicorp/terraform-mcp-server:0.5.2";
20
+ /** the registry name the server is registered under in agent MCP configs —
21
+ * matches HashiCorp's own client-config examples, so agent guidance written
22
+ * against "the terraform MCP server" finds it under the expected key. */
23
+ export declare const TERRAFORM_MCP_SERVER_NAME = "terraform";
24
+ export type TerraformMcpResolution = {
25
+ kind: "disabled";
26
+ } | {
27
+ kind: "docker_missing";
28
+ note: string;
29
+ } | {
30
+ kind: "available";
31
+ command: "docker";
32
+ args: string[];
33
+ };
34
+ /** test hook — the docker probe is cached per process. */
35
+ export declare function _clearDockerProbeCache(): void;
36
+ /**
37
+ * Decide whether the run gets the terraform-mcp-server, as a discriminated
38
+ * union so each harness handles all three outcomes explicitly: register the
39
+ * server (`available`), log the degrade-green note (`docker_missing`), or do
40
+ * nothing (`disabled`).
41
+ */
42
+ export declare function resolveTerraformMcp(payload: Pick<ResolvedPayload, "terraformMcp">): TerraformMcpResolution;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * time string parsing utilities for timeout configuration.
3
+ * supports formats like "10m", "1h30m", "10m12s", "30s".
4
+ */
5
+ export declare const TIMEOUT_DISABLED = "none";
6
+ /**
7
+ * parse a time string like "10m", "1h30m", "10m12s" into milliseconds.
8
+ * returns null if the string is not a valid time format.
9
+ */
10
+ export declare function parseTimeString(input: string): number | null;
11
+ /**
12
+ * check if a string is a valid time format.
13
+ */
14
+ export declare function isValidTimeString(input: string): boolean;
15
+ export declare function resolveTimeoutMs(input: string | undefined): number | null;
@@ -0,0 +1,23 @@
1
+ export declare class Timer {
2
+ private initialTimestamp;
3
+ private lastCheckpointTimestamp;
4
+ constructor();
5
+ checkpoint(name: string): void;
6
+ }
7
+ /**
8
+ * Measures wall-clock gap between the last tool_result and the next tool_call,
9
+ * surfacing it as a "thought for Xs" log when over `THINKING_THRESHOLD`.
10
+ *
11
+ * Use one instance per logical session (orchestrator, each subagent) — sharing
12
+ * a single timer across sessions conflates cross-session interleaving as
13
+ * thinking time. The optional `formatLine` lets the caller prefix output with
14
+ * a session label so attribution is visible in the merged log stream.
15
+ */
16
+ export declare class ThinkingTimer {
17
+ private readonly durationFormatter;
18
+ private lastToolResultTimestamp;
19
+ private readonly formatLine;
20
+ constructor(formatLine?: (line: string) => string);
21
+ markToolResult(): void;
22
+ markToolCall(): void;
23
+ }
@@ -0,0 +1,16 @@
1
+ export type TodoTracker = {
2
+ update: (input: unknown) => void;
3
+ flush: () => Promise<void>;
4
+ cancel: () => void;
5
+ /** resolves when any in-flight onUpdate call completes */
6
+ settled: () => Promise<void>;
7
+ /** mark in-progress items as completed (for final snapshot before review/progress post) */
8
+ completeInProgress: () => void;
9
+ renderCollapsible: (options?: {
10
+ completeInProgress?: boolean;
11
+ }) => string;
12
+ readonly enabled: boolean;
13
+ /** true after the tracker has successfully called onUpdate at least once */
14
+ readonly hasPublished: boolean;
15
+ };
16
+ export declare function createTodoTracker(onUpdate: (body: string) => Promise<void>): TodoTracker;
@@ -0,0 +1,39 @@
1
+ import type { PushPermission } from "#app/external";
2
+ import { acquireNewToken } from "#app/utils/github";
3
+ export { acquireNewToken as acquireInstallationToken, revokeGitHubInstallationToken as revokeInstallationToken, };
4
+ /**
5
+ * get the job-scoped token from action input.
6
+ * this token has permissions defined by the workflow's permissions block.
7
+ *
8
+ * fallback order:
9
+ * 1. INPUT_TOKEN (from workflow `with: token:`)
10
+ * 2. GH_TOKEN (external token override)
11
+ * 3. GITHUB_TOKEN (pre-acquired in tests or from GHA env)
12
+ */
13
+ export declare function getJobToken(): string;
14
+ export type TokenRef = {
15
+ gitToken: string;
16
+ mcpToken: string;
17
+ [Symbol.asyncDispose]: () => Promise<void>;
18
+ };
19
+ type ResolveTokensParams = {
20
+ push: PushPermission;
21
+ };
22
+ /**
23
+ * resolve tokens for the action run.
24
+ *
25
+ * creates two separate tokens:
26
+ * - gitToken: contents permission based on `push` setting (assumed exfiltratable)
27
+ * - push: enabled → contents:write (can push)
28
+ * - push: disabled → contents:read (read-only)
29
+ * - mcpToken: full installation token - used for GitHub API calls in MCP tools (not exfiltratable)
30
+ *
31
+ * security-conscious users can pass their own token via GH_TOKEN env var or inputs.token.
32
+ */
33
+ export declare function resolveTokens(params: ResolveTokensParams): Promise<TokenRef>;
34
+ /**
35
+ * get the MCP token from memory.
36
+ * this is the token used for GitHub API calls in MCP tools.
37
+ */
38
+ export declare function getGitHubInstallationToken(): string;
39
+ export declare function revokeGitHubInstallationToken(token: string): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import packageJson from "#package.json";
2
+ export declare function getDevDependencyVersion(name: keyof typeof packageJson.devDependencies): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @throws Error if the action can't process payload
3
+ * The compatibility is determined according to the COMPATIBILITY_POLICY above.
4
+ * @param payloadVersion the version of the payload
5
+ * @param actionVersion the version of the action (recipient)
6
+ */
7
+ export declare function validateCompatibility(payloadVersion: string, actionVersion: string): void;
@@ -0,0 +1,16 @@
1
+ export declare const VERTEX_SERVICE_ACCOUNT_JSON_ENV = "VERTEX_SERVICE_ACCOUNT_JSON";
2
+ export declare const GOOGLE_APPLICATION_CREDENTIALS_ENV = "GOOGLE_APPLICATION_CREDENTIALS";
3
+ export declare const GOOGLE_CLOUD_PROJECT_ENV = "GOOGLE_CLOUD_PROJECT";
4
+ export declare const VERTEX_LOCATION_ENV = "VERTEX_LOCATION";
5
+ export type VertexCredentials = {
6
+ credentialsPath: string;
7
+ secretDir: string;
8
+ };
9
+ export declare function isVertexRoute(model: string | undefined): boolean;
10
+ export declare function readProjectIdFromVertexServiceAccountJson(): string | undefined;
11
+ export declare function materializeVertexCredentials(params: {
12
+ model: string | undefined;
13
+ }): VertexCredentials | undefined;
14
+ export declare function cleanupVertexCredentials(credentials: VertexCredentials | undefined): void;
15
+ export declare function applyClaudeVertexEnv(env: Record<string, string | undefined>): void;
16
+ export declare function resolveVertexOpenCodeModel(model: string | undefined): string | undefined;
@@ -0,0 +1,13 @@
1
+ import type { OctokitWithPlugins } from "#app/utils/github";
2
+ interface ResolveRunParams {
3
+ octokit: OctokitWithPlugins;
4
+ }
5
+ export interface ResolveRunResult {
6
+ runId: number | undefined;
7
+ }
8
+ /**
9
+ * Resolve GitHub Actions workflow run context.
10
+ * Uses GITHUB_REPOSITORY and GITHUB_RUN_ID env vars.
11
+ */
12
+ export declare function resolveRun(_params: ResolveRunParams): Promise<ResolveRunResult>;
13
+ export {};
package/package.json ADDED
@@ -0,0 +1,119 @@
1
+ {
2
+ "name": "terramend",
3
+ "version": "0.2.0",
4
+ "description": "GitHub Action that remediates Terraform to best practices and opens one scoped pull request per concern.",
5
+ "keywords": [
6
+ "github-actions",
7
+ "terraform",
8
+ "iac",
9
+ "remediation",
10
+ "best-practices",
11
+ "ai-coding-agent"
12
+ ],
13
+ "homepage": "https://github.com/terramend/terramend#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/terramend/terramend/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/terramend/terramend.git"
20
+ },
21
+ "license": "AGPL-3.0-or-later",
22
+ "author": "Gabriel Ignat",
23
+ "type": "module",
24
+ "imports": {
25
+ "#app/*": "./src/*.ts",
26
+ "#package.json": "./package.json"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "@terramend/source": "./src/index.ts",
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "./internal": {
36
+ "@terramend/source": "./src/internal/index.ts",
37
+ "types": "./dist/internal/index.d.ts",
38
+ "import": "./dist/internal.js",
39
+ "default": "./dist/internal.js"
40
+ },
41
+ "./package.json": "./package.json"
42
+ },
43
+ "main": "./dist/index.js",
44
+ "module": "./dist/index.js",
45
+ "types": "./dist/index.d.ts",
46
+ "bin": {
47
+ "terramend": "dist/cli.mjs"
48
+ },
49
+ "files": [
50
+ "dist/",
51
+ "src/"
52
+ ],
53
+ "scripts": {
54
+ "build": "node esbuild.config.js && tsc -p tsconfig.exports.json",
55
+ "check:entrypoints": "node scripts/check-entrypoint-imports.ts",
56
+ "dev:run": "node dev-run.ts",
57
+ "docker": "node docker.ts",
58
+ "docs:inputs": "node scripts/generate-input-docs.ts",
59
+ "docs:models": "node scripts/generate-model-docs.ts",
60
+ "eval:review": "node test/eval/review.ts",
61
+ "eval:scan": "node test/eval/run.ts",
62
+ "format": "biome format --write .",
63
+ "lint": "biome check .",
64
+ "lint:ci": "biome ci .",
65
+ "lint:fix": "biome check --write .",
66
+ "lock": "pnpm install --no-frozen-lockfile",
67
+ "runtest": "node test/run.ts",
68
+ "test": "vitest",
69
+ "test:catalog": "vitest run --config vitest.main.config.ts",
70
+ "test:coverage": "vitest run --coverage",
71
+ "typecheck": "tsc --noEmit",
72
+ "upDeps": "pnpm up --latest"
73
+ },
74
+ "devDependencies": {
75
+ "@actions/core": "^3.0.1",
76
+ "@anthropic-ai/claude-code": "2.1.170",
77
+ "@ark/fs": "0.56.0",
78
+ "@ark/util": "0.56.0",
79
+ "@biomejs/biome": "^2.4.16",
80
+ "@clack/prompts": "^1.5.1",
81
+ "@modelcontextprotocol/sdk": "^1.29.0",
82
+ "@octokit/plugin-throttling": "^11.0.3",
83
+ "@octokit/rest": "^22.0.1",
84
+ "@octokit/webhooks-types": "^7.6.1",
85
+ "@opencode-ai/sdk": "1.17.3",
86
+ "@standard-schema/spec": "1.1.0",
87
+ "@stryker-mutator/core": "^9.6.1",
88
+ "@stryker-mutator/vitest-runner": "^9.6.1",
89
+ "@toon-format/toon": "^2.3.0",
90
+ "@types/node": "^25.9.2",
91
+ "@types/semver": "^7.7.1",
92
+ "@types/turndown": "^5.0.6",
93
+ "@vitest/coverage-v8": "^4.1.8",
94
+ "ajv": "^8.20.0",
95
+ "arg": "^5.0.2",
96
+ "arkregex": "0.0.5",
97
+ "arktype": "2.2.0",
98
+ "dotenv": "^17.4.2",
99
+ "esbuild": "^0.28.0",
100
+ "execa": "^9.6.1",
101
+ "fastmcp": "^4.1.0",
102
+ "file-type": "^22.0.1",
103
+ "opencode-ai": "1.17.3",
104
+ "package-manager-detector": "^1.6.0",
105
+ "picocolors": "^1.1.1",
106
+ "semver": "7.8.3",
107
+ "table": "^6.9.0",
108
+ "turndown": "^7.2.4",
109
+ "typescript": "6.0.3",
110
+ "undici": "^8.4.1",
111
+ "vitest": "^4.1.8",
112
+ "yaml": "^2.9.0"
113
+ },
114
+ "packageManager": "pnpm@11.5.2",
115
+ "engines": {
116
+ "node": ">=24",
117
+ "pnpm": ">=11"
118
+ }
119
+ }