@bradygaster/squad-sdk 0.7.0 → 0.8.2

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 (354) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +243 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +567 -0
  5. package/dist/adapter/client.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +260 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +362 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/types.d.ts +779 -0
  11. package/dist/adapter/types.d.ts.map +1 -0
  12. package/dist/adapter/types.js +11 -0
  13. package/dist/adapter/types.js.map +1 -0
  14. package/dist/agents/charter-compiler.d.ts +102 -0
  15. package/dist/agents/charter-compiler.d.ts.map +1 -0
  16. package/dist/agents/charter-compiler.js +157 -0
  17. package/dist/agents/charter-compiler.js.map +1 -0
  18. package/dist/agents/history-shadow.d.ts +80 -0
  19. package/dist/agents/history-shadow.d.ts.map +1 -0
  20. package/dist/agents/history-shadow.js +239 -0
  21. package/dist/agents/history-shadow.js.map +1 -0
  22. package/dist/agents/index.d.ts +71 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +183 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/lifecycle.d.ts +138 -0
  27. package/dist/agents/lifecycle.d.ts.map +1 -0
  28. package/dist/agents/lifecycle.js +284 -0
  29. package/dist/agents/lifecycle.js.map +1 -0
  30. package/dist/agents/model-selector.d.ts +80 -0
  31. package/dist/agents/model-selector.d.ts.map +1 -0
  32. package/dist/agents/model-selector.js +171 -0
  33. package/dist/agents/model-selector.js.map +1 -0
  34. package/dist/agents/onboarding.d.ts +65 -0
  35. package/dist/agents/onboarding.d.ts.map +1 -0
  36. package/dist/agents/onboarding.js +373 -0
  37. package/dist/agents/onboarding.js.map +1 -0
  38. package/dist/build/bundle.d.ts +32 -0
  39. package/dist/build/bundle.d.ts.map +1 -0
  40. package/dist/build/bundle.js +97 -0
  41. package/dist/build/bundle.js.map +1 -0
  42. package/dist/build/ci-pipeline.d.ts +51 -0
  43. package/dist/build/ci-pipeline.d.ts.map +1 -0
  44. package/dist/build/ci-pipeline.js +180 -0
  45. package/dist/build/ci-pipeline.js.map +1 -0
  46. package/dist/build/github-dist.d.ts +37 -0
  47. package/dist/build/github-dist.d.ts.map +1 -0
  48. package/dist/build/github-dist.js +117 -0
  49. package/dist/build/github-dist.js.map +1 -0
  50. package/dist/build/index.d.ts +11 -0
  51. package/dist/build/index.d.ts.map +1 -0
  52. package/dist/build/index.js +11 -0
  53. package/dist/build/index.js.map +1 -0
  54. package/dist/build/install-migration.d.ts +28 -0
  55. package/dist/build/install-migration.d.ts.map +1 -0
  56. package/dist/build/install-migration.js +103 -0
  57. package/dist/build/install-migration.js.map +1 -0
  58. package/dist/build/npm-package.d.ts +54 -0
  59. package/dist/build/npm-package.d.ts.map +1 -0
  60. package/dist/build/npm-package.js +128 -0
  61. package/dist/build/npm-package.js.map +1 -0
  62. package/dist/build/release.d.ts +108 -0
  63. package/dist/build/release.d.ts.map +1 -0
  64. package/dist/build/release.js +295 -0
  65. package/dist/build/release.js.map +1 -0
  66. package/dist/build/versioning.d.ts +38 -0
  67. package/dist/build/versioning.d.ts.map +1 -0
  68. package/dist/build/versioning.js +113 -0
  69. package/dist/build/versioning.js.map +1 -0
  70. package/dist/casting/casting-engine.d.ts +60 -0
  71. package/dist/casting/casting-engine.d.ts.map +1 -0
  72. package/dist/casting/casting-engine.js +223 -0
  73. package/dist/casting/casting-engine.js.map +1 -0
  74. package/dist/casting/casting-history.d.ts +54 -0
  75. package/dist/casting/casting-history.d.ts.map +1 -0
  76. package/dist/casting/casting-history.js +63 -0
  77. package/dist/casting/casting-history.js.map +1 -0
  78. package/dist/casting/index.d.ts +46 -0
  79. package/dist/casting/index.d.ts.map +1 -0
  80. package/dist/casting/index.js +45 -0
  81. package/dist/casting/index.js.map +1 -0
  82. package/dist/client/event-bus.d.ts +29 -0
  83. package/dist/client/event-bus.d.ts.map +1 -0
  84. package/dist/client/event-bus.js +52 -0
  85. package/dist/client/event-bus.js.map +1 -0
  86. package/dist/client/index.d.ts +100 -0
  87. package/dist/client/index.d.ts.map +1 -0
  88. package/dist/client/index.js +170 -0
  89. package/dist/client/index.js.map +1 -0
  90. package/dist/client/session-pool.d.ts +66 -0
  91. package/dist/client/session-pool.d.ts.map +1 -0
  92. package/dist/client/session-pool.js +145 -0
  93. package/dist/client/session-pool.js.map +1 -0
  94. package/dist/config/agent-doc.d.ts +43 -0
  95. package/dist/config/agent-doc.d.ts.map +1 -0
  96. package/dist/config/agent-doc.js +158 -0
  97. package/dist/config/agent-doc.js.map +1 -0
  98. package/dist/config/agent-source.d.ts +95 -0
  99. package/dist/config/agent-source.d.ts.map +1 -0
  100. package/dist/config/agent-source.js +274 -0
  101. package/dist/config/agent-source.js.map +1 -0
  102. package/dist/config/doc-sync.d.ts +66 -0
  103. package/dist/config/doc-sync.d.ts.map +1 -0
  104. package/dist/config/doc-sync.js +270 -0
  105. package/dist/config/doc-sync.js.map +1 -0
  106. package/dist/config/feature-audit.d.ts +49 -0
  107. package/dist/config/feature-audit.d.ts.map +1 -0
  108. package/dist/config/feature-audit.js +148 -0
  109. package/dist/config/feature-audit.js.map +1 -0
  110. package/dist/config/index.d.ts +15 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +15 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/config/init.d.ts +61 -0
  115. package/dist/config/init.d.ts.map +1 -0
  116. package/dist/config/init.js +376 -0
  117. package/dist/config/init.js.map +1 -0
  118. package/dist/config/legacy-fallback.d.ts +83 -0
  119. package/dist/config/legacy-fallback.d.ts.map +1 -0
  120. package/dist/config/legacy-fallback.js +212 -0
  121. package/dist/config/legacy-fallback.js.map +1 -0
  122. package/dist/config/markdown-migration.d.ts +157 -0
  123. package/dist/config/markdown-migration.d.ts.map +1 -0
  124. package/dist/config/markdown-migration.js +434 -0
  125. package/dist/config/markdown-migration.js.map +1 -0
  126. package/dist/config/migration.d.ts +123 -0
  127. package/dist/config/migration.d.ts.map +1 -0
  128. package/dist/config/migration.js +273 -0
  129. package/dist/config/migration.js.map +1 -0
  130. package/dist/config/migrations/index.d.ts +36 -0
  131. package/dist/config/migrations/index.d.ts.map +1 -0
  132. package/dist/config/migrations/index.js +216 -0
  133. package/dist/config/migrations/index.js.map +1 -0
  134. package/dist/config/models.d.ts +134 -0
  135. package/dist/config/models.d.ts.map +1 -0
  136. package/dist/config/models.js +354 -0
  137. package/dist/config/models.js.map +1 -0
  138. package/dist/config/routing.d.ts +118 -0
  139. package/dist/config/routing.d.ts.map +1 -0
  140. package/dist/config/routing.js +247 -0
  141. package/dist/config/routing.js.map +1 -0
  142. package/dist/config/schema.d.ts +72 -0
  143. package/dist/config/schema.d.ts.map +1 -0
  144. package/dist/config/schema.js +63 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/coordinator/coordinator.d.ts +82 -0
  147. package/dist/coordinator/coordinator.d.ts.map +1 -0
  148. package/dist/coordinator/coordinator.js +192 -0
  149. package/dist/coordinator/coordinator.js.map +1 -0
  150. package/dist/coordinator/direct-response.d.ts +83 -0
  151. package/dist/coordinator/direct-response.d.ts.map +1 -0
  152. package/dist/coordinator/direct-response.js +187 -0
  153. package/dist/coordinator/direct-response.js.map +1 -0
  154. package/dist/coordinator/fan-out.d.ts +83 -0
  155. package/dist/coordinator/fan-out.d.ts.map +1 -0
  156. package/dist/coordinator/fan-out.js +161 -0
  157. package/dist/coordinator/fan-out.js.map +1 -0
  158. package/dist/coordinator/index.d.ts +62 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +171 -0
  161. package/dist/coordinator/index.js.map +1 -0
  162. package/dist/coordinator/response-tiers.d.ts +49 -0
  163. package/dist/coordinator/response-tiers.d.ts.map +1 -0
  164. package/dist/coordinator/response-tiers.js +149 -0
  165. package/dist/coordinator/response-tiers.js.map +1 -0
  166. package/dist/hooks/index.d.ts +103 -0
  167. package/dist/hooks/index.d.ts.map +1 -0
  168. package/dist/hooks/index.js +279 -0
  169. package/dist/hooks/index.js.map +1 -0
  170. package/dist/index.d.ts +33 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +33 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/marketplace/backend.d.ts +35 -0
  175. package/dist/marketplace/backend.d.ts.map +1 -0
  176. package/dist/marketplace/backend.js +99 -0
  177. package/dist/marketplace/backend.js.map +1 -0
  178. package/dist/marketplace/browser.d.ts +33 -0
  179. package/dist/marketplace/browser.d.ts.map +1 -0
  180. package/dist/marketplace/browser.js +97 -0
  181. package/dist/marketplace/browser.js.map +1 -0
  182. package/dist/marketplace/extension-adapter.d.ts +51 -0
  183. package/dist/marketplace/extension-adapter.d.ts.map +1 -0
  184. package/dist/marketplace/extension-adapter.js +81 -0
  185. package/dist/marketplace/extension-adapter.js.map +1 -0
  186. package/dist/marketplace/index.d.ts +51 -0
  187. package/dist/marketplace/index.d.ts.map +1 -0
  188. package/dist/marketplace/index.js +108 -0
  189. package/dist/marketplace/index.js.map +1 -0
  190. package/dist/marketplace/packaging.d.ts +25 -0
  191. package/dist/marketplace/packaging.d.ts.map +1 -0
  192. package/dist/marketplace/packaging.js +117 -0
  193. package/dist/marketplace/packaging.js.map +1 -0
  194. package/dist/marketplace/schema.d.ts +50 -0
  195. package/dist/marketplace/schema.d.ts.map +1 -0
  196. package/dist/marketplace/schema.js +120 -0
  197. package/dist/marketplace/schema.js.map +1 -0
  198. package/dist/marketplace/security.d.ts +26 -0
  199. package/dist/marketplace/security.d.ts.map +1 -0
  200. package/dist/marketplace/security.js +199 -0
  201. package/dist/marketplace/security.js.map +1 -0
  202. package/dist/parsers.d.ts +15 -0
  203. package/dist/parsers.d.ts.map +1 -0
  204. package/dist/parsers.js +15 -0
  205. package/dist/parsers.js.map +1 -0
  206. package/dist/ralph/index.d.ts +58 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +128 -0
  209. package/dist/ralph/index.js.map +1 -0
  210. package/dist/resolution.d.ts +47 -0
  211. package/dist/resolution.d.ts.map +1 -0
  212. package/dist/resolution.js +106 -0
  213. package/dist/resolution.js.map +1 -0
  214. package/dist/runtime/benchmarks.d.ts +121 -0
  215. package/dist/runtime/benchmarks.d.ts.map +1 -0
  216. package/dist/runtime/benchmarks.js +251 -0
  217. package/dist/runtime/benchmarks.js.map +1 -0
  218. package/dist/runtime/config.d.ts +314 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +467 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/constants.d.ts +35 -0
  223. package/dist/runtime/constants.d.ts.map +1 -0
  224. package/dist/runtime/constants.js +58 -0
  225. package/dist/runtime/constants.js.map +1 -0
  226. package/dist/runtime/cost-tracker.d.ts +73 -0
  227. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  228. package/dist/runtime/cost-tracker.js +157 -0
  229. package/dist/runtime/cost-tracker.js.map +1 -0
  230. package/dist/runtime/event-bus-otel-bridge.d.ts +19 -0
  231. package/dist/runtime/event-bus-otel-bridge.d.ts.map +1 -0
  232. package/dist/runtime/event-bus-otel-bridge.js +61 -0
  233. package/dist/runtime/event-bus-otel-bridge.js.map +1 -0
  234. package/dist/runtime/event-bus-ws-bridge.d.ts +35 -0
  235. package/dist/runtime/event-bus-ws-bridge.d.ts.map +1 -0
  236. package/dist/runtime/event-bus-ws-bridge.js +55 -0
  237. package/dist/runtime/event-bus-ws-bridge.js.map +1 -0
  238. package/dist/runtime/event-bus.d.ts +190 -0
  239. package/dist/runtime/event-bus.d.ts.map +1 -0
  240. package/dist/runtime/event-bus.js +218 -0
  241. package/dist/runtime/event-bus.js.map +1 -0
  242. package/dist/runtime/event-payloads.d.ts +108 -0
  243. package/dist/runtime/event-payloads.d.ts.map +1 -0
  244. package/dist/runtime/event-payloads.js +28 -0
  245. package/dist/runtime/event-payloads.js.map +1 -0
  246. package/dist/runtime/health.d.ts +66 -0
  247. package/dist/runtime/health.d.ts.map +1 -0
  248. package/dist/runtime/health.js +112 -0
  249. package/dist/runtime/health.js.map +1 -0
  250. package/dist/runtime/i18n.d.ts +54 -0
  251. package/dist/runtime/i18n.d.ts.map +1 -0
  252. package/dist/runtime/i18n.js +126 -0
  253. package/dist/runtime/i18n.js.map +1 -0
  254. package/dist/runtime/offline.d.ts +64 -0
  255. package/dist/runtime/offline.d.ts.map +1 -0
  256. package/dist/runtime/offline.js +108 -0
  257. package/dist/runtime/offline.js.map +1 -0
  258. package/dist/runtime/otel-bridge.d.ts +52 -0
  259. package/dist/runtime/otel-bridge.d.ts.map +1 -0
  260. package/dist/runtime/otel-bridge.js +132 -0
  261. package/dist/runtime/otel-bridge.js.map +1 -0
  262. package/dist/runtime/otel-init.d.ts +72 -0
  263. package/dist/runtime/otel-init.d.ts.map +1 -0
  264. package/dist/runtime/otel-init.js +68 -0
  265. package/dist/runtime/otel-init.js.map +1 -0
  266. package/dist/runtime/otel-metrics.d.ts +42 -0
  267. package/dist/runtime/otel-metrics.d.ts.map +1 -0
  268. package/dist/runtime/otel-metrics.js +196 -0
  269. package/dist/runtime/otel-metrics.js.map +1 -0
  270. package/dist/runtime/otel.d.ts +53 -0
  271. package/dist/runtime/otel.d.ts.map +1 -0
  272. package/dist/runtime/otel.js +127 -0
  273. package/dist/runtime/otel.js.map +1 -0
  274. package/dist/runtime/squad-observer.d.ts +75 -0
  275. package/dist/runtime/squad-observer.d.ts.map +1 -0
  276. package/dist/runtime/squad-observer.js +190 -0
  277. package/dist/runtime/squad-observer.js.map +1 -0
  278. package/dist/runtime/streaming.d.ts +106 -0
  279. package/dist/runtime/streaming.d.ts.map +1 -0
  280. package/dist/runtime/streaming.js +192 -0
  281. package/dist/runtime/streaming.js.map +1 -0
  282. package/dist/runtime/telemetry.d.ts +82 -0
  283. package/dist/runtime/telemetry.d.ts.map +1 -0
  284. package/dist/runtime/telemetry.js +120 -0
  285. package/dist/runtime/telemetry.js.map +1 -0
  286. package/dist/sharing/agent-repo.d.ts +33 -0
  287. package/dist/sharing/agent-repo.d.ts.map +1 -0
  288. package/dist/sharing/agent-repo.js +79 -0
  289. package/dist/sharing/agent-repo.js.map +1 -0
  290. package/dist/sharing/cache.d.ts +36 -0
  291. package/dist/sharing/cache.d.ts.map +1 -0
  292. package/dist/sharing/cache.js +85 -0
  293. package/dist/sharing/cache.js.map +1 -0
  294. package/dist/sharing/conflicts.d.ts +32 -0
  295. package/dist/sharing/conflicts.d.ts.map +1 -0
  296. package/dist/sharing/conflicts.js +121 -0
  297. package/dist/sharing/conflicts.js.map +1 -0
  298. package/dist/sharing/export.d.ts +50 -0
  299. package/dist/sharing/export.d.ts.map +1 -0
  300. package/dist/sharing/export.js +156 -0
  301. package/dist/sharing/export.js.map +1 -0
  302. package/dist/sharing/history-split.d.ts +34 -0
  303. package/dist/sharing/history-split.d.ts.map +1 -0
  304. package/dist/sharing/history-split.js +101 -0
  305. package/dist/sharing/history-split.js.map +1 -0
  306. package/dist/sharing/import.d.ts +37 -0
  307. package/dist/sharing/import.d.ts.map +1 -0
  308. package/dist/sharing/import.js +138 -0
  309. package/dist/sharing/import.js.map +1 -0
  310. package/dist/sharing/index.d.ts +11 -0
  311. package/dist/sharing/index.d.ts.map +1 -0
  312. package/dist/sharing/index.js +11 -0
  313. package/dist/sharing/index.js.map +1 -0
  314. package/dist/sharing/versioning.d.ts +32 -0
  315. package/dist/sharing/versioning.d.ts.map +1 -0
  316. package/dist/sharing/versioning.js +64 -0
  317. package/dist/sharing/versioning.js.map +1 -0
  318. package/dist/skills/index.d.ts +49 -0
  319. package/dist/skills/index.d.ts.map +1 -0
  320. package/dist/skills/index.js +85 -0
  321. package/dist/skills/index.js.map +1 -0
  322. package/dist/skills/skill-loader.d.ts +56 -0
  323. package/dist/skills/skill-loader.d.ts.map +1 -0
  324. package/dist/skills/skill-loader.js +106 -0
  325. package/dist/skills/skill-loader.js.map +1 -0
  326. package/dist/skills/skill-source.d.ts +63 -0
  327. package/dist/skills/skill-source.d.ts.map +1 -0
  328. package/dist/skills/skill-source.js +199 -0
  329. package/dist/skills/skill-source.js.map +1 -0
  330. package/dist/tools/index.d.ts +95 -0
  331. package/dist/tools/index.d.ts.map +1 -0
  332. package/dist/tools/index.js +475 -0
  333. package/dist/tools/index.js.map +1 -0
  334. package/dist/types.d.ts +43 -0
  335. package/dist/types.d.ts.map +1 -0
  336. package/dist/types.js +8 -0
  337. package/dist/types.js.map +1 -0
  338. package/dist/upstream/index.d.ts +8 -0
  339. package/dist/upstream/index.d.ts.map +1 -0
  340. package/dist/upstream/index.js +7 -0
  341. package/dist/upstream/index.js.map +1 -0
  342. package/dist/upstream/resolver.d.ts +37 -0
  343. package/dist/upstream/resolver.d.ts.map +1 -0
  344. package/dist/upstream/resolver.js +234 -0
  345. package/dist/upstream/resolver.js.map +1 -0
  346. package/dist/upstream/types.d.ts +55 -0
  347. package/dist/upstream/types.d.ts.map +1 -0
  348. package/dist/upstream/types.js +11 -0
  349. package/dist/upstream/types.js.map +1 -0
  350. package/dist/utils/normalize-eol.d.ts +6 -0
  351. package/dist/utils/normalize-eol.d.ts.map +1 -0
  352. package/dist/utils/normalize-eol.js +8 -0
  353. package/dist/utils/normalize-eol.js.map +1 -0
  354. package/package.json +197 -63
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Routing Configuration Module
3
+ *
4
+ * Parses routing.md markdown format into typed RoutingConfig and compiles routing rules
5
+ * for fast pattern matching. Supports both markdown (legacy) and typed config (new).
6
+ *
7
+ * @module config/routing
8
+ */
9
+ import { normalizeEol } from '../utils/normalize-eol.js';
10
+ /**
11
+ * Parses routing.md markdown table format into typed RoutingConfig.
12
+ *
13
+ * Expected format:
14
+ * ```markdown
15
+ * ## Routing Table
16
+ *
17
+ * | Work Type | Route To | Examples |
18
+ * |-----------|----------|----------|
19
+ * | feature-dev | Lead | New features, enhancements |
20
+ * | bug-fix | Developer | Bug fixes, patches |
21
+ * ```
22
+ *
23
+ * @param content - Markdown content from routing.md
24
+ * @returns Parsed routing configuration
25
+ */
26
+ export function parseRoutingMarkdown(content) {
27
+ content = normalizeEol(content);
28
+ const rules = [];
29
+ const lines = content.split('\n');
30
+ let inRoutingTable = false;
31
+ let headerPassed = false;
32
+ for (const line of lines) {
33
+ const trimmed = line.trim();
34
+ // Detect routing table section
35
+ if (trimmed.toLowerCase().includes('## routing table') ||
36
+ trimmed.toLowerCase().includes('##routing table')) {
37
+ inRoutingTable = true;
38
+ headerPassed = false;
39
+ continue;
40
+ }
41
+ // Stop at next section
42
+ if (inRoutingTable && trimmed.startsWith('##') && !trimmed.toLowerCase().includes('routing table')) {
43
+ inRoutingTable = false;
44
+ continue;
45
+ }
46
+ // Parse table rows
47
+ if (inRoutingTable && trimmed.startsWith('|')) {
48
+ // Skip header row
49
+ if (trimmed.toLowerCase().includes('work type') || trimmed.toLowerCase().includes('pattern')) {
50
+ headerPassed = true;
51
+ continue;
52
+ }
53
+ // Skip separator row
54
+ if (trimmed.includes('---') || trimmed.includes('===')) {
55
+ continue;
56
+ }
57
+ if (!headerPassed) {
58
+ continue;
59
+ }
60
+ // Parse data row: | Work Type | Route To | Examples |
61
+ const cells = trimmed
62
+ .split('|')
63
+ .map(cell => cell.trim())
64
+ .filter(cell => cell.length > 0);
65
+ if (cells.length >= 2) {
66
+ const workType = cells[0];
67
+ const routeTo = cells[1];
68
+ const examples = cells.length >= 3 ? cells[2].split(',').map(ex => ex.trim()) : undefined;
69
+ // Parse agent names (may be comma-separated or single)
70
+ const agents = routeTo.split(',').map(a => a.trim()).filter(a => a.length > 0);
71
+ if (workType && agents.length > 0) {
72
+ rules.push({
73
+ workType,
74
+ agents,
75
+ examples,
76
+ confidence: 'high'
77
+ });
78
+ }
79
+ }
80
+ }
81
+ }
82
+ return {
83
+ rules,
84
+ governance: {
85
+ eagerByDefault: true,
86
+ scribeAutoRuns: false,
87
+ allowRecursiveSpawn: false
88
+ }
89
+ };
90
+ }
91
+ /**
92
+ * Compiles routing rules for fast pattern matching.
93
+ *
94
+ * Creates regex patterns from work types and assigns priority scores
95
+ * based on specificity. More specific patterns get higher priority.
96
+ *
97
+ * @param config - Routing configuration to compile
98
+ * @returns Compiled router with regex patterns
99
+ */
100
+ export function compileRoutingRules(config) {
101
+ const workTypeRules = [];
102
+ for (const rule of config.rules) {
103
+ const patterns = generatePatterns(rule.workType, rule.examples);
104
+ const priority = calculatePriority(rule.workType, patterns);
105
+ workTypeRules.push({
106
+ workType: rule.workType,
107
+ agents: rule.agents,
108
+ patterns,
109
+ examples: rule.examples,
110
+ confidence: rule.confidence || 'medium',
111
+ priority
112
+ });
113
+ }
114
+ // Sort by priority (highest first)
115
+ workTypeRules.sort((a, b) => b.priority - a.priority);
116
+ // Compile issue routing rules if present
117
+ const issueRules = config.issueRouting?.map(compileIssueRule);
118
+ return {
119
+ workTypeRules,
120
+ issueRules,
121
+ governance: config.governance
122
+ };
123
+ }
124
+ /**
125
+ * Matches a message to routing rules.
126
+ *
127
+ * @param message - User message to match
128
+ * @param router - Compiled router
129
+ * @returns Best routing match
130
+ */
131
+ export function matchRoute(message, router) {
132
+ const lowerMessage = message.toLowerCase();
133
+ // Try to match work type rules
134
+ for (const rule of router.workTypeRules) {
135
+ for (const pattern of rule.patterns) {
136
+ if (pattern.test(lowerMessage)) {
137
+ return {
138
+ agents: rule.agents,
139
+ confidence: rule.confidence || 'medium',
140
+ rule,
141
+ reason: `Matched work type: ${rule.workType}`
142
+ };
143
+ }
144
+ }
145
+ }
146
+ // No match - return fallback
147
+ return {
148
+ agents: router.fallbackAgent ? [router.fallbackAgent] : ['@coordinator'],
149
+ confidence: 'low',
150
+ reason: 'No matching route found, using fallback'
151
+ };
152
+ }
153
+ /**
154
+ * Generates regex patterns from work type and examples.
155
+ */
156
+ function generatePatterns(workType, examples) {
157
+ const patterns = [];
158
+ // Create pattern from work type itself
159
+ const typeWords = workType
160
+ .toLowerCase()
161
+ .split(/[-_\s]+/)
162
+ .filter(w => w.length > 2); // Skip short words like "to", "of"
163
+ if (typeWords.length > 0) {
164
+ // Match if all type words are present
165
+ const typePattern = new RegExp(typeWords.map(w => `(?=.*\\b${escapeRegex(w)})`).join(''), 'i');
166
+ patterns.push(typePattern);
167
+ }
168
+ // Create patterns from examples
169
+ if (examples && examples.length > 0) {
170
+ for (const example of examples) {
171
+ const exampleWords = example
172
+ .toLowerCase()
173
+ .split(/[-_\s,]+/)
174
+ .filter(w => w.length > 2);
175
+ if (exampleWords.length > 0) {
176
+ // Match if any significant example words are present
177
+ const examplePattern = new RegExp(exampleWords.map(w => `\\b${escapeRegex(w)}\\b`).join('|'), 'i');
178
+ patterns.push(examplePattern);
179
+ }
180
+ }
181
+ }
182
+ return patterns;
183
+ }
184
+ /**
185
+ * Calculates priority for a rule based on specificity.
186
+ * Higher values = more specific = higher priority.
187
+ */
188
+ function calculatePriority(workType, patterns) {
189
+ // Base priority on work type length and pattern count
190
+ const typeLength = workType.length;
191
+ const patternCount = patterns.length;
192
+ const wordCount = workType.split(/[-_\s]+/).length;
193
+ // More words and longer types are more specific
194
+ return typeLength + (wordCount * 10) + (patternCount * 5);
195
+ }
196
+ /**
197
+ * Compiles an issue routing rule with regex patterns.
198
+ */
199
+ function compileIssueRule(rule) {
200
+ return {
201
+ labelPattern: new RegExp(escapeRegex(rule.label), 'i'),
202
+ action: rule.action,
203
+ target: rule.target,
204
+ requiredLabels: rule.requiredLabels?.map(label => new RegExp(escapeRegex(label), 'i')),
205
+ excludedLabels: rule.excludedLabels?.map(label => new RegExp(escapeRegex(label), 'i')),
206
+ state: rule.state
207
+ };
208
+ }
209
+ /**
210
+ * Escapes special regex characters.
211
+ */
212
+ function escapeRegex(str) {
213
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
214
+ }
215
+ /**
216
+ * Matches issue labels to routing rules.
217
+ *
218
+ * @param labels - Issue labels to match
219
+ * @param rules - Compiled issue routing rules
220
+ * @returns Matching rule if found
221
+ */
222
+ export function matchIssueLabels(labels, rules) {
223
+ for (const rule of rules) {
224
+ // Check if primary label matches
225
+ const primaryMatch = labels.some(label => rule.labelPattern.test(label));
226
+ if (!primaryMatch) {
227
+ continue;
228
+ }
229
+ // Check required labels
230
+ if (rule.requiredLabels && rule.requiredLabels.length > 0) {
231
+ const allRequiredPresent = rule.requiredLabels.every(pattern => labels.some(label => pattern.test(label)));
232
+ if (!allRequiredPresent) {
233
+ continue;
234
+ }
235
+ }
236
+ // Check excluded labels
237
+ if (rule.excludedLabels && rule.excludedLabels.length > 0) {
238
+ const anyExcludedPresent = rule.excludedLabels.some(pattern => labels.some(label => pattern.test(label)));
239
+ if (anyExcludedPresent) {
240
+ continue;
241
+ }
242
+ }
243
+ return rule;
244
+ }
245
+ return undefined;
246
+ }
247
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/config/routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Squad Configuration Schema
3
+ * Typed configuration interface for Squad teams
4
+ */
5
+ export interface SquadConfig {
6
+ version: string;
7
+ team: TeamConfig;
8
+ routing: RoutingConfig;
9
+ models: ModelConfig;
10
+ agents: AgentConfig[];
11
+ hooks?: HooksConfig;
12
+ ceremonies?: CeremonyConfig[];
13
+ plugins?: PluginConfig;
14
+ }
15
+ export interface TeamConfig {
16
+ name: string;
17
+ description?: string;
18
+ projectContext?: string;
19
+ issueSource?: {
20
+ repo: string;
21
+ filters?: string[];
22
+ };
23
+ }
24
+ export interface AgentConfig {
25
+ name: string;
26
+ role: string;
27
+ displayName?: string;
28
+ charter?: string;
29
+ model?: string;
30
+ tools?: string[];
31
+ status?: 'active' | 'inactive' | 'retired';
32
+ }
33
+ export interface RoutingConfig {
34
+ rules: RoutingRule[];
35
+ defaultAgent?: string;
36
+ fallbackBehavior?: 'ask' | 'default-agent' | 'coordinator';
37
+ }
38
+ export interface RoutingRule {
39
+ pattern: string;
40
+ agents: string[];
41
+ tier?: 'direct' | 'lightweight' | 'standard' | 'full';
42
+ priority?: number;
43
+ }
44
+ export interface ModelConfig {
45
+ default: string;
46
+ defaultTier: 'premium' | 'standard' | 'fast';
47
+ tiers: Record<string, string[]>;
48
+ agentOverrides?: Record<string, string>;
49
+ taskTypeMapping?: Record<string, string>;
50
+ }
51
+ export interface HooksConfig {
52
+ allowedWritePaths?: string[];
53
+ blockedCommands?: string[];
54
+ maxAskUserPerSession?: number;
55
+ scrubPii?: boolean;
56
+ reviewerLockout?: boolean;
57
+ }
58
+ export interface CeremonyConfig {
59
+ name: string;
60
+ schedule?: string;
61
+ participants?: string[];
62
+ agenda?: string;
63
+ enabled?: boolean;
64
+ }
65
+ export interface PluginConfig {
66
+ enabled: string[];
67
+ config?: Record<string, unknown>;
68
+ }
69
+ export declare const DEFAULT_CONFIG: SquadConfig;
70
+ export declare function defineConfig(config: Partial<SquadConfig>): SquadConfig;
71
+ export declare function validateConfig(config: unknown): config is SquadConfig;
72
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,aAAa,CAAC;CAC5D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,cAAc,EAAE,WAoB5B,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAoBtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CAYrE"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Squad Configuration Schema
3
+ * Typed configuration interface for Squad teams
4
+ */
5
+ export const DEFAULT_CONFIG = {
6
+ version: '0.6.0',
7
+ team: {
8
+ name: 'Default Squad',
9
+ description: 'A Squad team',
10
+ },
11
+ routing: {
12
+ rules: [],
13
+ fallbackBehavior: 'coordinator',
14
+ },
15
+ models: {
16
+ default: 'claude-sonnet-4',
17
+ defaultTier: 'standard',
18
+ tiers: {
19
+ premium: ['claude-opus-4', 'claude-opus-4.5'],
20
+ standard: ['claude-sonnet-4', 'claude-sonnet-4.5', 'gpt-5.1-codex'],
21
+ fast: ['claude-haiku-4.5', 'gpt-5.1-codex-mini'],
22
+ },
23
+ },
24
+ agents: [],
25
+ };
26
+ export function defineConfig(config) {
27
+ return {
28
+ ...DEFAULT_CONFIG,
29
+ ...config,
30
+ team: {
31
+ ...DEFAULT_CONFIG.team,
32
+ ...config.team,
33
+ },
34
+ routing: {
35
+ ...DEFAULT_CONFIG.routing,
36
+ ...config.routing,
37
+ rules: config.routing?.rules ?? DEFAULT_CONFIG.routing.rules,
38
+ },
39
+ models: {
40
+ ...DEFAULT_CONFIG.models,
41
+ ...config.models,
42
+ tiers: config.models?.tiers ?? DEFAULT_CONFIG.models.tiers,
43
+ },
44
+ agents: config.agents ?? DEFAULT_CONFIG.agents,
45
+ };
46
+ }
47
+ export function validateConfig(config) {
48
+ if (typeof config !== 'object' || config === null)
49
+ return false;
50
+ const c = config;
51
+ if (typeof c.version !== 'string')
52
+ return false;
53
+ if (!c.team || typeof c.team.name !== 'string')
54
+ return false;
55
+ if (!c.routing || !Array.isArray(c.routing.rules))
56
+ return false;
57
+ if (!c.models || typeof c.models.default !== 'string')
58
+ return false;
59
+ if (!Array.isArray(c.agents))
60
+ return false;
61
+ return true;
62
+ }
63
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2EH,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,cAAc;KAC5B;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,aAAa;KAChC;IACD,MAAM,EAAE;QACN,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC;YAC7C,QAAQ,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,CAAC;YACnE,IAAI,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SACjD;KACF;IACD,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAA4B;IACvD,OAAO;QACL,GAAG,cAAc;QACjB,GAAG,MAAM;QACT,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,MAAM,CAAC,IAAI;SACf;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,MAAM,CAAC,OAAO;YACjB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK;SAC7D;QACD,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,GAAG,MAAM,CAAC,MAAM;YAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK;SAC3D;QACD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEhE,MAAM,CAAC,GAAG,MAA8B,CAAC;IAEzC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Squad Coordinator (M3-1, Issue #135)
3
+ *
4
+ * The brain of Squad — receives user messages, decides how to handle them,
5
+ * and orchestrates agent spawning. Wires together:
6
+ * - DirectResponseHandler (no-spawn fast path)
7
+ * - Routing rules (matchRoute / compileRoutingRules)
8
+ * - Charter compilation (compileCharter)
9
+ * - Model selection (resolveModel)
10
+ * - Fan-out spawning (spawnParallel)
11
+ * - Event bus (observability)
12
+ */
13
+ import type { EventBus } from '../runtime/event-bus.js';
14
+ import type { SquadConfig } from '../runtime/config.js';
15
+ import { DirectResponseHandler, type CoordinatorContext, type DirectResponseResult } from './direct-response.js';
16
+ import { type CompiledRouter, type RoutingMatch } from '../config/routing.js';
17
+ import { type SpawnResult, type FanOutDependencies } from './fan-out.js';
18
+ export type { CoordinatorContext } from './direct-response.js';
19
+ export type SpawnStrategy = 'direct' | 'single' | 'multi' | 'fallback';
20
+ export interface CoordinatorResult {
21
+ /** How the message was handled */
22
+ strategy: SpawnStrategy;
23
+ /** Direct response (if strategy is 'direct') */
24
+ directResponse?: DirectResponseResult;
25
+ /** Routing match info */
26
+ routing?: RoutingMatch;
27
+ /** Spawn results (if agents were spawned) */
28
+ spawnResults?: SpawnResult[];
29
+ /** Time taken to handle the message in ms */
30
+ durationMs: number;
31
+ }
32
+ export interface SquadCoordinatorOptions {
33
+ /** Squad configuration */
34
+ config: SquadConfig;
35
+ /** Event bus for observability */
36
+ eventBus?: EventBus;
37
+ /** Fan-out dependencies (charter compiler, model resolver, session creator) */
38
+ fanOutDeps?: FanOutDependencies;
39
+ /** Custom direct-response handler */
40
+ directHandler?: DirectResponseHandler;
41
+ /** Custom compiled router (skips compilation from config) */
42
+ compiledRouter?: CompiledRouter;
43
+ }
44
+ /**
45
+ * Main coordinator entry point.
46
+ *
47
+ * Pipeline:
48
+ * 1. Direct response check (no-spawn fast path)
49
+ * 2. Route analysis (message → routing rules → agent selection)
50
+ * 3. Spawn strategy (single vs multi vs fallback)
51
+ * 4. Fan-out spawn
52
+ * 5. Collect results + emit events
53
+ */
54
+ export declare class SquadCoordinator {
55
+ private config;
56
+ private eventBus?;
57
+ private directHandler;
58
+ private compiledRouter;
59
+ private fanOutDeps?;
60
+ constructor(options: SquadCoordinatorOptions);
61
+ /**
62
+ * Main dispatch — handle an incoming user message.
63
+ */
64
+ handleMessage(message: string, context: CoordinatorContext): Promise<CoordinatorResult>;
65
+ /**
66
+ * Get the compiled router (for inspection / testing).
67
+ */
68
+ getRouter(): CompiledRouter;
69
+ /**
70
+ * Get the direct response handler (for inspection / testing).
71
+ */
72
+ getDirectHandler(): DirectResponseHandler;
73
+ /**
74
+ * Update configuration at runtime.
75
+ */
76
+ updateConfig(config: SquadConfig): void;
77
+ private determineStrategy;
78
+ private buildSpawnConfigs;
79
+ private compileRouter;
80
+ private emit;
81
+ }
82
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAwC,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAM/G,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,gDAAgD;IAChD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,yBAAyB;IACzB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,uBAAuB;IACtC,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,qCAAqC;IACrC,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAqB;gBAE5B,OAAO,EAAE,uBAAuB;IAc5C;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IA+F7B;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,gBAAgB,IAAI,qBAAqB;IAIzC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAOvC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,aAAa;YAiBP,IAAI;CAanB"}