@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,128 @@
1
+ /**
2
+ * M4-2: npm bundling & registry publication
3
+ * Generates package.json content and validates npm publication readiness.
4
+ */
5
+ const DEFAULT_FILES = [
6
+ 'dist/',
7
+ 'README.md',
8
+ 'LICENSE',
9
+ 'CHANGELOG.md',
10
+ ];
11
+ const DEFAULT_EXPORTS = {
12
+ '.': {
13
+ import: './dist/index.js',
14
+ types: './dist/index.d.ts',
15
+ },
16
+ './config': {
17
+ import: './dist/config/index.js',
18
+ types: './dist/config/index.d.ts',
19
+ },
20
+ './agents': {
21
+ import: './dist/agents/onboarding.js',
22
+ types: './dist/agents/onboarding.d.ts',
23
+ },
24
+ './skills': {
25
+ import: './dist/skills/index.js',
26
+ types: './dist/skills/index.d.ts',
27
+ },
28
+ './runtime': {
29
+ import: './dist/runtime/config.js',
30
+ types: './dist/runtime/config.d.ts',
31
+ },
32
+ };
33
+ /**
34
+ * Generate package.json content suitable for npm publication.
35
+ */
36
+ export function generatePackageJson(config) {
37
+ const exports = {};
38
+ for (const [key, value] of Object.entries(config.exports)) {
39
+ if (typeof value === 'string') {
40
+ exports[key] = { import: value, types: value.replace(/\.js$/, '.d.ts') };
41
+ }
42
+ else {
43
+ exports[key] = { ...value };
44
+ }
45
+ }
46
+ return {
47
+ name: config.name,
48
+ version: config.version,
49
+ description: config.description,
50
+ type: 'module',
51
+ main: './dist/index.js',
52
+ types: './dist/index.d.ts',
53
+ exports,
54
+ ...(config.bin && Object.keys(config.bin).length > 0 ? { bin: { ...config.bin } } : {}),
55
+ files: [...DEFAULT_FILES],
56
+ ...(config.peerDependencies && Object.keys(config.peerDependencies).length > 0
57
+ ? { peerDependencies: { ...config.peerDependencies } }
58
+ : {}),
59
+ engines: config.engines ? { ...config.engines } : { node: '>=20.0.0' },
60
+ license: 'MIT',
61
+ repository: { type: 'git', url: 'https://github.com/bradygaster/squad.git' },
62
+ keywords: ['copilot', 'multi-agent', 'squad', 'sdk'],
63
+ };
64
+ }
65
+ /**
66
+ * Validate a package.json object for npm publication readiness.
67
+ */
68
+ export function validatePackageJson(pkg) {
69
+ const errors = [];
70
+ const warnings = [];
71
+ if (!pkg.name || typeof pkg.name !== 'string') {
72
+ errors.push('Missing or invalid "name" field');
73
+ }
74
+ else {
75
+ if (!/^(@[a-z0-9-]+\/)?[a-z0-9._-]+$/.test(pkg.name)) {
76
+ errors.push(`Invalid package name: ${pkg.name}`);
77
+ }
78
+ }
79
+ if (!pkg.version || typeof pkg.version !== 'string') {
80
+ errors.push('Missing or invalid "version" field');
81
+ }
82
+ else {
83
+ if (!/^\d+\.\d+\.\d+/.test(pkg.version)) {
84
+ errors.push(`Invalid semver version: ${pkg.version}`);
85
+ }
86
+ }
87
+ if (!pkg.description || typeof pkg.description !== 'string') {
88
+ warnings.push('Missing "description" field');
89
+ }
90
+ if (!pkg.license || typeof pkg.license !== 'string') {
91
+ warnings.push('Missing "license" field');
92
+ }
93
+ if (!pkg.exports || typeof pkg.exports !== 'object') {
94
+ errors.push('Missing "exports" map — required for ESM packages');
95
+ }
96
+ else {
97
+ const exports = pkg.exports;
98
+ if (!exports['.']) {
99
+ errors.push('Exports map missing "." entry point');
100
+ }
101
+ }
102
+ if (pkg.type !== 'module') {
103
+ warnings.push('"type" should be "module" for ESM packages');
104
+ }
105
+ if (!pkg.files || !Array.isArray(pkg.files) || pkg.files.length === 0) {
106
+ warnings.push('Missing "files" field — all files will be published');
107
+ }
108
+ if (!pkg.engines || typeof pkg.engines !== 'object') {
109
+ warnings.push('Missing "engines" field — specify Node.js version requirement');
110
+ }
111
+ if (!pkg.repository || typeof pkg.repository !== 'object') {
112
+ warnings.push('Missing "repository" field');
113
+ }
114
+ return { valid: errors.length === 0, errors, warnings };
115
+ }
116
+ /**
117
+ * Return the files array for package.json publication.
118
+ */
119
+ export function getPublishFiles() {
120
+ return [...DEFAULT_FILES];
121
+ }
122
+ /**
123
+ * Return the default ESM exports map for the SDK.
124
+ */
125
+ export function getDefaultExports() {
126
+ return JSON.parse(JSON.stringify(DEFAULT_EXPORTS));
127
+ }
128
+ //# sourceMappingURL=npm-package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-package.js","sourceRoot":"","sources":["../../src/build/npm-package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * M6-13: Release candidate build & validation
3
+ * Handles release manifest creation, validation, and release notes generation.
4
+ *
5
+ * @module build/release
6
+ */
7
+ import type { CommitInfo } from './versioning.js';
8
+ /** Release channel. */
9
+ export type ReleaseChannel = 'stable' | 'rc' | 'beta' | 'alpha';
10
+ /**
11
+ * Configuration for creating a release.
12
+ */
13
+ export interface ReleaseConfig {
14
+ /** Semver version string (e.g. "1.0.0", "1.0.0-rc.1") */
15
+ version: string;
16
+ /** Release channel */
17
+ channel: ReleaseChannel;
18
+ /** Whether this is a prerelease */
19
+ prerelease: boolean;
20
+ /** Git tag name (e.g. "v1.0.0-rc.1") */
21
+ tag: string;
22
+ }
23
+ /**
24
+ * An artifact included in a release.
25
+ */
26
+ export interface ReleaseArtifact {
27
+ /** Display name */
28
+ name: string;
29
+ /** File path */
30
+ path: string;
31
+ /** File size in bytes */
32
+ size: number;
33
+ /** SHA-256 hash */
34
+ sha256: string;
35
+ }
36
+ /**
37
+ * Release manifest describing a complete release.
38
+ */
39
+ export interface ReleaseManifest {
40
+ /** Semver version */
41
+ version: string;
42
+ /** Release channel */
43
+ channel: ReleaseChannel;
44
+ /** Build artifacts */
45
+ artifacts: ReleaseArtifact[];
46
+ /** ISO timestamp of the release */
47
+ timestamp: string;
48
+ /** Changelog markdown for this release */
49
+ changelog: string;
50
+ }
51
+ /**
52
+ * A validation error found in a release manifest.
53
+ */
54
+ export interface ReleaseValidationError {
55
+ /** Field that failed validation */
56
+ field: string;
57
+ /** Error message */
58
+ message: string;
59
+ /** Severity */
60
+ severity: 'error' | 'warning';
61
+ }
62
+ /**
63
+ * A checklist item for the release process.
64
+ */
65
+ export interface ReleaseChecklistItem {
66
+ /** Human-readable name */
67
+ name: string;
68
+ /** Function that checks this item (returns true if passing) */
69
+ check: () => boolean;
70
+ /** Whether this item is required for release */
71
+ required: boolean;
72
+ /** Current status */
73
+ status: 'pass' | 'fail' | 'skip';
74
+ }
75
+ /**
76
+ * Compute the SHA-256 hash of a buffer or string.
77
+ */
78
+ export declare function computeSha256(data: Buffer | string): string;
79
+ /**
80
+ * Build a ReleaseArtifact from a file path.
81
+ * Returns null if the file does not exist.
82
+ */
83
+ export declare function buildArtifact(name: string, filePath: string): ReleaseArtifact | null;
84
+ /**
85
+ * Create a release manifest from a ReleaseConfig.
86
+ *
87
+ * @param config - Release configuration
88
+ * @param artifactPaths - Optional map of artifact name → file path
89
+ * @returns Release manifest
90
+ */
91
+ export declare function createRelease(config: ReleaseConfig, artifactPaths?: Record<string, string>): ReleaseManifest;
92
+ /**
93
+ * Validate a release manifest for correctness.
94
+ *
95
+ * @param manifest - Release manifest to validate
96
+ * @returns Array of validation errors (empty if valid)
97
+ */
98
+ export declare function validateRelease(manifest: ReleaseManifest): ReleaseValidationError[];
99
+ /**
100
+ * Generate release notes markdown from a manifest and commit list.
101
+ */
102
+ export declare function generateReleaseNotes(manifest: ReleaseManifest, commits: CommitInfo[]): string;
103
+ /**
104
+ * Get the release checklist with default items.
105
+ * Each item's check function can be evaluated to determine pass/fail.
106
+ */
107
+ export declare function getReleaseChecklist(manifest?: ReleaseManifest): ReleaseChecklistItem[];
108
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/build/release.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOlD,uBAAuB;AACvB,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,mCAAmC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,sBAAsB;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,EAAE,MAAM,OAAO,CAAC;IACrB,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAYpF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,eAAe,CAmBjB;AAQD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,sBAAsB,EAAE,CA2EnF;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,UAAU,EAAE,GACpB,MAAM,CAqER;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,oBAAoB,EAAE,CAyEtF"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * M6-13: Release candidate build & validation
3
+ * Handles release manifest creation, validation, and release notes generation.
4
+ *
5
+ * @module build/release
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ import { existsSync, readFileSync, statSync } from 'node:fs';
9
+ import { parseConventionalCommit } from './versioning.js';
10
+ // ============================================================================
11
+ // Release creation
12
+ // ============================================================================
13
+ /**
14
+ * Compute the SHA-256 hash of a buffer or string.
15
+ */
16
+ export function computeSha256(data) {
17
+ return createHash('sha256').update(data).digest('hex');
18
+ }
19
+ /**
20
+ * Build a ReleaseArtifact from a file path.
21
+ * Returns null if the file does not exist.
22
+ */
23
+ export function buildArtifact(name, filePath) {
24
+ if (!existsSync(filePath))
25
+ return null;
26
+ const content = readFileSync(filePath);
27
+ const stat = statSync(filePath);
28
+ return {
29
+ name,
30
+ path: filePath,
31
+ size: stat.size,
32
+ sha256: computeSha256(content),
33
+ };
34
+ }
35
+ /**
36
+ * Create a release manifest from a ReleaseConfig.
37
+ *
38
+ * @param config - Release configuration
39
+ * @param artifactPaths - Optional map of artifact name → file path
40
+ * @returns Release manifest
41
+ */
42
+ export function createRelease(config, artifactPaths) {
43
+ const artifacts = [];
44
+ if (artifactPaths) {
45
+ for (const [name, filePath] of Object.entries(artifactPaths)) {
46
+ const artifact = buildArtifact(name, filePath);
47
+ if (artifact) {
48
+ artifacts.push(artifact);
49
+ }
50
+ }
51
+ }
52
+ return {
53
+ version: config.version,
54
+ channel: config.channel,
55
+ artifacts,
56
+ timestamp: new Date().toISOString(),
57
+ changelog: '',
58
+ };
59
+ }
60
+ // ============================================================================
61
+ // Validation
62
+ // ============================================================================
63
+ const SEMVER_RE = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?$/;
64
+ /**
65
+ * Validate a release manifest for correctness.
66
+ *
67
+ * @param manifest - Release manifest to validate
68
+ * @returns Array of validation errors (empty if valid)
69
+ */
70
+ export function validateRelease(manifest) {
71
+ const errors = [];
72
+ // Version
73
+ if (!manifest.version) {
74
+ errors.push({ field: 'version', message: 'Version is required', severity: 'error' });
75
+ }
76
+ else if (!SEMVER_RE.test(manifest.version)) {
77
+ errors.push({ field: 'version', message: `Invalid semver version: ${manifest.version}`, severity: 'error' });
78
+ }
79
+ // Channel
80
+ const validChannels = ['stable', 'rc', 'beta', 'alpha'];
81
+ if (!manifest.channel) {
82
+ errors.push({ field: 'channel', message: 'Channel is required', severity: 'error' });
83
+ }
84
+ else if (!validChannels.includes(manifest.channel)) {
85
+ errors.push({ field: 'channel', message: `Invalid channel: ${manifest.channel}`, severity: 'error' });
86
+ }
87
+ // Channel / version consistency
88
+ if (manifest.channel === 'stable' && manifest.version.includes('-')) {
89
+ errors.push({
90
+ field: 'version',
91
+ message: 'Stable releases must not have prerelease suffixes',
92
+ severity: 'error',
93
+ });
94
+ }
95
+ if (manifest.channel !== 'stable' && !manifest.version.includes('-')) {
96
+ errors.push({
97
+ field: 'version',
98
+ message: `Non-stable channel "${manifest.channel}" should have a prerelease suffix`,
99
+ severity: 'warning',
100
+ });
101
+ }
102
+ // Timestamp
103
+ if (!manifest.timestamp) {
104
+ errors.push({ field: 'timestamp', message: 'Timestamp is required', severity: 'error' });
105
+ }
106
+ else if (isNaN(Date.parse(manifest.timestamp))) {
107
+ errors.push({ field: 'timestamp', message: 'Timestamp is not a valid ISO date', severity: 'error' });
108
+ }
109
+ // Artifacts
110
+ if (!Array.isArray(manifest.artifacts)) {
111
+ errors.push({ field: 'artifacts', message: 'Artifacts must be an array', severity: 'error' });
112
+ }
113
+ else {
114
+ for (let i = 0; i < manifest.artifacts.length; i++) {
115
+ const a = manifest.artifacts[i];
116
+ if (!a.name) {
117
+ errors.push({ field: `artifacts[${i}].name`, message: 'Artifact name is required', severity: 'error' });
118
+ }
119
+ if (!a.path) {
120
+ errors.push({ field: `artifacts[${i}].path`, message: 'Artifact path is required', severity: 'error' });
121
+ }
122
+ if (typeof a.size !== 'number' || a.size < 0) {
123
+ errors.push({ field: `artifacts[${i}].size`, message: 'Artifact size must be a non-negative number', severity: 'error' });
124
+ }
125
+ if (!a.sha256 || !/^[a-f0-9]{64}$/.test(a.sha256)) {
126
+ errors.push({ field: `artifacts[${i}].sha256`, message: 'Artifact sha256 must be a valid 64-char hex string', severity: 'error' });
127
+ }
128
+ }
129
+ // Duplicate names
130
+ const names = manifest.artifacts.map((a) => a.name);
131
+ const dupes = names.filter((n, i) => names.indexOf(n) !== i);
132
+ if (dupes.length > 0) {
133
+ errors.push({ field: 'artifacts', message: `Duplicate artifact names: ${[...new Set(dupes)].join(', ')}`, severity: 'warning' });
134
+ }
135
+ }
136
+ // Changelog (warning only)
137
+ if (!manifest.changelog) {
138
+ errors.push({ field: 'changelog', message: 'Changelog is empty', severity: 'warning' });
139
+ }
140
+ return errors;
141
+ }
142
+ // ============================================================================
143
+ // Release notes generation
144
+ // ============================================================================
145
+ /**
146
+ * Generate release notes markdown from a manifest and commit list.
147
+ */
148
+ export function generateReleaseNotes(manifest, commits) {
149
+ const lines = [];
150
+ const date = manifest.timestamp ? manifest.timestamp.slice(0, 10) : new Date().toISOString().slice(0, 10);
151
+ lines.push(`# ${manifest.version} (${date})`);
152
+ lines.push('');
153
+ if (manifest.channel !== 'stable') {
154
+ lines.push(`> **${manifest.channel.toUpperCase()}** release — not recommended for production use.`);
155
+ lines.push('');
156
+ }
157
+ // Group commits by type
158
+ const groups = {};
159
+ const breaking = [];
160
+ for (const commit of commits) {
161
+ const parsed = parseConventionalCommit(commit.message);
162
+ if (parsed.breaking) {
163
+ breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
164
+ }
165
+ const key = parsed.type;
166
+ if (!groups[key])
167
+ groups[key] = [];
168
+ groups[key].push({ description: parsed.description, sha: commit.sha });
169
+ }
170
+ if (breaking.length > 0) {
171
+ lines.push('## ⚠ Breaking Changes');
172
+ lines.push('');
173
+ lines.push(...breaking);
174
+ lines.push('');
175
+ }
176
+ const headings = {
177
+ feat: '## Features',
178
+ fix: '## Bug Fixes',
179
+ perf: '## Performance',
180
+ refactor: '## Refactoring',
181
+ docs: '## Documentation',
182
+ chore: '## Chores',
183
+ test: '## Tests',
184
+ ci: '## CI',
185
+ };
186
+ for (const [type, heading] of Object.entries(headings)) {
187
+ const items = groups[type];
188
+ if (!items || items.length === 0)
189
+ continue;
190
+ lines.push(heading);
191
+ lines.push('');
192
+ for (const item of items) {
193
+ lines.push(`- ${item.description} (${item.sha.slice(0, 7)})`);
194
+ }
195
+ lines.push('');
196
+ }
197
+ // Artifacts section
198
+ if (manifest.artifacts.length > 0) {
199
+ lines.push('## Artifacts');
200
+ lines.push('');
201
+ lines.push('| Name | Size | SHA-256 |');
202
+ lines.push('|------|------|---------|');
203
+ for (const a of manifest.artifacts) {
204
+ const sizeKb = (a.size / 1024).toFixed(1);
205
+ lines.push(`| ${a.name} | ${sizeKb} KB | \`${a.sha256.slice(0, 12)}…\` |`);
206
+ }
207
+ lines.push('');
208
+ }
209
+ return lines.join('\n').trimEnd() + '\n';
210
+ }
211
+ // ============================================================================
212
+ // Release checklist
213
+ // ============================================================================
214
+ /**
215
+ * Get the release checklist with default items.
216
+ * Each item's check function can be evaluated to determine pass/fail.
217
+ */
218
+ export function getReleaseChecklist(manifest) {
219
+ const items = [
220
+ {
221
+ name: 'Version is valid semver',
222
+ check: () => manifest ? SEMVER_RE.test(manifest.version) : false,
223
+ required: true,
224
+ status: 'skip',
225
+ },
226
+ {
227
+ name: 'Channel is set',
228
+ check: () => manifest ? !!manifest.channel : false,
229
+ required: true,
230
+ status: 'skip',
231
+ },
232
+ {
233
+ name: 'Timestamp is present',
234
+ check: () => manifest ? !!manifest.timestamp && !isNaN(Date.parse(manifest.timestamp)) : false,
235
+ required: true,
236
+ status: 'skip',
237
+ },
238
+ {
239
+ name: 'At least one artifact',
240
+ check: () => manifest ? manifest.artifacts.length > 0 : false,
241
+ required: false,
242
+ status: 'skip',
243
+ },
244
+ {
245
+ name: 'Changelog is non-empty',
246
+ check: () => manifest ? !!manifest.changelog : false,
247
+ required: false,
248
+ status: 'skip',
249
+ },
250
+ {
251
+ name: 'All artifact hashes are valid',
252
+ check: () => {
253
+ if (!manifest)
254
+ return false;
255
+ return manifest.artifacts.every((a) => /^[a-f0-9]{64}$/.test(a.sha256));
256
+ },
257
+ required: true,
258
+ status: 'skip',
259
+ },
260
+ {
261
+ name: 'No duplicate artifact names',
262
+ check: () => {
263
+ if (!manifest)
264
+ return false;
265
+ const names = manifest.artifacts.map((a) => a.name);
266
+ return new Set(names).size === names.length;
267
+ },
268
+ required: true,
269
+ status: 'skip',
270
+ },
271
+ {
272
+ name: 'Version matches channel',
273
+ check: () => {
274
+ if (!manifest)
275
+ return false;
276
+ if (manifest.channel === 'stable')
277
+ return !manifest.version.includes('-');
278
+ return manifest.version.includes('-');
279
+ },
280
+ required: false,
281
+ status: 'skip',
282
+ },
283
+ ];
284
+ // Evaluate checks
285
+ for (const item of items) {
286
+ try {
287
+ item.status = item.check() ? 'pass' : 'fail';
288
+ }
289
+ catch {
290
+ item.status = 'fail';
291
+ }
292
+ }
293
+ return items;
294
+ }
295
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/build/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * M4-10: Version stamping & CHANGELOG generation
3
+ * Conventional commits parsing, version bumping, and changelog output.
4
+ */
5
+ export interface CommitInfo {
6
+ sha: string;
7
+ message: string;
8
+ author: string;
9
+ date: string;
10
+ type: string;
11
+ }
12
+ export interface ConventionalCommit {
13
+ type: string;
14
+ scope: string | null;
15
+ description: string;
16
+ breaking: boolean;
17
+ }
18
+ /**
19
+ * Parse a conventional commit message into structured parts.
20
+ */
21
+ export declare function parseConventionalCommit(message: string): ConventionalCommit;
22
+ /**
23
+ * Bump a semver version string by the given increment type.
24
+ */
25
+ export declare function bumpVersion(current: string, type: 'major' | 'minor' | 'patch' | 'prerelease'): string;
26
+ /**
27
+ * Stamp a version string into the specified file contents.
28
+ * Returns an array of { file, content } with the version replaced.
29
+ */
30
+ export declare function stampVersion(version: string, files: string[]): {
31
+ file: string;
32
+ content: string;
33
+ }[];
34
+ /**
35
+ * Generate a CHANGELOG entry from a list of conventional commits.
36
+ */
37
+ export declare function generateChangelog(commits: CommitInfo[], currentVersion: string): string;
38
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAkB3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CA4BrG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAKlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAmDvF"}