@fractary/faber 2.4.40 → 2.4.42

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 +0 -0
  90. package/dist/config.d.ts.map +0 -0
  91. package/dist/config.js +0 -0
  92. package/dist/config.js.map +0 -0
  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 +0 -0
  266. package/dist/types.d.ts.map +0 -0
  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 +0 -0
  279. package/dist/work/providers/github.js +0 -0
  280. package/dist/work/providers/github.js.map +0 -0
  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 +96 -0
  300. package/dist/workflow/__tests__/resolver.test.js.map +1 -1
  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 +6 -0
  314. package/dist/workflow/resolver.d.ts.map +1 -1
  315. package/dist/workflow/resolver.js +16 -1
  316. package/dist/workflow/resolver.js.map +1 -1
  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,558 @@
1
+ /**
2
+ * @fractary/faber - FABER State Manager
3
+ *
4
+ * Manages FABER workflow state for per-run tracking.
5
+ * State is stored at: .fractary/plugins/faber/runs/{run_id}/state.json
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { createDefaultPhases, getNextPhase, } from './types';
10
+ /**
11
+ * Default configuration values
12
+ */
13
+ const DEFAULT_CONFIG = {
14
+ stateDir: '.fractary/plugins/faber',
15
+ runsSubdir: 'runs',
16
+ };
17
+ /**
18
+ * FaberStateManager - Manages FABER workflow state
19
+ *
20
+ * Provides CRUD operations for workflow state with atomic file operations
21
+ * and support for phase transitions.
22
+ */
23
+ export class FaberStateManager {
24
+ stateDir;
25
+ runsDir;
26
+ constructor(config) {
27
+ const resolvedConfig = { ...DEFAULT_CONFIG, ...config };
28
+ this.stateDir = path.resolve(process.cwd(), resolvedConfig.stateDir);
29
+ this.runsDir = path.join(this.stateDir, resolvedConfig.runsSubdir);
30
+ }
31
+ /**
32
+ * Get state file path for a run
33
+ */
34
+ getStatePath(runId) {
35
+ return path.join(this.runsDir, runId, 'state.json');
36
+ }
37
+ /**
38
+ * Get run directory path
39
+ */
40
+ getRunDir(runId) {
41
+ return path.join(this.runsDir, runId);
42
+ }
43
+ /**
44
+ * Ensure directory exists
45
+ */
46
+ ensureDir(dir) {
47
+ if (!fs.existsSync(dir)) {
48
+ fs.mkdirSync(dir, { recursive: true });
49
+ }
50
+ }
51
+ /**
52
+ * Generate ISO timestamp
53
+ */
54
+ timestamp() {
55
+ return new Date().toISOString();
56
+ }
57
+ /**
58
+ * Read state from file with validation
59
+ */
60
+ readState(statePath) {
61
+ if (!fs.existsSync(statePath)) {
62
+ return null;
63
+ }
64
+ try {
65
+ const content = fs.readFileSync(statePath, 'utf-8');
66
+ const state = JSON.parse(content);
67
+ return state;
68
+ }
69
+ catch (error) {
70
+ console.error(`Failed to read state from ${statePath}:`, error);
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Write state to file atomically
76
+ * Uses write to temp file + rename for atomic operation
77
+ */
78
+ writeState(statePath, state) {
79
+ const dir = path.dirname(statePath);
80
+ this.ensureDir(dir);
81
+ const tempPath = `${statePath}.tmp`;
82
+ const content = JSON.stringify(state, null, 2);
83
+ // Write to temp file first
84
+ fs.writeFileSync(tempPath, content, 'utf-8');
85
+ // Atomic rename
86
+ fs.renameSync(tempPath, statePath);
87
+ }
88
+ // ============================================
89
+ // Core CRUD Operations
90
+ // ============================================
91
+ /**
92
+ * Get workflow state for a run
93
+ */
94
+ async get(runId) {
95
+ const statePath = this.getStatePath(runId);
96
+ return this.readState(statePath);
97
+ }
98
+ /**
99
+ * Create new workflow state
100
+ */
101
+ async create(runId, target, options) {
102
+ const statePath = this.getStatePath(runId);
103
+ // Check if state already exists
104
+ if (fs.existsSync(statePath)) {
105
+ throw new Error(`State already exists for run: ${runId}`);
106
+ }
107
+ const now = this.timestamp();
108
+ const state = {
109
+ target,
110
+ work_id: null,
111
+ workflow_version: options?.workflowVersion ?? '2.0',
112
+ status: options?.status ?? 'in_progress',
113
+ current_phase: options?.startPhase ?? 'frame',
114
+ additional_instructions: options?.additionalInstructions ?? null,
115
+ started_at: now,
116
+ updated_at: now,
117
+ phases: createDefaultPhases(),
118
+ pending_approvals: [],
119
+ errors: [],
120
+ retries: {},
121
+ artifacts: {},
122
+ metadata: {
123
+ autonomy_level: options?.autonomyLevel,
124
+ },
125
+ };
126
+ // Mark starting phase as in_progress
127
+ if (state.current_phase !== 'none') {
128
+ state.phases[state.current_phase].status = 'in_progress';
129
+ state.phases[state.current_phase].started_at = now;
130
+ }
131
+ this.writeState(statePath, state);
132
+ return state;
133
+ }
134
+ /**
135
+ * Update workflow state
136
+ */
137
+ async update(runId, updates, options) {
138
+ const statePath = this.getStatePath(runId);
139
+ const existingState = this.readState(statePath);
140
+ if (!existingState) {
141
+ throw new Error(`State not found for run: ${runId}`);
142
+ }
143
+ const shouldMerge = options?.merge ?? true;
144
+ const updateTimestamp = options?.updateTimestamp ?? true;
145
+ let newState;
146
+ if (shouldMerge) {
147
+ // Deep merge for nested objects
148
+ newState = {
149
+ ...existingState,
150
+ ...updates,
151
+ phases: {
152
+ ...existingState.phases,
153
+ ...(updates.phases ?? {}),
154
+ },
155
+ artifacts: {
156
+ ...existingState.artifacts,
157
+ ...(updates.artifacts ?? {}),
158
+ },
159
+ metadata: {
160
+ ...existingState.metadata,
161
+ ...(updates.metadata ?? {}),
162
+ },
163
+ };
164
+ }
165
+ else {
166
+ newState = { ...existingState, ...updates };
167
+ }
168
+ if (updateTimestamp) {
169
+ newState.updated_at = this.timestamp();
170
+ }
171
+ this.writeState(statePath, newState);
172
+ return newState;
173
+ }
174
+ /**
175
+ * Delete workflow state
176
+ */
177
+ async delete(runId) {
178
+ const runDir = this.getRunDir(runId);
179
+ if (!fs.existsSync(runDir)) {
180
+ return; // Already deleted or never existed
181
+ }
182
+ // Remove entire run directory
183
+ fs.rmSync(runDir, { recursive: true, force: true });
184
+ }
185
+ // ============================================
186
+ // Phase Operations
187
+ // ============================================
188
+ /**
189
+ * Start a phase
190
+ */
191
+ async startPhase(runId, phase) {
192
+ const statePath = this.getStatePath(runId);
193
+ const state = this.readState(statePath);
194
+ if (!state) {
195
+ throw new Error(`State not found for run: ${runId}`);
196
+ }
197
+ const now = this.timestamp();
198
+ // Update phase state
199
+ state.phases[phase] = {
200
+ ...state.phases[phase],
201
+ status: 'in_progress',
202
+ started_at: now,
203
+ };
204
+ // Update workflow state
205
+ state.current_phase = phase;
206
+ state.current_step = undefined;
207
+ state.current_step_id = undefined;
208
+ state.updated_at = now;
209
+ this.writeState(statePath, state);
210
+ return state;
211
+ }
212
+ /**
213
+ * Complete a phase
214
+ */
215
+ async completePhase(runId, phase, artifacts) {
216
+ const statePath = this.getStatePath(runId);
217
+ const state = this.readState(statePath);
218
+ if (!state) {
219
+ throw new Error(`State not found for run: ${runId}`);
220
+ }
221
+ const now = this.timestamp();
222
+ // Update phase state
223
+ state.phases[phase] = {
224
+ ...state.phases[phase],
225
+ status: 'completed',
226
+ completed_at: now,
227
+ };
228
+ // Add artifacts if provided
229
+ if (artifacts) {
230
+ const artifactPaths = Object.values(artifacts);
231
+ state.phases[phase].artifacts = [
232
+ ...state.phases[phase].artifacts,
233
+ ...artifactPaths,
234
+ ];
235
+ // Also add to workflow-level artifacts
236
+ state.artifacts = {
237
+ ...state.artifacts,
238
+ ...artifacts,
239
+ };
240
+ }
241
+ // Determine next phase
242
+ const nextPhase = getNextPhase(phase);
243
+ if (nextPhase) {
244
+ state.current_phase = nextPhase;
245
+ // Auto-start next phase
246
+ state.phases[nextPhase].status = 'in_progress';
247
+ state.phases[nextPhase].started_at = now;
248
+ }
249
+ else {
250
+ // Workflow complete
251
+ state.current_phase = 'none';
252
+ state.status = 'completed';
253
+ state.completed_at = now;
254
+ }
255
+ state.current_step = undefined;
256
+ state.current_step_id = undefined;
257
+ state.updated_at = now;
258
+ this.writeState(statePath, state);
259
+ return state;
260
+ }
261
+ /**
262
+ * Fail a phase
263
+ */
264
+ async failPhase(runId, phase, error) {
265
+ const statePath = this.getStatePath(runId);
266
+ const state = this.readState(statePath);
267
+ if (!state) {
268
+ throw new Error(`State not found for run: ${runId}`);
269
+ }
270
+ const now = this.timestamp();
271
+ // Update phase state
272
+ state.phases[phase] = {
273
+ ...state.phases[phase],
274
+ status: 'failed',
275
+ error: error.error,
276
+ };
277
+ // Update workflow state
278
+ state.status = 'failed';
279
+ state.updated_at = now;
280
+ // Record error
281
+ const fullError = {
282
+ phase,
283
+ step: error.step,
284
+ error: error.error,
285
+ timestamp: now,
286
+ };
287
+ state.errors = [...(state.errors ?? []), fullError];
288
+ this.writeState(statePath, state);
289
+ return state;
290
+ }
291
+ /**
292
+ * Skip a phase
293
+ */
294
+ async skipPhase(runId, phase) {
295
+ const statePath = this.getStatePath(runId);
296
+ const state = this.readState(statePath);
297
+ if (!state) {
298
+ throw new Error(`State not found for run: ${runId}`);
299
+ }
300
+ const now = this.timestamp();
301
+ // Update phase state
302
+ state.phases[phase] = {
303
+ ...state.phases[phase],
304
+ status: 'skipped',
305
+ };
306
+ // Move to next phase
307
+ const nextPhase = getNextPhase(phase);
308
+ if (nextPhase) {
309
+ state.current_phase = nextPhase;
310
+ state.phases[nextPhase].status = 'in_progress';
311
+ state.phases[nextPhase].started_at = now;
312
+ }
313
+ else {
314
+ state.current_phase = 'none';
315
+ state.status = 'completed';
316
+ state.completed_at = now;
317
+ }
318
+ state.updated_at = now;
319
+ this.writeState(statePath, state);
320
+ return state;
321
+ }
322
+ // ============================================
323
+ // Step Operations
324
+ // ============================================
325
+ /**
326
+ * Update current step within a phase
327
+ */
328
+ async setCurrentStep(runId, phase, stepName) {
329
+ const statePath = this.getStatePath(runId);
330
+ const state = this.readState(statePath);
331
+ if (!state) {
332
+ throw new Error(`State not found for run: ${runId}`);
333
+ }
334
+ const stepId = `${phase}:${stepName}`;
335
+ state.current_step = stepName;
336
+ state.current_step_id = stepId;
337
+ state.phases[phase].current_step = stepName;
338
+ state.phases[phase].current_step_id = stepId;
339
+ state.updated_at = this.timestamp();
340
+ this.writeState(statePath, state);
341
+ return state;
342
+ }
343
+ /**
344
+ * Mark a step as completed
345
+ */
346
+ async completeStep(runId, phase, stepName) {
347
+ const statePath = this.getStatePath(runId);
348
+ const state = this.readState(statePath);
349
+ if (!state) {
350
+ throw new Error(`State not found for run: ${runId}`);
351
+ }
352
+ const stepId = `${phase}:${stepName}`;
353
+ // Add to completed steps if not already there
354
+ if (!state.phases[phase].completed_steps.includes(stepName)) {
355
+ state.phases[phase].completed_steps.push(stepName);
356
+ }
357
+ if (!state.phases[phase].completed_step_ids.includes(stepId)) {
358
+ state.phases[phase].completed_step_ids.push(stepId);
359
+ }
360
+ // Clear current step
361
+ state.phases[phase].current_step = undefined;
362
+ state.phases[phase].current_step_id = undefined;
363
+ state.updated_at = this.timestamp();
364
+ this.writeState(statePath, state);
365
+ return state;
366
+ }
367
+ // ============================================
368
+ // Transition Operations
369
+ // ============================================
370
+ /**
371
+ * Transition workflow to a new status
372
+ */
373
+ async transition(runId, toStatus) {
374
+ const statePath = this.getStatePath(runId);
375
+ const state = this.readState(statePath);
376
+ if (!state) {
377
+ throw new Error(`State not found for run: ${runId}`);
378
+ }
379
+ const previousPhase = state.current_phase;
380
+ const now = this.timestamp();
381
+ state.status = toStatus;
382
+ state.updated_at = now;
383
+ if (toStatus === 'completed' || toStatus === 'cancelled' || toStatus === 'failed') {
384
+ state.completed_at = now;
385
+ }
386
+ this.writeState(statePath, state);
387
+ return {
388
+ success: true,
389
+ previousPhase,
390
+ currentPhase: state.current_phase,
391
+ state,
392
+ };
393
+ }
394
+ // ============================================
395
+ // Query Operations
396
+ // ============================================
397
+ /**
398
+ * List workflow states with optional filters
399
+ */
400
+ async list(filters) {
401
+ if (!fs.existsSync(this.runsDir)) {
402
+ return [];
403
+ }
404
+ const runDirs = fs.readdirSync(this.runsDir, { withFileTypes: true })
405
+ .filter(dirent => dirent.isDirectory())
406
+ .map(dirent => dirent.name);
407
+ let states = [];
408
+ for (const runId of runDirs) {
409
+ const state = this.readState(this.getStatePath(runId));
410
+ if (state) {
411
+ states.push(state);
412
+ }
413
+ }
414
+ // Apply filters
415
+ if (filters?.status) {
416
+ states = states.filter(s => s.status === filters.status);
417
+ }
418
+ if (filters?.workId) {
419
+ states = states.filter(s => s.work_id === filters.workId);
420
+ }
421
+ if (filters?.target) {
422
+ states = states.filter(s => s.target.includes(filters.target));
423
+ }
424
+ if (filters?.since) {
425
+ const sinceDate = new Date(filters.since);
426
+ states = states.filter(s => {
427
+ const updatedAt = s.updated_at ?? s.started_at;
428
+ return new Date(updatedAt) >= sinceDate;
429
+ });
430
+ }
431
+ // Sort by updated_at descending
432
+ states.sort((a, b) => {
433
+ const aDate = new Date(a.updated_at ?? a.started_at);
434
+ const bDate = new Date(b.updated_at ?? b.started_at);
435
+ return bDate.getTime() - aDate.getTime();
436
+ });
437
+ // Apply limit
438
+ if (filters?.limit && filters.limit > 0) {
439
+ states = states.slice(0, filters.limit);
440
+ }
441
+ return states;
442
+ }
443
+ /**
444
+ * Get the latest workflow state for a work ID
445
+ */
446
+ async getLatestForWorkId(workId) {
447
+ const states = await this.list({ workId, limit: 1 });
448
+ return states.length > 0 ? states[0] : null;
449
+ }
450
+ /**
451
+ * Get active (in_progress) workflow state for a work ID
452
+ */
453
+ async getActiveForWorkId(workId) {
454
+ const states = await this.list({ workId, status: 'in_progress', limit: 1 });
455
+ return states.length > 0 ? states[0] : null;
456
+ }
457
+ /**
458
+ * Check if a run exists
459
+ */
460
+ async exists(runId) {
461
+ const statePath = this.getStatePath(runId);
462
+ return fs.existsSync(statePath);
463
+ }
464
+ // ============================================
465
+ // Artifact Operations
466
+ // ============================================
467
+ /**
468
+ * Add an artifact to the workflow state
469
+ */
470
+ async addArtifact(runId, key, value) {
471
+ const statePath = this.getStatePath(runId);
472
+ const state = this.readState(statePath);
473
+ if (!state) {
474
+ throw new Error(`State not found for run: ${runId}`);
475
+ }
476
+ state.artifacts = {
477
+ ...state.artifacts,
478
+ [key]: value,
479
+ };
480
+ state.updated_at = this.timestamp();
481
+ this.writeState(statePath, state);
482
+ return state;
483
+ }
484
+ /**
485
+ * Add a commit to the workflow artifacts
486
+ */
487
+ async addCommit(runId, commitSha) {
488
+ const statePath = this.getStatePath(runId);
489
+ const state = this.readState(statePath);
490
+ if (!state) {
491
+ throw new Error(`State not found for run: ${runId}`);
492
+ }
493
+ state.artifacts = state.artifacts ?? {};
494
+ state.artifacts.commits = [...(state.artifacts.commits ?? []), commitSha];
495
+ state.updated_at = this.timestamp();
496
+ this.writeState(statePath, state);
497
+ return state;
498
+ }
499
+ // ============================================
500
+ // Error and Approval Operations
501
+ // ============================================
502
+ /**
503
+ * Record an error
504
+ */
505
+ async recordError(runId, error) {
506
+ const statePath = this.getStatePath(runId);
507
+ const state = this.readState(statePath);
508
+ if (!state) {
509
+ throw new Error(`State not found for run: ${runId}`);
510
+ }
511
+ const fullError = {
512
+ ...error,
513
+ timestamp: this.timestamp(),
514
+ };
515
+ state.errors = [...(state.errors ?? []), fullError];
516
+ state.updated_at = this.timestamp();
517
+ this.writeState(statePath, state);
518
+ return state;
519
+ }
520
+ /**
521
+ * Add a pending approval request
522
+ */
523
+ async requestApproval(runId, phase, reason) {
524
+ const statePath = this.getStatePath(runId);
525
+ const state = this.readState(statePath);
526
+ if (!state) {
527
+ throw new Error(`State not found for run: ${runId}`);
528
+ }
529
+ state.pending_approvals = [
530
+ ...(state.pending_approvals ?? []),
531
+ {
532
+ phase,
533
+ reason,
534
+ requested_at: this.timestamp(),
535
+ },
536
+ ];
537
+ state.status = 'paused';
538
+ state.updated_at = this.timestamp();
539
+ this.writeState(statePath, state);
540
+ return state;
541
+ }
542
+ /**
543
+ * Clear pending approvals and resume
544
+ */
545
+ async clearApproval(runId) {
546
+ const statePath = this.getStatePath(runId);
547
+ const state = this.readState(statePath);
548
+ if (!state) {
549
+ throw new Error(`State not found for run: ${runId}`);
550
+ }
551
+ state.pending_approvals = [];
552
+ state.status = 'in_progress';
553
+ state.updated_at = this.timestamp();
554
+ this.writeState(statePath, state);
555
+ return state;
556
+ }
557
+ }
558
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/faber/state-manager.ts"],"names":[],"mappings":"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"}