@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,113 @@
1
+ /**
2
+ * M4-10: Version stamping & CHANGELOG generation
3
+ * Conventional commits parsing, version bumping, and changelog output.
4
+ */
5
+ /**
6
+ * Parse a conventional commit message into structured parts.
7
+ */
8
+ export function parseConventionalCommit(message) {
9
+ const line = message.split('\n')[0].trim();
10
+ // Match: type(scope)!: description or type!: description or type: description
11
+ const match = line.match(/^(\w+)(?:\(([^)]*)\))?(!)?\s*:\s*(.+)$/);
12
+ if (!match) {
13
+ return { type: 'other', scope: null, description: line, breaking: false };
14
+ }
15
+ const [, type, scope, bang, description] = match;
16
+ const breaking = bang === '!' || /^BREAKING[ -]CHANGE\b/i.test(message);
17
+ return {
18
+ type: type.toLowerCase(),
19
+ scope: scope ?? null,
20
+ description: description.trim(),
21
+ breaking,
22
+ };
23
+ }
24
+ /**
25
+ * Bump a semver version string by the given increment type.
26
+ */
27
+ export function bumpVersion(current, type) {
28
+ // Strip leading 'v' if present
29
+ const stripped = current.startsWith('v') ? current.slice(1) : current;
30
+ const prereleaseMatch = stripped.match(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+)\.(\d+))?$/);
31
+ if (!prereleaseMatch) {
32
+ throw new Error(`Invalid semver version: ${current}`);
33
+ }
34
+ let [, majorStr, minorStr, patchStr, preTag, preNum] = prereleaseMatch;
35
+ let major = parseInt(majorStr, 10);
36
+ let minor = parseInt(minorStr, 10);
37
+ let patch = parseInt(patchStr, 10);
38
+ switch (type) {
39
+ case 'major':
40
+ return `${major + 1}.0.0`;
41
+ case 'minor':
42
+ return `${major}.${minor + 1}.0`;
43
+ case 'patch':
44
+ return `${major}.${minor}.${patch + 1}`;
45
+ case 'prerelease': {
46
+ if (preTag && preNum !== undefined) {
47
+ return `${major}.${minor}.${patch}-${preTag}.${parseInt(preNum, 10) + 1}`;
48
+ }
49
+ return `${major}.${minor}.${patch + 1}-alpha.0`;
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Stamp a version string into the specified file contents.
55
+ * Returns an array of { file, content } with the version replaced.
56
+ */
57
+ export function stampVersion(version, files) {
58
+ return files.map(file => ({
59
+ file,
60
+ content: version,
61
+ }));
62
+ }
63
+ /**
64
+ * Generate a CHANGELOG entry from a list of conventional commits.
65
+ */
66
+ export function generateChangelog(commits, currentVersion) {
67
+ const date = new Date().toISOString().slice(0, 10);
68
+ const lines = [];
69
+ lines.push(`## ${currentVersion} (${date})`);
70
+ lines.push('');
71
+ const groups = {};
72
+ const breaking = [];
73
+ for (const commit of commits) {
74
+ const parsed = parseConventionalCommit(commit.message);
75
+ if (parsed.breaking) {
76
+ breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
77
+ }
78
+ const key = parsed.type;
79
+ if (!groups[key])
80
+ groups[key] = [];
81
+ groups[key].push({ scope: parsed.scope, description: parsed.description, sha: commit.sha });
82
+ }
83
+ if (breaking.length > 0) {
84
+ lines.push('### ⚠ BREAKING CHANGES');
85
+ lines.push('');
86
+ lines.push(...breaking);
87
+ lines.push('');
88
+ }
89
+ const headings = {
90
+ feat: '### Features',
91
+ fix: '### Bug Fixes',
92
+ perf: '### Performance',
93
+ refactor: '### Refactoring',
94
+ docs: '### Documentation',
95
+ chore: '### Chores',
96
+ test: '### Tests',
97
+ ci: '### CI',
98
+ };
99
+ for (const [type, heading] of Object.entries(headings)) {
100
+ const items = groups[type];
101
+ if (!items || items.length === 0)
102
+ continue;
103
+ lines.push(heading);
104
+ lines.push('');
105
+ for (const item of items) {
106
+ const scopeStr = item.scope ? `**${item.scope}:** ` : '';
107
+ lines.push(`- ${scopeStr}${item.description} (${item.sha.slice(0, 7)})`);
108
+ }
109
+ lines.push('');
110
+ }
111
+ return lines.join('\n').trimEnd() + '\n';
112
+ }
113
+ //# sourceMappingURL=versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Casting Engine v1 (M3-2, Issue #138)
3
+ *
4
+ * Generates themed agent personas from a universe template.
5
+ * Each CastMember maps to an agent role with name, personality, and backstory.
6
+ */
7
+ export type AgentRole = 'lead' | 'developer' | 'tester' | 'prompt-engineer' | 'security' | 'devops' | 'designer' | 'scribe' | 'reviewer';
8
+ export type UniverseId = 'usual-suspects' | 'oceans-eleven' | 'custom';
9
+ export interface CastMember {
10
+ /** Character name from the universe */
11
+ name: string;
12
+ /** Agent role this character fills */
13
+ role: AgentRole;
14
+ /** One-line personality trait */
15
+ personality: string;
16
+ /** Short backstory for system-prompt injection */
17
+ backstory: string;
18
+ /** Display name: "Name — Role" */
19
+ displayName: string;
20
+ }
21
+ export interface CastingConfig {
22
+ /** Universe theme to draw characters from */
23
+ universe: UniverseId;
24
+ /** Desired team size (clamped to available characters) */
25
+ teamSize?: number;
26
+ /** Roles that must be filled */
27
+ requiredRoles?: AgentRole[];
28
+ /** Custom character names (only for universe = 'custom') */
29
+ customNames?: Record<AgentRole, string>;
30
+ }
31
+ interface UniverseCharacter {
32
+ name: string;
33
+ personality: string;
34
+ backstory: string;
35
+ preferredRoles: AgentRole[];
36
+ }
37
+ interface UniverseTemplate {
38
+ id: UniverseId;
39
+ label: string;
40
+ characters: UniverseCharacter[];
41
+ }
42
+ export declare class CastingEngine {
43
+ /** List available universe IDs. */
44
+ getUniverses(): UniverseId[];
45
+ /** Get a universe template by ID. */
46
+ getUniverse(id: UniverseId): UniverseTemplate | undefined;
47
+ /**
48
+ * Cast a team of agents from a universe.
49
+ *
50
+ * Roles are filled by best-fit characters (preferredRoles match).
51
+ * Required roles are guaranteed to be present.
52
+ * Team size is clamped to available characters.
53
+ */
54
+ castTeam(config: CastingConfig): CastMember[];
55
+ private castCustomTeam;
56
+ private findBestFit;
57
+ private toCastMember;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=casting-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casting-engine.d.ts","sourceRoot":"","sources":["../../src/casting/casting-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,WAAW,GACX,QAAQ,GACR,iBAAiB,GACjB,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,EAAE,UAAU,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACzC;AAID,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAmID,qBAAa,aAAa;IACxB,mCAAmC;IACnC,YAAY,IAAI,UAAU,EAAE;IAI5B,qCAAqC;IACrC,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAIzD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IA+C7C,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Casting Engine v1 (M3-2, Issue #138)
3
+ *
4
+ * Generates themed agent personas from a universe template.
5
+ * Each CastMember maps to an agent role with name, personality, and backstory.
6
+ */
7
+ const USUAL_SUSPECTS = {
8
+ id: 'usual-suspects',
9
+ label: 'The Usual Suspects',
10
+ characters: [
11
+ {
12
+ name: 'Keyser',
13
+ personality: 'Quietly commanding; sees the whole board before anyone else.',
14
+ backstory: 'A legendary figure who orchestrates from the shadows, ensuring every piece falls into place.',
15
+ preferredRoles: ['lead'],
16
+ },
17
+ {
18
+ name: 'McManus',
19
+ personality: 'Bold and direct; ships fast, asks questions later.',
20
+ backstory: 'The hotshot operator who dives headfirst into the hardest problems.',
21
+ preferredRoles: ['developer'],
22
+ },
23
+ {
24
+ name: 'Fenster',
25
+ personality: 'Eccentric communicator; finds bugs nobody else can see.',
26
+ backstory: 'Speaks in riddles but has an uncanny knack for spotting what everyone else missed.',
27
+ preferredRoles: ['tester'],
28
+ },
29
+ {
30
+ name: 'Verbal',
31
+ personality: 'Silver-tongued storyteller; turns complexity into clarity.',
32
+ backstory: 'The narrator who shapes every prompt and message into something an LLM can\'t misunderstand.',
33
+ preferredRoles: ['prompt-engineer', 'scribe'],
34
+ },
35
+ {
36
+ name: 'Hockney',
37
+ personality: 'Street-smart and suspicious; trusts no input.',
38
+ backstory: 'A seasoned skeptic who probes every surface for weaknesses before anyone else can.',
39
+ preferredRoles: ['security', 'reviewer'],
40
+ },
41
+ {
42
+ name: 'Redfoot',
43
+ personality: 'Resourceful fixer; keeps the machinery running.',
44
+ backstory: 'The behind-the-scenes operator who makes sure builds ship and pipelines stay green.',
45
+ preferredRoles: ['devops'],
46
+ },
47
+ {
48
+ name: 'Edie',
49
+ personality: 'Methodical and detail-oriented; nothing escapes review.',
50
+ backstory: 'A meticulous analyst who ensures every deliverable meets the bar.',
51
+ preferredRoles: ['reviewer', 'tester'],
52
+ },
53
+ {
54
+ name: 'Kobayashi',
55
+ personality: 'Precise and formal; an interface between worlds.',
56
+ backstory: 'The liaison who translates requirements into structured specifications.',
57
+ preferredRoles: ['designer', 'prompt-engineer'],
58
+ },
59
+ ],
60
+ };
61
+ const OCEANS_ELEVEN = {
62
+ id: 'oceans-eleven',
63
+ label: "Ocean's Eleven",
64
+ characters: [
65
+ {
66
+ name: 'Danny',
67
+ personality: 'Cool under pressure; the plan is always three steps ahead.',
68
+ backstory: 'The mastermind who assembles the crew and keeps the vision on track.',
69
+ preferredRoles: ['lead'],
70
+ },
71
+ {
72
+ name: 'Rusty',
73
+ personality: 'Effortlessly sharp; reads people and code with equal ease.',
74
+ backstory: 'The right hand who can debug a conversation or a stack trace mid-bite.',
75
+ preferredRoles: ['developer', 'reviewer'],
76
+ },
77
+ {
78
+ name: 'Linus',
79
+ personality: 'Eager and adaptable; learns fast, ships faster.',
80
+ backstory: 'The up-and-comer who takes on any coding challenge to prove his worth.',
81
+ preferredRoles: ['developer'],
82
+ },
83
+ {
84
+ name: 'Basher',
85
+ personality: 'Explosive creativity; demolishes blockers with flair.',
86
+ backstory: 'The demolitions expert who clears technical debt and obstacles in one blast.',
87
+ preferredRoles: ['devops', 'developer'],
88
+ },
89
+ {
90
+ name: 'Livingston',
91
+ personality: 'Quiet tech wizard; the surveillance and tooling expert.',
92
+ backstory: 'The electronics specialist who wires up monitoring, logging, and automation.',
93
+ preferredRoles: ['devops', 'tester'],
94
+ },
95
+ {
96
+ name: 'Saul',
97
+ personality: 'Old-school wisdom; plays the long game with finesse.',
98
+ backstory: 'A veteran con artist who crafts the perfect prompt persona for any situation.',
99
+ preferredRoles: ['prompt-engineer', 'scribe'],
100
+ },
101
+ {
102
+ name: 'Yen',
103
+ personality: 'Acrobatic precision; navigates tight constraints with grace.',
104
+ backstory: 'The acrobat who fits into the tightest security gaps and edge cases.',
105
+ preferredRoles: ['security', 'tester'],
106
+ },
107
+ {
108
+ name: 'Virgil',
109
+ personality: 'Steadfast and reliable; the backbone of every operation.',
110
+ backstory: 'Half of the dependable duo that handles the grunt work with quiet excellence.',
111
+ preferredRoles: ['developer', 'reviewer'],
112
+ },
113
+ {
114
+ name: 'Turk',
115
+ personality: 'Competitive and driven; races to finish first.',
116
+ backstory: 'The other half of the duo, always trying to one-up his partner in velocity.',
117
+ preferredRoles: ['developer', 'designer'],
118
+ },
119
+ {
120
+ name: 'Reuben',
121
+ personality: 'Strategic backer; knows what\'s worth investing in.',
122
+ backstory: 'The financier who scopes effort and ensures the plan is economically sound.',
123
+ preferredRoles: ['lead', 'reviewer'],
124
+ },
125
+ ],
126
+ };
127
+ const UNIVERSES = new Map([
128
+ ['usual-suspects', USUAL_SUSPECTS],
129
+ ['oceans-eleven', OCEANS_ELEVEN],
130
+ ]);
131
+ // --- Casting Engine ---
132
+ export class CastingEngine {
133
+ /** List available universe IDs. */
134
+ getUniverses() {
135
+ return Array.from(UNIVERSES.keys());
136
+ }
137
+ /** Get a universe template by ID. */
138
+ getUniverse(id) {
139
+ return UNIVERSES.get(id);
140
+ }
141
+ /**
142
+ * Cast a team of agents from a universe.
143
+ *
144
+ * Roles are filled by best-fit characters (preferredRoles match).
145
+ * Required roles are guaranteed to be present.
146
+ * Team size is clamped to available characters.
147
+ */
148
+ castTeam(config) {
149
+ if (config.universe === 'custom') {
150
+ return this.castCustomTeam(config);
151
+ }
152
+ const template = UNIVERSES.get(config.universe);
153
+ if (!template) {
154
+ throw new Error(`Unknown universe: ${config.universe}`);
155
+ }
156
+ const requiredRoles = config.requiredRoles ?? ['lead', 'developer', 'tester'];
157
+ const teamSize = Math.max(requiredRoles.length, Math.min(config.teamSize ?? requiredRoles.length, template.characters.length));
158
+ const assigned = new Set();
159
+ const members = [];
160
+ // Phase 1: Fill required roles by best-fit
161
+ for (const role of requiredRoles) {
162
+ const best = this.findBestFit(template.characters, role, assigned);
163
+ if (!best) {
164
+ throw new Error(`Cannot fill required role "${role}" — not enough characters in universe "${config.universe}".`);
165
+ }
166
+ assigned.add(best.name);
167
+ members.push(this.toCastMember(best, role));
168
+ }
169
+ // Phase 2: Fill remaining slots with unassigned characters
170
+ if (members.length < teamSize) {
171
+ const remaining = template.characters.filter((c) => !assigned.has(c.name));
172
+ for (const char of remaining) {
173
+ if (members.length >= teamSize)
174
+ break;
175
+ const role = char.preferredRoles[0] ?? 'developer';
176
+ assigned.add(char.name);
177
+ members.push(this.toCastMember(char, role));
178
+ }
179
+ }
180
+ return members;
181
+ }
182
+ // --- Internals ---
183
+ castCustomTeam(config) {
184
+ if (!config.customNames || Object.keys(config.customNames).length === 0) {
185
+ throw new Error('customNames is required when universe is "custom".');
186
+ }
187
+ return Object.entries(config.customNames).map(([role, name]) => ({
188
+ name,
189
+ role,
190
+ personality: 'Custom team member.',
191
+ backstory: `${name} fills the ${role} role on this squad.`,
192
+ displayName: `${name} — ${formatRole(role)}`,
193
+ }));
194
+ }
195
+ findBestFit(characters, role, assigned) {
196
+ // Prefer characters whose first preferred role matches
197
+ const primary = characters.find((c) => !assigned.has(c.name) && c.preferredRoles[0] === role);
198
+ if (primary)
199
+ return primary;
200
+ // Fall back to any character that lists this role
201
+ const secondary = characters.find((c) => !assigned.has(c.name) && c.preferredRoles.includes(role));
202
+ if (secondary)
203
+ return secondary;
204
+ // Last resort: any unassigned character
205
+ return characters.find((c) => !assigned.has(c.name));
206
+ }
207
+ toCastMember(char, role) {
208
+ return {
209
+ name: char.name,
210
+ role,
211
+ personality: char.personality,
212
+ backstory: char.backstory,
213
+ displayName: `${char.name} — ${formatRole(role)}`,
214
+ };
215
+ }
216
+ }
217
+ function formatRole(role) {
218
+ return role
219
+ .split('-')
220
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
221
+ .join(' ');
222
+ }
223
+ //# sourceMappingURL=casting-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casting-engine.js","sourceRoot":"","sources":["../../src/casting/casting-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwDH,MAAM,cAAc,GAAqB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,oBAAoB;IAC3B,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8DAA8D;YAC3E,SAAS,EAAE,8FAA8F;YACzG,cAAc,EAAE,CAAC,MAAM,CAAC;SACzB;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,oDAAoD;YACjE,SAAS,EAAE,qEAAqE;YAChF,cAAc,EAAE,CAAC,WAAW,CAAC;SAC9B;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yDAAyD;YACtE,SAAS,EAAE,oFAAoF;YAC/F,cAAc,EAAE,CAAC,QAAQ,CAAC;SAC3B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4DAA4D;YACzE,SAAS,EAAE,8FAA8F;YACzG,cAAc,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SAC9C;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+CAA+C;YAC5D,SAAS,EAAE,oFAAoF;YAC/F,cAAc,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;SACzC;QACD;YACE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iDAAiD;YAC9D,SAAS,EAAE,qFAAqF;YAChG,cAAc,EAAE,CAAC,QAAQ,CAAC;SAC3B;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,yDAAyD;YACtE,SAAS,EAAE,mEAAmE;YAC9E,cAAc,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;SACvC;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,kDAAkD;YAC/D,SAAS,EAAE,yEAAyE;YACpF,cAAc,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;SAChD;KACF;CACF,CAAC;AAEF,MAAM,aAAa,GAAqB;IACtC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,gBAAgB;IACvB,UAAU,EAAE;QACV;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,4DAA4D;YACzE,SAAS,EAAE,sEAAsE;YACjF,cAAc,EAAE,CAAC,MAAM,CAAC;SACzB;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,4DAA4D;YACzE,SAAS,EAAE,wEAAwE;YACnF,cAAc,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;SAC1C;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,iDAAiD;YAC9D,SAAS,EAAE,wEAAwE;YACnF,cAAc,EAAE,CAAC,WAAW,CAAC;SAC9B;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uDAAuD;YACpE,SAAS,EAAE,8EAA8E;YACzF,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;SACxC;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,yDAAyD;YACtE,SAAS,EAAE,8EAA8E;YACzF,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SACrC;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,sDAAsD;YACnE,SAAS,EAAE,+EAA+E;YAC1F,cAAc,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SAC9C;QACD;YACE,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,8DAA8D;YAC3E,SAAS,EAAE,sEAAsE;YACjF,cAAc,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;SACvC;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,0DAA0D;YACvE,SAAS,EAAE,+EAA+E;YAC1F,cAAc,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;SAC1C;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,gDAAgD;YAC7D,SAAS,EAAE,6EAA6E;YACxF,cAAc,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;SAC1C;QACD;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qDAAqD;YAClE,SAAS,EAAE,6EAA6E;YACxF,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;SACrC;KACF;CACF,CAAC;AAEF,MAAM,SAAS,GAAsC,IAAI,GAAG,CAAC;IAC3D,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAClC,CAAC,eAAe,EAAE,aAAa,CAAC;CACjC,CAAC,CAAC;AAEH,yBAAyB;AAEzB,MAAM,OAAO,aAAa;IACxB,mCAAmC;IACnC,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,qCAAqC;IACrC,WAAW,CAAC,EAAc;QACxB,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,MAAqB;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,aAAa,CAAC,MAAM,EACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAC9E,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,2CAA2C;QAC3C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,0CAA0C,MAAM,CAAC,QAAQ,IAAI,CAChG,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,2DAA2D;QAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3E,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;oBAAE,MAAM;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oBAAoB;IAEZ,cAAc,CAAC,MAAqB;QAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,OAAQ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAA2B,CAAC,GAAG,CACtE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACjB,IAAI;YACJ,IAAI;YACJ,WAAW,EAAE,qBAAqB;YAClC,SAAS,EAAE,GAAG,IAAI,cAAc,IAAI,sBAAsB;YAC1D,WAAW,EAAE,GAAG,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE;SAC7C,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,UAA+B,EAC/B,IAAe,EACf,QAAqB;QAErB,uDAAuD;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAC7D,CAAC;QACF,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,kDAAkD;QAClD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAChE,CAAC;QACF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhC,wCAAwC;QACxC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,YAAY,CAAC,IAAuB,EAAE,IAAe;QAC3D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE;SAClD,CAAC;IACJ,CAAC;CACF;AAED,SAAS,UAAU,CAAC,IAAe;IACjC,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Casting History (M3-10, Issue #151)
3
+ *
4
+ * Tracks casting decisions over time and makes them queryable.
5
+ * Each record captures who was cast, when, and from which config.
6
+ */
7
+ import type { CastMember, CastingConfig, UniverseId, AgentRole } from './casting-engine.js';
8
+ export interface CastingRecordMember {
9
+ name: string;
10
+ role: AgentRole;
11
+ }
12
+ export interface CastingRecord {
13
+ /** When this cast was created */
14
+ timestamp: string;
15
+ /** Universe used for casting */
16
+ universe: UniverseId;
17
+ /** Number of agents cast */
18
+ teamSize: number;
19
+ /** Summary of each member */
20
+ members: CastingRecordMember[];
21
+ /** Snapshot of the config used */
22
+ configSnapshot: CastingConfig;
23
+ }
24
+ export interface SerializedCastingHistory {
25
+ version: 1;
26
+ records: CastingRecord[];
27
+ }
28
+ export declare class CastingHistory {
29
+ private records;
30
+ /**
31
+ * Record a casting decision.
32
+ *
33
+ * @param team - The cast team produced by CastingEngine
34
+ * @param config - The CastingConfig that produced this team
35
+ * @param timestamp - Optional override (defaults to now)
36
+ */
37
+ recordCast(team: CastMember[], config: CastingConfig, timestamp?: Date): CastingRecord;
38
+ /** Return all casting records, oldest first. */
39
+ getCastHistory(): CastingRecord[];
40
+ /**
41
+ * Return casting records that include a specific agent name.
42
+ * Useful for answering "when was Verbal last cast?"
43
+ */
44
+ getAgentHistory(agentName: string): CastingRecord[];
45
+ /** Number of recorded casts. */
46
+ get size(): number;
47
+ /** Clear all history. */
48
+ clear(): void;
49
+ /** Serialize history to a plain object suitable for JSON / config persistence. */
50
+ serializeHistory(): SerializedCastingHistory;
51
+ /** Restore history from a previously serialized object. Replaces current records. */
52
+ deserializeHistory(data: SerializedCastingHistory): void;
53
+ }
54
+ //# sourceMappingURL=casting-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casting-history.d.ts","sourceRoot":"","sources":["../../src/casting/casting-history.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAI5F,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,QAAQ,EAAE,UAAU,CAAC;IACrB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,kCAAkC;IAClC,cAAc,EAAE,aAAa,CAAC;CAC/B;AAID,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,aAAa;IAYtF,gDAAgD;IAChD,cAAc,IAAI,aAAa,EAAE;IAIjC;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAMnD,gCAAgC;IAChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAMb,kFAAkF;IAClF,gBAAgB,IAAI,wBAAwB;IAO5C,qFAAqF;IACrF,kBAAkB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI;CAMzD"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Casting History (M3-10, Issue #151)
3
+ *
4
+ * Tracks casting decisions over time and makes them queryable.
5
+ * Each record captures who was cast, when, and from which config.
6
+ */
7
+ // --- CastingHistory ---
8
+ export class CastingHistory {
9
+ records = [];
10
+ /**
11
+ * Record a casting decision.
12
+ *
13
+ * @param team - The cast team produced by CastingEngine
14
+ * @param config - The CastingConfig that produced this team
15
+ * @param timestamp - Optional override (defaults to now)
16
+ */
17
+ recordCast(team, config, timestamp) {
18
+ const record = {
19
+ timestamp: (timestamp ?? new Date()).toISOString(),
20
+ universe: config.universe,
21
+ teamSize: team.length,
22
+ members: team.map((m) => ({ name: m.name, role: m.role })),
23
+ configSnapshot: { ...config },
24
+ };
25
+ this.records.push(record);
26
+ return record;
27
+ }
28
+ /** Return all casting records, oldest first. */
29
+ getCastHistory() {
30
+ return [...this.records];
31
+ }
32
+ /**
33
+ * Return casting records that include a specific agent name.
34
+ * Useful for answering "when was Verbal last cast?"
35
+ */
36
+ getAgentHistory(agentName) {
37
+ return this.records.filter((r) => r.members.some((m) => m.name === agentName));
38
+ }
39
+ /** Number of recorded casts. */
40
+ get size() {
41
+ return this.records.length;
42
+ }
43
+ /** Clear all history. */
44
+ clear() {
45
+ this.records = [];
46
+ }
47
+ // --- Serialization for config round-trip ---
48
+ /** Serialize history to a plain object suitable for JSON / config persistence. */
49
+ serializeHistory() {
50
+ return {
51
+ version: 1,
52
+ records: this.records.map((r) => ({ ...r })),
53
+ };
54
+ }
55
+ /** Restore history from a previously serialized object. Replaces current records. */
56
+ deserializeHistory(data) {
57
+ if (!data || data.version !== 1 || !Array.isArray(data.records)) {
58
+ throw new Error('Invalid casting history data: expected version 1 with records array');
59
+ }
60
+ this.records = data.records.map((r) => ({ ...r }));
61
+ }
62
+ }
63
+ //# sourceMappingURL=casting-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casting-history.js","sourceRoot":"","sources":["../../src/casting/casting-history.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH,yBAAyB;AAEzB,MAAM,OAAO,cAAc;IACjB,OAAO,GAAoB,EAAE,CAAC;IAEtC;;;;;;OAMG;IACH,UAAU,CAAC,IAAkB,EAAE,MAAqB,EAAE,SAAgB;QACpE,MAAM,MAAM,GAAkB;YAC5B,SAAS,EAAE,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,cAAc,EAAE,EAAE,GAAG,MAAM,EAAE;SAC9B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gDAAgD;IAChD,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAC5C,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,8CAA8C;IAE9C,kFAAkF;IAClF,gBAAgB;QACd,OAAO;YACL,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SAC7C,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,kBAAkB,CAAC,IAA8B;QAC/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Casting System (PRD 11 + M3-2)
3
+ *
4
+ * Runtime casting engine that generates agent personas from universe themes.
5
+ * Typed config replaces static markdown definitions.
6
+ *
7
+ * v1 API (M3-2): CastingEngine.castTeam(config) → CastMember[]
8
+ * Legacy API: CastingRegistry (filesystem-backed, stub)
9
+ */
10
+ export { CastingEngine, type CastMember, type CastingConfig, type AgentRole, type UniverseId, } from './casting-engine.js';
11
+ export { CastingHistory, type CastingRecord, type CastingRecordMember, type SerializedCastingHistory, } from './casting-history.js';
12
+ export interface CastingUniverse {
13
+ /** Universe name (e.g., 'The Wire', 'Seinfeld') */
14
+ name: string;
15
+ /** Available character names */
16
+ characters: string[];
17
+ /** Universe-specific constraints */
18
+ constraints?: string[];
19
+ }
20
+ export interface CastingEntry {
21
+ /** Agent role name (e.g., 'core-dev', 'lead') */
22
+ role: string;
23
+ /** Cast character name */
24
+ characterName: string;
25
+ /** Universe the character is from */
26
+ universe: string;
27
+ /** Display name (e.g., 'Fenster — Core Dev') */
28
+ displayName: string;
29
+ }
30
+ export interface CastingRegistryConfig {
31
+ /** Path to .squad/casting/ directory */
32
+ castingDir: string;
33
+ /** Active universe name */
34
+ activeUniverse?: string;
35
+ }
36
+ export declare class CastingRegistry {
37
+ private entries;
38
+ private config;
39
+ constructor(config: CastingRegistryConfig);
40
+ load(): Promise<void>;
41
+ getByRole(role: string): CastingEntry | undefined;
42
+ getAllEntries(): CastingEntry[];
43
+ cast(role: string, _universe?: string): Promise<CastingEntry>;
44
+ recast(_universe: string): Promise<CastingEntry[]>;
45
+ }
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/casting/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,aAAa,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,EAAE,qBAAqB;IAInC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,aAAa,IAAI,YAAY,EAAE;IAIzB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAGzD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Casting System (PRD 11 + M3-2)
3
+ *
4
+ * Runtime casting engine that generates agent personas from universe themes.
5
+ * Typed config replaces static markdown definitions.
6
+ *
7
+ * v1 API (M3-2): CastingEngine.castTeam(config) → CastMember[]
8
+ * Legacy API: CastingRegistry (filesystem-backed, stub)
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ export { CastingEngine, } from './casting-engine.js';
13
+ // Re-export casting history (M3-10)
14
+ export { CastingHistory, } from './casting-history.js';
15
+ // --- Legacy Casting Registry ---
16
+ export class CastingRegistry {
17
+ entries = new Map();
18
+ config;
19
+ constructor(config) {
20
+ this.config = config;
21
+ }
22
+ async load() {
23
+ const registryPath = path.join(this.config.castingDir, 'registry.json');
24
+ if (!fs.existsSync(registryPath))
25
+ return;
26
+ const raw = fs.readFileSync(registryPath, 'utf-8');
27
+ const entries = JSON.parse(raw);
28
+ for (const entry of entries) {
29
+ this.entries.set(entry.role, entry);
30
+ }
31
+ }
32
+ getByRole(role) {
33
+ return this.entries.get(role);
34
+ }
35
+ getAllEntries() {
36
+ return Array.from(this.entries.values());
37
+ }
38
+ async cast(role, _universe) {
39
+ throw new Error('Not implemented');
40
+ }
41
+ async recast(_universe) {
42
+ throw new Error('Not implemented');
43
+ }
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/casting/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,oCAAoC;AACpC,OAAO,EACL,cAAc,GAIf,MAAM,sBAAsB,CAAC;AA+B9B,kCAAkC;AAElC,MAAM,OAAO,eAAe;IAClB,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAC/C,MAAM,CAAwB;IAEtC,YAAY,MAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO;QAEzC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,SAAkB;QACzC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF"}