@fractary/faber 2.5.2 → 2.5.5

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/cli/commands/logs.d.ts +6 -0
  50. package/dist/cli/commands/logs.d.ts.map +1 -0
  51. package/dist/cli/commands/logs.js +215 -0
  52. package/dist/cli/commands/logs.js.map +1 -0
  53. package/dist/cli/commands/repo.d.ts +6 -0
  54. package/dist/cli/commands/repo.d.ts.map +1 -0
  55. package/dist/cli/commands/repo.js +260 -0
  56. package/dist/cli/commands/repo.js.map +1 -0
  57. package/dist/cli/commands/spec.d.ts +6 -0
  58. package/dist/cli/commands/spec.d.ts.map +1 -0
  59. package/dist/cli/commands/spec.js +184 -0
  60. package/dist/cli/commands/spec.js.map +1 -0
  61. package/dist/cli/commands/work.d.ts +6 -0
  62. package/dist/cli/commands/work.d.ts.map +1 -0
  63. package/dist/cli/commands/work.js +113 -0
  64. package/dist/cli/commands/work.js.map +1 -0
  65. package/dist/cli/commands/workflow.d.ts +6 -0
  66. package/dist/cli/commands/workflow.d.ts.map +1 -0
  67. package/dist/cli/commands/workflow.js +214 -0
  68. package/dist/cli/commands/workflow.js.map +1 -0
  69. package/dist/cli/index.d.ts +8 -0
  70. package/dist/cli/index.d.ts.map +1 -0
  71. package/dist/cli/index.js +27 -0
  72. package/dist/cli/index.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/index.d.ts +0 -0
  142. package/dist/index.d.ts.map +0 -0
  143. package/dist/index.js +0 -0
  144. package/dist/index.js.map +0 -0
  145. package/dist/logs/index.d.ts +0 -0
  146. package/dist/logs/index.d.ts.map +0 -0
  147. package/dist/logs/index.js +0 -0
  148. package/dist/logs/index.js.map +0 -0
  149. package/dist/logs/manager.d.ts +0 -0
  150. package/dist/logs/manager.d.ts.map +0 -0
  151. package/dist/logs/manager.js +0 -0
  152. package/dist/logs/manager.js.map +0 -0
  153. package/dist/logs/types.d.ts +0 -0
  154. package/dist/logs/types.d.ts.map +0 -0
  155. package/dist/logs/types.js +0 -0
  156. package/dist/logs/types.js.map +0 -0
  157. package/dist/paths.d.ts +0 -0
  158. package/dist/paths.d.ts.map +0 -0
  159. package/dist/paths.js +0 -0
  160. package/dist/paths.js.map +0 -0
  161. package/dist/repo/git.d.ts +0 -0
  162. package/dist/repo/git.d.ts.map +0 -0
  163. package/dist/repo/git.js +0 -0
  164. package/dist/repo/git.js.map +0 -0
  165. package/dist/repo/index.d.ts +0 -0
  166. package/dist/repo/index.d.ts.map +0 -0
  167. package/dist/repo/index.js +0 -0
  168. package/dist/repo/index.js.map +0 -0
  169. package/dist/repo/manager.d.ts +0 -0
  170. package/dist/repo/manager.d.ts.map +0 -0
  171. package/dist/repo/manager.js +0 -0
  172. package/dist/repo/manager.js.map +0 -0
  173. package/dist/repo/providers/bitbucket.d.ts +0 -0
  174. package/dist/repo/providers/bitbucket.d.ts.map +0 -0
  175. package/dist/repo/providers/bitbucket.js +0 -0
  176. package/dist/repo/providers/bitbucket.js.map +0 -0
  177. package/dist/repo/providers/github.d.ts +0 -0
  178. package/dist/repo/providers/github.d.ts.map +0 -0
  179. package/dist/repo/providers/github.js +0 -0
  180. package/dist/repo/providers/github.js.map +0 -0
  181. package/dist/repo/providers/gitlab.d.ts +0 -0
  182. package/dist/repo/providers/gitlab.d.ts.map +0 -0
  183. package/dist/repo/providers/gitlab.js +0 -0
  184. package/dist/repo/providers/gitlab.js.map +0 -0
  185. package/dist/repo/providers/index.d.ts +0 -0
  186. package/dist/repo/providers/index.d.ts.map +0 -0
  187. package/dist/repo/providers/index.js +0 -0
  188. package/dist/repo/providers/index.js.map +0 -0
  189. package/dist/repo/types.d.ts +0 -0
  190. package/dist/repo/types.d.ts.map +0 -0
  191. package/dist/repo/types.js +0 -0
  192. package/dist/repo/types.js.map +0 -0
  193. package/dist/spec/__tests__/manager.test.d.ts +0 -0
  194. package/dist/spec/__tests__/manager.test.d.ts.map +0 -0
  195. package/dist/spec/__tests__/manager.test.js +2 -2
  196. package/dist/spec/__tests__/manager.test.js.map +1 -1
  197. package/dist/spec/index.d.ts +3 -3
  198. package/dist/spec/index.d.ts.map +1 -1
  199. package/dist/spec/index.js +3 -3
  200. package/dist/spec/index.js.map +1 -1
  201. package/dist/spec/manager.d.ts +1 -1
  202. package/dist/spec/manager.d.ts.map +1 -1
  203. package/dist/spec/manager.js +3 -3
  204. package/dist/spec/manager.js.map +1 -1
  205. package/dist/spec/templates.d.ts +1 -1
  206. package/dist/spec/templates.d.ts.map +1 -1
  207. package/dist/spec/templates.js +0 -0
  208. package/dist/spec/templates.js.map +0 -0
  209. package/dist/spec/types.d.ts +2 -2
  210. package/dist/spec/types.d.ts.map +1 -1
  211. package/dist/spec/types.js +0 -0
  212. package/dist/spec/types.js.map +0 -0
  213. package/dist/state/index.d.ts +0 -0
  214. package/dist/state/index.d.ts.map +0 -0
  215. package/dist/state/index.js +0 -0
  216. package/dist/state/index.js.map +0 -0
  217. package/dist/state/manager.d.ts +0 -0
  218. package/dist/state/manager.d.ts.map +0 -0
  219. package/dist/state/manager.js +0 -0
  220. package/dist/state/manager.js.map +0 -0
  221. package/dist/state/session.d.ts +0 -0
  222. package/dist/state/session.d.ts.map +0 -0
  223. package/dist/state/session.js +0 -0
  224. package/dist/state/session.js.map +0 -0
  225. package/dist/state/types.d.ts +0 -0
  226. package/dist/state/types.d.ts.map +0 -0
  227. package/dist/state/types.js +0 -0
  228. package/dist/state/types.js.map +0 -0
  229. package/dist/storage/codex-adapter.d.ts +0 -0
  230. package/dist/storage/codex-adapter.d.ts.map +0 -0
  231. package/dist/storage/codex-adapter.js +0 -0
  232. package/dist/storage/codex-adapter.js.map +0 -0
  233. package/dist/storage/index.d.ts +0 -0
  234. package/dist/storage/index.d.ts.map +0 -0
  235. package/dist/storage/index.js +0 -0
  236. package/dist/storage/index.js.map +0 -0
  237. package/dist/storage/local.d.ts +0 -0
  238. package/dist/storage/local.d.ts.map +0 -0
  239. package/dist/storage/local.js +0 -0
  240. package/dist/storage/local.js.map +0 -0
  241. package/dist/types.d.ts +0 -0
  242. package/dist/types.d.ts.map +0 -0
  243. package/dist/types.js +0 -0
  244. package/dist/types.js.map +0 -0
  245. package/dist/work/index.d.ts +0 -0
  246. package/dist/work/index.d.ts.map +0 -0
  247. package/dist/work/index.js +0 -0
  248. package/dist/work/index.js.map +0 -0
  249. package/dist/work/manager.d.ts +0 -0
  250. package/dist/work/manager.d.ts.map +0 -0
  251. package/dist/work/manager.js +0 -0
  252. package/dist/work/manager.js.map +0 -0
  253. package/dist/work/providers/github.d.ts +0 -5
  254. package/dist/work/providers/github.d.ts.map +1 -1
  255. package/dist/work/providers/github.js +41 -69
  256. package/dist/work/providers/github.js.map +1 -1
  257. package/dist/work/providers/jira.d.ts +0 -0
  258. package/dist/work/providers/jira.d.ts.map +0 -0
  259. package/dist/work/providers/jira.js +0 -0
  260. package/dist/work/providers/jira.js.map +0 -0
  261. package/dist/work/providers/linear.d.ts +0 -0
  262. package/dist/work/providers/linear.d.ts.map +0 -0
  263. package/dist/work/providers/linear.js +0 -0
  264. package/dist/work/providers/linear.js.map +0 -0
  265. package/dist/work/types.d.ts +0 -0
  266. package/dist/work/types.d.ts.map +0 -0
  267. package/dist/work/types.js +0 -0
  268. package/dist/work/types.js.map +0 -0
  269. package/dist/workflow/__tests__/agent-executor.test.d.ts +0 -0
  270. package/dist/workflow/__tests__/agent-executor.test.d.ts.map +0 -0
  271. package/dist/workflow/__tests__/agent-executor.test.js +2 -2
  272. package/dist/workflow/__tests__/agent-executor.test.js.map +1 -1
  273. package/dist/workflow/__tests__/resolver.test.d.ts +0 -0
  274. package/dist/workflow/__tests__/resolver.test.d.ts.map +0 -0
  275. package/dist/workflow/__tests__/resolver.test.js +0 -0
  276. package/dist/workflow/__tests__/resolver.test.js.map +0 -0
  277. package/dist/workflow/agent-executor.d.ts +1 -1
  278. package/dist/workflow/agent-executor.d.ts.map +1 -1
  279. package/dist/workflow/agent-executor.js +3 -3
  280. package/dist/workflow/agent-executor.js.map +1 -1
  281. package/dist/workflow/faber.d.ts +0 -0
  282. package/dist/workflow/faber.d.ts.map +0 -0
  283. package/dist/workflow/faber.js +0 -0
  284. package/dist/workflow/faber.js.map +0 -0
  285. package/dist/workflow/index.d.ts +0 -0
  286. package/dist/workflow/index.d.ts.map +0 -0
  287. package/dist/workflow/index.js +0 -0
  288. package/dist/workflow/index.js.map +0 -0
  289. package/dist/workflow/resolver.d.ts +0 -0
  290. package/dist/workflow/resolver.d.ts.map +0 -0
  291. package/dist/workflow/resolver.js +0 -0
  292. package/dist/workflow/resolver.js.map +0 -0
  293. package/dist/workflow/types.d.ts +0 -0
  294. package/dist/workflow/types.d.ts.map +0 -0
  295. package/dist/workflow/types.js +0 -0
  296. package/dist/workflow/types.js.map +0 -0
  297. package/dist/workflows/__tests__/registry.test.d.ts +0 -0
  298. package/dist/workflows/__tests__/registry.test.d.ts.map +0 -0
  299. package/dist/workflows/__tests__/registry.test.js +0 -0
  300. package/dist/workflows/__tests__/registry.test.js.map +0 -0
  301. package/dist/workflows/registry.d.ts +0 -0
  302. package/dist/workflows/registry.d.ts.map +0 -0
  303. package/dist/workflows/registry.js +0 -0
  304. package/dist/workflows/registry.js.map +0 -0
  305. package/package.json +1 -1
  306. package/dist/cloud/__tests__/resource-manager.test.d.ts +0 -7
  307. package/dist/cloud/__tests__/resource-manager.test.d.ts.map +0 -1
  308. package/dist/cloud/__tests__/resource-manager.test.js +0 -741
  309. package/dist/cloud/__tests__/resource-manager.test.js.map +0 -1
  310. package/dist/cloud/__tests__/terraform-manager.test.d.ts +0 -7
  311. package/dist/cloud/__tests__/terraform-manager.test.d.ts.map +0 -1
  312. package/dist/cloud/__tests__/terraform-manager.test.js +0 -493
  313. package/dist/cloud/__tests__/terraform-manager.test.js.map +0 -1
  314. package/dist/cloud/index.d.ts +0 -9
  315. package/dist/cloud/index.d.ts.map +0 -1
  316. package/dist/cloud/index.js +0 -11
  317. package/dist/cloud/index.js.map +0 -1
  318. package/dist/cloud/resource-manager.d.ts +0 -81
  319. package/dist/cloud/resource-manager.d.ts.map +0 -1
  320. package/dist/cloud/resource-manager.js +0 -288
  321. package/dist/cloud/resource-manager.js.map +0 -1
  322. package/dist/cloud/terraform-manager.d.ts +0 -108
  323. package/dist/cloud/terraform-manager.d.ts.map +0 -1
  324. package/dist/cloud/terraform-manager.js +0 -552
  325. package/dist/cloud/terraform-manager.js.map +0 -1
  326. package/dist/cloud/types.d.ts +0 -281
  327. package/dist/cloud/types.d.ts.map +0 -1
  328. package/dist/cloud/types.js +0 -7
  329. package/dist/cloud/types.js.map +0 -1
  330. package/dist/faber/__tests__/config-manager.test.d.ts +0 -7
  331. package/dist/faber/__tests__/config-manager.test.d.ts.map +0 -1
  332. package/dist/faber/__tests__/config-manager.test.js +0 -637
  333. package/dist/faber/__tests__/config-manager.test.js.map +0 -1
  334. package/dist/faber/__tests__/state-manager.test.d.ts +0 -7
  335. package/dist/faber/__tests__/state-manager.test.d.ts.map +0 -1
  336. package/dist/faber/__tests__/state-manager.test.js +0 -541
  337. package/dist/faber/__tests__/state-manager.test.js.map +0 -1
  338. package/dist/faber/config-manager.d.ts +0 -123
  339. package/dist/faber/config-manager.d.ts.map +0 -1
  340. package/dist/faber/config-manager.js +0 -449
  341. package/dist/faber/config-manager.js.map +0 -1
  342. package/dist/faber/index.d.ts +0 -17
  343. package/dist/faber/index.d.ts.map +0 -1
  344. package/dist/faber/index.js +0 -15
  345. package/dist/faber/index.js.map +0 -1
  346. package/dist/faber/state-manager.d.ts +0 -124
  347. package/dist/faber/state-manager.d.ts.map +0 -1
  348. package/dist/faber/state-manager.js +0 -558
  349. package/dist/faber/state-manager.js.map +0 -1
  350. package/dist/faber/types.d.ts +0 -383
  351. package/dist/faber/types.d.ts.map +0 -1
  352. package/dist/faber/types.js +0 -60
  353. package/dist/faber/types.js.map +0 -1
@@ -1,558 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/faber/state-manager.ts"],"names":[],"mappings":"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"}