@cluesmith/codev 1.1.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 (245) hide show
  1. package/bin/af.js +8 -0
  2. package/bin/codev.js +4 -0
  3. package/bin/consult.js +7 -0
  4. package/dist/agent-farm/cli.d.ts +11 -0
  5. package/dist/agent-farm/cli.d.ts.map +1 -0
  6. package/dist/agent-farm/cli.js +359 -0
  7. package/dist/agent-farm/cli.js.map +1 -0
  8. package/dist/agent-farm/commands/cleanup.d.ts +12 -0
  9. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -0
  10. package/dist/agent-farm/commands/cleanup.js +154 -0
  11. package/dist/agent-farm/commands/cleanup.js.map +1 -0
  12. package/dist/agent-farm/commands/db.d.ts +38 -0
  13. package/dist/agent-farm/commands/db.d.ts.map +1 -0
  14. package/dist/agent-farm/commands/db.js +133 -0
  15. package/dist/agent-farm/commands/db.js.map +1 -0
  16. package/dist/agent-farm/commands/index.d.ts +11 -0
  17. package/dist/agent-farm/commands/index.d.ts.map +1 -0
  18. package/dist/agent-farm/commands/index.js +11 -0
  19. package/dist/agent-farm/commands/index.js.map +1 -0
  20. package/dist/agent-farm/commands/open.d.ts +15 -0
  21. package/dist/agent-farm/commands/open.d.ts.map +1 -0
  22. package/dist/agent-farm/commands/open.js +118 -0
  23. package/dist/agent-farm/commands/open.js.map +1 -0
  24. package/dist/agent-farm/commands/rename.d.ts +13 -0
  25. package/dist/agent-farm/commands/rename.d.ts.map +1 -0
  26. package/dist/agent-farm/commands/rename.js +33 -0
  27. package/dist/agent-farm/commands/rename.js.map +1 -0
  28. package/dist/agent-farm/commands/send.d.ts +9 -0
  29. package/dist/agent-farm/commands/send.d.ts.map +1 -0
  30. package/dist/agent-farm/commands/send.js +282 -0
  31. package/dist/agent-farm/commands/send.js.map +1 -0
  32. package/dist/agent-farm/commands/spawn.d.ts +15 -0
  33. package/dist/agent-farm/commands/spawn.d.ts.map +1 -0
  34. package/dist/agent-farm/commands/spawn.js +575 -0
  35. package/dist/agent-farm/commands/spawn.js.map +1 -0
  36. package/dist/agent-farm/commands/start.d.ts +9 -0
  37. package/dist/agent-farm/commands/start.d.ts.map +1 -0
  38. package/dist/agent-farm/commands/start.js +175 -0
  39. package/dist/agent-farm/commands/start.js.map +1 -0
  40. package/dist/agent-farm/commands/status.d.ts +8 -0
  41. package/dist/agent-farm/commands/status.d.ts.map +1 -0
  42. package/dist/agent-farm/commands/status.js +123 -0
  43. package/dist/agent-farm/commands/status.js.map +1 -0
  44. package/dist/agent-farm/commands/stop.d.ts +8 -0
  45. package/dist/agent-farm/commands/stop.d.ts.map +1 -0
  46. package/dist/agent-farm/commands/stop.js +76 -0
  47. package/dist/agent-farm/commands/stop.js.map +1 -0
  48. package/dist/agent-farm/commands/tower.d.ts +19 -0
  49. package/dist/agent-farm/commands/tower.d.ts.map +1 -0
  50. package/dist/agent-farm/commands/tower.js +125 -0
  51. package/dist/agent-farm/commands/tower.js.map +1 -0
  52. package/dist/agent-farm/commands/tutorial.d.ts +10 -0
  53. package/dist/agent-farm/commands/tutorial.d.ts.map +1 -0
  54. package/dist/agent-farm/commands/tutorial.js +49 -0
  55. package/dist/agent-farm/commands/tutorial.js.map +1 -0
  56. package/dist/agent-farm/commands/util.d.ts +15 -0
  57. package/dist/agent-farm/commands/util.d.ts.map +1 -0
  58. package/dist/agent-farm/commands/util.js +108 -0
  59. package/dist/agent-farm/commands/util.js.map +1 -0
  60. package/dist/agent-farm/db/errors.d.ts +17 -0
  61. package/dist/agent-farm/db/errors.d.ts.map +1 -0
  62. package/dist/agent-farm/db/errors.js +46 -0
  63. package/dist/agent-farm/db/errors.js.map +1 -0
  64. package/dist/agent-farm/db/index.d.ts +41 -0
  65. package/dist/agent-farm/db/index.d.ts.map +1 -0
  66. package/dist/agent-farm/db/index.js +168 -0
  67. package/dist/agent-farm/db/index.js.map +1 -0
  68. package/dist/agent-farm/db/migrate.d.ts +15 -0
  69. package/dist/agent-farm/db/migrate.d.ts.map +1 -0
  70. package/dist/agent-farm/db/migrate.js +137 -0
  71. package/dist/agent-farm/db/migrate.js.map +1 -0
  72. package/dist/agent-farm/db/schema.d.ts +16 -0
  73. package/dist/agent-farm/db/schema.d.ts.map +1 -0
  74. package/dist/agent-farm/db/schema.js +103 -0
  75. package/dist/agent-farm/db/schema.js.map +1 -0
  76. package/dist/agent-farm/db/types.d.ts +87 -0
  77. package/dist/agent-farm/db/types.d.ts.map +1 -0
  78. package/dist/agent-farm/db/types.js +65 -0
  79. package/dist/agent-farm/db/types.js.map +1 -0
  80. package/dist/agent-farm/index.d.ts +7 -0
  81. package/dist/agent-farm/index.d.ts.map +1 -0
  82. package/dist/agent-farm/index.js +373 -0
  83. package/dist/agent-farm/index.js.map +1 -0
  84. package/dist/agent-farm/servers/annotate-server.d.ts +9 -0
  85. package/dist/agent-farm/servers/annotate-server.d.ts.map +1 -0
  86. package/dist/agent-farm/servers/annotate-server.js +136 -0
  87. package/dist/agent-farm/servers/annotate-server.js.map +1 -0
  88. package/dist/agent-farm/servers/dashboard-server.d.ts +9 -0
  89. package/dist/agent-farm/servers/dashboard-server.d.ts.map +1 -0
  90. package/dist/agent-farm/servers/dashboard-server.js +939 -0
  91. package/dist/agent-farm/servers/dashboard-server.js.map +1 -0
  92. package/dist/agent-farm/servers/tower-server.d.ts +9 -0
  93. package/dist/agent-farm/servers/tower-server.d.ts.map +1 -0
  94. package/dist/agent-farm/servers/tower-server.js +463 -0
  95. package/dist/agent-farm/servers/tower-server.js.map +1 -0
  96. package/dist/agent-farm/state.d.ts +93 -0
  97. package/dist/agent-farm/state.d.ts.map +1 -0
  98. package/dist/agent-farm/state.js +253 -0
  99. package/dist/agent-farm/state.js.map +1 -0
  100. package/dist/agent-farm/tutorial/index.d.ts +8 -0
  101. package/dist/agent-farm/tutorial/index.d.ts.map +1 -0
  102. package/dist/agent-farm/tutorial/index.js +8 -0
  103. package/dist/agent-farm/tutorial/index.js.map +1 -0
  104. package/dist/agent-farm/tutorial/prompts.d.ts +57 -0
  105. package/dist/agent-farm/tutorial/prompts.d.ts.map +1 -0
  106. package/dist/agent-farm/tutorial/prompts.js +147 -0
  107. package/dist/agent-farm/tutorial/prompts.js.map +1 -0
  108. package/dist/agent-farm/tutorial/runner.d.ts +52 -0
  109. package/dist/agent-farm/tutorial/runner.d.ts.map +1 -0
  110. package/dist/agent-farm/tutorial/runner.js +204 -0
  111. package/dist/agent-farm/tutorial/runner.js.map +1 -0
  112. package/dist/agent-farm/tutorial/state.d.ts +26 -0
  113. package/dist/agent-farm/tutorial/state.d.ts.map +1 -0
  114. package/dist/agent-farm/tutorial/state.js +89 -0
  115. package/dist/agent-farm/tutorial/state.js.map +1 -0
  116. package/dist/agent-farm/tutorial/steps/first-spec.d.ts +7 -0
  117. package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +1 -0
  118. package/dist/agent-farm/tutorial/steps/first-spec.js +136 -0
  119. package/dist/agent-farm/tutorial/steps/first-spec.js.map +1 -0
  120. package/dist/agent-farm/tutorial/steps/implementation.d.ts +7 -0
  121. package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +1 -0
  122. package/dist/agent-farm/tutorial/steps/implementation.js +76 -0
  123. package/dist/agent-farm/tutorial/steps/implementation.js.map +1 -0
  124. package/dist/agent-farm/tutorial/steps/index.d.ts +10 -0
  125. package/dist/agent-farm/tutorial/steps/index.d.ts.map +1 -0
  126. package/dist/agent-farm/tutorial/steps/index.js +10 -0
  127. package/dist/agent-farm/tutorial/steps/index.js.map +1 -0
  128. package/dist/agent-farm/tutorial/steps/planning.d.ts +7 -0
  129. package/dist/agent-farm/tutorial/steps/planning.d.ts.map +1 -0
  130. package/dist/agent-farm/tutorial/steps/planning.js +143 -0
  131. package/dist/agent-farm/tutorial/steps/planning.js.map +1 -0
  132. package/dist/agent-farm/tutorial/steps/review.d.ts +7 -0
  133. package/dist/agent-farm/tutorial/steps/review.d.ts.map +1 -0
  134. package/dist/agent-farm/tutorial/steps/review.js +78 -0
  135. package/dist/agent-farm/tutorial/steps/review.js.map +1 -0
  136. package/dist/agent-farm/tutorial/steps/setup.d.ts +7 -0
  137. package/dist/agent-farm/tutorial/steps/setup.d.ts.map +1 -0
  138. package/dist/agent-farm/tutorial/steps/setup.js +126 -0
  139. package/dist/agent-farm/tutorial/steps/setup.js.map +1 -0
  140. package/dist/agent-farm/tutorial/steps/welcome.d.ts +7 -0
  141. package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +1 -0
  142. package/dist/agent-farm/tutorial/steps/welcome.js +50 -0
  143. package/dist/agent-farm/tutorial/steps/welcome.js.map +1 -0
  144. package/dist/agent-farm/types.d.ts +131 -0
  145. package/dist/agent-farm/types.d.ts.map +1 -0
  146. package/dist/agent-farm/types.js +5 -0
  147. package/dist/agent-farm/types.js.map +1 -0
  148. package/dist/agent-farm/utils/config.d.ts +27 -0
  149. package/dist/agent-farm/utils/config.d.ts.map +1 -0
  150. package/dist/agent-farm/utils/config.js +242 -0
  151. package/dist/agent-farm/utils/config.js.map +1 -0
  152. package/dist/agent-farm/utils/deps.d.ts +51 -0
  153. package/dist/agent-farm/utils/deps.d.ts.map +1 -0
  154. package/dist/agent-farm/utils/deps.js +194 -0
  155. package/dist/agent-farm/utils/deps.js.map +1 -0
  156. package/dist/agent-farm/utils/index.d.ts +6 -0
  157. package/dist/agent-farm/utils/index.d.ts.map +1 -0
  158. package/dist/agent-farm/utils/index.js +6 -0
  159. package/dist/agent-farm/utils/index.js.map +1 -0
  160. package/dist/agent-farm/utils/logger.d.ts +31 -0
  161. package/dist/agent-farm/utils/logger.d.ts.map +1 -0
  162. package/dist/agent-farm/utils/logger.js +58 -0
  163. package/dist/agent-farm/utils/logger.js.map +1 -0
  164. package/dist/agent-farm/utils/orphan-handler.d.ts +27 -0
  165. package/dist/agent-farm/utils/orphan-handler.d.ts.map +1 -0
  166. package/dist/agent-farm/utils/orphan-handler.js +127 -0
  167. package/dist/agent-farm/utils/orphan-handler.js.map +1 -0
  168. package/dist/agent-farm/utils/port-registry.d.ts +58 -0
  169. package/dist/agent-farm/utils/port-registry.d.ts.map +1 -0
  170. package/dist/agent-farm/utils/port-registry.js +149 -0
  171. package/dist/agent-farm/utils/port-registry.js.map +1 -0
  172. package/dist/agent-farm/utils/shell.d.ts +45 -0
  173. package/dist/agent-farm/utils/shell.d.ts.map +1 -0
  174. package/dist/agent-farm/utils/shell.js +120 -0
  175. package/dist/agent-farm/utils/shell.js.map +1 -0
  176. package/dist/cli.d.ts +10 -0
  177. package/dist/cli.d.ts.map +1 -0
  178. package/dist/cli.js +160 -0
  179. package/dist/cli.js.map +1 -0
  180. package/dist/commands/adopt.d.ts +12 -0
  181. package/dist/commands/adopt.d.ts.map +1 -0
  182. package/dist/commands/adopt.js +178 -0
  183. package/dist/commands/adopt.js.map +1 -0
  184. package/dist/commands/consult/index.d.ts +17 -0
  185. package/dist/commands/consult/index.d.ts.map +1 -0
  186. package/dist/commands/consult/index.js +405 -0
  187. package/dist/commands/consult/index.js.map +1 -0
  188. package/dist/commands/doctor.d.ts +10 -0
  189. package/dist/commands/doctor.d.ts.map +1 -0
  190. package/dist/commands/doctor.js +346 -0
  191. package/dist/commands/doctor.js.map +1 -0
  192. package/dist/commands/init.d.ts +12 -0
  193. package/dist/commands/init.d.ts.map +1 -0
  194. package/dist/commands/init.js +167 -0
  195. package/dist/commands/init.js.map +1 -0
  196. package/dist/commands/tower.d.ts +16 -0
  197. package/dist/commands/tower.d.ts.map +1 -0
  198. package/dist/commands/tower.js +21 -0
  199. package/dist/commands/tower.js.map +1 -0
  200. package/dist/commands/update.d.ts +13 -0
  201. package/dist/commands/update.d.ts.map +1 -0
  202. package/dist/commands/update.js +137 -0
  203. package/dist/commands/update.js.map +1 -0
  204. package/dist/lib/templates.d.ts +57 -0
  205. package/dist/lib/templates.d.ts.map +1 -0
  206. package/dist/lib/templates.js +205 -0
  207. package/dist/lib/templates.js.map +1 -0
  208. package/package.json +55 -0
  209. package/templates/AGENTS.md +49 -0
  210. package/templates/CLAUDE.md +47 -0
  211. package/templates/DEPENDENCIES.md +344 -0
  212. package/templates/agents/architecture-documenter.md +189 -0
  213. package/templates/agents/codev-updater.md +276 -0
  214. package/templates/agents/spider-protocol-updater.md +118 -0
  215. package/templates/annotate.html +903 -0
  216. package/templates/bin/agent-farm +18 -0
  217. package/templates/bin/annotate-server.js +140 -0
  218. package/templates/bin/codev-doctor +335 -0
  219. package/templates/builders.md +30 -0
  220. package/templates/config.json +7 -0
  221. package/templates/dashboard-split.html +1679 -0
  222. package/templates/dashboard.html +149 -0
  223. package/templates/plans/.gitkeep +0 -0
  224. package/templates/protocols/experiment/protocol.md +229 -0
  225. package/templates/protocols/experiment/templates/notes.md +97 -0
  226. package/templates/protocols/maintain/protocol.md +235 -0
  227. package/templates/protocols/spider/protocol.md +639 -0
  228. package/templates/protocols/spider/templates/plan.md +169 -0
  229. package/templates/protocols/spider/templates/review.md +207 -0
  230. package/templates/protocols/spider/templates/spec.md +140 -0
  231. package/templates/protocols/spider-solo/protocol.md +619 -0
  232. package/templates/protocols/spider-solo/templates/plan.md +169 -0
  233. package/templates/protocols/spider-solo/templates/review.md +207 -0
  234. package/templates/protocols/spider-solo/templates/spec.md +140 -0
  235. package/templates/protocols/tick/protocol.md +250 -0
  236. package/templates/protocols/tick/templates/plan.md +67 -0
  237. package/templates/protocols/tick/templates/review.md +90 -0
  238. package/templates/protocols/tick/templates/spec.md +61 -0
  239. package/templates/reviews/.gitkeep +0 -0
  240. package/templates/roles/architect.md +230 -0
  241. package/templates/roles/builder.md +175 -0
  242. package/templates/roles/consultant.md +27 -0
  243. package/templates/specs/.gitkeep +0 -0
  244. package/templates/templates/projectlist.md +129 -0
  245. package/templates/tower.html +1032 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * SQLite Schema Definitions
3
+ *
4
+ * Defines the schema for both local state (state.db) and global registry (global.db)
5
+ */
6
+ /**
7
+ * Local state schema (state.db)
8
+ * Stores dashboard state: architect, builders, utils, annotations
9
+ */
10
+ export const LOCAL_SCHEMA = `
11
+ -- Schema versioning
12
+ CREATE TABLE IF NOT EXISTS _migrations (
13
+ version INTEGER PRIMARY KEY,
14
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
15
+ );
16
+
17
+ -- Architect session (singleton)
18
+ CREATE TABLE IF NOT EXISTS architect (
19
+ id INTEGER PRIMARY KEY CHECK (id = 1),
20
+ pid INTEGER NOT NULL,
21
+ port INTEGER NOT NULL,
22
+ cmd TEXT NOT NULL,
23
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
24
+ tmux_session TEXT
25
+ );
26
+
27
+ -- Builder sessions
28
+ CREATE TABLE IF NOT EXISTS builders (
29
+ id TEXT PRIMARY KEY,
30
+ name TEXT NOT NULL,
31
+ port INTEGER NOT NULL UNIQUE,
32
+ pid INTEGER NOT NULL,
33
+ status TEXT NOT NULL DEFAULT 'spawning'
34
+ CHECK(status IN ('spawning', 'implementing', 'blocked', 'pr-ready', 'complete')),
35
+ phase TEXT NOT NULL DEFAULT '',
36
+ worktree TEXT NOT NULL,
37
+ branch TEXT NOT NULL,
38
+ tmux_session TEXT,
39
+ type TEXT NOT NULL DEFAULT 'spec'
40
+ CHECK(type IN ('spec', 'task', 'protocol', 'shell', 'worktree')),
41
+ task_text TEXT,
42
+ protocol_name TEXT,
43
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
44
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
45
+ );
46
+
47
+ -- Indexes for common queries
48
+ CREATE INDEX IF NOT EXISTS idx_builders_status ON builders(status);
49
+ CREATE INDEX IF NOT EXISTS idx_builders_port ON builders(port);
50
+
51
+ -- Utility terminals
52
+ CREATE TABLE IF NOT EXISTS utils (
53
+ id TEXT PRIMARY KEY,
54
+ name TEXT NOT NULL,
55
+ port INTEGER NOT NULL UNIQUE,
56
+ pid INTEGER NOT NULL,
57
+ tmux_session TEXT,
58
+ started_at TEXT NOT NULL DEFAULT (datetime('now'))
59
+ );
60
+
61
+ -- Annotations (file viewers)
62
+ CREATE TABLE IF NOT EXISTS annotations (
63
+ id TEXT PRIMARY KEY,
64
+ file TEXT NOT NULL,
65
+ port INTEGER NOT NULL UNIQUE,
66
+ pid INTEGER NOT NULL,
67
+ parent_type TEXT NOT NULL CHECK(parent_type IN ('architect', 'builder', 'util')),
68
+ parent_id TEXT,
69
+ started_at TEXT NOT NULL DEFAULT (datetime('now'))
70
+ );
71
+
72
+ -- Trigger to update updated_at on builders
73
+ CREATE TRIGGER IF NOT EXISTS builders_updated_at
74
+ AFTER UPDATE ON builders
75
+ FOR EACH ROW
76
+ BEGIN
77
+ UPDATE builders SET updated_at = datetime('now') WHERE id = NEW.id;
78
+ END;
79
+ `;
80
+ /**
81
+ * Global registry schema (global.db)
82
+ * Stores port allocations across all projects
83
+ */
84
+ export const GLOBAL_SCHEMA = `
85
+ -- Schema versioning
86
+ CREATE TABLE IF NOT EXISTS _migrations (
87
+ version INTEGER PRIMARY KEY,
88
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
89
+ );
90
+
91
+ -- Port allocations
92
+ CREATE TABLE IF NOT EXISTS port_allocations (
93
+ project_path TEXT PRIMARY KEY,
94
+ base_port INTEGER NOT NULL UNIQUE
95
+ CHECK(base_port >= 4200 AND base_port % 100 = 0),
96
+ pid INTEGER,
97
+ registered_at TEXT NOT NULL DEFAULT (datetime('now')),
98
+ last_used_at TEXT NOT NULL DEFAULT (datetime('now'))
99
+ );
100
+
101
+ CREATE INDEX IF NOT EXISTS idx_port_allocations_base_port ON port_allocations(base_port);
102
+ `;
103
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/agent-farm/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE3B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;CAkB5B,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Database Type Definitions
3
+ *
4
+ * TypeScript interfaces matching the SQLite schema.
5
+ * These types represent the database row format.
6
+ */
7
+ import type { Builder, ArchitectState, UtilTerminal, Annotation } from '../types.js';
8
+ /**
9
+ * Database row type for architect table
10
+ */
11
+ export interface DbArchitect {
12
+ id: number;
13
+ pid: number;
14
+ port: number;
15
+ cmd: string;
16
+ started_at: string;
17
+ tmux_session: string | null;
18
+ }
19
+ /**
20
+ * Database row type for builders table
21
+ */
22
+ export interface DbBuilder {
23
+ id: string;
24
+ name: string;
25
+ port: number;
26
+ pid: number;
27
+ status: string;
28
+ phase: string;
29
+ worktree: string;
30
+ branch: string;
31
+ tmux_session: string | null;
32
+ type: string;
33
+ task_text: string | null;
34
+ protocol_name: string | null;
35
+ started_at: string;
36
+ updated_at: string;
37
+ }
38
+ /**
39
+ * Database row type for utils table
40
+ */
41
+ export interface DbUtil {
42
+ id: string;
43
+ name: string;
44
+ port: number;
45
+ pid: number;
46
+ tmux_session: string | null;
47
+ started_at: string;
48
+ }
49
+ /**
50
+ * Database row type for annotations table
51
+ */
52
+ export interface DbAnnotation {
53
+ id: string;
54
+ file: string;
55
+ port: number;
56
+ pid: number;
57
+ parent_type: string;
58
+ parent_id: string | null;
59
+ started_at: string;
60
+ }
61
+ /**
62
+ * Database row type for port_allocations table
63
+ */
64
+ export interface DbPortAllocation {
65
+ project_path: string;
66
+ base_port: number;
67
+ pid: number | null;
68
+ registered_at: string;
69
+ last_used_at: string;
70
+ }
71
+ /**
72
+ * Convert database architect row to application type
73
+ */
74
+ export declare function dbArchitectToArchitectState(row: DbArchitect): ArchitectState;
75
+ /**
76
+ * Convert database builder row to application type
77
+ */
78
+ export declare function dbBuilderToBuilder(row: DbBuilder): Builder;
79
+ /**
80
+ * Convert database util row to application type
81
+ */
82
+ export declare function dbUtilToUtilTerminal(row: DbUtil): UtilTerminal;
83
+ /**
84
+ * Convert database annotation row to application type
85
+ */
86
+ export declare function dbAnnotationToAnnotation(row: DbAnnotation): Annotation;
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAQ5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAe1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAQ9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAWtE"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Database Type Definitions
3
+ *
4
+ * TypeScript interfaces matching the SQLite schema.
5
+ * These types represent the database row format.
6
+ */
7
+ /**
8
+ * Convert database architect row to application type
9
+ */
10
+ export function dbArchitectToArchitectState(row) {
11
+ return {
12
+ pid: row.pid,
13
+ port: row.port,
14
+ cmd: row.cmd,
15
+ startedAt: row.started_at,
16
+ tmuxSession: row.tmux_session ?? undefined,
17
+ };
18
+ }
19
+ /**
20
+ * Convert database builder row to application type
21
+ */
22
+ export function dbBuilderToBuilder(row) {
23
+ return {
24
+ id: row.id,
25
+ name: row.name,
26
+ port: row.port,
27
+ pid: row.pid,
28
+ status: row.status,
29
+ phase: row.phase,
30
+ worktree: row.worktree,
31
+ branch: row.branch,
32
+ tmuxSession: row.tmux_session ?? undefined,
33
+ type: row.type,
34
+ taskText: row.task_text ?? undefined,
35
+ protocolName: row.protocol_name ?? undefined,
36
+ };
37
+ }
38
+ /**
39
+ * Convert database util row to application type
40
+ */
41
+ export function dbUtilToUtilTerminal(row) {
42
+ return {
43
+ id: row.id,
44
+ name: row.name,
45
+ port: row.port,
46
+ pid: row.pid,
47
+ tmuxSession: row.tmux_session ?? undefined,
48
+ };
49
+ }
50
+ /**
51
+ * Convert database annotation row to application type
52
+ */
53
+ export function dbAnnotationToAnnotation(row) {
54
+ return {
55
+ id: row.id,
56
+ file: row.file,
57
+ port: row.port,
58
+ pid: row.pid,
59
+ parent: {
60
+ type: row.parent_type,
61
+ id: row.parent_id ?? undefined,
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwEH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAgB;IAC1D,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;KAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAc;IAC/C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAA2B;QACvC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,IAAI,EAAE,GAAG,CAAC,IAAmB;QAC7B,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACpC,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;KAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAiB;IACxD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE;YACN,IAAI,EAAE,GAAG,CAAC,WAA2C;YACrD,EAAE,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;SAC/B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent Farm CLI
4
+ * A multi-agent orchestration tool for software development
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-farm/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,373 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent Farm CLI
4
+ * A multi-agent orchestration tool for software development
5
+ */
6
+ import { Command } from 'commander';
7
+ import { start, stop } from './commands/index.js';
8
+ import { logger } from './utils/logger.js';
9
+ import { setCliOverrides, getResolvedCommands, initializePorts } from './utils/config.js';
10
+ const program = new Command();
11
+ program
12
+ .name('agent-farm')
13
+ .description('Multi-agent orchestration for software development')
14
+ .version('0.1.0');
15
+ // Global options for command overrides
16
+ program
17
+ .option('--architect-cmd <command>', 'Override architect command (takes precedence over config.json)')
18
+ .option('--builder-cmd <command>', 'Override builder command (takes precedence over config.json)')
19
+ .option('--shell-cmd <command>', 'Override shell command (takes precedence over config.json)');
20
+ // Process global options before commands
21
+ program.hook('preAction', (thisCommand) => {
22
+ const opts = thisCommand.opts();
23
+ const overrides = {};
24
+ if (opts.architectCmd)
25
+ overrides.architect = opts.architectCmd;
26
+ if (opts.builderCmd)
27
+ overrides.builder = opts.builderCmd;
28
+ if (opts.shellCmd)
29
+ overrides.shell = opts.shellCmd;
30
+ if (Object.keys(overrides).length > 0) {
31
+ setCliOverrides(overrides);
32
+ }
33
+ // Initialize port allocation for this project
34
+ initializePorts();
35
+ });
36
+ // Start command
37
+ program
38
+ .command('start')
39
+ .description('Start the architect dashboard')
40
+ .option('-c, --cmd <command>', 'Command to run in architect terminal (shorthand for --architect-cmd)')
41
+ .option('-p, --port <port>', 'Port for architect terminal')
42
+ .option('--no-role', 'Skip loading architect role prompt')
43
+ .action(async (options) => {
44
+ try {
45
+ // -c flag overrides config if provided (for backward compatibility)
46
+ const commands = getResolvedCommands();
47
+ await start({
48
+ cmd: options.cmd || commands.architect,
49
+ port: options.port ? parseInt(options.port, 10) : undefined,
50
+ noRole: !options.role,
51
+ });
52
+ }
53
+ catch (error) {
54
+ logger.error(error instanceof Error ? error.message : String(error));
55
+ process.exit(1);
56
+ }
57
+ });
58
+ // Stop command
59
+ program
60
+ .command('stop')
61
+ .description('Stop all agent farm processes')
62
+ .action(async () => {
63
+ try {
64
+ await stop();
65
+ }
66
+ catch (error) {
67
+ logger.error(error instanceof Error ? error.message : String(error));
68
+ process.exit(1);
69
+ }
70
+ });
71
+ // Status command (placeholder)
72
+ program
73
+ .command('status')
74
+ .description('Show status of all agents')
75
+ .action(async () => {
76
+ const { status } = await import('./commands/status.js');
77
+ try {
78
+ await status();
79
+ }
80
+ catch (error) {
81
+ logger.error(error instanceof Error ? error.message : String(error));
82
+ process.exit(1);
83
+ }
84
+ });
85
+ // Spawn command
86
+ program
87
+ .command('spawn')
88
+ .description('Spawn a new builder in various modes')
89
+ .option('-p, --project <id>', 'Spawn builder for a spec (e.g., -p 0009)')
90
+ .option('--task <text>', 'Spawn builder with a task description')
91
+ .option('--protocol <name>', 'Spawn builder to run a protocol (e.g., cleanup)')
92
+ .option('--shell', 'Spawn a bare Claude session (no prompt, no worktree)')
93
+ .option('--worktree', 'Spawn worktree session (worktree+branch, no prompt)')
94
+ .option('--files <files>', 'Context files for task mode (comma-separated)')
95
+ .option('--no-role', 'Skip loading role prompt')
96
+ .addHelpText('after', `
97
+ Examples:
98
+ # Spec mode (existing behavior)
99
+ af spawn -p 0009 # Spawn for spec 0009
100
+
101
+ # Task mode (ad-hoc tasks)
102
+ af spawn --task "Fix the login bug" # Simple task
103
+ af spawn --task "Refactor auth" --files src/auth.ts,src/login.ts
104
+
105
+ # Protocol mode (run a protocol)
106
+ af spawn --protocol cleanup # Run cleanup protocol
107
+ af spawn --protocol experiment # Run experiment protocol
108
+
109
+ # Worktree mode (isolated branch, no prompt)
110
+ af spawn --worktree # Worktree for quick fixes
111
+
112
+ # Shell mode (bare session)
113
+ af spawn --shell # Just Claude, no prompt/worktree
114
+ `)
115
+ .action(async (options) => {
116
+ const { spawn } = await import('./commands/spawn.js');
117
+ try {
118
+ const files = options.files ? options.files.split(',').map((f) => f.trim()) : undefined;
119
+ await spawn({
120
+ project: options.project,
121
+ task: options.task,
122
+ protocol: options.protocol,
123
+ shell: options.shell,
124
+ worktree: options.worktree,
125
+ files,
126
+ noRole: !options.role,
127
+ });
128
+ }
129
+ catch (error) {
130
+ logger.error(error instanceof Error ? error.message : String(error));
131
+ process.exit(1);
132
+ }
133
+ });
134
+ // Util/Shell command - spawns a utility terminal
135
+ program
136
+ .command('util')
137
+ .alias('shell')
138
+ .description('Spawn a utility shell terminal')
139
+ .option('-n, --name <name>', 'Name for the shell terminal')
140
+ .action(async (options) => {
141
+ const { util } = await import('./commands/util.js');
142
+ try {
143
+ await util({ name: options.name });
144
+ }
145
+ catch (error) {
146
+ logger.error(error instanceof Error ? error.message : String(error));
147
+ process.exit(1);
148
+ }
149
+ });
150
+ // Open command - opens file annotation viewer
151
+ program
152
+ .command('open <file>')
153
+ .description('Open file annotation viewer')
154
+ .action(async (file) => {
155
+ const { open } = await import('./commands/open.js');
156
+ try {
157
+ await open({ file });
158
+ }
159
+ catch (error) {
160
+ logger.error(error instanceof Error ? error.message : String(error));
161
+ process.exit(1);
162
+ }
163
+ });
164
+ // Cleanup command - remove builder worktree and branch
165
+ program
166
+ .command('cleanup')
167
+ .description('Clean up a builder worktree and branch after PR merge')
168
+ .requiredOption('-p, --project <id>', 'Builder ID to clean up')
169
+ .option('-f, --force', 'Force cleanup even if branch not merged')
170
+ .action(async (options) => {
171
+ const { cleanup } = await import('./commands/cleanup.js');
172
+ try {
173
+ await cleanup({ project: options.project, force: options.force });
174
+ }
175
+ catch (error) {
176
+ logger.error(error instanceof Error ? error.message : String(error));
177
+ process.exit(1);
178
+ }
179
+ });
180
+ // Rename command - rename a builder or utility terminal
181
+ program
182
+ .command('rename <id> <name>')
183
+ .description('Rename a builder or utility terminal')
184
+ .action(async (id, name) => {
185
+ const { rename } = await import('./commands/rename.js');
186
+ try {
187
+ rename({ id, name });
188
+ }
189
+ catch (error) {
190
+ logger.error(error instanceof Error ? error.message : String(error));
191
+ process.exit(1);
192
+ }
193
+ });
194
+ // Send command - send instructions to running builders
195
+ program
196
+ .command('send [builder] [message]')
197
+ .description('Send instructions to a running builder')
198
+ .option('--all', 'Send to all builders')
199
+ .option('--file <path>', 'Include file content in message')
200
+ .option('--interrupt', 'Send Ctrl+C first to interrupt current activity')
201
+ .option('--raw', 'Skip structured message formatting')
202
+ .option('--no-enter', 'Do not send Enter after message')
203
+ .action(async (builder, message, options) => {
204
+ const { send } = await import('./commands/send.js');
205
+ try {
206
+ await send({
207
+ builder,
208
+ message,
209
+ all: options.all,
210
+ file: options.file,
211
+ interrupt: options.interrupt,
212
+ raw: options.raw,
213
+ noEnter: !options.enter,
214
+ });
215
+ }
216
+ catch (error) {
217
+ logger.error(error instanceof Error ? error.message : String(error));
218
+ process.exit(1);
219
+ }
220
+ });
221
+ // Ports command - manage global port registry
222
+ const portsCmd = program
223
+ .command('ports')
224
+ .description('Manage global port registry');
225
+ portsCmd
226
+ .command('list')
227
+ .description('List all port allocations')
228
+ .action(async () => {
229
+ const { listAllocations } = await import('./utils/port-registry.js');
230
+ const allocations = listAllocations();
231
+ if (allocations.length === 0) {
232
+ logger.info('No port allocations found.');
233
+ return;
234
+ }
235
+ logger.header('Port Allocations');
236
+ for (const alloc of allocations) {
237
+ const status = alloc.exists ? '' : ' (missing)';
238
+ logger.info(`${alloc.basePort}-${alloc.basePort + 99}: ${alloc.path}${status}`);
239
+ }
240
+ });
241
+ portsCmd
242
+ .command('cleanup')
243
+ .description('Remove stale port allocations (deleted projects)')
244
+ .action(async () => {
245
+ const { cleanupStaleEntries } = await import('./utils/port-registry.js');
246
+ const result = cleanupStaleEntries();
247
+ if (result.removed.length === 0) {
248
+ logger.info('No stale entries found.');
249
+ }
250
+ else {
251
+ logger.success(`Removed ${result.removed.length} stale entries:`);
252
+ for (const path of result.removed) {
253
+ logger.info(` - ${path}`);
254
+ }
255
+ }
256
+ logger.info(`Remaining allocations: ${result.remaining}`);
257
+ });
258
+ // Tutorial command - interactive onboarding for new users
259
+ program
260
+ .command('tutorial')
261
+ .description('Interactive tutorial for new users')
262
+ .option('--reset', 'Start tutorial fresh')
263
+ .option('--skip', 'Skip current step')
264
+ .option('--status', 'Show tutorial progress')
265
+ .action(async (options) => {
266
+ const { tutorial } = await import('./commands/tutorial.js');
267
+ try {
268
+ await tutorial(options);
269
+ }
270
+ catch (error) {
271
+ logger.error(error instanceof Error ? error.message : String(error));
272
+ process.exit(1);
273
+ }
274
+ });
275
+ // Tower command - centralized view of all agent-farm instances
276
+ const towerCmd = program
277
+ .command('tower')
278
+ .description('Manage the tower dashboard showing all instances');
279
+ towerCmd
280
+ .command('start')
281
+ .description('Start the tower dashboard')
282
+ .option('-p, --port <port>', 'Port to run on (default: 4100)')
283
+ .action(async (options) => {
284
+ const { towerStart } = await import('./commands/tower.js');
285
+ try {
286
+ await towerStart({
287
+ port: options.port ? parseInt(options.port, 10) : undefined,
288
+ });
289
+ }
290
+ catch (error) {
291
+ logger.error(error instanceof Error ? error.message : String(error));
292
+ process.exit(1);
293
+ }
294
+ });
295
+ towerCmd
296
+ .command('stop')
297
+ .description('Stop the tower dashboard')
298
+ .option('-p, --port <port>', 'Port to stop (default: 4100)')
299
+ .action(async (options) => {
300
+ const { towerStop } = await import('./commands/tower.js');
301
+ try {
302
+ await towerStop({
303
+ port: options.port ? parseInt(options.port, 10) : undefined,
304
+ });
305
+ }
306
+ catch (error) {
307
+ logger.error(error instanceof Error ? error.message : String(error));
308
+ process.exit(1);
309
+ }
310
+ });
311
+ // Database commands - debugging and maintenance
312
+ const dbCmd = program
313
+ .command('db')
314
+ .description('Database debugging and maintenance commands');
315
+ dbCmd
316
+ .command('dump')
317
+ .description('Export all tables to JSON')
318
+ .option('--global', 'Dump global.db instead of local state.db')
319
+ .action(async (options) => {
320
+ const { dbDump } = await import('./commands/db.js');
321
+ try {
322
+ dbDump({ global: options.global });
323
+ }
324
+ catch (error) {
325
+ logger.error(error instanceof Error ? error.message : String(error));
326
+ process.exit(1);
327
+ }
328
+ });
329
+ dbCmd
330
+ .command('query <sql>')
331
+ .description('Run a SELECT query against the database')
332
+ .option('--global', 'Query global.db instead of local state.db')
333
+ .action(async (sql, options) => {
334
+ const { dbQuery } = await import('./commands/db.js');
335
+ try {
336
+ dbQuery(sql, { global: options.global });
337
+ }
338
+ catch (error) {
339
+ logger.error(error instanceof Error ? error.message : String(error));
340
+ process.exit(1);
341
+ }
342
+ });
343
+ dbCmd
344
+ .command('reset')
345
+ .description('Delete database and start fresh (DESTRUCTIVE)')
346
+ .option('--global', 'Reset global.db instead of local state.db')
347
+ .option('--force', 'Skip confirmation')
348
+ .action(async (options) => {
349
+ const { dbReset } = await import('./commands/db.js');
350
+ try {
351
+ dbReset({ global: options.global, force: options.force });
352
+ }
353
+ catch (error) {
354
+ logger.error(error instanceof Error ? error.message : String(error));
355
+ process.exit(1);
356
+ }
357
+ });
358
+ dbCmd
359
+ .command('stats')
360
+ .description('Show database statistics')
361
+ .option('--global', 'Show stats for global.db')
362
+ .action(async (options) => {
363
+ const { dbStats } = await import('./commands/db.js');
364
+ try {
365
+ dbStats({ global: options.global });
366
+ }
367
+ catch (error) {
368
+ logger.error(error instanceof Error ? error.message : String(error));
369
+ process.exit(1);
370
+ }
371
+ });
372
+ program.parse();
373
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-farm/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAa,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,uCAAuC;AACvC,OAAO;KACJ,MAAM,CAAC,2BAA2B,EAAE,gEAAgE,CAAC;KACrG,MAAM,CAAC,yBAAyB,EAAE,8DAA8D,CAAC;KACjG,MAAM,CAAC,uBAAuB,EAAE,4DAA4D,CAAC,CAAC;AAEjG,yCAAyC;AACzC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,IAAI,IAAI,CAAC,YAAY;QAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;IAC/D,IAAI,IAAI,CAAC,UAAU;QAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ;QAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IAEnD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,8CAA8C;IAC9C,eAAe,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,sEAAsE,CAAC;KACrG,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,oCAAoC,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QACvC,MAAM,KAAK,CAAC;YACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,SAAS;YACtC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,+BAA+B;AAC/B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,CAAC;KACxE,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,CAAC;KAC9E,MAAM,CAAC,SAAS,EAAE,sDAAsD,CAAC;KACzE,MAAM,CAAC,YAAY,EAAE,qDAAqD,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;KAC1E,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;CAkBvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,MAAM,KAAK,CAAC;YACV,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK;YACL,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,OAAO,CAAC;KACd,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,8CAA8C;AAC9C,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uDAAuD;AACvD,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uDAAuD,CAAC;KACpE,cAAc,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;KAC9D,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,wDAAwD;AACxD,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uDAAuD;AACvD,OAAO;KACJ,OAAO,CAAC,0BAA0B,CAAC;KACnC,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;KACvC,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;KAC1D,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;KACxE,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,iCAAiC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC;YACT,OAAO;YACP,OAAO;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6BAA6B,CAAC,CAAC;AAE9C,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IAErC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEL,0DAA0D;AAC1D,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC;KACrC,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kDAAkD,CAAC,CAAC;AAEnE,QAAQ;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,UAAU,CAAC;YACf,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,SAAS,CAAC;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gDAAgD;AAChD,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,6CAA6C,CAAC,CAAC;AAE9D,KAAK;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,UAAU,EAAE,0CAA0C,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK;KACF,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;KAC/D,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}