mcp-agent-foundry 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/install-skills.d.ts +11 -0
  4. package/dist/cli/install-skills.d.ts.map +1 -0
  5. package/dist/cli/install-skills.js +143 -0
  6. package/dist/cli/install-skills.js.map +1 -0
  7. package/dist/cli/recovery-commands.d.ts +41 -0
  8. package/dist/cli/recovery-commands.d.ts.map +1 -0
  9. package/dist/cli/recovery-commands.js +241 -0
  10. package/dist/cli/recovery-commands.js.map +1 -0
  11. package/dist/cli/setup-wizard.d.ts +25 -0
  12. package/dist/cli/setup-wizard.d.ts.map +1 -0
  13. package/dist/cli/setup-wizard.js +1417 -0
  14. package/dist/cli/setup-wizard.js.map +1 -0
  15. package/dist/cli/test-connection.d.ts +45 -0
  16. package/dist/cli/test-connection.d.ts.map +1 -0
  17. package/dist/cli/test-connection.js +317 -0
  18. package/dist/cli/test-connection.js.map +1 -0
  19. package/dist/cli.d.ts +75 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +704 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/defaults.d.ts +57 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +99 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +14 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/manager.d.ts +184 -0
  32. package/dist/config/manager.d.ts.map +1 -0
  33. package/dist/config/manager.js +347 -0
  34. package/dist/config/manager.js.map +1 -0
  35. package/dist/config/merger.d.ts +76 -0
  36. package/dist/config/merger.d.ts.map +1 -0
  37. package/dist/config/merger.js +189 -0
  38. package/dist/config/merger.js.map +1 -0
  39. package/dist/config/schema.d.ts +20 -0
  40. package/dist/config/schema.d.ts.map +1 -0
  41. package/dist/config/schema.js +20 -0
  42. package/dist/config/schema.js.map +1 -0
  43. package/dist/config/validator.d.ts +254 -0
  44. package/dist/config/validator.d.ts.map +1 -0
  45. package/dist/config/validator.js +363 -0
  46. package/dist/config/validator.js.map +1 -0
  47. package/dist/config/worktree-defaults.d.ts +23 -0
  48. package/dist/config/worktree-defaults.d.ts.map +1 -0
  49. package/dist/config/worktree-defaults.js +78 -0
  50. package/dist/config/worktree-defaults.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +44 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/tools/compare-agents.d.ts +25 -0
  56. package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
  57. package/dist/mcp/tools/compare-agents.js +177 -0
  58. package/dist/mcp/tools/compare-agents.js.map +1 -0
  59. package/dist/mcp/tools/critique-plan.d.ts +26 -0
  60. package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
  61. package/dist/mcp/tools/critique-plan.js +162 -0
  62. package/dist/mcp/tools/critique-plan.js.map +1 -0
  63. package/dist/mcp/tools/design-feedback.d.ts +26 -0
  64. package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
  65. package/dist/mcp/tools/design-feedback.js +216 -0
  66. package/dist/mcp/tools/design-feedback.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +50 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +191 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/invoke-agent.d.ts +25 -0
  72. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
  73. package/dist/mcp/tools/invoke-agent.js +141 -0
  74. package/dist/mcp/tools/invoke-agent.js.map +1 -0
  75. package/dist/mcp/tools/review-code.d.ts +25 -0
  76. package/dist/mcp/tools/review-code.d.ts.map +1 -0
  77. package/dist/mcp/tools/review-code.js +170 -0
  78. package/dist/mcp/tools/review-code.js.map +1 -0
  79. package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
  80. package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
  82. package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
  83. package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
  84. package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
  85. package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
  86. package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
  87. package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
  88. package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
  89. package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
  90. package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
  91. package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
  92. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/tasks/execute-task.js +284 -0
  94. package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
  95. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
  96. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
  97. package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
  98. package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
  99. package/dist/mcp/tools/tasks/index.d.ts +36 -0
  100. package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
  101. package/dist/mcp/tools/tasks/index.js +66 -0
  102. package/dist/mcp/tools/tasks/index.js.map +1 -0
  103. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
  104. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
  105. package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
  106. package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
  107. package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
  108. package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
  109. package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
  110. package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
  111. package/dist/mcp/tools/worktree/index.d.ts +41 -0
  112. package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
  113. package/dist/mcp/tools/worktree/index.js +69 -0
  114. package/dist/mcp/tools/worktree/index.js.map +1 -0
  115. package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
  116. package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
  117. package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
  118. package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
  119. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
  120. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
  121. package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
  122. package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
  123. package/dist/mcp/transport/stdio.d.ts +13 -0
  124. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  125. package/dist/mcp/transport/stdio.js +15 -0
  126. package/dist/mcp/transport/stdio.js.map +1 -0
  127. package/dist/observability/logger.d.ts +137 -0
  128. package/dist/observability/logger.d.ts.map +1 -0
  129. package/dist/observability/logger.js +235 -0
  130. package/dist/observability/logger.js.map +1 -0
  131. package/dist/observability/metrics.d.ts +250 -0
  132. package/dist/observability/metrics.d.ts.map +1 -0
  133. package/dist/observability/metrics.js +364 -0
  134. package/dist/observability/metrics.js.map +1 -0
  135. package/dist/persistence/index.d.ts +9 -0
  136. package/dist/persistence/index.d.ts.map +1 -0
  137. package/dist/persistence/index.js +9 -0
  138. package/dist/persistence/index.js.map +1 -0
  139. package/dist/persistence/state-schema.d.ts +116 -0
  140. package/dist/persistence/state-schema.d.ts.map +1 -0
  141. package/dist/persistence/state-schema.js +28 -0
  142. package/dist/persistence/state-schema.js.map +1 -0
  143. package/dist/persistence/state-store.d.ts +111 -0
  144. package/dist/persistence/state-store.d.ts.map +1 -0
  145. package/dist/persistence/state-store.js +291 -0
  146. package/dist/persistence/state-store.js.map +1 -0
  147. package/dist/providers/anthropic.d.ts +164 -0
  148. package/dist/providers/anthropic.d.ts.map +1 -0
  149. package/dist/providers/anthropic.js +500 -0
  150. package/dist/providers/anthropic.js.map +1 -0
  151. package/dist/providers/base.d.ts +151 -0
  152. package/dist/providers/base.d.ts.map +1 -0
  153. package/dist/providers/base.js +227 -0
  154. package/dist/providers/base.js.map +1 -0
  155. package/dist/providers/gemini.d.ts +85 -0
  156. package/dist/providers/gemini.d.ts.map +1 -0
  157. package/dist/providers/gemini.js +414 -0
  158. package/dist/providers/gemini.js.map +1 -0
  159. package/dist/providers/kimi.d.ts +19 -0
  160. package/dist/providers/kimi.d.ts.map +1 -0
  161. package/dist/providers/kimi.js +20 -0
  162. package/dist/providers/kimi.js.map +1 -0
  163. package/dist/providers/manager.d.ts +160 -0
  164. package/dist/providers/manager.d.ts.map +1 -0
  165. package/dist/providers/manager.js +264 -0
  166. package/dist/providers/manager.js.map +1 -0
  167. package/dist/providers/ollama.d.ts +83 -0
  168. package/dist/providers/ollama.d.ts.map +1 -0
  169. package/dist/providers/ollama.js +453 -0
  170. package/dist/providers/ollama.js.map +1 -0
  171. package/dist/providers/openai.d.ts +96 -0
  172. package/dist/providers/openai.d.ts.map +1 -0
  173. package/dist/providers/openai.js +457 -0
  174. package/dist/providers/openai.js.map +1 -0
  175. package/dist/providers/zai.d.ts +19 -0
  176. package/dist/providers/zai.d.ts.map +1 -0
  177. package/dist/providers/zai.js +20 -0
  178. package/dist/providers/zai.js.map +1 -0
  179. package/dist/router/context-manager.d.ts +2 -0
  180. package/dist/router/context-manager.d.ts.map +1 -0
  181. package/dist/router/context-manager.js +3 -0
  182. package/dist/router/context-manager.js.map +1 -0
  183. package/dist/router/engine.d.ts +169 -0
  184. package/dist/router/engine.d.ts.map +1 -0
  185. package/dist/router/engine.js +435 -0
  186. package/dist/router/engine.js.map +1 -0
  187. package/dist/router/pattern-executor.d.ts +317 -0
  188. package/dist/router/pattern-executor.d.ts.map +1 -0
  189. package/dist/router/pattern-executor.js +571 -0
  190. package/dist/router/pattern-executor.js.map +1 -0
  191. package/dist/router/role-resolver.d.ts +59 -0
  192. package/dist/router/role-resolver.d.ts.map +1 -0
  193. package/dist/router/role-resolver.js +95 -0
  194. package/dist/router/role-resolver.js.map +1 -0
  195. package/dist/server.d.ts +32 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +223 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/startup.d.ts +78 -0
  200. package/dist/startup.d.ts.map +1 -0
  201. package/dist/startup.js +107 -0
  202. package/dist/startup.js.map +1 -0
  203. package/dist/tasks/coordinator.d.ts +141 -0
  204. package/dist/tasks/coordinator.d.ts.map +1 -0
  205. package/dist/tasks/coordinator.js +331 -0
  206. package/dist/tasks/coordinator.js.map +1 -0
  207. package/dist/tasks/index.d.ts +13 -0
  208. package/dist/tasks/index.d.ts.map +1 -0
  209. package/dist/tasks/index.js +13 -0
  210. package/dist/tasks/index.js.map +1 -0
  211. package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
  212. package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
  213. package/dist/tasks/persistent-state-coordinator.js +371 -0
  214. package/dist/tasks/persistent-state-coordinator.js.map +1 -0
  215. package/dist/tasks/pipeline-manager.d.ts +103 -0
  216. package/dist/tasks/pipeline-manager.d.ts.map +1 -0
  217. package/dist/tasks/pipeline-manager.js +358 -0
  218. package/dist/tasks/pipeline-manager.js.map +1 -0
  219. package/dist/tasks/state-coordinator.d.ts +79 -0
  220. package/dist/tasks/state-coordinator.d.ts.map +1 -0
  221. package/dist/tasks/state-coordinator.js +200 -0
  222. package/dist/tasks/state-coordinator.js.map +1 -0
  223. package/dist/tasks/worker-mode.d.ts +65 -0
  224. package/dist/tasks/worker-mode.d.ts.map +1 -0
  225. package/dist/tasks/worker-mode.js +208 -0
  226. package/dist/tasks/worker-mode.js.map +1 -0
  227. package/dist/translation/errors.d.ts +203 -0
  228. package/dist/translation/errors.d.ts.map +1 -0
  229. package/dist/translation/errors.js +477 -0
  230. package/dist/translation/errors.js.map +1 -0
  231. package/dist/translation/index.d.ts +12 -0
  232. package/dist/translation/index.d.ts.map +1 -0
  233. package/dist/translation/index.js +32 -0
  234. package/dist/translation/index.js.map +1 -0
  235. package/dist/translation/messages.d.ts +295 -0
  236. package/dist/translation/messages.d.ts.map +1 -0
  237. package/dist/translation/messages.js +557 -0
  238. package/dist/translation/messages.js.map +1 -0
  239. package/dist/translation/streaming.d.ts +226 -0
  240. package/dist/translation/streaming.d.ts.map +1 -0
  241. package/dist/translation/streaming.js +520 -0
  242. package/dist/translation/streaming.js.map +1 -0
  243. package/dist/translation/tools.d.ts +209 -0
  244. package/dist/translation/tools.d.ts.map +1 -0
  245. package/dist/translation/tools.js +331 -0
  246. package/dist/translation/tools.js.map +1 -0
  247. package/dist/types.d.ts +747 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +86 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils/circuit-breaker.d.ts +175 -0
  252. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  253. package/dist/utils/circuit-breaker.js +315 -0
  254. package/dist/utils/circuit-breaker.js.map +1 -0
  255. package/dist/utils/env.d.ts +2 -0
  256. package/dist/utils/env.d.ts.map +1 -0
  257. package/dist/utils/env.js +3 -0
  258. package/dist/utils/env.js.map +1 -0
  259. package/dist/utils/git.d.ts +58 -0
  260. package/dist/utils/git.d.ts.map +1 -0
  261. package/dist/utils/git.js +197 -0
  262. package/dist/utils/git.js.map +1 -0
  263. package/dist/utils/index.d.ts +9 -0
  264. package/dist/utils/index.d.ts.map +1 -0
  265. package/dist/utils/index.js +9 -0
  266. package/dist/utils/index.js.map +1 -0
  267. package/dist/utils/merge-ordering.d.ts +45 -0
  268. package/dist/utils/merge-ordering.d.ts.map +1 -0
  269. package/dist/utils/merge-ordering.js +128 -0
  270. package/dist/utils/merge-ordering.js.map +1 -0
  271. package/dist/utils/retry.d.ts +106 -0
  272. package/dist/utils/retry.d.ts.map +1 -0
  273. package/dist/utils/retry.js +188 -0
  274. package/dist/utils/retry.js.map +1 -0
  275. package/dist/worktrees/branch-manager.d.ts +55 -0
  276. package/dist/worktrees/branch-manager.d.ts.map +1 -0
  277. package/dist/worktrees/branch-manager.js +129 -0
  278. package/dist/worktrees/branch-manager.js.map +1 -0
  279. package/dist/worktrees/conflict-handler.d.ts +72 -0
  280. package/dist/worktrees/conflict-handler.d.ts.map +1 -0
  281. package/dist/worktrees/conflict-handler.js +287 -0
  282. package/dist/worktrees/conflict-handler.js.map +1 -0
  283. package/dist/worktrees/conflict-parser.d.ts +28 -0
  284. package/dist/worktrees/conflict-parser.d.ts.map +1 -0
  285. package/dist/worktrees/conflict-parser.js +140 -0
  286. package/dist/worktrees/conflict-parser.js.map +1 -0
  287. package/dist/worktrees/index.d.ts +20 -0
  288. package/dist/worktrees/index.d.ts.map +1 -0
  289. package/dist/worktrees/index.js +20 -0
  290. package/dist/worktrees/index.js.map +1 -0
  291. package/dist/worktrees/instructions.d.ts +20 -0
  292. package/dist/worktrees/instructions.d.ts.map +1 -0
  293. package/dist/worktrees/instructions.js +84 -0
  294. package/dist/worktrees/instructions.js.map +1 -0
  295. package/dist/worktrees/manager.d.ts +76 -0
  296. package/dist/worktrees/manager.d.ts.map +1 -0
  297. package/dist/worktrees/manager.js +277 -0
  298. package/dist/worktrees/manager.js.map +1 -0
  299. package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
  300. package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
  301. package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
  302. package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
  303. package/dist/worktrees/pool.d.ts +95 -0
  304. package/dist/worktrees/pool.d.ts.map +1 -0
  305. package/dist/worktrees/pool.js +271 -0
  306. package/dist/worktrees/pool.js.map +1 -0
  307. package/dist/worktrees/recovery.d.ts +94 -0
  308. package/dist/worktrees/recovery.d.ts.map +1 -0
  309. package/dist/worktrees/recovery.js +371 -0
  310. package/dist/worktrees/recovery.js.map +1 -0
  311. package/dist/worktrees/resource-manager.d.ts +74 -0
  312. package/dist/worktrees/resource-manager.d.ts.map +1 -0
  313. package/dist/worktrees/resource-manager.js +228 -0
  314. package/dist/worktrees/resource-manager.js.map +1 -0
  315. package/package.json +88 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Schema for persisted Agent Foundry state
3
+ *
4
+ * Defines the structure of state that is saved to disk and survives
5
+ * server restarts. All state is stored in .agent-foundry/state.json.
6
+ */
7
+ /**
8
+ * Persisted state for a task execution.
9
+ */
10
+ export interface PersistedTaskState {
11
+ /** Claude Code task ID */
12
+ taskId: string;
13
+ /** Agent role used for execution */
14
+ role: string;
15
+ /** Current execution status */
16
+ status: 'pending' | 'running' | 'completed' | 'failed';
17
+ /** Associated worktree ID (if using worktree isolation) */
18
+ worktreeId?: string;
19
+ /** Task creation timestamp */
20
+ createdAt: number;
21
+ /** Last update timestamp */
22
+ updatedAt: number;
23
+ /** Error message on failure */
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Persisted state for a git worktree.
28
+ */
29
+ export interface PersistedWorktreeState {
30
+ /** Unique worktree identifier */
31
+ id: string;
32
+ /** Filesystem path to the worktree */
33
+ path: string;
34
+ /** Branch name in the worktree */
35
+ branch: string;
36
+ /** Base branch the worktree was created from */
37
+ baseBranch: string;
38
+ /** Current worktree status */
39
+ status: 'available' | 'assigned' | 'active' | 'completing' | 'conflict' | 'stale';
40
+ /** Associated task ID (if assigned) */
41
+ taskId?: string;
42
+ /** Agent ID using this worktree */
43
+ agentId?: string;
44
+ /** Worktree creation timestamp */
45
+ createdAt: number;
46
+ /** Last activity timestamp */
47
+ lastActivityAt: number;
48
+ }
49
+ /**
50
+ * Persisted state for a merge conflict.
51
+ */
52
+ export interface PersistedConflictState {
53
+ /** Task ID that encountered the conflict */
54
+ taskId: string;
55
+ /** Worktree ID where conflict occurred */
56
+ worktreeId: string;
57
+ /** List of conflicted file paths */
58
+ files: string[];
59
+ /** Whether the conflict has been resolved */
60
+ resolved: boolean;
61
+ /** Resolution strategy used (if resolved) */
62
+ strategy?: string;
63
+ /** Conflict detection timestamp */
64
+ detectedAt: number;
65
+ /** Resolution timestamp (if resolved) */
66
+ resolvedAt?: number;
67
+ }
68
+ /**
69
+ * Persisted state for a multi-step pipeline.
70
+ */
71
+ export interface PersistedPipelineState {
72
+ /** Unique pipeline execution ID */
73
+ pipelineId: string;
74
+ /** Pipeline name */
75
+ name: string;
76
+ /** Current pipeline status */
77
+ status: 'pending' | 'running' | 'completed' | 'failed';
78
+ /** List of completed step names */
79
+ completedSteps: string[];
80
+ /** Mapping from step name to worktree ID */
81
+ stepWorktrees: Record<string, string>;
82
+ /** Pipeline creation timestamp */
83
+ createdAt: number;
84
+ /** Last update timestamp */
85
+ updatedAt: number;
86
+ }
87
+ /**
88
+ * Root persisted state structure.
89
+ * This is the complete state saved to .agent-foundry/state.json.
90
+ */
91
+ export interface PersistedState {
92
+ /** State schema version for migrations */
93
+ version: string;
94
+ /** Timestamp of last save */
95
+ lastSavedAt: number;
96
+ /** SHA-256 checksum (first 16 chars) for corruption detection */
97
+ checksum?: string;
98
+ /** All persisted tasks */
99
+ tasks: PersistedTaskState[];
100
+ /** All persisted worktrees */
101
+ worktrees: PersistedWorktreeState[];
102
+ /** All persisted conflicts */
103
+ conflicts: PersistedConflictState[];
104
+ /** All persisted pipelines */
105
+ pipelines: PersistedPipelineState[];
106
+ }
107
+ /**
108
+ * Current state schema version.
109
+ * Increment when making breaking changes to the schema.
110
+ */
111
+ export declare const CURRENT_STATE_VERSION = "1.0.0";
112
+ /**
113
+ * Create an empty state object with default values.
114
+ */
115
+ export declare function createEmptyState(): PersistedState;
116
+ //# sourceMappingURL=state-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAClF,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,mCAAmC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,8BAA8B;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAMD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAE7C;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CASjD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Schema for persisted Agent Foundry state
3
+ *
4
+ * Defines the structure of state that is saved to disk and survives
5
+ * server restarts. All state is stored in .agent-foundry/state.json.
6
+ */
7
+ // ============================================================================
8
+ // Constants and Utilities
9
+ // ============================================================================
10
+ /**
11
+ * Current state schema version.
12
+ * Increment when making breaking changes to the schema.
13
+ */
14
+ export const CURRENT_STATE_VERSION = '1.0.0';
15
+ /**
16
+ * Create an empty state object with default values.
17
+ */
18
+ export function createEmptyState() {
19
+ return {
20
+ version: CURRENT_STATE_VERSION,
21
+ lastSavedAt: Date.now(),
22
+ tasks: [],
23
+ worktrees: [],
24
+ conflicts: [],
25
+ pipelines: [],
26
+ };
27
+ }
28
+ //# sourceMappingURL=state-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-schema.js","sourceRoot":"","sources":["../../src/persistence/state-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+HH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * State Store - Atomic JSON file persistence
3
+ *
4
+ * Features:
5
+ * - Atomic writes (write to temp file, then rename)
6
+ * - Checksum validation for corruption detection
7
+ * - Debounced saves to avoid excessive I/O
8
+ * - Graceful degradation on errors
9
+ * - Backup file for recovery from corruption
10
+ */
11
+ import { PersistedState } from './state-schema.js';
12
+ /**
13
+ * Configuration options for the StateStore.
14
+ */
15
+ export interface StateStoreConfig {
16
+ /** Directory for state files (default: .agent-foundry/) */
17
+ stateDir: string;
18
+ /** State file name (default: state.json) */
19
+ filename: string;
20
+ /** Debounce interval in milliseconds (default: 1000) */
21
+ debounceMs: number;
22
+ /** Enable checksum validation (default: true) */
23
+ enableChecksum: boolean;
24
+ }
25
+ /**
26
+ * Manages persisted state with atomic writes and corruption detection.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const store = new StateStore({ stateDir: '.agent-foundry' });
31
+ * await store.initialize('/path/to/repo');
32
+ *
33
+ * store.updateState((state) => {
34
+ * state.tasks.push({ taskId: '123', ... });
35
+ * });
36
+ *
37
+ * await store.shutdown('/path/to/repo');
38
+ * ```
39
+ */
40
+ export declare class StateStore {
41
+ private config;
42
+ private state;
43
+ private saveTimer;
44
+ private dirty;
45
+ private saving;
46
+ private repoPath;
47
+ constructor(config?: Partial<StateStoreConfig>);
48
+ /**
49
+ * Get the relative path to the state file.
50
+ */
51
+ get statePath(): string;
52
+ /**
53
+ * Get the relative path to the temp file (used during atomic writes).
54
+ */
55
+ get tempPath(): string;
56
+ /**
57
+ * Get the relative path to the backup file.
58
+ */
59
+ get backupPath(): string;
60
+ /**
61
+ * Initialize the state store - load existing state or create new.
62
+ *
63
+ * @param repoPath - Absolute path to the repository root
64
+ */
65
+ initialize(repoPath: string): Promise<void>;
66
+ /**
67
+ * Load state from backup file.
68
+ */
69
+ private loadBackup;
70
+ /**
71
+ * Migrate state from an older version to current.
72
+ */
73
+ private migrateState;
74
+ /**
75
+ * Compute a checksum for state data.
76
+ */
77
+ private computeChecksum;
78
+ /**
79
+ * Get current state (read-only copy).
80
+ */
81
+ getState(): Readonly<PersistedState>;
82
+ /**
83
+ * Update state and schedule save.
84
+ *
85
+ * @param updater - Function that modifies the state in-place
86
+ */
87
+ updateState(updater: (state: PersistedState) => void): void;
88
+ /**
89
+ * Schedule a debounced save.
90
+ */
91
+ private scheduleSave;
92
+ /**
93
+ * Force immediate save (bypasses debounce).
94
+ *
95
+ * @param repoPath - Optional repo path (uses cached path if not provided)
96
+ */
97
+ saveNow(repoPath?: string): Promise<void>;
98
+ /**
99
+ * Perform atomic save.
100
+ *
101
+ * @param repoPath - Optional repo path (uses cached path if not provided)
102
+ */
103
+ private save;
104
+ /**
105
+ * Shutdown - ensure final save.
106
+ *
107
+ * @param repoPath - Path to the repository root
108
+ */
109
+ shutdown(repoPath: string): Promise<void>;
110
+ }
111
+ //# sourceMappingURL=state-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../src/persistence/state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EACL,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAM3B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,cAAc,EAAE,OAAO,CAAC;CACzB;AAQD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAc;gBAElB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAelD;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAMD;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmEjD;;OAEG;YACW,UAAU;IAUxB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC;IAIpC;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAW3D;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;;OAIG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C;;;;OAIG;YACW,IAAI;IAgDlB;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUhD"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * State Store - Atomic JSON file persistence
3
+ *
4
+ * Features:
5
+ * - Atomic writes (write to temp file, then rename)
6
+ * - Checksum validation for corruption detection
7
+ * - Debounced saves to avoid excessive I/O
8
+ * - Graceful degradation on errors
9
+ * - Backup file for recovery from corruption
10
+ */
11
+ import { createHash } from 'crypto';
12
+ import { promises as fs } from 'fs';
13
+ import path from 'path';
14
+ import { createLogger } from '../observability/logger.js';
15
+ import { CURRENT_STATE_VERSION, createEmptyState, } from './state-schema.js';
16
+ // ============================================================================
17
+ // StateStore Class
18
+ // ============================================================================
19
+ const logger = createLogger({ name: 'state-store' });
20
+ /**
21
+ * Manages persisted state with atomic writes and corruption detection.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const store = new StateStore({ stateDir: '.agent-foundry' });
26
+ * await store.initialize('/path/to/repo');
27
+ *
28
+ * store.updateState((state) => {
29
+ * state.tasks.push({ taskId: '123', ... });
30
+ * });
31
+ *
32
+ * await store.shutdown('/path/to/repo');
33
+ * ```
34
+ */
35
+ export class StateStore {
36
+ config;
37
+ state;
38
+ saveTimer = null;
39
+ dirty = false;
40
+ saving = false;
41
+ repoPath = '';
42
+ constructor(config = {}) {
43
+ this.config = {
44
+ stateDir: '.agent-foundry',
45
+ filename: 'state.json',
46
+ debounceMs: 1000,
47
+ enableChecksum: true,
48
+ ...config,
49
+ };
50
+ this.state = createEmptyState();
51
+ }
52
+ // ==========================================================================
53
+ // Path Helpers
54
+ // ==========================================================================
55
+ /**
56
+ * Get the relative path to the state file.
57
+ */
58
+ get statePath() {
59
+ return path.join(this.config.stateDir, this.config.filename);
60
+ }
61
+ /**
62
+ * Get the relative path to the temp file (used during atomic writes).
63
+ */
64
+ get tempPath() {
65
+ return path.join(this.config.stateDir, `${this.config.filename}.tmp`);
66
+ }
67
+ /**
68
+ * Get the relative path to the backup file.
69
+ */
70
+ get backupPath() {
71
+ return path.join(this.config.stateDir, `${this.config.filename}.backup`);
72
+ }
73
+ // ==========================================================================
74
+ // Initialization
75
+ // ==========================================================================
76
+ /**
77
+ * Initialize the state store - load existing state or create new.
78
+ *
79
+ * @param repoPath - Absolute path to the repository root
80
+ */
81
+ async initialize(repoPath) {
82
+ this.repoPath = repoPath;
83
+ const fullStateDir = path.join(repoPath, this.config.stateDir);
84
+ const fullStatePath = path.join(repoPath, this.statePath);
85
+ // Ensure state directory exists
86
+ await fs.mkdir(fullStateDir, { recursive: true });
87
+ try {
88
+ const content = await fs.readFile(fullStatePath, 'utf-8');
89
+ const loaded = JSON.parse(content);
90
+ // Validate checksum if enabled
91
+ if (this.config.enableChecksum && loaded.checksum) {
92
+ const dataForChecksum = { ...loaded, checksum: undefined };
93
+ const expectedChecksum = this.computeChecksum(dataForChecksum);
94
+ if (loaded.checksum !== expectedChecksum) {
95
+ logger.warn('State checksum mismatch, state may be corrupted', {
96
+ expected: expectedChecksum,
97
+ actual: loaded.checksum,
98
+ });
99
+ // Try backup
100
+ const backupState = await this.loadBackup(repoPath);
101
+ if (backupState) {
102
+ this.state = backupState;
103
+ logger.info('Recovered state from backup');
104
+ return;
105
+ }
106
+ }
107
+ }
108
+ // Version migration if needed
109
+ if (loaded.version !== CURRENT_STATE_VERSION) {
110
+ this.state = this.migrateState(loaded);
111
+ logger.info('Migrated state version', {
112
+ from: loaded.version,
113
+ to: CURRENT_STATE_VERSION,
114
+ });
115
+ }
116
+ else {
117
+ this.state = loaded;
118
+ }
119
+ logger.info('State loaded', {
120
+ tasks: this.state.tasks.length,
121
+ worktrees: this.state.worktrees.length,
122
+ pipelines: this.state.pipelines.length,
123
+ });
124
+ }
125
+ catch (error) {
126
+ if (error.code === 'ENOENT') {
127
+ logger.info('No existing state file, starting fresh');
128
+ this.state = createEmptyState();
129
+ }
130
+ else {
131
+ logger.error('Failed to load state, trying backup', {
132
+ error: error instanceof Error ? error : undefined,
133
+ });
134
+ const backupState = await this.loadBackup(repoPath);
135
+ if (backupState) {
136
+ this.state = backupState;
137
+ logger.info('Recovered state from backup');
138
+ }
139
+ else {
140
+ logger.warn('No backup available, starting fresh');
141
+ this.state = createEmptyState();
142
+ }
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Load state from backup file.
148
+ */
149
+ async loadBackup(repoPath) {
150
+ try {
151
+ const fullBackupPath = path.join(repoPath, this.backupPath);
152
+ const content = await fs.readFile(fullBackupPath, 'utf-8');
153
+ return JSON.parse(content);
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ }
159
+ /**
160
+ * Migrate state from an older version to current.
161
+ */
162
+ migrateState(oldState) {
163
+ // Future: handle version migrations here
164
+ // For now, just update the version
165
+ return {
166
+ ...oldState,
167
+ version: CURRENT_STATE_VERSION,
168
+ };
169
+ }
170
+ /**
171
+ * Compute a checksum for state data.
172
+ */
173
+ computeChecksum(data) {
174
+ // Sort keys for consistent hashing
175
+ const json = JSON.stringify(data, Object.keys(data).sort());
176
+ return createHash('sha256').update(json).digest('hex').slice(0, 16);
177
+ }
178
+ // ==========================================================================
179
+ // State Access
180
+ // ==========================================================================
181
+ /**
182
+ * Get current state (read-only copy).
183
+ */
184
+ getState() {
185
+ return this.state;
186
+ }
187
+ /**
188
+ * Update state and schedule save.
189
+ *
190
+ * @param updater - Function that modifies the state in-place
191
+ */
192
+ updateState(updater) {
193
+ updater(this.state);
194
+ this.state.lastSavedAt = Date.now();
195
+ this.dirty = true;
196
+ this.scheduleSave();
197
+ }
198
+ // ==========================================================================
199
+ // Save Management
200
+ // ==========================================================================
201
+ /**
202
+ * Schedule a debounced save.
203
+ */
204
+ scheduleSave() {
205
+ if (this.saveTimer) {
206
+ return; // Already scheduled
207
+ }
208
+ this.saveTimer = setTimeout(() => {
209
+ this.saveTimer = null;
210
+ this.save().catch((error) => {
211
+ logger.error('Failed to save state', {
212
+ error: error instanceof Error ? error : undefined,
213
+ });
214
+ });
215
+ }, this.config.debounceMs);
216
+ }
217
+ /**
218
+ * Force immediate save (bypasses debounce).
219
+ *
220
+ * @param repoPath - Optional repo path (uses cached path if not provided)
221
+ */
222
+ async saveNow(repoPath) {
223
+ if (this.saveTimer) {
224
+ clearTimeout(this.saveTimer);
225
+ this.saveTimer = null;
226
+ }
227
+ await this.save(repoPath);
228
+ }
229
+ /**
230
+ * Perform atomic save.
231
+ *
232
+ * @param repoPath - Optional repo path (uses cached path if not provided)
233
+ */
234
+ async save(repoPath) {
235
+ if (!this.dirty || this.saving) {
236
+ return;
237
+ }
238
+ this.saving = true;
239
+ try {
240
+ const basePath = repoPath || this.repoPath || process.cwd();
241
+ const fullStatePath = path.join(basePath, this.statePath);
242
+ const fullTempPath = path.join(basePath, this.tempPath);
243
+ const fullBackupPath = path.join(basePath, this.backupPath);
244
+ // Prepare state with checksum
245
+ const stateToSave = { ...this.state };
246
+ if (this.config.enableChecksum) {
247
+ const dataForChecksum = { ...stateToSave, checksum: undefined };
248
+ stateToSave.checksum = this.computeChecksum(dataForChecksum);
249
+ }
250
+ const content = JSON.stringify(stateToSave, null, 2);
251
+ // Write to temp file first
252
+ await fs.writeFile(fullTempPath, content, 'utf-8');
253
+ // Backup existing state
254
+ try {
255
+ await fs.copyFile(fullStatePath, fullBackupPath);
256
+ }
257
+ catch {
258
+ // No existing state to backup, that's fine
259
+ }
260
+ // Atomic rename
261
+ await fs.rename(fullTempPath, fullStatePath);
262
+ this.dirty = false;
263
+ logger.debug('State saved', {
264
+ tasks: this.state.tasks.length,
265
+ worktrees: this.state.worktrees.length,
266
+ });
267
+ }
268
+ finally {
269
+ this.saving = false;
270
+ }
271
+ }
272
+ // ==========================================================================
273
+ // Shutdown
274
+ // ==========================================================================
275
+ /**
276
+ * Shutdown - ensure final save.
277
+ *
278
+ * @param repoPath - Path to the repository root
279
+ */
280
+ async shutdown(repoPath) {
281
+ if (this.saveTimer) {
282
+ clearTimeout(this.saveTimer);
283
+ this.saveTimer = null;
284
+ }
285
+ if (this.dirty) {
286
+ await this.save(repoPath);
287
+ }
288
+ logger.info('State store shutdown complete');
289
+ }
290
+ }
291
+ //# sourceMappingURL=state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../src/persistence/state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAEL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAoB3B,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,UAAU;IACb,MAAM,CAAmB;IACzB,KAAK,CAAiB;IACtB,SAAS,GAA0B,IAAI,CAAC;IACxC,KAAK,GAAY,KAAK,CAAC;IACvB,MAAM,GAAY,KAAK,CAAC;IACxB,QAAQ,GAAW,EAAE,CAAC;IAE9B,YAAY,SAAoC,EAAE;QAChD,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI;YACpB,GAAG,MAAM;SACV,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED,6EAA6E;IAC7E,eAAe;IACf,6EAA6E;IAE7E;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED,6EAA6E;IAC7E,iBAAiB;IACjB,6EAA6E;IAE7E;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1D,gCAAgC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;YAErD,+BAA+B;YAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;gBAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;wBAC7D,QAAQ,EAAE,gBAAgB;wBAC1B,MAAM,EAAE,MAAM,CAAC,QAAQ;qBACxB,CAAC,CAAC;oBACH,aAAa;oBACb,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACpD,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;wBAC3C,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,MAAM,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;gBAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpC,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,EAAE,EAAE,qBAAqB;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACtB,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;gBACtC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAK,GAAG,gBAAgB,EAAE,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;oBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBAClD,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;oBACnD,IAAI,CAAC,KAAK,GAAG,gBAAgB,EAAE,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,QAAgB;QACvC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAAwB;QAC3C,yCAAyC;QACzC,mCAAmC;QACnC,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE,qBAAqB;SAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAY;QAClC,mCAAmC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,6EAA6E;IAC7E,eAAe;IACf,6EAA6E;IAE7E;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,OAAwC;QAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAE7E;;OAEG;IACK,YAAY;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,oBAAoB;QAC9B,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;oBACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBAClD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,QAAiB;QAC7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,IAAI,CAAC,QAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE5D,8BAA8B;YAC9B,MAAM,WAAW,GAAmB,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC/B,MAAM,eAAe,GAAG,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;gBAChE,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAErD,2BAA2B;YAC3B,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEnD,wBAAwB;YACxB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;YAED,gBAAgB;YAChB,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAE7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;aACvC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,WAAW;IACX,6EAA6E;IAE7E;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;CACF"}