@bradygaster/squad-sdk 0.6.2 → 0.8.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 (306) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +225 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +397 -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 +68 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +74 -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 +258 -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 +198 -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 +37 -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 +53 -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 +369 -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 +174 -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 +47 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +54 -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 +24 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +23 -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 +56 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +61 -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 +313 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +466 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/cost-tracker.d.ts +73 -0
  223. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  224. package/dist/runtime/cost-tracker.js +157 -0
  225. package/dist/runtime/cost-tracker.js.map +1 -0
  226. package/dist/runtime/event-bus.d.ts +190 -0
  227. package/dist/runtime/event-bus.d.ts.map +1 -0
  228. package/dist/runtime/event-bus.js +218 -0
  229. package/dist/runtime/event-bus.js.map +1 -0
  230. package/dist/runtime/health.d.ts +66 -0
  231. package/dist/runtime/health.d.ts.map +1 -0
  232. package/dist/runtime/health.js +111 -0
  233. package/dist/runtime/health.js.map +1 -0
  234. package/dist/runtime/i18n.d.ts +54 -0
  235. package/dist/runtime/i18n.d.ts.map +1 -0
  236. package/dist/runtime/i18n.js +126 -0
  237. package/dist/runtime/i18n.js.map +1 -0
  238. package/dist/runtime/offline.d.ts +64 -0
  239. package/dist/runtime/offline.d.ts.map +1 -0
  240. package/dist/runtime/offline.js +108 -0
  241. package/dist/runtime/offline.js.map +1 -0
  242. package/dist/runtime/streaming.d.ts +97 -0
  243. package/dist/runtime/streaming.d.ts.map +1 -0
  244. package/dist/runtime/streaming.js +156 -0
  245. package/dist/runtime/streaming.js.map +1 -0
  246. package/dist/runtime/telemetry.d.ts +82 -0
  247. package/dist/runtime/telemetry.d.ts.map +1 -0
  248. package/dist/runtime/telemetry.js +120 -0
  249. package/dist/runtime/telemetry.js.map +1 -0
  250. package/dist/sharing/agent-repo.d.ts +33 -0
  251. package/dist/sharing/agent-repo.d.ts.map +1 -0
  252. package/dist/sharing/agent-repo.js +79 -0
  253. package/dist/sharing/agent-repo.js.map +1 -0
  254. package/dist/sharing/cache.d.ts +36 -0
  255. package/dist/sharing/cache.d.ts.map +1 -0
  256. package/dist/sharing/cache.js +85 -0
  257. package/dist/sharing/cache.js.map +1 -0
  258. package/dist/sharing/conflicts.d.ts +32 -0
  259. package/dist/sharing/conflicts.d.ts.map +1 -0
  260. package/dist/sharing/conflicts.js +121 -0
  261. package/dist/sharing/conflicts.js.map +1 -0
  262. package/dist/sharing/export.d.ts +50 -0
  263. package/dist/sharing/export.d.ts.map +1 -0
  264. package/dist/sharing/export.js +156 -0
  265. package/dist/sharing/export.js.map +1 -0
  266. package/dist/sharing/history-split.d.ts +34 -0
  267. package/dist/sharing/history-split.d.ts.map +1 -0
  268. package/dist/sharing/history-split.js +101 -0
  269. package/dist/sharing/history-split.js.map +1 -0
  270. package/dist/sharing/import.d.ts +37 -0
  271. package/dist/sharing/import.d.ts.map +1 -0
  272. package/dist/sharing/import.js +138 -0
  273. package/dist/sharing/import.js.map +1 -0
  274. package/dist/sharing/index.d.ts +11 -0
  275. package/dist/sharing/index.d.ts.map +1 -0
  276. package/dist/sharing/index.js +11 -0
  277. package/dist/sharing/index.js.map +1 -0
  278. package/dist/sharing/versioning.d.ts +32 -0
  279. package/dist/sharing/versioning.d.ts.map +1 -0
  280. package/dist/sharing/versioning.js +64 -0
  281. package/dist/sharing/versioning.js.map +1 -0
  282. package/dist/skills/index.d.ts +49 -0
  283. package/dist/skills/index.d.ts.map +1 -0
  284. package/dist/skills/index.js +85 -0
  285. package/dist/skills/index.js.map +1 -0
  286. package/dist/skills/skill-loader.d.ts +56 -0
  287. package/dist/skills/skill-loader.d.ts.map +1 -0
  288. package/dist/skills/skill-loader.js +106 -0
  289. package/dist/skills/skill-loader.js.map +1 -0
  290. package/dist/skills/skill-source.d.ts +63 -0
  291. package/dist/skills/skill-source.d.ts.map +1 -0
  292. package/dist/skills/skill-source.js +199 -0
  293. package/dist/skills/skill-source.js.map +1 -0
  294. package/dist/tools/index.d.ts +87 -0
  295. package/dist/tools/index.d.ts.map +1 -0
  296. package/dist/tools/index.js +419 -0
  297. package/dist/tools/index.js.map +1 -0
  298. package/dist/types.d.ts +43 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +8 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/utils/normalize-eol.d.ts +6 -0
  303. package/dist/utils/normalize-eol.d.ts.map +1 -0
  304. package/dist/utils/normalize-eol.js +8 -0
  305. package/dist/utils/normalize-eol.js.map +1 -0
  306. package/package.json +115 -39
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Response Tier Selection (M3-4, Issue #143)
3
+ *
4
+ * Not all tasks need the same level of agent involvement. This module
5
+ * selects one of four response tiers based on message complexity,
6
+ * keyword patterns, config overrides, and history hints.
7
+ *
8
+ * Tiers:
9
+ * Direct — Answer inline, no agent spawn
10
+ * Lightweight — Single fast-model agent
11
+ * Standard — Single standard-model agent
12
+ * Full — Multi-agent fan-out (premium models)
13
+ */
14
+ import type { SquadConfig } from '../config/schema.js';
15
+ export type TierName = 'direct' | 'lightweight' | 'standard' | 'full';
16
+ export type ModelTierSuggestion = 'none' | 'fast' | 'standard' | 'premium';
17
+ export interface ResponseTier {
18
+ /** Tier identifier */
19
+ tier: TierName;
20
+ /** Suggested model tier */
21
+ modelTier: ModelTierSuggestion;
22
+ /** Maximum agents to spawn */
23
+ maxAgents: number;
24
+ /** Per-agent timeout in seconds */
25
+ timeout: number;
26
+ }
27
+ export interface TierContext {
28
+ /** Recent conversation history (summaries) */
29
+ recentHistory?: string[];
30
+ /** Names of currently available agents */
31
+ agentAvailability?: string[];
32
+ /** Number of currently active sessions */
33
+ currentLoad?: number;
34
+ }
35
+ /** Get a tier definition by name. */
36
+ export declare function getTier(name: TierName): ResponseTier;
37
+ /**
38
+ * Select the appropriate response tier for an incoming message.
39
+ *
40
+ * Priority order:
41
+ * 1. Config routing-rule tier overrides
42
+ * 2. Full-tier keyword patterns
43
+ * 3. Direct-tier keyword patterns (short / simple)
44
+ * 4. Lightweight keyword patterns
45
+ * 5. Context-based adjustments (load, history)
46
+ * 6. Default → standard
47
+ */
48
+ export declare function selectResponseTier(message: string, config: SquadConfig, context?: TierContext): ResponseTier;
49
+ //# sourceMappingURL=response-tiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-tiers.d.ts","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuCD,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAEpD;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,WAAgB,GACxB,YAAY,CAoCd"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Response Tier Selection (M3-4, Issue #143)
3
+ *
4
+ * Not all tasks need the same level of agent involvement. This module
5
+ * selects one of four response tiers based on message complexity,
6
+ * keyword patterns, config overrides, and history hints.
7
+ *
8
+ * Tiers:
9
+ * Direct — Answer inline, no agent spawn
10
+ * Lightweight — Single fast-model agent
11
+ * Standard — Single standard-model agent
12
+ * Full — Multi-agent fan-out (premium models)
13
+ */
14
+ // --- Tier Definitions ---
15
+ const TIER_DIRECT = {
16
+ tier: 'direct',
17
+ modelTier: 'none',
18
+ maxAgents: 0,
19
+ timeout: 0,
20
+ };
21
+ const TIER_LIGHTWEIGHT = {
22
+ tier: 'lightweight',
23
+ modelTier: 'fast',
24
+ maxAgents: 1,
25
+ timeout: 30,
26
+ };
27
+ const TIER_STANDARD = {
28
+ tier: 'standard',
29
+ modelTier: 'standard',
30
+ maxAgents: 1,
31
+ timeout: 120,
32
+ };
33
+ const TIER_FULL = {
34
+ tier: 'full',
35
+ modelTier: 'premium',
36
+ maxAgents: 5,
37
+ timeout: 300,
38
+ };
39
+ const TIERS = {
40
+ direct: TIER_DIRECT,
41
+ lightweight: TIER_LIGHTWEIGHT,
42
+ standard: TIER_STANDARD,
43
+ full: TIER_FULL,
44
+ };
45
+ /** Get a tier definition by name. */
46
+ export function getTier(name) {
47
+ return { ...TIERS[name] };
48
+ }
49
+ // --- Keyword Patterns ---
50
+ /** Patterns that suggest a direct (no-spawn) response. */
51
+ const DIRECT_PATTERNS = [
52
+ /^(hi|hello|hey|thanks|thank you|ok|okay)\b/i,
53
+ /^what('s| is) (your|the) (name|version|status)\b/i,
54
+ /^(help|usage|how do I use)\b/i,
55
+ /\?$/,
56
+ ];
57
+ /** Patterns that suggest lightweight (quick lookup / simple task). */
58
+ const LIGHTWEIGHT_PATTERNS = [
59
+ /\b(list|show|display|get|find|search|where is)\b/i,
60
+ /\b(status|info|check)\b/i,
61
+ /\b(rename|move|delete|remove)\s+\w+/i,
62
+ ];
63
+ /** Patterns that suggest full multi-agent fan-out. */
64
+ const FULL_PATTERNS = [
65
+ /\b(refactor|redesign|migrate|rewrite)\b.*\b(entire|all|whole|system|codebase)\b/i,
66
+ /\b(implement|build|create)\b.*\b(feature|module|system|service)\b/i,
67
+ /\bmulti[- ]?(agent|step|file)\b/i,
68
+ /\b(security audit|pen\s?test|vulnerability scan)\b/i,
69
+ /\bfull\s+(review|analysis|sweep)\b/i,
70
+ ];
71
+ // --- Selection Logic ---
72
+ /**
73
+ * Select the appropriate response tier for an incoming message.
74
+ *
75
+ * Priority order:
76
+ * 1. Config routing-rule tier overrides
77
+ * 2. Full-tier keyword patterns
78
+ * 3. Direct-tier keyword patterns (short / simple)
79
+ * 4. Lightweight keyword patterns
80
+ * 5. Context-based adjustments (load, history)
81
+ * 6. Default → standard
82
+ */
83
+ export function selectResponseTier(message, config, context = {}) {
84
+ const trimmed = message.trim();
85
+ // 1. Config override: check routing rules for explicit tier
86
+ const configTier = matchConfigTier(trimmed, config);
87
+ if (configTier)
88
+ return getTier(configTier);
89
+ // 2. Full patterns (checked first — they are most impactful)
90
+ if (FULL_PATTERNS.some((p) => p.test(trimmed))) {
91
+ return applyLoadAdjustment(getTier('full'), context);
92
+ }
93
+ // 3. Very short messages are usually direct
94
+ if (trimmed.length < 20 && !trimmed.includes('\n')) {
95
+ if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
96
+ return getTier('direct');
97
+ }
98
+ }
99
+ // 4. Direct patterns (greetings, simple questions)
100
+ if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
101
+ return getTier('direct');
102
+ }
103
+ // 5. Lightweight patterns
104
+ if (LIGHTWEIGHT_PATTERNS.some((p) => p.test(trimmed))) {
105
+ return applyLoadAdjustment(getTier('lightweight'), context);
106
+ }
107
+ // 6. History hint: if recent history contains multi-file changes → standard+
108
+ if (context.recentHistory && context.recentHistory.length > 3) {
109
+ return applyLoadAdjustment(getTier('standard'), context);
110
+ }
111
+ // Default: standard
112
+ return applyLoadAdjustment(getTier('standard'), context);
113
+ }
114
+ // --- Helpers ---
115
+ function matchConfigTier(message, config) {
116
+ if (!config.routing?.rules)
117
+ return undefined;
118
+ const lower = message.toLowerCase();
119
+ for (const rule of config.routing.rules) {
120
+ if (!rule.tier)
121
+ continue;
122
+ // Simple pattern match against the rule pattern
123
+ const words = rule.pattern
124
+ .toLowerCase()
125
+ .split(/[-_\s]+/)
126
+ .filter((w) => w.length > 2);
127
+ if (words.length > 0 && words.every((w) => lower.includes(w))) {
128
+ return rule.tier;
129
+ }
130
+ }
131
+ return undefined;
132
+ }
133
+ /**
134
+ * Downgrade tier when load is high to conserve resources.
135
+ */
136
+ function applyLoadAdjustment(tier, context) {
137
+ if (context.currentLoad === undefined)
138
+ return tier;
139
+ // If load is ≥ 4 active sessions, cap at standard
140
+ if (context.currentLoad >= 4 && tier.tier === 'full') {
141
+ return getTier('standard');
142
+ }
143
+ // If load is ≥ 6, cap at lightweight
144
+ if (context.currentLoad >= 6 && tier.tier === 'standard') {
145
+ return getTier('lightweight');
146
+ }
147
+ return tier;
148
+ }
149
+ //# sourceMappingURL=response-tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-tiers.js","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
3
+ *
4
+ * Programmatic enforcement of governance policies via SDK hooks.
5
+ * Replaces prompt-level rules with deterministic, testable handlers.
6
+ *
7
+ * Hook types:
8
+ * - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
9
+ * - onPostToolUse: Inspect tool results after execution (scrub PII, log)
10
+ * - onSessionStart: Inject context at session creation
11
+ * - onSessionEnd: Cleanup at session teardown
12
+ * - onErrorOccurred: Handle errors from SDK or tools
13
+ */
14
+ export type HookAction = 'allow' | 'block' | 'modify';
15
+ export interface PreToolUseContext {
16
+ /** Name of the tool being called */
17
+ toolName: string;
18
+ /** Arguments passed to the tool */
19
+ arguments: Record<string, unknown>;
20
+ /** Agent name that invoked the tool */
21
+ agentName: string;
22
+ /** Session ID */
23
+ sessionId: string;
24
+ }
25
+ export interface PreToolUseResult {
26
+ action: HookAction;
27
+ /** Modified arguments (only if action === 'modify') */
28
+ modifiedArguments?: Record<string, unknown>;
29
+ /** Reason for blocking (only if action === 'block') */
30
+ reason?: string;
31
+ }
32
+ export interface PostToolUseContext {
33
+ toolName: string;
34
+ arguments: Record<string, unknown>;
35
+ result: unknown;
36
+ agentName: string;
37
+ sessionId: string;
38
+ }
39
+ export interface PostToolUseResult {
40
+ /** Scrubbed or modified result */
41
+ result: unknown;
42
+ }
43
+ export type PreToolUseHook = (ctx: PreToolUseContext) => PreToolUseResult | Promise<PreToolUseResult>;
44
+ export type PostToolUseHook = (ctx: PostToolUseContext) => PostToolUseResult | Promise<PostToolUseResult>;
45
+ export interface PolicyConfig {
46
+ /** File paths agents are allowed to write to (glob patterns) */
47
+ allowedWritePaths?: string[];
48
+ /** Shell commands that are always blocked */
49
+ blockedCommands?: string[];
50
+ /** Maximum ask_user calls per session */
51
+ maxAskUserPerSession?: number;
52
+ /** Enable PII scrubbing on tool outputs */
53
+ scrubPii?: boolean;
54
+ /** Enable reviewer lockout protocol */
55
+ reviewerLockout?: boolean;
56
+ }
57
+ export declare const DEFAULT_BLOCKED_COMMANDS: string[];
58
+ export declare class HookPipeline {
59
+ private preToolHooks;
60
+ private postToolHooks;
61
+ private config;
62
+ private askUserCallCount;
63
+ private reviewerLockout;
64
+ constructor(config?: PolicyConfig);
65
+ /** Register a pre-tool-use hook */
66
+ addPreToolHook(hook: PreToolUseHook): void;
67
+ /** Register a post-tool-use hook */
68
+ addPostToolHook(hook: PostToolUseHook): void;
69
+ /** Run all pre-tool hooks in order. First 'block' wins. */
70
+ runPreToolHooks(ctx: PreToolUseContext): Promise<PreToolUseResult>;
71
+ /** Run all post-tool hooks in order */
72
+ runPostToolHooks(ctx: PostToolUseContext): Promise<PostToolUseResult>;
73
+ /** Create file-write guard hook */
74
+ private createFileWriteGuard;
75
+ /** Create shell command restriction hook */
76
+ private createShellCommandRestriction;
77
+ /** Create ask_user rate limiter hook */
78
+ private createAskUserRateLimiter;
79
+ /** Create PII scrubbing hook */
80
+ private createPiiScrubber;
81
+ /** Recursively scrub PII from object */
82
+ private scrubObjectRecursive;
83
+ /** Simple glob matcher (supports * and **) */
84
+ private matchGlob;
85
+ /** Get the reviewer lockout hook instance */
86
+ getReviewerLockout(): ReviewerLockoutHook;
87
+ }
88
+ export declare class ReviewerLockoutHook {
89
+ private lockoutRegistry;
90
+ /** Lock out an agent from an artifact */
91
+ lockout(artifactId: string, agentName: string): void;
92
+ /** Check if an agent is locked out of an artifact */
93
+ isLockedOut(artifactId: string, agentName: string): boolean;
94
+ /** Clear lockout for an artifact */
95
+ clearLockout(artifactId: string): void;
96
+ /** Get all lockouts for an artifact */
97
+ getLockedAgents(artifactId: string): string[];
98
+ /** Clear all lockouts */
99
+ clearAll(): void;
100
+ /** Create pre-tool-use hook for reviewer lockout */
101
+ createHook(): PreToolUseHook;
102
+ }
103
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
3
+ *
4
+ * Programmatic enforcement of governance policies via SDK hooks.
5
+ * Replaces prompt-level rules with deterministic, testable handlers.
6
+ *
7
+ * Hook types:
8
+ * - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
9
+ * - onPostToolUse: Inspect tool results after execution (scrub PII, log)
10
+ * - onSessionStart: Inject context at session creation
11
+ * - onSessionEnd: Cleanup at session teardown
12
+ * - onErrorOccurred: Handle errors from SDK or tools
13
+ */
14
+ export const DEFAULT_BLOCKED_COMMANDS = [
15
+ 'rm -rf',
16
+ 'git push --force',
17
+ 'git rebase',
18
+ 'git reset --hard',
19
+ ];
20
+ // --- Hook Pipeline ---
21
+ export class HookPipeline {
22
+ preToolHooks = [];
23
+ postToolHooks = [];
24
+ config;
25
+ askUserCallCount = new Map();
26
+ reviewerLockout;
27
+ constructor(config = {}) {
28
+ this.config = config;
29
+ this.reviewerLockout = new ReviewerLockoutHook();
30
+ // Register file-write guard hook
31
+ if (config.allowedWritePaths && config.allowedWritePaths.length > 0) {
32
+ this.addPreToolHook(this.createFileWriteGuard(config.allowedWritePaths));
33
+ }
34
+ // Register shell command restriction hook
35
+ const blockedCommands = config.blockedCommands || DEFAULT_BLOCKED_COMMANDS;
36
+ if (blockedCommands.length > 0) {
37
+ this.addPreToolHook(this.createShellCommandRestriction(blockedCommands));
38
+ }
39
+ // Register ask_user rate limiter
40
+ if (config.maxAskUserPerSession !== undefined && config.maxAskUserPerSession > 0) {
41
+ this.addPreToolHook(this.createAskUserRateLimiter(config.maxAskUserPerSession));
42
+ }
43
+ // Register reviewer lockout hook
44
+ if (config.reviewerLockout) {
45
+ this.addPreToolHook(this.reviewerLockout.createHook());
46
+ }
47
+ // Register PII scrubbing hook
48
+ if (config.scrubPii) {
49
+ this.addPostToolHook(this.createPiiScrubber());
50
+ }
51
+ }
52
+ /** Register a pre-tool-use hook */
53
+ addPreToolHook(hook) {
54
+ this.preToolHooks.push(hook);
55
+ }
56
+ /** Register a post-tool-use hook */
57
+ addPostToolHook(hook) {
58
+ this.postToolHooks.push(hook);
59
+ }
60
+ /** Run all pre-tool hooks in order. First 'block' wins. */
61
+ async runPreToolHooks(ctx) {
62
+ for (const hook of this.preToolHooks) {
63
+ const result = await hook(ctx);
64
+ if (result.action === 'block')
65
+ return result;
66
+ if (result.action === 'modify' && result.modifiedArguments) {
67
+ ctx = { ...ctx, arguments: result.modifiedArguments };
68
+ }
69
+ }
70
+ return { action: 'allow' };
71
+ }
72
+ /** Run all post-tool hooks in order */
73
+ async runPostToolHooks(ctx) {
74
+ let result = ctx.result;
75
+ for (const hook of this.postToolHooks) {
76
+ const hookResult = await hook({ ...ctx, result });
77
+ result = hookResult.result;
78
+ }
79
+ return { result };
80
+ }
81
+ /** Create file-write guard hook */
82
+ createFileWriteGuard(allowedPaths) {
83
+ return (ctx) => {
84
+ const writeTools = ['edit', 'create', 'write_file', 'create_file'];
85
+ if (!writeTools.includes(ctx.toolName)) {
86
+ return { action: 'allow' };
87
+ }
88
+ const filePath = ctx.arguments.path || ctx.arguments.file_path;
89
+ if (!filePath || typeof filePath !== 'string') {
90
+ return { action: 'allow' };
91
+ }
92
+ const isAllowed = allowedPaths.some(pattern => this.matchGlob(filePath, pattern));
93
+ if (!isAllowed) {
94
+ console.warn('[HookPipeline] File write blocked', {
95
+ agent: ctx.agentName,
96
+ tool: ctx.toolName,
97
+ path: filePath,
98
+ allowedPaths,
99
+ });
100
+ return {
101
+ action: 'block',
102
+ reason: `File write blocked: "${filePath}" does not match allowed paths. Allowed patterns: ${allowedPaths.join(', ')}`,
103
+ };
104
+ }
105
+ return { action: 'allow' };
106
+ };
107
+ }
108
+ /** Create shell command restriction hook */
109
+ createShellCommandRestriction(blockedCommands) {
110
+ return (ctx) => {
111
+ const shellTools = ['powershell', 'bash', 'shell', 'exec'];
112
+ if (!shellTools.includes(ctx.toolName)) {
113
+ return { action: 'allow' };
114
+ }
115
+ const command = ctx.arguments.command || ctx.arguments.cmd;
116
+ if (!command || typeof command !== 'string') {
117
+ return { action: 'allow' };
118
+ }
119
+ for (const blocked of blockedCommands) {
120
+ if (command.includes(blocked)) {
121
+ console.warn('[HookPipeline] Shell command blocked', {
122
+ agent: ctx.agentName,
123
+ tool: ctx.toolName,
124
+ command,
125
+ blockedPattern: blocked,
126
+ });
127
+ return {
128
+ action: 'block',
129
+ reason: `Shell command blocked: Command contains prohibited pattern "${blocked}". Blocked commands: ${blockedCommands.join(', ')}`,
130
+ };
131
+ }
132
+ }
133
+ return { action: 'allow' };
134
+ };
135
+ }
136
+ /** Create ask_user rate limiter hook */
137
+ createAskUserRateLimiter(maxCalls) {
138
+ return (ctx) => {
139
+ if (ctx.toolName !== 'ask_user') {
140
+ return { action: 'allow' };
141
+ }
142
+ const currentCount = this.askUserCallCount.get(ctx.sessionId) || 0;
143
+ if (currentCount >= maxCalls) {
144
+ console.warn('[HookPipeline] ask_user rate limit exceeded', {
145
+ agent: ctx.agentName,
146
+ sessionId: ctx.sessionId,
147
+ currentCount,
148
+ maxCalls,
149
+ });
150
+ return {
151
+ action: 'block',
152
+ reason: `ask_user rate limit exceeded: ${currentCount}/${maxCalls} calls used for this session. The agent should proceed without user input.`,
153
+ };
154
+ }
155
+ this.askUserCallCount.set(ctx.sessionId, currentCount + 1);
156
+ return { action: 'allow' };
157
+ };
158
+ }
159
+ /** Create PII scrubbing hook */
160
+ createPiiScrubber() {
161
+ const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
162
+ return (ctx) => {
163
+ let result = ctx.result;
164
+ if (typeof result === 'string') {
165
+ const scrubbed = result.replace(emailRegex, '[EMAIL_REDACTED]');
166
+ if (scrubbed !== result) {
167
+ console.warn('[HookPipeline] PII scrubbed from tool output', {
168
+ tool: ctx.toolName,
169
+ agent: ctx.agentName,
170
+ sessionId: ctx.sessionId,
171
+ });
172
+ result = scrubbed;
173
+ }
174
+ }
175
+ else if (result && typeof result === 'object') {
176
+ result = this.scrubObjectRecursive(result, emailRegex);
177
+ }
178
+ return { result };
179
+ };
180
+ }
181
+ /** Recursively scrub PII from object */
182
+ scrubObjectRecursive(obj, regex) {
183
+ if (typeof obj === 'string') {
184
+ return obj.replace(regex, '[EMAIL_REDACTED]');
185
+ }
186
+ if (Array.isArray(obj)) {
187
+ return obj.map(item => this.scrubObjectRecursive(item, regex));
188
+ }
189
+ if (obj && typeof obj === 'object') {
190
+ const scrubbed = {};
191
+ for (const [key, value] of Object.entries(obj)) {
192
+ scrubbed[key] = this.scrubObjectRecursive(value, regex);
193
+ }
194
+ return scrubbed;
195
+ }
196
+ return obj;
197
+ }
198
+ /** Simple glob matcher (supports * and **) */
199
+ matchGlob(path, pattern) {
200
+ // Normalize path separators
201
+ const normalizedPath = path.replace(/\\/g, '/');
202
+ const normalizedPattern = pattern.replace(/\\/g, '/');
203
+ // Convert glob pattern to regex (escape . first, then handle wildcards)
204
+ let regexPattern = normalizedPattern
205
+ .replace(/\./g, '\\.') // Escape literal dots first
206
+ .replace(/\*\*/g, '___DOUBLESTAR___') // Placeholder for **
207
+ .replace(/\*/g, '[^/]*') // Single * matches within path segment
208
+ .replace(/___DOUBLESTAR___/g, '.*') // ** matches across segments
209
+ .replace(/\?/g, '.'); // ? matches single char
210
+ const regex = new RegExp(`^${regexPattern}$`);
211
+ return regex.test(normalizedPath);
212
+ }
213
+ /** Get the reviewer lockout hook instance */
214
+ getReviewerLockout() {
215
+ return this.reviewerLockout;
216
+ }
217
+ }
218
+ // --- Reviewer Lockout Hook ---
219
+ export class ReviewerLockoutHook {
220
+ lockoutRegistry = new Map();
221
+ /** Lock out an agent from an artifact */
222
+ lockout(artifactId, agentName) {
223
+ if (!this.lockoutRegistry.has(artifactId)) {
224
+ this.lockoutRegistry.set(artifactId, new Set());
225
+ }
226
+ this.lockoutRegistry.get(artifactId).add(agentName);
227
+ }
228
+ /** Check if an agent is locked out of an artifact */
229
+ isLockedOut(artifactId, agentName) {
230
+ const lockedAgents = this.lockoutRegistry.get(artifactId);
231
+ return lockedAgents ? lockedAgents.has(agentName) : false;
232
+ }
233
+ /** Clear lockout for an artifact */
234
+ clearLockout(artifactId) {
235
+ this.lockoutRegistry.delete(artifactId);
236
+ }
237
+ /** Get all lockouts for an artifact */
238
+ getLockedAgents(artifactId) {
239
+ const lockedAgents = this.lockoutRegistry.get(artifactId);
240
+ return lockedAgents ? Array.from(lockedAgents) : [];
241
+ }
242
+ /** Clear all lockouts */
243
+ clearAll() {
244
+ this.lockoutRegistry.clear();
245
+ }
246
+ /** Create pre-tool-use hook for reviewer lockout */
247
+ createHook() {
248
+ return (ctx) => {
249
+ const writeTools = ['edit', 'create', 'write_file', 'create_file'];
250
+ if (!writeTools.includes(ctx.toolName)) {
251
+ return { action: 'allow' };
252
+ }
253
+ const filePath = ctx.arguments.path || ctx.arguments.file_path;
254
+ if (!filePath || typeof filePath !== 'string') {
255
+ return { action: 'allow' };
256
+ }
257
+ // Check all artifacts to see if this agent is locked out
258
+ for (const [artifactId, lockedAgents] of this.lockoutRegistry.entries()) {
259
+ if (lockedAgents.has(ctx.agentName)) {
260
+ // Agent is locked out of this artifact — check if file belongs to it
261
+ // Simple heuristic: artifact ID is typically a file path or pattern
262
+ if (filePath.includes(artifactId) || artifactId.includes(filePath)) {
263
+ console.warn('[HookPipeline] Reviewer lockout triggered', {
264
+ agent: ctx.agentName,
265
+ artifactId,
266
+ filePath,
267
+ });
268
+ return {
269
+ action: 'block',
270
+ reason: `Reviewer lockout: Agent "${ctx.agentName}" is locked out of artifact "${artifactId}". Another reviewer must handle this artifact.`,
271
+ };
272
+ }
273
+ }
274
+ }
275
+ return { action: 'allow' };
276
+ };
277
+ }
278
+ }
279
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,25 @@
1
- export declare const VERSION = "0.6.0-alpha.0";
1
+ /**
2
+ * Squad SDK — Public API barrel export.
3
+ * This module has ZERO side effects. Safe to import as a library.
4
+ * CLI entry point lives in src/cli-entry.ts.
5
+ */
6
+ export declare const VERSION = "0.8.0";
7
+ export { resolveSquad, resolveGlobalSquadPath, ensureSquadPath } from './resolution.js';
8
+ export * from './config/index.js';
9
+ export * from './agents/onboarding.js';
10
+ export * from './casting/index.js';
11
+ export * from './skills/index.js';
12
+ export { selectResponseTier, getTier } from './coordinator/response-tiers.js';
13
+ export type { ResponseTier, TierName, TierContext, ModelTierSuggestion } from './coordinator/response-tiers.js';
14
+ export { loadConfig, loadConfigSync } from './runtime/config.js';
15
+ export type { ConfigLoadResult, ConfigValidationError } from './runtime/config.js';
16
+ export * from './runtime/streaming.js';
17
+ export * from './runtime/cost-tracker.js';
18
+ export * from './runtime/telemetry.js';
19
+ export * from './runtime/offline.js';
20
+ export * from './runtime/i18n.js';
21
+ export * from './runtime/benchmarks.js';
22
+ export * from './marketplace/index.js';
23
+ export * from './build/index.js';
24
+ export * from './sharing/index.js';
2
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC9E,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAExC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}