@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 @@
1
+ {"version":3,"file":"config-manager.test.js","sourceRoot":"","sources":["../../../src/faber/__tests__/config-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fractary/faber - FaberStateManager Tests
3
+ *
4
+ * Unit tests for FaberStateManager with file-based state storage
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=state-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.test.d.ts","sourceRoot":"","sources":["../../../src/faber/__tests__/state-manager.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,541 @@
1
+ /**
2
+ * @fractary/faber - FaberStateManager Tests
3
+ *
4
+ * Unit tests for FaberStateManager with file-based state storage
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { FaberStateManager } from '../state-manager';
9
+ describe('FaberStateManager', () => {
10
+ const testDir = path.join(__dirname, '__test-state-manager__');
11
+ const stateDir = path.join(testDir, '.fractary', 'plugins', 'faber');
12
+ const runsDir = path.join(stateDir, 'runs');
13
+ let manager;
14
+ beforeEach(() => {
15
+ // Clean up test directory before each test
16
+ if (fs.existsSync(testDir)) {
17
+ fs.rmSync(testDir, { recursive: true, force: true });
18
+ }
19
+ fs.mkdirSync(testDir, { recursive: true });
20
+ // Mock process.cwd() to return testDir
21
+ jest.spyOn(process, 'cwd').mockReturnValue(testDir);
22
+ // Create manager with default config
23
+ manager = new FaberStateManager();
24
+ });
25
+ afterEach(() => {
26
+ // Clean up test directory after each test
27
+ if (fs.existsSync(testDir)) {
28
+ fs.rmSync(testDir, { recursive: true, force: true });
29
+ }
30
+ // Restore mocks
31
+ jest.restoreAllMocks();
32
+ });
33
+ describe('Constructor', () => {
34
+ it('should construct with default config', () => {
35
+ const mgr = new FaberStateManager();
36
+ expect(mgr).toBeDefined();
37
+ });
38
+ it('should construct with custom config', () => {
39
+ const mgr = new FaberStateManager({
40
+ stateDir: '.custom/faber',
41
+ runsSubdir: 'workflows',
42
+ });
43
+ expect(mgr).toBeDefined();
44
+ });
45
+ it('should construct with partial config', () => {
46
+ const mgr = new FaberStateManager({
47
+ stateDir: '.custom/faber',
48
+ });
49
+ expect(mgr).toBeDefined();
50
+ });
51
+ });
52
+ describe('CRUD Operations', () => {
53
+ describe('create', () => {
54
+ it('should create new workflow state', async () => {
55
+ const runId = 'test-run-001';
56
+ const target = 'issue#123';
57
+ const state = await manager.create(runId, target);
58
+ expect(state).toBeDefined();
59
+ expect(state.target).toBe(target);
60
+ expect(state.status).toBe('in_progress');
61
+ expect(state.current_phase).toBe('frame');
62
+ expect(state.phases.frame.status).toBe('in_progress');
63
+ expect(state.started_at).toBeDefined();
64
+ expect(state.updated_at).toBeDefined();
65
+ });
66
+ it('should create state with custom options', async () => {
67
+ const runId = 'test-run-002';
68
+ const target = 'issue#456';
69
+ const state = await manager.create(runId, target, {
70
+ workflowVersion: '3.0',
71
+ startPhase: 'architect',
72
+ autonomyLevel: 'guarded',
73
+ additionalInstructions: 'Test instructions',
74
+ });
75
+ expect(state.workflow_version).toBe('3.0');
76
+ expect(state.current_phase).toBe('architect');
77
+ expect(state.phases.architect.status).toBe('in_progress');
78
+ expect(state.metadata?.autonomy_level).toBe('guarded');
79
+ expect(state.additional_instructions).toBe('Test instructions');
80
+ });
81
+ it('should throw error if state already exists', async () => {
82
+ const runId = 'test-run-003';
83
+ await manager.create(runId, 'target');
84
+ await expect(manager.create(runId, 'target2'))
85
+ .rejects.toThrow(`State already exists for run: ${runId}`);
86
+ });
87
+ it('should create state file on disk', async () => {
88
+ const runId = 'test-run-004';
89
+ await manager.create(runId, 'target');
90
+ const statePath = path.join(runsDir, runId, 'state.json');
91
+ expect(fs.existsSync(statePath)).toBe(true);
92
+ });
93
+ });
94
+ describe('get', () => {
95
+ it('should return null for non-existent state', async () => {
96
+ const state = await manager.get('non-existent');
97
+ expect(state).toBeNull();
98
+ });
99
+ it('should return existing state', async () => {
100
+ const runId = 'test-run-005';
101
+ await manager.create(runId, 'target');
102
+ const state = await manager.get(runId);
103
+ expect(state).toBeDefined();
104
+ expect(state?.target).toBe('target');
105
+ });
106
+ });
107
+ describe('update', () => {
108
+ it('should update existing state', async () => {
109
+ const runId = 'test-run-006';
110
+ await manager.create(runId, 'target');
111
+ const updated = await manager.update(runId, {
112
+ work_id: 'ISSUE-123',
113
+ });
114
+ expect(updated.work_id).toBe('ISSUE-123');
115
+ });
116
+ it('should merge nested objects by default', async () => {
117
+ const runId = 'test-run-007';
118
+ await manager.create(runId, 'target');
119
+ await manager.update(runId, {
120
+ artifacts: { spec: '/path/to/spec.md' },
121
+ });
122
+ const updated = await manager.update(runId, {
123
+ artifacts: { plan: '/path/to/plan.md' },
124
+ });
125
+ expect(updated.artifacts?.spec).toBe('/path/to/spec.md');
126
+ expect(updated.artifacts?.plan).toBe('/path/to/plan.md');
127
+ });
128
+ it('should replace without merge when option is false', async () => {
129
+ const runId = 'test-run-008';
130
+ await manager.create(runId, 'target');
131
+ const updated = await manager.update(runId, {
132
+ artifacts: { plan: '/path/to/plan.md' },
133
+ }, { merge: false });
134
+ expect(updated.artifacts?.plan).toBe('/path/to/plan.md');
135
+ });
136
+ it('should throw error if state not found', async () => {
137
+ await expect(manager.update('non-existent', { work_id: '123' }))
138
+ .rejects.toThrow('State not found for run: non-existent');
139
+ });
140
+ it('should update timestamp by default', async () => {
141
+ const runId = 'test-run-009';
142
+ const state = await manager.create(runId, 'target');
143
+ const originalUpdated = state.updated_at;
144
+ // Small delay to ensure timestamp difference
145
+ await new Promise(resolve => setTimeout(resolve, 10));
146
+ const updated = await manager.update(runId, { work_id: '123' });
147
+ expect(updated.updated_at).not.toBe(originalUpdated);
148
+ });
149
+ it('should not update timestamp when option is false', async () => {
150
+ const runId = 'test-run-010';
151
+ const state = await manager.create(runId, 'target');
152
+ const originalUpdated = state.updated_at;
153
+ const updated = await manager.update(runId, { work_id: '123' }, { updateTimestamp: false });
154
+ expect(updated.updated_at).toBe(originalUpdated);
155
+ });
156
+ });
157
+ describe('delete', () => {
158
+ it('should delete existing state', async () => {
159
+ const runId = 'test-run-011';
160
+ await manager.create(runId, 'target');
161
+ await manager.delete(runId);
162
+ const state = await manager.get(runId);
163
+ expect(state).toBeNull();
164
+ });
165
+ it('should not throw if state does not exist', async () => {
166
+ await expect(manager.delete('non-existent')).resolves.not.toThrow();
167
+ });
168
+ it('should remove entire run directory', async () => {
169
+ const runId = 'test-run-012';
170
+ await manager.create(runId, 'target');
171
+ const runDir = path.join(runsDir, runId);
172
+ expect(fs.existsSync(runDir)).toBe(true);
173
+ await manager.delete(runId);
174
+ expect(fs.existsSync(runDir)).toBe(false);
175
+ });
176
+ });
177
+ describe('exists', () => {
178
+ it('should return false for non-existent state', async () => {
179
+ const exists = await manager.exists('non-existent');
180
+ expect(exists).toBe(false);
181
+ });
182
+ it('should return true for existing state', async () => {
183
+ const runId = 'test-run-013';
184
+ await manager.create(runId, 'target');
185
+ const exists = await manager.exists(runId);
186
+ expect(exists).toBe(true);
187
+ });
188
+ });
189
+ });
190
+ describe('Phase Operations', () => {
191
+ describe('startPhase', () => {
192
+ it('should start a phase', async () => {
193
+ const runId = 'test-run-020';
194
+ await manager.create(runId, 'target');
195
+ const state = await manager.startPhase(runId, 'architect');
196
+ expect(state.current_phase).toBe('architect');
197
+ expect(state.phases.architect.status).toBe('in_progress');
198
+ expect(state.phases.architect.started_at).toBeDefined();
199
+ });
200
+ it('should clear current step when starting new phase', async () => {
201
+ const runId = 'test-run-021';
202
+ await manager.create(runId, 'target');
203
+ await manager.setCurrentStep(runId, 'frame', 'fetch-issue');
204
+ const state = await manager.startPhase(runId, 'architect');
205
+ expect(state.current_step).toBeUndefined();
206
+ expect(state.current_step_id).toBeUndefined();
207
+ });
208
+ });
209
+ describe('completePhase', () => {
210
+ it('should complete a phase and start next', async () => {
211
+ const runId = 'test-run-022';
212
+ await manager.create(runId, 'target');
213
+ const state = await manager.completePhase(runId, 'frame');
214
+ expect(state.phases.frame.status).toBe('completed');
215
+ expect(state.phases.frame.completed_at).toBeDefined();
216
+ expect(state.current_phase).toBe('architect');
217
+ expect(state.phases.architect.status).toBe('in_progress');
218
+ });
219
+ it('should complete workflow when last phase completes', async () => {
220
+ const runId = 'test-run-023';
221
+ await manager.create(runId, 'target', { startPhase: 'release' });
222
+ const state = await manager.completePhase(runId, 'release');
223
+ expect(state.phases.release.status).toBe('completed');
224
+ expect(state.current_phase).toBe('none');
225
+ expect(state.status).toBe('completed');
226
+ expect(state.completed_at).toBeDefined();
227
+ });
228
+ it('should add artifacts when provided', async () => {
229
+ const runId = 'test-run-024';
230
+ await manager.create(runId, 'target');
231
+ const state = await manager.completePhase(runId, 'frame', {
232
+ spec: '/specs/WORK-00123-feature.md',
233
+ });
234
+ expect(state.artifacts?.spec).toBe('/specs/WORK-00123-feature.md');
235
+ expect(state.phases.frame.artifacts).toContain('/specs/WORK-00123-feature.md');
236
+ });
237
+ });
238
+ describe('failPhase', () => {
239
+ it('should fail a phase and update workflow status', async () => {
240
+ const runId = 'test-run-025';
241
+ await manager.create(runId, 'target');
242
+ const state = await manager.failPhase(runId, 'frame', {
243
+ error: 'Test error',
244
+ step: 'fetch-issue',
245
+ });
246
+ expect(state.phases.frame.status).toBe('failed');
247
+ expect(state.phases.frame.error).toBe('Test error');
248
+ expect(state.status).toBe('failed');
249
+ expect(state.errors).toHaveLength(1);
250
+ expect(state.errors[0].error).toBe('Test error');
251
+ expect(state.errors[0].phase).toBe('frame');
252
+ expect(state.errors[0].step).toBe('fetch-issue');
253
+ });
254
+ });
255
+ describe('skipPhase', () => {
256
+ it('should skip a phase and move to next', async () => {
257
+ const runId = 'test-run-026';
258
+ await manager.create(runId, 'target');
259
+ const state = await manager.skipPhase(runId, 'frame');
260
+ expect(state.phases.frame.status).toBe('skipped');
261
+ expect(state.current_phase).toBe('architect');
262
+ expect(state.phases.architect.status).toBe('in_progress');
263
+ });
264
+ it('should complete workflow when skipping last phase', async () => {
265
+ const runId = 'test-run-027';
266
+ await manager.create(runId, 'target', { startPhase: 'release' });
267
+ const state = await manager.skipPhase(runId, 'release');
268
+ expect(state.phases.release.status).toBe('skipped');
269
+ expect(state.current_phase).toBe('none');
270
+ expect(state.status).toBe('completed');
271
+ });
272
+ });
273
+ });
274
+ describe('Step Operations', () => {
275
+ describe('setCurrentStep', () => {
276
+ it('should set current step', async () => {
277
+ const runId = 'test-run-030';
278
+ await manager.create(runId, 'target');
279
+ const state = await manager.setCurrentStep(runId, 'frame', 'fetch-issue');
280
+ expect(state.current_step).toBe('fetch-issue');
281
+ expect(state.current_step_id).toBe('frame:fetch-issue');
282
+ expect(state.phases.frame.current_step).toBe('fetch-issue');
283
+ expect(state.phases.frame.current_step_id).toBe('frame:fetch-issue');
284
+ });
285
+ });
286
+ describe('completeStep', () => {
287
+ it('should complete a step', async () => {
288
+ const runId = 'test-run-031';
289
+ await manager.create(runId, 'target');
290
+ await manager.setCurrentStep(runId, 'frame', 'fetch-issue');
291
+ const state = await manager.completeStep(runId, 'frame', 'fetch-issue');
292
+ expect(state.phases.frame.completed_steps).toContain('fetch-issue');
293
+ expect(state.phases.frame.completed_step_ids).toContain('frame:fetch-issue');
294
+ expect(state.phases.frame.current_step).toBeUndefined();
295
+ });
296
+ it('should not duplicate completed steps', async () => {
297
+ const runId = 'test-run-032';
298
+ await manager.create(runId, 'target');
299
+ await manager.completeStep(runId, 'frame', 'fetch-issue');
300
+ await manager.completeStep(runId, 'frame', 'fetch-issue');
301
+ const state = await manager.get(runId);
302
+ const count = state.phases.frame.completed_steps.filter(s => s === 'fetch-issue').length;
303
+ expect(count).toBe(1);
304
+ });
305
+ });
306
+ });
307
+ describe('Transition Operations', () => {
308
+ describe('transition', () => {
309
+ it('should transition workflow status', async () => {
310
+ const runId = 'test-run-040';
311
+ await manager.create(runId, 'target');
312
+ const result = await manager.transition(runId, 'paused');
313
+ expect(result.success).toBe(true);
314
+ expect(result.state.status).toBe('paused');
315
+ });
316
+ it('should set completed_at for terminal states', async () => {
317
+ const runId = 'test-run-041';
318
+ await manager.create(runId, 'target');
319
+ const result = await manager.transition(runId, 'completed');
320
+ expect(result.state.completed_at).toBeDefined();
321
+ });
322
+ it('should set completed_at for cancelled state', async () => {
323
+ const runId = 'test-run-042';
324
+ await manager.create(runId, 'target');
325
+ const result = await manager.transition(runId, 'cancelled');
326
+ expect(result.state.completed_at).toBeDefined();
327
+ });
328
+ it('should track previous phase in result', async () => {
329
+ const runId = 'test-run-043';
330
+ await manager.create(runId, 'target');
331
+ const result = await manager.transition(runId, 'paused');
332
+ expect(result.previousPhase).toBe('frame');
333
+ expect(result.currentPhase).toBe('frame');
334
+ });
335
+ });
336
+ });
337
+ describe('Query Operations', () => {
338
+ describe('list', () => {
339
+ it('should return empty array when no states exist', async () => {
340
+ const states = await manager.list();
341
+ expect(states).toEqual([]);
342
+ });
343
+ it('should list all states', async () => {
344
+ await manager.create('run-1', 'target1');
345
+ await manager.create('run-2', 'target2');
346
+ await manager.create('run-3', 'target3');
347
+ const states = await manager.list();
348
+ expect(states).toHaveLength(3);
349
+ });
350
+ it('should filter by status', async () => {
351
+ await manager.create('run-1', 'target1');
352
+ await manager.create('run-2', 'target2');
353
+ await manager.transition('run-2', 'completed');
354
+ const states = await manager.list({ status: 'completed' });
355
+ expect(states).toHaveLength(1);
356
+ expect(states[0].status).toBe('completed');
357
+ });
358
+ it('should filter by workId', async () => {
359
+ await manager.create('run-1', 'target1');
360
+ await manager.create('run-2', 'target2');
361
+ await manager.update('run-2', { work_id: 'ISSUE-123' });
362
+ const states = await manager.list({ workId: 'ISSUE-123' });
363
+ expect(states).toHaveLength(1);
364
+ });
365
+ it('should filter by target', async () => {
366
+ await manager.create('run-1', 'issue#123');
367
+ await manager.create('run-2', 'issue#456');
368
+ const states = await manager.list({ target: '#123' });
369
+ expect(states).toHaveLength(1);
370
+ expect(states[0].target).toBe('issue#123');
371
+ });
372
+ it('should apply limit', async () => {
373
+ await manager.create('run-1', 'target1');
374
+ await manager.create('run-2', 'target2');
375
+ await manager.create('run-3', 'target3');
376
+ const states = await manager.list({ limit: 2 });
377
+ expect(states).toHaveLength(2);
378
+ });
379
+ it('should sort by updated_at descending', async () => {
380
+ await manager.create('run-1', 'target1');
381
+ await new Promise(resolve => setTimeout(resolve, 10));
382
+ await manager.create('run-2', 'target2');
383
+ await new Promise(resolve => setTimeout(resolve, 10));
384
+ await manager.create('run-3', 'target3');
385
+ const states = await manager.list();
386
+ expect(states[0].target).toBe('target3');
387
+ expect(states[2].target).toBe('target1');
388
+ });
389
+ });
390
+ describe('getLatestForWorkId', () => {
391
+ it('should return null when no states for work ID', async () => {
392
+ const state = await manager.getLatestForWorkId('ISSUE-999');
393
+ expect(state).toBeNull();
394
+ });
395
+ it('should return latest state for work ID', async () => {
396
+ await manager.create('run-1', 'target1');
397
+ await manager.update('run-1', { work_id: 'ISSUE-123' });
398
+ await new Promise(resolve => setTimeout(resolve, 10));
399
+ await manager.create('run-2', 'target2');
400
+ await manager.update('run-2', { work_id: 'ISSUE-123' });
401
+ const state = await manager.getLatestForWorkId('ISSUE-123');
402
+ expect(state?.target).toBe('target2');
403
+ });
404
+ });
405
+ describe('getActiveForWorkId', () => {
406
+ it('should return null when no active states', async () => {
407
+ await manager.create('run-1', 'target1');
408
+ await manager.update('run-1', { work_id: 'ISSUE-123' });
409
+ await manager.transition('run-1', 'completed');
410
+ const state = await manager.getActiveForWorkId('ISSUE-123');
411
+ expect(state).toBeNull();
412
+ });
413
+ it('should return active state for work ID', async () => {
414
+ await manager.create('run-1', 'target1');
415
+ await manager.update('run-1', { work_id: 'ISSUE-123' });
416
+ const state = await manager.getActiveForWorkId('ISSUE-123');
417
+ expect(state?.status).toBe('in_progress');
418
+ });
419
+ });
420
+ });
421
+ describe('Artifact Operations', () => {
422
+ describe('addArtifact', () => {
423
+ it('should add artifact to state', async () => {
424
+ const runId = 'test-run-050';
425
+ await manager.create(runId, 'target');
426
+ const state = await manager.addArtifact(runId, 'spec', '/specs/spec.md');
427
+ expect(state.artifacts?.spec).toBe('/specs/spec.md');
428
+ });
429
+ it('should preserve existing artifacts', async () => {
430
+ const runId = 'test-run-051';
431
+ await manager.create(runId, 'target');
432
+ await manager.addArtifact(runId, 'spec', '/specs/spec.md');
433
+ const state = await manager.addArtifact(runId, 'plan', '/plans/plan.md');
434
+ expect(state.artifacts?.spec).toBe('/specs/spec.md');
435
+ expect(state.artifacts?.plan).toBe('/plans/plan.md');
436
+ });
437
+ });
438
+ describe('addCommit', () => {
439
+ it('should add commit to artifacts', async () => {
440
+ const runId = 'test-run-052';
441
+ await manager.create(runId, 'target');
442
+ const state = await manager.addCommit(runId, 'abc123');
443
+ expect(state.artifacts?.commits).toContain('abc123');
444
+ });
445
+ it('should accumulate multiple commits', async () => {
446
+ const runId = 'test-run-053';
447
+ await manager.create(runId, 'target');
448
+ await manager.addCommit(runId, 'abc123');
449
+ const state = await manager.addCommit(runId, 'def456');
450
+ expect(state.artifacts?.commits).toHaveLength(2);
451
+ expect(state.artifacts?.commits).toContain('abc123');
452
+ expect(state.artifacts?.commits).toContain('def456');
453
+ });
454
+ });
455
+ });
456
+ describe('Error and Approval Operations', () => {
457
+ describe('recordError', () => {
458
+ it('should record error without changing status', async () => {
459
+ const runId = 'test-run-060';
460
+ await manager.create(runId, 'target');
461
+ const state = await manager.recordError(runId, {
462
+ phase: 'frame',
463
+ error: 'Non-fatal warning',
464
+ });
465
+ expect(state.errors).toHaveLength(1);
466
+ expect(state.errors[0].error).toBe('Non-fatal warning');
467
+ expect(state.status).toBe('in_progress'); // Status unchanged
468
+ });
469
+ it('should include timestamp in error', async () => {
470
+ const runId = 'test-run-061';
471
+ await manager.create(runId, 'target');
472
+ const state = await manager.recordError(runId, {
473
+ phase: 'frame',
474
+ error: 'Test error',
475
+ });
476
+ expect(state.errors[0].timestamp).toBeDefined();
477
+ });
478
+ });
479
+ describe('requestApproval', () => {
480
+ it('should add pending approval and pause workflow', async () => {
481
+ const runId = 'test-run-062';
482
+ await manager.create(runId, 'target');
483
+ const state = await manager.requestApproval(runId, 'build', 'Review implementation');
484
+ expect(state.status).toBe('paused');
485
+ expect(state.pending_approvals).toHaveLength(1);
486
+ expect(state.pending_approvals[0].phase).toBe('build');
487
+ expect(state.pending_approvals[0].reason).toBe('Review implementation');
488
+ expect(state.pending_approvals[0].requested_at).toBeDefined();
489
+ });
490
+ });
491
+ describe('clearApproval', () => {
492
+ it('should clear approvals and resume workflow', async () => {
493
+ const runId = 'test-run-063';
494
+ await manager.create(runId, 'target');
495
+ await manager.requestApproval(runId, 'build', 'Review');
496
+ const state = await manager.clearApproval(runId);
497
+ expect(state.status).toBe('in_progress');
498
+ expect(state.pending_approvals).toHaveLength(0);
499
+ });
500
+ });
501
+ });
502
+ describe('Atomic Operations', () => {
503
+ it('should write state atomically (temp file + rename)', async () => {
504
+ const runId = 'test-run-070';
505
+ // Create state
506
+ await manager.create(runId, 'target');
507
+ // Verify no temp file remains
508
+ const runDir = path.join(runsDir, runId);
509
+ const files = fs.readdirSync(runDir);
510
+ expect(files).not.toContain('state.json.tmp');
511
+ expect(files).toContain('state.json');
512
+ });
513
+ });
514
+ describe('Edge Cases', () => {
515
+ it('should handle special characters in target', async () => {
516
+ const runId = 'test-run-080';
517
+ const target = 'issue#123 - Add "quotes" & <special> chars';
518
+ await manager.create(runId, target);
519
+ const retrieved = await manager.get(runId);
520
+ expect(retrieved?.target).toBe(target);
521
+ });
522
+ it('should handle very long run IDs', async () => {
523
+ const runId = 'test-run-' + 'a'.repeat(200);
524
+ await manager.create(runId, 'target');
525
+ const exists = await manager.exists(runId);
526
+ expect(exists).toBe(true);
527
+ });
528
+ it('should handle concurrent operations on different runs', async () => {
529
+ // Create multiple runs concurrently
530
+ const creates = Promise.all([
531
+ manager.create('run-a', 'target-a'),
532
+ manager.create('run-b', 'target-b'),
533
+ manager.create('run-c', 'target-c'),
534
+ ]);
535
+ await expect(creates).resolves.not.toThrow();
536
+ const states = await manager.list();
537
+ expect(states).toHaveLength(3);
538
+ });
539
+ });
540
+ });
541
+ //# sourceMappingURL=state-manager.test.js.map