@fractary/faber 2.4.41 → 2.4.43

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 (353) hide show
  1. package/dist/__tests__/config.test.d.ts +0 -0
  2. package/dist/__tests__/config.test.d.ts.map +0 -0
  3. package/dist/__tests__/config.test.js +0 -0
  4. package/dist/__tests__/config.test.js.map +0 -0
  5. package/dist/__tests__/integration/forge-integration.test.d.ts +0 -0
  6. package/dist/__tests__/integration/forge-integration.test.d.ts.map +0 -0
  7. package/dist/__tests__/integration/forge-integration.test.js +2 -2
  8. package/dist/__tests__/integration/forge-integration.test.js.map +1 -1
  9. package/dist/__tests__/integration/init-workflow.test.d.ts +0 -0
  10. package/dist/__tests__/integration/init-workflow.test.d.ts.map +0 -0
  11. package/dist/__tests__/integration/init-workflow.test.js +0 -0
  12. package/dist/__tests__/integration/init-workflow.test.js.map +0 -0
  13. package/dist/agents/index.d.ts +0 -0
  14. package/dist/agents/index.d.ts.map +0 -0
  15. package/dist/agents/index.js +0 -0
  16. package/dist/agents/index.js.map +0 -0
  17. package/dist/agents/selector.d.ts +0 -0
  18. package/dist/agents/selector.d.ts.map +0 -0
  19. package/dist/agents/selector.js +0 -0
  20. package/dist/agents/selector.js.map +0 -0
  21. package/dist/agents/type-registry.d.ts +0 -0
  22. package/dist/agents/type-registry.d.ts.map +0 -0
  23. package/dist/agents/type-registry.js +0 -0
  24. package/dist/agents/type-registry.js.map +0 -0
  25. package/dist/agents/types.d.ts +0 -0
  26. package/dist/agents/types.d.ts.map +0 -0
  27. package/dist/agents/types.js +0 -0
  28. package/dist/agents/types.js.map +0 -0
  29. package/dist/auth/github-app.d.ts +0 -0
  30. package/dist/auth/github-app.d.ts.map +0 -0
  31. package/dist/auth/github-app.js +0 -0
  32. package/dist/auth/github-app.js.map +0 -0
  33. package/dist/auth/index.d.ts +0 -0
  34. package/dist/auth/index.d.ts.map +0 -0
  35. package/dist/auth/index.js +0 -0
  36. package/dist/auth/index.js.map +0 -0
  37. package/dist/changelog/index.d.ts +0 -0
  38. package/dist/changelog/index.d.ts.map +0 -0
  39. package/dist/changelog/index.js +0 -0
  40. package/dist/changelog/index.js.map +0 -0
  41. package/dist/changelog/manager.d.ts +0 -0
  42. package/dist/changelog/manager.d.ts.map +0 -0
  43. package/dist/changelog/manager.js +0 -0
  44. package/dist/changelog/manager.js.map +0 -0
  45. package/dist/changelog/types.d.ts +0 -0
  46. package/dist/changelog/types.d.ts.map +0 -0
  47. package/dist/changelog/types.js +0 -0
  48. package/dist/changelog/types.js.map +0 -0
  49. package/dist/cloud/__tests__/resource-manager.test.d.ts +7 -0
  50. package/dist/cloud/__tests__/resource-manager.test.d.ts.map +1 -0
  51. package/dist/cloud/__tests__/resource-manager.test.js +741 -0
  52. package/dist/cloud/__tests__/resource-manager.test.js.map +1 -0
  53. package/dist/cloud/__tests__/terraform-manager.test.d.ts +7 -0
  54. package/dist/cloud/__tests__/terraform-manager.test.d.ts.map +1 -0
  55. package/dist/cloud/__tests__/terraform-manager.test.js +493 -0
  56. package/dist/cloud/__tests__/terraform-manager.test.js.map +1 -0
  57. package/dist/cloud/index.d.ts +9 -0
  58. package/dist/cloud/index.d.ts.map +1 -0
  59. package/dist/cloud/index.js +11 -0
  60. package/dist/cloud/index.js.map +1 -0
  61. package/dist/cloud/resource-manager.d.ts +81 -0
  62. package/dist/cloud/resource-manager.d.ts.map +1 -0
  63. package/dist/cloud/resource-manager.js +288 -0
  64. package/dist/cloud/resource-manager.js.map +1 -0
  65. package/dist/cloud/terraform-manager.d.ts +108 -0
  66. package/dist/cloud/terraform-manager.d.ts.map +1 -0
  67. package/dist/cloud/terraform-manager.js +552 -0
  68. package/dist/cloud/terraform-manager.js.map +1 -0
  69. package/dist/cloud/types.d.ts +281 -0
  70. package/dist/cloud/types.d.ts.map +1 -0
  71. package/dist/cloud/types.js +7 -0
  72. package/dist/cloud/types.js.map +1 -0
  73. package/dist/config/__tests__/initializer.test.d.ts +0 -0
  74. package/dist/config/__tests__/initializer.test.d.ts.map +0 -0
  75. package/dist/config/__tests__/initializer.test.js +0 -0
  76. package/dist/config/__tests__/initializer.test.js.map +0 -0
  77. package/dist/config/initializer.d.ts +0 -0
  78. package/dist/config/initializer.d.ts.map +0 -0
  79. package/dist/config/initializer.js +0 -0
  80. package/dist/config/initializer.js.map +0 -0
  81. package/dist/config/updater.d.ts +0 -0
  82. package/dist/config/updater.d.ts.map +0 -0
  83. package/dist/config/updater.js +0 -0
  84. package/dist/config/updater.js.map +0 -0
  85. package/dist/config/validator.d.ts +0 -0
  86. package/dist/config/validator.d.ts.map +0 -0
  87. package/dist/config/validator.js +0 -0
  88. package/dist/config/validator.js.map +0 -0
  89. package/dist/config.d.ts +16 -0
  90. package/dist/config.d.ts.map +1 -1
  91. package/dist/config.js +2 -0
  92. package/dist/config.js.map +1 -1
  93. package/dist/defaults.d.ts +0 -0
  94. package/dist/defaults.d.ts.map +0 -0
  95. package/dist/defaults.js +0 -0
  96. package/dist/defaults.js.map +0 -0
  97. package/dist/errors.d.ts +0 -0
  98. package/dist/errors.d.ts.map +0 -0
  99. package/dist/errors.js +0 -0
  100. package/dist/errors.js.map +0 -0
  101. package/dist/executors/cli-entry.d.ts +0 -0
  102. package/dist/executors/cli-entry.d.ts.map +0 -0
  103. package/dist/executors/cli-entry.js +0 -0
  104. package/dist/executors/cli-entry.js.map +0 -0
  105. package/dist/executors/index.d.ts +0 -0
  106. package/dist/executors/index.d.ts.map +0 -0
  107. package/dist/executors/index.js +0 -0
  108. package/dist/executors/index.js.map +0 -0
  109. package/dist/executors/providers/claude.d.ts +0 -0
  110. package/dist/executors/providers/claude.d.ts.map +0 -0
  111. package/dist/executors/providers/claude.js +0 -0
  112. package/dist/executors/providers/claude.js.map +0 -0
  113. package/dist/executors/providers/http.d.ts +0 -0
  114. package/dist/executors/providers/http.d.ts.map +0 -0
  115. package/dist/executors/providers/http.js +0 -0
  116. package/dist/executors/providers/http.js.map +0 -0
  117. package/dist/executors/providers/index.d.ts +0 -0
  118. package/dist/executors/providers/index.d.ts.map +0 -0
  119. package/dist/executors/providers/index.js +0 -0
  120. package/dist/executors/providers/index.js.map +0 -0
  121. package/dist/executors/providers/openai-compatible.d.ts +0 -0
  122. package/dist/executors/providers/openai-compatible.d.ts.map +0 -0
  123. package/dist/executors/providers/openai-compatible.js +0 -0
  124. package/dist/executors/providers/openai-compatible.js.map +0 -0
  125. package/dist/executors/providers/openai.d.ts +0 -0
  126. package/dist/executors/providers/openai.d.ts.map +0 -0
  127. package/dist/executors/providers/openai.js +0 -0
  128. package/dist/executors/providers/openai.js.map +0 -0
  129. package/dist/executors/registry.d.ts +0 -0
  130. package/dist/executors/registry.d.ts.map +0 -0
  131. package/dist/executors/registry.js +0 -0
  132. package/dist/executors/registry.js.map +0 -0
  133. package/dist/executors/types.d.ts +0 -0
  134. package/dist/executors/types.d.ts.map +0 -0
  135. package/dist/executors/types.js +0 -0
  136. package/dist/executors/types.js.map +0 -0
  137. package/dist/executors/workflow-executor.d.ts +0 -0
  138. package/dist/executors/workflow-executor.d.ts.map +0 -0
  139. package/dist/executors/workflow-executor.js +0 -0
  140. package/dist/executors/workflow-executor.js.map +0 -0
  141. package/dist/faber/__tests__/config-manager.test.d.ts +7 -0
  142. package/dist/faber/__tests__/config-manager.test.d.ts.map +1 -0
  143. package/dist/faber/__tests__/config-manager.test.js +637 -0
  144. package/dist/faber/__tests__/config-manager.test.js.map +1 -0
  145. package/dist/faber/__tests__/state-manager.test.d.ts +7 -0
  146. package/dist/faber/__tests__/state-manager.test.d.ts.map +1 -0
  147. package/dist/faber/__tests__/state-manager.test.js +541 -0
  148. package/dist/faber/__tests__/state-manager.test.js.map +1 -0
  149. package/dist/faber/config-manager.d.ts +123 -0
  150. package/dist/faber/config-manager.d.ts.map +1 -0
  151. package/dist/faber/config-manager.js +449 -0
  152. package/dist/faber/config-manager.js.map +1 -0
  153. package/dist/faber/index.d.ts +17 -0
  154. package/dist/faber/index.d.ts.map +1 -0
  155. package/dist/faber/index.js +15 -0
  156. package/dist/faber/index.js.map +1 -0
  157. package/dist/faber/state-manager.d.ts +124 -0
  158. package/dist/faber/state-manager.d.ts.map +1 -0
  159. package/dist/faber/state-manager.js +558 -0
  160. package/dist/faber/state-manager.js.map +1 -0
  161. package/dist/faber/types.d.ts +383 -0
  162. package/dist/faber/types.d.ts.map +1 -0
  163. package/dist/faber/types.js +60 -0
  164. package/dist/faber/types.js.map +1 -0
  165. package/dist/index.d.ts +0 -0
  166. package/dist/index.d.ts.map +0 -0
  167. package/dist/index.js +0 -0
  168. package/dist/index.js.map +0 -0
  169. package/dist/logs/index.d.ts +0 -0
  170. package/dist/logs/index.d.ts.map +0 -0
  171. package/dist/logs/index.js +0 -0
  172. package/dist/logs/index.js.map +0 -0
  173. package/dist/logs/manager.d.ts +0 -0
  174. package/dist/logs/manager.d.ts.map +0 -0
  175. package/dist/logs/manager.js +0 -0
  176. package/dist/logs/manager.js.map +0 -0
  177. package/dist/logs/types.d.ts +0 -0
  178. package/dist/logs/types.d.ts.map +0 -0
  179. package/dist/logs/types.js +0 -0
  180. package/dist/logs/types.js.map +0 -0
  181. package/dist/paths.d.ts +0 -0
  182. package/dist/paths.d.ts.map +0 -0
  183. package/dist/paths.js +0 -0
  184. package/dist/paths.js.map +0 -0
  185. package/dist/repo/git.d.ts +0 -0
  186. package/dist/repo/git.d.ts.map +0 -0
  187. package/dist/repo/git.js +0 -0
  188. package/dist/repo/git.js.map +0 -0
  189. package/dist/repo/index.d.ts +0 -0
  190. package/dist/repo/index.d.ts.map +0 -0
  191. package/dist/repo/index.js +0 -0
  192. package/dist/repo/index.js.map +0 -0
  193. package/dist/repo/manager.d.ts +0 -0
  194. package/dist/repo/manager.d.ts.map +0 -0
  195. package/dist/repo/manager.js +0 -0
  196. package/dist/repo/manager.js.map +0 -0
  197. package/dist/repo/providers/bitbucket.d.ts +0 -0
  198. package/dist/repo/providers/bitbucket.d.ts.map +0 -0
  199. package/dist/repo/providers/bitbucket.js +0 -0
  200. package/dist/repo/providers/bitbucket.js.map +0 -0
  201. package/dist/repo/providers/github.d.ts +0 -0
  202. package/dist/repo/providers/github.d.ts.map +0 -0
  203. package/dist/repo/providers/github.js +0 -0
  204. package/dist/repo/providers/github.js.map +0 -0
  205. package/dist/repo/providers/gitlab.d.ts +0 -0
  206. package/dist/repo/providers/gitlab.d.ts.map +0 -0
  207. package/dist/repo/providers/gitlab.js +0 -0
  208. package/dist/repo/providers/gitlab.js.map +0 -0
  209. package/dist/repo/providers/index.d.ts +0 -0
  210. package/dist/repo/providers/index.d.ts.map +0 -0
  211. package/dist/repo/providers/index.js +0 -0
  212. package/dist/repo/providers/index.js.map +0 -0
  213. package/dist/repo/types.d.ts +0 -0
  214. package/dist/repo/types.d.ts.map +0 -0
  215. package/dist/repo/types.js +0 -0
  216. package/dist/repo/types.js.map +0 -0
  217. package/dist/spec/__tests__/manager.test.d.ts +0 -0
  218. package/dist/spec/__tests__/manager.test.d.ts.map +0 -0
  219. package/dist/spec/__tests__/manager.test.js +2 -2
  220. package/dist/spec/__tests__/manager.test.js.map +1 -1
  221. package/dist/spec/index.d.ts +3 -3
  222. package/dist/spec/index.d.ts.map +1 -1
  223. package/dist/spec/index.js +3 -3
  224. package/dist/spec/index.js.map +1 -1
  225. package/dist/spec/manager.d.ts +1 -1
  226. package/dist/spec/manager.d.ts.map +1 -1
  227. package/dist/spec/manager.js +3 -3
  228. package/dist/spec/manager.js.map +1 -1
  229. package/dist/spec/templates.d.ts +1 -1
  230. package/dist/spec/templates.d.ts.map +1 -1
  231. package/dist/spec/templates.js +0 -0
  232. package/dist/spec/templates.js.map +0 -0
  233. package/dist/spec/types.d.ts +2 -2
  234. package/dist/spec/types.d.ts.map +1 -1
  235. package/dist/spec/types.js +0 -0
  236. package/dist/spec/types.js.map +0 -0
  237. package/dist/state/index.d.ts +0 -0
  238. package/dist/state/index.d.ts.map +0 -0
  239. package/dist/state/index.js +0 -0
  240. package/dist/state/index.js.map +0 -0
  241. package/dist/state/manager.d.ts +0 -0
  242. package/dist/state/manager.d.ts.map +0 -0
  243. package/dist/state/manager.js +0 -0
  244. package/dist/state/manager.js.map +0 -0
  245. package/dist/state/session.d.ts +0 -0
  246. package/dist/state/session.d.ts.map +0 -0
  247. package/dist/state/session.js +0 -0
  248. package/dist/state/session.js.map +0 -0
  249. package/dist/state/types.d.ts +0 -0
  250. package/dist/state/types.d.ts.map +0 -0
  251. package/dist/state/types.js +0 -0
  252. package/dist/state/types.js.map +0 -0
  253. package/dist/storage/codex-adapter.d.ts +0 -0
  254. package/dist/storage/codex-adapter.d.ts.map +0 -0
  255. package/dist/storage/codex-adapter.js +0 -0
  256. package/dist/storage/codex-adapter.js.map +0 -0
  257. package/dist/storage/index.d.ts +0 -0
  258. package/dist/storage/index.d.ts.map +0 -0
  259. package/dist/storage/index.js +0 -0
  260. package/dist/storage/index.js.map +0 -0
  261. package/dist/storage/local.d.ts +0 -0
  262. package/dist/storage/local.d.ts.map +0 -0
  263. package/dist/storage/local.js +0 -0
  264. package/dist/storage/local.js.map +0 -0
  265. package/dist/types.d.ts +2 -0
  266. package/dist/types.d.ts.map +1 -1
  267. package/dist/types.js +0 -0
  268. package/dist/types.js.map +0 -0
  269. package/dist/work/index.d.ts +0 -0
  270. package/dist/work/index.d.ts.map +0 -0
  271. package/dist/work/index.js +0 -0
  272. package/dist/work/index.js.map +0 -0
  273. package/dist/work/manager.d.ts +0 -0
  274. package/dist/work/manager.d.ts.map +0 -0
  275. package/dist/work/manager.js +0 -0
  276. package/dist/work/manager.js.map +0 -0
  277. package/dist/work/providers/github.d.ts +0 -0
  278. package/dist/work/providers/github.d.ts.map +1 -1
  279. package/dist/work/providers/github.js +5 -3
  280. package/dist/work/providers/github.js.map +1 -1
  281. package/dist/work/providers/jira.d.ts +0 -0
  282. package/dist/work/providers/jira.d.ts.map +0 -0
  283. package/dist/work/providers/jira.js +0 -0
  284. package/dist/work/providers/jira.js.map +0 -0
  285. package/dist/work/providers/linear.d.ts +0 -0
  286. package/dist/work/providers/linear.d.ts.map +0 -0
  287. package/dist/work/providers/linear.js +0 -0
  288. package/dist/work/providers/linear.js.map +0 -0
  289. package/dist/work/types.d.ts +0 -0
  290. package/dist/work/types.d.ts.map +0 -0
  291. package/dist/work/types.js +0 -0
  292. package/dist/work/types.js.map +0 -0
  293. package/dist/workflow/__tests__/agent-executor.test.d.ts +0 -0
  294. package/dist/workflow/__tests__/agent-executor.test.d.ts.map +0 -0
  295. package/dist/workflow/__tests__/agent-executor.test.js +2 -2
  296. package/dist/workflow/__tests__/agent-executor.test.js.map +1 -1
  297. package/dist/workflow/__tests__/resolver.test.d.ts +0 -0
  298. package/dist/workflow/__tests__/resolver.test.d.ts.map +0 -0
  299. package/dist/workflow/__tests__/resolver.test.js +0 -0
  300. package/dist/workflow/__tests__/resolver.test.js.map +0 -0
  301. package/dist/workflow/agent-executor.d.ts +1 -1
  302. package/dist/workflow/agent-executor.d.ts.map +1 -1
  303. package/dist/workflow/agent-executor.js +3 -3
  304. package/dist/workflow/agent-executor.js.map +1 -1
  305. package/dist/workflow/faber.d.ts +0 -0
  306. package/dist/workflow/faber.d.ts.map +0 -0
  307. package/dist/workflow/faber.js +0 -0
  308. package/dist/workflow/faber.js.map +0 -0
  309. package/dist/workflow/index.d.ts +0 -0
  310. package/dist/workflow/index.d.ts.map +0 -0
  311. package/dist/workflow/index.js +0 -0
  312. package/dist/workflow/index.js.map +0 -0
  313. package/dist/workflow/resolver.d.ts +0 -0
  314. package/dist/workflow/resolver.d.ts.map +0 -0
  315. package/dist/workflow/resolver.js +0 -0
  316. package/dist/workflow/resolver.js.map +0 -0
  317. package/dist/workflow/types.d.ts +0 -0
  318. package/dist/workflow/types.d.ts.map +0 -0
  319. package/dist/workflow/types.js +0 -0
  320. package/dist/workflow/types.js.map +0 -0
  321. package/dist/workflows/__tests__/registry.test.d.ts +0 -0
  322. package/dist/workflows/__tests__/registry.test.d.ts.map +0 -0
  323. package/dist/workflows/__tests__/registry.test.js +0 -0
  324. package/dist/workflows/__tests__/registry.test.js.map +0 -0
  325. package/dist/workflows/registry.d.ts +0 -0
  326. package/dist/workflows/registry.d.ts.map +0 -0
  327. package/dist/workflows/registry.js +0 -0
  328. package/dist/workflows/registry.js.map +0 -0
  329. package/package.json +2 -2
  330. package/dist/cli/commands/logs.d.ts +0 -6
  331. package/dist/cli/commands/logs.d.ts.map +0 -1
  332. package/dist/cli/commands/logs.js +0 -215
  333. package/dist/cli/commands/logs.js.map +0 -1
  334. package/dist/cli/commands/repo.d.ts +0 -6
  335. package/dist/cli/commands/repo.d.ts.map +0 -1
  336. package/dist/cli/commands/repo.js +0 -260
  337. package/dist/cli/commands/repo.js.map +0 -1
  338. package/dist/cli/commands/spec.d.ts +0 -6
  339. package/dist/cli/commands/spec.d.ts.map +0 -1
  340. package/dist/cli/commands/spec.js +0 -184
  341. package/dist/cli/commands/spec.js.map +0 -1
  342. package/dist/cli/commands/work.d.ts +0 -6
  343. package/dist/cli/commands/work.d.ts.map +0 -1
  344. package/dist/cli/commands/work.js +0 -113
  345. package/dist/cli/commands/work.js.map +0 -1
  346. package/dist/cli/commands/workflow.d.ts +0 -6
  347. package/dist/cli/commands/workflow.d.ts.map +0 -1
  348. package/dist/cli/commands/workflow.js +0 -214
  349. package/dist/cli/commands/workflow.js.map +0 -1
  350. package/dist/cli/index.d.ts +0 -8
  351. package/dist/cli/index.d.ts.map +0 -1
  352. package/dist/cli/index.js +0 -27
  353. package/dist/cli/index.js.map +0 -1
@@ -0,0 +1,552 @@
1
+ /**
2
+ * @fractary/faber - Terraform Manager
3
+ *
4
+ * Wraps Terraform CLI operations with structured responses.
5
+ */
6
+ import { execSync } from 'child_process';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ /**
10
+ * Default terraform binary
11
+ */
12
+ const DEFAULT_TERRAFORM_BINARY = 'terraform';
13
+ /**
14
+ * TerraformManager - Manages Terraform CLI operations
15
+ *
16
+ * Provides structured wrappers around terraform commands with
17
+ * JSON output parsing and error handling.
18
+ */
19
+ export class TerraformManager {
20
+ workingDir;
21
+ environment;
22
+ terraformBinary;
23
+ awsProfile;
24
+ envVars;
25
+ constructor(config) {
26
+ this.workingDir = path.resolve(config.workingDir);
27
+ this.environment = config.environment;
28
+ this.terraformBinary = config.terraformBinary ?? DEFAULT_TERRAFORM_BINARY;
29
+ this.awsProfile = config.awsProfile;
30
+ this.envVars = config.envVars ?? {};
31
+ // Verify working directory exists
32
+ if (!fs.existsSync(this.workingDir)) {
33
+ throw new Error(`Working directory does not exist: ${this.workingDir}`);
34
+ }
35
+ }
36
+ // ============================================
37
+ // Helper Methods
38
+ // ============================================
39
+ /**
40
+ * Get environment variables for terraform execution
41
+ */
42
+ getEnv() {
43
+ const env = { ...process.env, ...this.envVars };
44
+ if (this.awsProfile) {
45
+ env.AWS_PROFILE = this.awsProfile;
46
+ }
47
+ return env;
48
+ }
49
+ /**
50
+ * Execute terraform command synchronously
51
+ */
52
+ exec(args, options) {
53
+ const command = [this.terraformBinary, ...args].join(' ');
54
+ try {
55
+ const output = execSync(command, {
56
+ cwd: this.workingDir,
57
+ env: this.getEnv(),
58
+ encoding: 'utf-8',
59
+ timeout: options?.timeout ?? 300000, // 5 minute default timeout
60
+ stdio: ['pipe', 'pipe', 'pipe'],
61
+ });
62
+ return output;
63
+ }
64
+ catch (error) {
65
+ const execError = error;
66
+ const stderr = execError.stderr ?? '';
67
+ const stdout = execError.stdout ?? '';
68
+ throw new Error(`Terraform command failed: ${stderr || stdout || execError.message}`);
69
+ }
70
+ }
71
+ /**
72
+ * Execute terraform command with JSON output
73
+ */
74
+ execJson(args) {
75
+ const output = this.exec([...args, '-json']);
76
+ try {
77
+ return JSON.parse(output);
78
+ }
79
+ catch {
80
+ throw new Error(`Failed to parse terraform JSON output: ${output}`);
81
+ }
82
+ }
83
+ /**
84
+ * Build variable arguments
85
+ */
86
+ buildVarArgs(vars, varFiles) {
87
+ const args = [];
88
+ // Add var-file arguments
89
+ for (const file of varFiles ?? []) {
90
+ args.push('-var-file', file);
91
+ }
92
+ // Add var arguments
93
+ for (const [key, value] of Object.entries(vars ?? {})) {
94
+ args.push('-var', `${key}=${value}`);
95
+ }
96
+ return args;
97
+ }
98
+ /**
99
+ * Build target arguments
100
+ */
101
+ buildTargetArgs(targets) {
102
+ const args = [];
103
+ for (const target of targets ?? []) {
104
+ args.push('-target', target);
105
+ }
106
+ return args;
107
+ }
108
+ // ============================================
109
+ // Core Operations
110
+ // ============================================
111
+ /**
112
+ * Initialize Terraform working directory
113
+ */
114
+ async init(options) {
115
+ const args = ['init', '-no-color'];
116
+ if (options?.backend === false) {
117
+ args.push('-backend=false');
118
+ }
119
+ if (options?.upgrade) {
120
+ args.push('-upgrade');
121
+ }
122
+ if (options?.reconfigure) {
123
+ args.push('-reconfigure');
124
+ }
125
+ if (options?.migrate) {
126
+ args.push('-migrate-state');
127
+ }
128
+ try {
129
+ const output = this.exec(args);
130
+ // Parse output for relevant information
131
+ const providersInstalled = [];
132
+ const providerMatch = output.matchAll(/- Installed ([^\s]+)/g);
133
+ for (const match of providerMatch) {
134
+ providersInstalled.push(match[1]);
135
+ }
136
+ const backendConfigured = output.includes('Successfully configured the backend') ||
137
+ output.includes('Initializing the backend');
138
+ return {
139
+ success: true,
140
+ initialized: true,
141
+ providers_installed: providersInstalled,
142
+ backend_configured: backendConfigured,
143
+ output,
144
+ };
145
+ }
146
+ catch (error) {
147
+ return {
148
+ success: false,
149
+ initialized: false,
150
+ providers_installed: [],
151
+ backend_configured: false,
152
+ output: String(error),
153
+ };
154
+ }
155
+ }
156
+ /**
157
+ * Validate Terraform configuration
158
+ */
159
+ async validate() {
160
+ try {
161
+ const result = this.execJson(['validate']);
162
+ return {
163
+ valid: result.valid,
164
+ error_count: result.error_count,
165
+ warning_count: result.warning_count,
166
+ diagnostics: result.diagnostics ?? [],
167
+ };
168
+ }
169
+ catch (error) {
170
+ return {
171
+ valid: false,
172
+ error_count: 1,
173
+ warning_count: 0,
174
+ diagnostics: [{
175
+ severity: 'error',
176
+ summary: 'Validation failed',
177
+ detail: String(error),
178
+ }],
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Generate execution plan
184
+ */
185
+ async plan(options) {
186
+ const args = ['plan', '-no-color', '-detailed-exitcode'];
187
+ // Add output file option
188
+ if (options?.out) {
189
+ args.push('-out', options.out);
190
+ }
191
+ // Add target arguments
192
+ args.push(...this.buildTargetArgs(options?.target));
193
+ // Add variable arguments
194
+ args.push(...this.buildVarArgs(options?.vars, options?.varFile));
195
+ // Add destroy flag
196
+ if (options?.destroy) {
197
+ args.push('-destroy');
198
+ }
199
+ try {
200
+ // First, run plan with regular output
201
+ let hasChanges = false;
202
+ let rawOutput = '';
203
+ try {
204
+ rawOutput = this.exec(args, { timeout: 600000 }); // 10 minute timeout for plan
205
+ hasChanges = false; // Exit code 0 = no changes
206
+ }
207
+ catch (error) {
208
+ const execError = error;
209
+ if (execError.status === 2) {
210
+ // Exit code 2 = changes detected
211
+ hasChanges = true;
212
+ rawOutput = execError.stdout ?? '';
213
+ }
214
+ else {
215
+ throw error;
216
+ }
217
+ }
218
+ // If we have an output file, show it in JSON format
219
+ const resourceChanges = [];
220
+ let add = 0, change = 0, destroy = 0;
221
+ if (options?.out && fs.existsSync(options.out)) {
222
+ try {
223
+ const showOutput = this.exec(['show', '-json', options.out]);
224
+ const planJson = JSON.parse(showOutput);
225
+ if (planJson.resource_changes) {
226
+ for (const rc of planJson.resource_changes) {
227
+ const actions = rc.change?.actions ?? [];
228
+ if (actions.includes('create'))
229
+ add++;
230
+ if (actions.includes('update'))
231
+ change++;
232
+ if (actions.includes('delete'))
233
+ destroy++;
234
+ resourceChanges.push({
235
+ address: rc.address,
236
+ module_address: rc.module_address,
237
+ type: rc.type,
238
+ name: rc.name,
239
+ provider_name: rc.provider_name,
240
+ action: this.mapAction(actions),
241
+ before: rc.change?.before,
242
+ after: rc.change?.after,
243
+ });
244
+ }
245
+ }
246
+ }
247
+ catch {
248
+ // If JSON parsing fails, parse from raw output
249
+ const summaryMatch = rawOutput.match(/Plan: (\d+) to add, (\d+) to change, (\d+) to destroy/);
250
+ if (summaryMatch) {
251
+ add = parseInt(summaryMatch[1], 10);
252
+ change = parseInt(summaryMatch[2], 10);
253
+ destroy = parseInt(summaryMatch[3], 10);
254
+ }
255
+ }
256
+ }
257
+ else {
258
+ // Parse summary from raw output
259
+ const summaryMatch = rawOutput.match(/Plan: (\d+) to add, (\d+) to change, (\d+) to destroy/);
260
+ if (summaryMatch) {
261
+ add = parseInt(summaryMatch[1], 10);
262
+ change = parseInt(summaryMatch[2], 10);
263
+ destroy = parseInt(summaryMatch[3], 10);
264
+ }
265
+ }
266
+ return {
267
+ format_version: '1.0',
268
+ terraform_version: await this.getVersion(),
269
+ has_changes: hasChanges || (add + change + destroy > 0),
270
+ resource_changes: resourceChanges,
271
+ summary: { add, change, destroy },
272
+ raw_output: rawOutput,
273
+ };
274
+ }
275
+ catch (error) {
276
+ throw new Error(`Terraform plan failed: ${error}`);
277
+ }
278
+ }
279
+ /**
280
+ * Map terraform actions to single action type
281
+ */
282
+ mapAction(actions) {
283
+ if (actions.includes('create') && actions.includes('delete'))
284
+ return 'replace';
285
+ if (actions.includes('create'))
286
+ return 'create';
287
+ if (actions.includes('update'))
288
+ return 'update';
289
+ if (actions.includes('delete'))
290
+ return 'delete';
291
+ if (actions.includes('read'))
292
+ return 'read';
293
+ return 'no-op';
294
+ }
295
+ /**
296
+ * Apply changes
297
+ */
298
+ async apply(options) {
299
+ const startTime = Date.now();
300
+ const args = ['apply', '-no-color'];
301
+ // Auto-approve or use plan file (which doesn't need approval)
302
+ if (options?.autoApprove || options?.planFile) {
303
+ args.push('-auto-approve');
304
+ }
305
+ // Use saved plan file
306
+ if (options?.planFile) {
307
+ args.push(options.planFile);
308
+ }
309
+ else {
310
+ // Add target arguments (only when not using plan file)
311
+ args.push(...this.buildTargetArgs(options?.target));
312
+ // Add variable arguments
313
+ args.push(...this.buildVarArgs(options?.vars, options?.varFile));
314
+ }
315
+ try {
316
+ const output = this.exec(args, { timeout: 1800000 }); // 30 minute timeout for apply
317
+ // Parse results from output
318
+ let created = 0, changed = 0, destroyed = 0;
319
+ const summaryMatch = output.match(/Apply complete! Resources: (\d+) added, (\d+) changed, (\d+) destroyed/);
320
+ if (summaryMatch) {
321
+ created = parseInt(summaryMatch[1], 10);
322
+ changed = parseInt(summaryMatch[2], 10);
323
+ destroyed = parseInt(summaryMatch[3], 10);
324
+ }
325
+ // Get outputs
326
+ const outputs = await this.output();
327
+ return {
328
+ success: true,
329
+ resources_created: created,
330
+ resources_changed: changed,
331
+ resources_destroyed: destroyed,
332
+ outputs,
333
+ duration_seconds: (Date.now() - startTime) / 1000,
334
+ errors: [],
335
+ };
336
+ }
337
+ catch (error) {
338
+ return {
339
+ success: false,
340
+ resources_created: 0,
341
+ resources_changed: 0,
342
+ resources_destroyed: 0,
343
+ outputs: {},
344
+ duration_seconds: (Date.now() - startTime) / 1000,
345
+ errors: [String(error)],
346
+ };
347
+ }
348
+ }
349
+ /**
350
+ * Destroy infrastructure
351
+ */
352
+ async destroy(options) {
353
+ const startTime = Date.now();
354
+ const args = ['destroy', '-no-color'];
355
+ // Auto-approve
356
+ if (options?.autoApprove) {
357
+ args.push('-auto-approve');
358
+ }
359
+ // Add target arguments
360
+ args.push(...this.buildTargetArgs(options?.target));
361
+ // Add variable arguments
362
+ args.push(...this.buildVarArgs(options?.vars, options?.varFile));
363
+ try {
364
+ const output = this.exec(args, { timeout: 1800000 }); // 30 minute timeout
365
+ // Parse results from output
366
+ let destroyed = 0;
367
+ const summaryMatch = output.match(/Destroy complete! Resources: (\d+) destroyed/);
368
+ if (summaryMatch) {
369
+ destroyed = parseInt(summaryMatch[1], 10);
370
+ }
371
+ return {
372
+ success: true,
373
+ resources_destroyed: destroyed,
374
+ duration_seconds: (Date.now() - startTime) / 1000,
375
+ errors: [],
376
+ };
377
+ }
378
+ catch (error) {
379
+ return {
380
+ success: false,
381
+ resources_destroyed: 0,
382
+ duration_seconds: (Date.now() - startTime) / 1000,
383
+ errors: [String(error)],
384
+ };
385
+ }
386
+ }
387
+ // ============================================
388
+ // State Operations
389
+ // ============================================
390
+ /**
391
+ * Show current state
392
+ */
393
+ async show() {
394
+ try {
395
+ const result = this.execJson(['show']);
396
+ const resources = result.values?.root_module?.resources?.map(r => ({
397
+ type: r.type,
398
+ name: r.name,
399
+ mode: r.mode,
400
+ provider: r.provider_name,
401
+ instances: [{
402
+ schema_version: r.schema_version,
403
+ attributes: r.values,
404
+ dependencies: r.depends_on,
405
+ }],
406
+ })) ?? [];
407
+ const outputs = {};
408
+ for (const [key, value] of Object.entries(result.values?.outputs ?? {})) {
409
+ outputs[key] = {
410
+ value: value.value,
411
+ type: value.type,
412
+ sensitive: value.sensitive,
413
+ };
414
+ }
415
+ return {
416
+ format_version: result.format_version,
417
+ terraform_version: result.terraform_version,
418
+ resources,
419
+ outputs,
420
+ };
421
+ }
422
+ catch (error) {
423
+ throw new Error(`Failed to show terraform state: ${error}`);
424
+ }
425
+ }
426
+ /**
427
+ * Get outputs
428
+ */
429
+ async output(name) {
430
+ try {
431
+ const args = ['output'];
432
+ if (name) {
433
+ args.push(name);
434
+ }
435
+ const result = this.execJson(args);
436
+ const outputs = {};
437
+ for (const [key, value] of Object.entries(result)) {
438
+ outputs[key] = {
439
+ value: value.value,
440
+ type: value.type,
441
+ sensitive: value.sensitive,
442
+ };
443
+ }
444
+ return outputs;
445
+ }
446
+ catch {
447
+ // No outputs is not an error
448
+ return {};
449
+ }
450
+ }
451
+ // ============================================
452
+ // Workspace Operations
453
+ // ============================================
454
+ /**
455
+ * Select workspace
456
+ */
457
+ async selectWorkspace(name) {
458
+ try {
459
+ // Try to select existing workspace
460
+ this.exec(['workspace', 'select', name]);
461
+ }
462
+ catch {
463
+ // Create if doesn't exist
464
+ this.exec(['workspace', 'new', name]);
465
+ }
466
+ }
467
+ /**
468
+ * List workspaces
469
+ */
470
+ async listWorkspaces() {
471
+ const output = this.exec(['workspace', 'list']);
472
+ // Parse workspace list (format: "* default\n other")
473
+ return output
474
+ .split('\n')
475
+ .map(line => line.replace(/^\*?\s*/, '').trim())
476
+ .filter(line => line.length > 0);
477
+ }
478
+ /**
479
+ * Get current workspace
480
+ */
481
+ async currentWorkspace() {
482
+ const output = this.exec(['workspace', 'show']);
483
+ return output.trim();
484
+ }
485
+ // ============================================
486
+ // Utility Methods
487
+ // ============================================
488
+ /**
489
+ * Get terraform version
490
+ */
491
+ async getVersion() {
492
+ try {
493
+ const output = this.exec(['version', '-json']);
494
+ const result = JSON.parse(output);
495
+ return result.terraform_version;
496
+ }
497
+ catch {
498
+ // Fallback to parsing text output
499
+ const output = this.exec(['version']);
500
+ const match = output.match(/Terraform v(\d+\.\d+\.\d+)/);
501
+ return match?.[1] ?? 'unknown';
502
+ }
503
+ }
504
+ /**
505
+ * Check if terraform is initialized
506
+ */
507
+ async isInitialized() {
508
+ const terraformDir = path.join(this.workingDir, '.terraform');
509
+ return fs.existsSync(terraformDir);
510
+ }
511
+ /**
512
+ * Format terraform files
513
+ */
514
+ async fmt(check) {
515
+ const args = ['fmt', '-recursive'];
516
+ if (check) {
517
+ args.push('-check');
518
+ }
519
+ try {
520
+ const output = this.exec(args);
521
+ const files = output.split('\n').filter(line => line.trim().length > 0);
522
+ return {
523
+ formatted: true,
524
+ files,
525
+ };
526
+ }
527
+ catch (error) {
528
+ const execError = error;
529
+ if (check && execError.status === 3) {
530
+ // Exit code 3 = files need formatting
531
+ return {
532
+ formatted: false,
533
+ files: [],
534
+ };
535
+ }
536
+ throw error;
537
+ }
538
+ }
539
+ /**
540
+ * Get working directory
541
+ */
542
+ getWorkingDir() {
543
+ return this.workingDir;
544
+ }
545
+ /**
546
+ * Get environment
547
+ */
548
+ getEnvironment() {
549
+ return this.environment;
550
+ }
551
+ }
552
+ //# sourceMappingURL=terraform-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-manager.js","sourceRoot":"","sources":["../../src/cloud/terraform-manager.ts"],"names":[],"mappings":"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"}