@mastra/factory 0.0.0-fix-thread-subscription-multi-instance-redis-streams-20260730204150

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 (313) hide show
  1. package/CHANGELOG.md +695 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +27 -0
  4. package/dist/auth.d.ts +181 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.js +505 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/capabilities/connection.d.ts +9 -0
  9. package/dist/capabilities/connection.d.ts.map +1 -0
  10. package/dist/capabilities/connection.js +1 -0
  11. package/dist/capabilities/intake.d.ts +140 -0
  12. package/dist/capabilities/intake.d.ts.map +1 -0
  13. package/dist/capabilities/intake.js +1 -0
  14. package/dist/capabilities/version-control.d.ts +245 -0
  15. package/dist/capabilities/version-control.d.ts.map +1 -0
  16. package/dist/capabilities/version-control.js +1 -0
  17. package/dist/factory.d.ts +156 -0
  18. package/dist/factory.d.ts.map +1 -0
  19. package/dist/factory.js +483 -0
  20. package/dist/factory.js.map +1 -0
  21. package/dist/index.d.ts +14 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +7 -0
  24. package/dist/integrations/base.d.ts +210 -0
  25. package/dist/integrations/base.d.ts.map +1 -0
  26. package/dist/integrations/base.js +1 -0
  27. package/dist/integrations/github/config.d.ts +60 -0
  28. package/dist/integrations/github/config.d.ts.map +1 -0
  29. package/dist/integrations/github/config.js +42 -0
  30. package/dist/integrations/github/config.js.map +1 -0
  31. package/dist/integrations/github/factory-session.d.ts +12 -0
  32. package/dist/integrations/github/factory-session.d.ts.map +1 -0
  33. package/dist/integrations/github/factory-session.js +37 -0
  34. package/dist/integrations/github/factory-session.js.map +1 -0
  35. package/dist/integrations/github/integration.d.ts +191 -0
  36. package/dist/integrations/github/integration.d.ts.map +1 -0
  37. package/dist/integrations/github/integration.js +1077 -0
  38. package/dist/integrations/github/integration.js.map +1 -0
  39. package/dist/integrations/github/issue-triage.d.ts +27 -0
  40. package/dist/integrations/github/issue-triage.d.ts.map +1 -0
  41. package/dist/integrations/github/issue-triage.js +82 -0
  42. package/dist/integrations/github/issue-triage.js.map +1 -0
  43. package/dist/integrations/github/pat.d.ts +38 -0
  44. package/dist/integrations/github/pat.d.ts.map +1 -0
  45. package/dist/integrations/github/pat.js +59 -0
  46. package/dist/integrations/github/pat.js.map +1 -0
  47. package/dist/integrations/github/provenance.d.ts +27 -0
  48. package/dist/integrations/github/provenance.d.ts.map +1 -0
  49. package/dist/integrations/github/provenance.js +75 -0
  50. package/dist/integrations/github/provenance.js.map +1 -0
  51. package/dist/integrations/github/routes.d.ts +69 -0
  52. package/dist/integrations/github/routes.d.ts.map +1 -0
  53. package/dist/integrations/github/routes.js +1324 -0
  54. package/dist/integrations/github/routes.js.map +1 -0
  55. package/dist/integrations/github/rules.d.ts +78 -0
  56. package/dist/integrations/github/rules.d.ts.map +1 -0
  57. package/dist/integrations/github/rules.js +362 -0
  58. package/dist/integrations/github/rules.js.map +1 -0
  59. package/dist/integrations/github/sandbox-release.d.ts +38 -0
  60. package/dist/integrations/github/sandbox-release.d.ts.map +1 -0
  61. package/dist/integrations/github/sandbox-release.js +74 -0
  62. package/dist/integrations/github/sandbox-release.js.map +1 -0
  63. package/dist/integrations/github/sandbox.d.ts +281 -0
  64. package/dist/integrations/github/sandbox.d.ts.map +1 -0
  65. package/dist/integrations/github/sandbox.js +547 -0
  66. package/dist/integrations/github/sandbox.js.map +1 -0
  67. package/dist/integrations/github/session-subscriptions.d.ts +26 -0
  68. package/dist/integrations/github/session-subscriptions.d.ts.map +1 -0
  69. package/dist/integrations/github/session-subscriptions.js +192 -0
  70. package/dist/integrations/github/session-subscriptions.js.map +1 -0
  71. package/dist/integrations/github/subscriptions.d.ts +54 -0
  72. package/dist/integrations/github/subscriptions.d.ts.map +1 -0
  73. package/dist/integrations/github/subscriptions.js +62 -0
  74. package/dist/integrations/github/subscriptions.js.map +1 -0
  75. package/dist/integrations/github/token-refresh.d.ts +12 -0
  76. package/dist/integrations/github/token-refresh.d.ts.map +1 -0
  77. package/dist/integrations/github/token-refresh.js +24 -0
  78. package/dist/integrations/github/token-refresh.js.map +1 -0
  79. package/dist/integrations/github/webhook.d.ts +87 -0
  80. package/dist/integrations/github/webhook.d.ts.map +1 -0
  81. package/dist/integrations/github/webhook.js +397 -0
  82. package/dist/integrations/github/webhook.js.map +1 -0
  83. package/dist/integrations/linear/agent-tools.d.ts +34 -0
  84. package/dist/integrations/linear/agent-tools.d.ts.map +1 -0
  85. package/dist/integrations/linear/agent-tools.js +85 -0
  86. package/dist/integrations/linear/agent-tools.js.map +1 -0
  87. package/dist/integrations/linear/integration.d.ts +233 -0
  88. package/dist/integrations/linear/integration.d.ts.map +1 -0
  89. package/dist/integrations/linear/integration.js +672 -0
  90. package/dist/integrations/linear/integration.js.map +1 -0
  91. package/dist/integrations/linear/routes.d.ts +61 -0
  92. package/dist/integrations/linear/routes.d.ts.map +1 -0
  93. package/dist/integrations/linear/routes.js +239 -0
  94. package/dist/integrations/linear/routes.js.map +1 -0
  95. package/dist/integrations/linear/rules.d.ts +42 -0
  96. package/dist/integrations/linear/rules.d.ts.map +1 -0
  97. package/dist/integrations/linear/rules.js +133 -0
  98. package/dist/integrations/linear/rules.js.map +1 -0
  99. package/dist/integrations/linear/storage.d.ts +65 -0
  100. package/dist/integrations/linear/storage.d.ts.map +1 -0
  101. package/dist/integrations/linear/storage.js +1 -0
  102. package/dist/integrations/platform/api-client.d.ts +26 -0
  103. package/dist/integrations/platform/api-client.d.ts.map +1 -0
  104. package/dist/integrations/platform/api-client.js +156 -0
  105. package/dist/integrations/platform/api-client.js.map +1 -0
  106. package/dist/integrations/platform/github/event-worker.d.ts +49 -0
  107. package/dist/integrations/platform/github/event-worker.d.ts.map +1 -0
  108. package/dist/integrations/platform/github/event-worker.js +348 -0
  109. package/dist/integrations/platform/github/event-worker.js.map +1 -0
  110. package/dist/integrations/platform/github/integration.d.ts +50 -0
  111. package/dist/integrations/platform/github/integration.d.ts.map +1 -0
  112. package/dist/integrations/platform/github/integration.js +961 -0
  113. package/dist/integrations/platform/github/integration.js.map +1 -0
  114. package/dist/integrations/platform/linear/integration.d.ts +46 -0
  115. package/dist/integrations/platform/linear/integration.d.ts.map +1 -0
  116. package/dist/integrations/platform/linear/integration.js +483 -0
  117. package/dist/integrations/platform/linear/integration.js.map +1 -0
  118. package/dist/integrations/workos/integration.d.ts +39 -0
  119. package/dist/integrations/workos/integration.d.ts.map +1 -0
  120. package/dist/integrations/workos/integration.js +91 -0
  121. package/dist/integrations/workos/integration.js.map +1 -0
  122. package/dist/routes/config.d.ts +235 -0
  123. package/dist/routes/config.d.ts.map +1 -0
  124. package/dist/routes/config.js +972 -0
  125. package/dist/routes/config.js.map +1 -0
  126. package/dist/routes/custom-provider-source.d.ts +52 -0
  127. package/dist/routes/custom-provider-source.d.ts.map +1 -0
  128. package/dist/routes/custom-provider-source.js +124 -0
  129. package/dist/routes/custom-provider-source.js.map +1 -0
  130. package/dist/routes/fs.d.ts +151 -0
  131. package/dist/routes/fs.d.ts.map +1 -0
  132. package/dist/routes/fs.js +708 -0
  133. package/dist/routes/fs.js.map +1 -0
  134. package/dist/routes/intake.d.ts +23 -0
  135. package/dist/routes/intake.d.ts.map +1 -0
  136. package/dist/routes/intake.js +179 -0
  137. package/dist/routes/intake.js.map +1 -0
  138. package/dist/routes/oauth.d.ts +43 -0
  139. package/dist/routes/oauth.d.ts.map +1 -0
  140. package/dist/routes/oauth.js +463 -0
  141. package/dist/routes/oauth.js.map +1 -0
  142. package/dist/routes/projects.d.ts +19 -0
  143. package/dist/routes/projects.d.ts.map +1 -0
  144. package/dist/routes/projects.js +461 -0
  145. package/dist/routes/projects.js.map +1 -0
  146. package/dist/routes/provider-credentials.d.ts +81 -0
  147. package/dist/routes/provider-credentials.d.ts.map +1 -0
  148. package/dist/routes/provider-credentials.js +86 -0
  149. package/dist/routes/provider-credentials.js.map +1 -0
  150. package/dist/routes/route.d.ts +48 -0
  151. package/dist/routes/route.d.ts.map +1 -0
  152. package/dist/routes/route.js +15 -0
  153. package/dist/routes/route.js.map +1 -0
  154. package/dist/routes/skills.d.ts +30 -0
  155. package/dist/routes/skills.d.ts.map +1 -0
  156. package/dist/routes/skills.js +168 -0
  157. package/dist/routes/skills.js.map +1 -0
  158. package/dist/routes/surface.d.ts +91 -0
  159. package/dist/routes/surface.d.ts.map +1 -0
  160. package/dist/routes/surface.js +260 -0
  161. package/dist/routes/surface.js.map +1 -0
  162. package/dist/routes/tenant-credentials.d.ts +74 -0
  163. package/dist/routes/tenant-credentials.d.ts.map +1 -0
  164. package/dist/routes/tenant-credentials.js +156 -0
  165. package/dist/routes/tenant-credentials.js.map +1 -0
  166. package/dist/routes/work-items.d.ts +40 -0
  167. package/dist/routes/work-items.d.ts.map +1 -0
  168. package/dist/routes/work-items.js +695 -0
  169. package/dist/routes/work-items.js.map +1 -0
  170. package/dist/rules/binding-context.d.ts +5 -0
  171. package/dist/rules/binding-context.d.ts.map +1 -0
  172. package/dist/rules/binding-context.js +28 -0
  173. package/dist/rules/binding-context.js.map +1 -0
  174. package/dist/rules/defaults.d.ts +9 -0
  175. package/dist/rules/defaults.d.ts.map +1 -0
  176. package/dist/rules/defaults.js +260 -0
  177. package/dist/rules/defaults.js.map +1 -0
  178. package/dist/rules/dispatcher.d.ts +42 -0
  179. package/dist/rules/dispatcher.d.ts.map +1 -0
  180. package/dist/rules/dispatcher.js +518 -0
  181. package/dist/rules/dispatcher.js.map +1 -0
  182. package/dist/rules/index.d.ts +7 -0
  183. package/dist/rules/index.d.ts.map +1 -0
  184. package/dist/rules/index.js +5 -0
  185. package/dist/rules/processor.d.ts +54 -0
  186. package/dist/rules/processor.d.ts.map +1 -0
  187. package/dist/rules/processor.js +378 -0
  188. package/dist/rules/processor.js.map +1 -0
  189. package/dist/rules/resolve.d.ts +17 -0
  190. package/dist/rules/resolve.d.ts.map +1 -0
  191. package/dist/rules/resolve.js +30 -0
  192. package/dist/rules/resolve.js.map +1 -0
  193. package/dist/rules/start-coordinator.d.ts +60 -0
  194. package/dist/rules/start-coordinator.d.ts.map +1 -0
  195. package/dist/rules/start-coordinator.js +194 -0
  196. package/dist/rules/start-coordinator.js.map +1 -0
  197. package/dist/rules/tools.d.ts +10 -0
  198. package/dist/rules/tools.d.ts.map +1 -0
  199. package/dist/rules/tools.js +58 -0
  200. package/dist/rules/tools.js.map +1 -0
  201. package/dist/rules/transition-service.d.ts +49 -0
  202. package/dist/rules/transition-service.d.ts.map +1 -0
  203. package/dist/rules/transition-service.js +232 -0
  204. package/dist/rules/transition-service.js.map +1 -0
  205. package/dist/rules/types.d.ts +234 -0
  206. package/dist/rules/types.d.ts.map +1 -0
  207. package/dist/rules/types.js +38 -0
  208. package/dist/rules/types.js.map +1 -0
  209. package/dist/rules/validation.d.ts +11 -0
  210. package/dist/rules/validation.d.ts.map +1 -0
  211. package/dist/rules/validation.js +308 -0
  212. package/dist/rules/validation.js.map +1 -0
  213. package/dist/sandbox/fleet.d.ts +222 -0
  214. package/dist/sandbox/fleet.d.ts.map +1 -0
  215. package/dist/sandbox/fleet.js +322 -0
  216. package/dist/sandbox/fleet.js.map +1 -0
  217. package/dist/sandbox/reattach.d.ts +3 -0
  218. package/dist/sandbox/reattach.d.ts.map +1 -0
  219. package/dist/sandbox/reattach.js +16 -0
  220. package/dist/sandbox/reattach.js.map +1 -0
  221. package/dist/server-error.d.ts +12 -0
  222. package/dist/server-error.d.ts.map +1 -0
  223. package/dist/server-error.js +16 -0
  224. package/dist/server-error.js.map +1 -0
  225. package/dist/skills/service.d.ts +48 -0
  226. package/dist/skills/service.d.ts.map +1 -0
  227. package/dist/skills/service.js +40 -0
  228. package/dist/skills/service.js.map +1 -0
  229. package/dist/spa-static.d.ts +33 -0
  230. package/dist/spa-static.d.ts.map +1 -0
  231. package/dist/spa-static.js +104 -0
  232. package/dist/spa-static.js.map +1 -0
  233. package/dist/state-signing.d.ts +59 -0
  234. package/dist/state-signing.d.ts.map +1 -0
  235. package/dist/state-signing.js +83 -0
  236. package/dist/state-signing.js.map +1 -0
  237. package/dist/storage/domains/audit/agent-audit.d.ts +27 -0
  238. package/dist/storage/domains/audit/agent-audit.d.ts.map +1 -0
  239. package/dist/storage/domains/audit/agent-audit.js +66 -0
  240. package/dist/storage/domains/audit/agent-audit.js.map +1 -0
  241. package/dist/storage/domains/audit/base.d.ts +140 -0
  242. package/dist/storage/domains/audit/base.d.ts.map +1 -0
  243. package/dist/storage/domains/audit/base.js +184 -0
  244. package/dist/storage/domains/audit/base.js.map +1 -0
  245. package/dist/storage/domains/audit/domain.d.ts +69 -0
  246. package/dist/storage/domains/audit/domain.d.ts.map +1 -0
  247. package/dist/storage/domains/audit/domain.js +167 -0
  248. package/dist/storage/domains/audit/domain.js.map +1 -0
  249. package/dist/storage/domains/channel-identity/base.d.ts +96 -0
  250. package/dist/storage/domains/channel-identity/base.d.ts.map +1 -0
  251. package/dist/storage/domains/channel-identity/base.js +149 -0
  252. package/dist/storage/domains/channel-identity/base.js.map +1 -0
  253. package/dist/storage/domains/credentials/base.d.ts +134 -0
  254. package/dist/storage/domains/credentials/base.d.ts.map +1 -0
  255. package/dist/storage/domains/credentials/base.js +273 -0
  256. package/dist/storage/domains/credentials/base.js.map +1 -0
  257. package/dist/storage/domains/custom-providers/base.d.ts +57 -0
  258. package/dist/storage/domains/custom-providers/base.d.ts.map +1 -0
  259. package/dist/storage/domains/custom-providers/base.js +145 -0
  260. package/dist/storage/domains/custom-providers/base.js.map +1 -0
  261. package/dist/storage/domains/intake/base.d.ts +38 -0
  262. package/dist/storage/domains/intake/base.d.ts.map +1 -0
  263. package/dist/storage/domains/intake/base.js +80 -0
  264. package/dist/storage/domains/intake/base.js.map +1 -0
  265. package/dist/storage/domains/integrations/base.d.ts +126 -0
  266. package/dist/storage/domains/integrations/base.d.ts.map +1 -0
  267. package/dist/storage/domains/integrations/base.js +317 -0
  268. package/dist/storage/domains/integrations/base.js.map +1 -0
  269. package/dist/storage/domains/memory-settings/base.d.ts +62 -0
  270. package/dist/storage/domains/memory-settings/base.d.ts.map +1 -0
  271. package/dist/storage/domains/memory-settings/base.js +126 -0
  272. package/dist/storage/domains/memory-settings/base.js.map +1 -0
  273. package/dist/storage/domains/model-packs/base.d.ts +49 -0
  274. package/dist/storage/domains/model-packs/base.d.ts.map +1 -0
  275. package/dist/storage/domains/model-packs/base.js +96 -0
  276. package/dist/storage/domains/model-packs/base.js.map +1 -0
  277. package/dist/storage/domains/projects/base.d.ts +58 -0
  278. package/dist/storage/domains/projects/base.d.ts.map +1 -0
  279. package/dist/storage/domains/projects/base.js +111 -0
  280. package/dist/storage/domains/projects/base.js.map +1 -0
  281. package/dist/storage/domains/queue-health/base.d.ts +52 -0
  282. package/dist/storage/domains/queue-health/base.d.ts.map +1 -0
  283. package/dist/storage/domains/queue-health/base.js +122 -0
  284. package/dist/storage/domains/queue-health/base.js.map +1 -0
  285. package/dist/storage/domains/source-control/base.d.ts +358 -0
  286. package/dist/storage/domains/source-control/base.d.ts.map +1 -0
  287. package/dist/storage/domains/source-control/base.js +908 -0
  288. package/dist/storage/domains/source-control/base.js.map +1 -0
  289. package/dist/storage/domains/source-control/inmemory.d.ts +175 -0
  290. package/dist/storage/domains/source-control/inmemory.d.ts.map +1 -0
  291. package/dist/storage/domains/source-control/inmemory.js +377 -0
  292. package/dist/storage/domains/source-control/inmemory.js.map +1 -0
  293. package/dist/storage/domains/work-items/base.d.ts +412 -0
  294. package/dist/storage/domains/work-items/base.d.ts.map +1 -0
  295. package/dist/storage/domains/work-items/base.js +1309 -0
  296. package/dist/storage/domains/work-items/base.js.map +1 -0
  297. package/dist/storage/domains/work-items/metrics.d.ts +101 -0
  298. package/dist/storage/domains/work-items/metrics.d.ts.map +1 -0
  299. package/dist/storage/domains/work-items/metrics.js +221 -0
  300. package/dist/storage/domains/work-items/metrics.js.map +1 -0
  301. package/dist/timing.d.ts +15 -0
  302. package/dist/timing.d.ts.map +1 -0
  303. package/dist/timing.js +34 -0
  304. package/dist/timing.js.map +1 -0
  305. package/dist/workspace.d.ts +24 -0
  306. package/dist/workspace.d.ts.map +1 -0
  307. package/dist/workspace.js +286 -0
  308. package/dist/workspace.js.map +1 -0
  309. package/factory-skills/configure-factory-rules/SKILL.md +67 -0
  310. package/factory-skills/factory-plan/SKILL.md +61 -0
  311. package/factory-skills/factory-review/SKILL.md +155 -0
  312. package/factory-skills/factory-triage/SKILL.md +77 -0
  313. package/package.json +81 -0
@@ -0,0 +1,91 @@
1
+ import { WorkOSAdminPortal } from "@mastra/auth-workos";
2
+ import { registerApiRoute } from "@mastra/core/server";
3
+ //#region src/integrations/workos/integration.ts
4
+ const UNKNOWN_LOCATION = "unknown";
5
+ function loose(c) {
6
+ return c;
7
+ }
8
+ function flattenMetadata(metadata) {
9
+ const flat = {};
10
+ for (const [key, value] of Object.entries(metadata)) {
11
+ if (value === void 0 || value === null) continue;
12
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
13
+ flat[key] = value;
14
+ continue;
15
+ }
16
+ try {
17
+ flat[key] = JSON.stringify(value);
18
+ } catch {}
19
+ }
20
+ return flat;
21
+ }
22
+ function toWorkOSEvent(event) {
23
+ return {
24
+ action: event.action,
25
+ occurredAt: event.occurredAt,
26
+ actor: {
27
+ type: event.actorType === "agent" ? "agent" : "user",
28
+ id: event.actorId
29
+ },
30
+ targets: event.targets.map((target) => ({
31
+ type: target.type,
32
+ id: target.id,
33
+ ...target.name !== void 0 ? { name: target.name } : {}
34
+ })),
35
+ context: {
36
+ location: event.context.location ?? UNKNOWN_LOCATION,
37
+ ...event.context.userAgent !== void 0 ? { userAgent: event.context.userAgent } : {}
38
+ },
39
+ metadata: flattenMetadata(event.metadata)
40
+ };
41
+ }
42
+ /** Optional WorkOS mirror and Admin Portal route, independent of the auth adapter. */
43
+ var WorkOSAuditIntegration = class {
44
+ id = "workos";
45
+ #client;
46
+ #returnUrl;
47
+ constructor({ client, returnUrl }) {
48
+ this.#client = client;
49
+ this.#returnUrl = returnUrl;
50
+ }
51
+ async audit({ event }) {
52
+ try {
53
+ await this.#client.auditLogs.createEvent(event.orgId, toWorkOSEvent(event));
54
+ } catch (err) {
55
+ console.warn("[Audit] Failed to forward audit event to WorkOS", {
56
+ action: event.action,
57
+ error: err instanceof Error ? err.message : String(err)
58
+ });
59
+ }
60
+ }
61
+ routes(ctx) {
62
+ const { auth } = ctx;
63
+ return [registerApiRoute("/web/audit/portal-link", {
64
+ method: "GET",
65
+ handler: async (cc) => {
66
+ const c = loose(cc);
67
+ await auth.ensureUser(c);
68
+ const tenant = auth.tenant(c);
69
+ if (!tenant) return c.json({ error: "unauthorized" }, 401);
70
+ if (!tenant.orgId) return c.json({
71
+ error: "organization_required",
72
+ message: "The audit trail requires a WorkOS organization."
73
+ }, 403);
74
+ try {
75
+ const url = await new WorkOSAdminPortal(this.#client, { returnUrl: this.#returnUrl }).getPortalLink(tenant.orgId, "audit_logs");
76
+ return c.json({ url });
77
+ } catch (err) {
78
+ console.warn("[Audit] Failed to generate WorkOS Admin Portal link", { error: err instanceof Error ? err.message : String(err) });
79
+ return c.json({ error: "portal_link_failed" }, 502);
80
+ }
81
+ }
82
+ })];
83
+ }
84
+ diagnostics() {
85
+ return { configured: true };
86
+ }
87
+ };
88
+ //#endregion
89
+ export { WorkOSAuditIntegration, toWorkOSEvent };
90
+
91
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.js","names":["#client","#returnUrl"],"sources":["../../../src/integrations/workos/integration.ts"],"sourcesContent":["import { WorkOSAdminPortal } from '@mastra/auth-workos';\nimport type { ApiRoute } from '@mastra/core/server';\nimport { registerApiRoute } from '@mastra/core/server';\nimport type { Context } from 'hono';\n\nimport type { AuditEventRow } from '../../storage/domains/audit/base.js';\nimport type { FactoryIntegration, IntegrationContext } from '../base.js';\n\ntype WorkOSClient = ConstructorParameters<typeof WorkOSAdminPortal>[0];\n\nconst UNKNOWN_LOCATION = 'unknown';\n\nfunction loose(c: unknown): Context {\n return c as Context;\n}\n\nfunction flattenMetadata(metadata: Record<string, unknown>): Record<string, string | number | boolean> {\n const flat: Record<string, string | number | boolean> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (value === undefined || value === null) continue;\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n flat[key] = value;\n continue;\n }\n try {\n flat[key] = JSON.stringify(value);\n } catch {\n // Drop unserializable metadata rather than the event.\n }\n }\n return flat;\n}\n\nexport function toWorkOSEvent(event: AuditEventRow): {\n action: string;\n occurredAt: Date;\n actor: { type: string; id: string };\n targets: Array<{ type: string; id: string; name?: string }>;\n context: { location: string; userAgent?: string };\n metadata: Record<string, string | number | boolean>;\n} {\n return {\n action: event.action,\n occurredAt: event.occurredAt,\n actor: { type: event.actorType === 'agent' ? 'agent' : 'user', id: event.actorId },\n targets: event.targets.map(target => ({\n type: target.type,\n id: target.id,\n ...(target.name !== undefined ? { name: target.name } : {}),\n })),\n context: {\n location: event.context.location ?? UNKNOWN_LOCATION,\n ...(event.context.userAgent !== undefined ? { userAgent: event.context.userAgent } : {}),\n },\n metadata: flattenMetadata(event.metadata),\n };\n}\n\n/** Optional WorkOS mirror and Admin Portal route, independent of the auth adapter. */\nexport class WorkOSAuditIntegration implements FactoryIntegration {\n readonly id = 'workos';\n readonly #client: WorkOSClient;\n readonly #returnUrl: string;\n\n constructor({ client, returnUrl }: { client: WorkOSClient; returnUrl: string }) {\n this.#client = client;\n this.#returnUrl = returnUrl;\n }\n\n async audit({ event }: { event: AuditEventRow }): Promise<void> {\n try {\n await this.#client.auditLogs.createEvent(event.orgId, toWorkOSEvent(event));\n } catch (err) {\n console.warn('[Audit] Failed to forward audit event to WorkOS', {\n action: event.action,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n routes(ctx: IntegrationContext): ApiRoute[] {\n const { auth } = ctx;\n return [\n registerApiRoute('/web/audit/portal-link', {\n method: 'GET',\n handler: async cc => {\n const c = loose(cc);\n await auth.ensureUser(c);\n const tenant = auth.tenant(c);\n if (!tenant) return c.json({ error: 'unauthorized' }, 401);\n if (!tenant.orgId) {\n return c.json(\n { error: 'organization_required', message: 'The audit trail requires a WorkOS organization.' },\n 403,\n );\n }\n\n try {\n const portal = new WorkOSAdminPortal(this.#client, { returnUrl: this.#returnUrl });\n const url = await portal.getPortalLink(tenant.orgId, 'audit_logs');\n return c.json({ url });\n } catch (err) {\n console.warn('[Audit] Failed to generate WorkOS Admin Portal link', {\n error: err instanceof Error ? err.message : String(err),\n });\n return c.json({ error: 'portal_link_failed' }, 502);\n }\n },\n }),\n ];\n }\n\n diagnostics(): Record<string, unknown> {\n return { configured: true };\n }\n}\n"],"mappings":";;;AAUA,MAAM,mBAAmB;AAEzB,SAAS,MAAM,GAAqB;CAClC,OAAO;AACT;AAEA,SAAS,gBAAgB,UAA8E;CACrG,MAAM,OAAkD,CAAC;CACzD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;EACnD,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM;EAC3C,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;GACxF,KAAK,OAAO;GACZ;EACF;EACA,IAAI;GACF,KAAK,OAAO,KAAK,UAAU,KAAK;EAClC,QAAQ,CAER;CACF;CACA,OAAO;AACT;AAEA,SAAgB,cAAc,OAO5B;CACA,OAAO;EACL,QAAQ,MAAM;EACd,YAAY,MAAM;EAClB,OAAO;GAAE,MAAM,MAAM,cAAc,UAAU,UAAU;GAAQ,IAAI,MAAM;EAAQ;EACjF,SAAS,MAAM,QAAQ,KAAI,YAAW;GACpC,MAAM,OAAO;GACb,IAAI,OAAO;GACX,GAAI,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;EAC3D,EAAE;EACF,SAAS;GACP,UAAU,MAAM,QAAQ,YAAY;GACpC,GAAI,MAAM,QAAQ,cAAc,KAAA,IAAY,EAAE,WAAW,MAAM,QAAQ,UAAU,IAAI,CAAC;EACxF;EACA,UAAU,gBAAgB,MAAM,QAAQ;CAC1C;AACF;;AAGA,IAAa,yBAAb,MAAkE;CAChE,KAAc;CACd;CACA;CAEA,YAAY,EAAE,QAAQ,aAA0D;EAC9E,KAAKA,UAAU;EACf,KAAKC,aAAa;CACpB;CAEA,MAAM,MAAM,EAAE,SAAkD;EAC9D,IAAI;GACF,MAAM,KAAKD,QAAQ,UAAU,YAAY,MAAM,OAAO,cAAc,KAAK,CAAC;EAC5E,SAAS,KAAK;GACZ,QAAQ,KAAK,mDAAmD;IAC9D,QAAQ,MAAM;IACd,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACxD,CAAC;EACH;CACF;CAEA,OAAO,KAAqC;EAC1C,MAAM,EAAE,SAAS;EACjB,OAAO,CACL,iBAAiB,0BAA0B;GACzC,QAAQ;GACR,SAAS,OAAM,OAAM;IACnB,MAAM,IAAI,MAAM,EAAE;IAClB,MAAM,KAAK,WAAW,CAAC;IACvB,MAAM,SAAS,KAAK,OAAO,CAAC;IAC5B,IAAI,CAAC,QAAQ,OAAO,EAAE,KAAK,EAAE,OAAO,eAAe,GAAG,GAAG;IACzD,IAAI,CAAC,OAAO,OACV,OAAO,EAAE,KACP;KAAE,OAAO;KAAyB,SAAS;IAAkD,GAC7F,GACF;IAGF,IAAI;KAEF,MAAM,MAAM,MAAM,IADC,kBAAkB,KAAKA,SAAS,EAAE,WAAW,KAAKC,WAAW,CACzD,CAAC,CAAC,cAAc,OAAO,OAAO,YAAY;KACjE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IACvB,SAAS,KAAK;KACZ,QAAQ,KAAK,uDAAuD,EAClE,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,EACxD,CAAC;KACD,OAAO,EAAE,KAAK,EAAE,OAAO,qBAAqB,GAAG,GAAG;IACpD;GACF;EACF,CAAC,CACH;CACF;CAEA,cAAuC;EACrC,OAAO,EAAE,YAAY,KAAK;CAC5B;AACF"}
@@ -0,0 +1,235 @@
1
+ import type { AuthStorage } from '@mastra/code-sdk/auth/storage';
2
+ import type { ModePack, ProviderAccess } from '@mastra/code-sdk/onboarding/packs';
3
+ import type { ApiRoute } from '@mastra/core/server';
4
+ import type { CredentialRecord, LoginSessionKind, ModelCredentialsStorage } from '../storage/domains/credentials/base.js';
5
+ import type { CustomProvidersStorage } from '../storage/domains/custom-providers/base.js';
6
+ import type { MemorySettingsStorage } from '../storage/domains/memory-settings/base.js';
7
+ import type { ModelPacksStorage } from '../storage/domains/model-packs/base.js';
8
+ import { Route } from './route.js';
9
+ import type { RouteDependencies } from './route.js';
10
+ /**
11
+ * Server-side configuration routes for the web app.
12
+ *
13
+ * The browser has no access to the credential store or the model catalog, so
14
+ * the web settings panel asks the server — which owns both — to list providers
15
+ * and manage API keys. This mirrors the TUI's `/api-keys` command, exposing the
16
+ * same `AuthStorage`-backed key management over HTTP.
17
+ *
18
+ * Keys are never returned to the client; only their presence and source.
19
+ */
20
+ /**
21
+ * Where a provider's active credential comes from, as seen by the caller.
22
+ * Local mode reports `oauth`/`stored` (server-global `auth.json`); tenant mode
23
+ * reports the scoped variants (`oauth-user`/`stored-user`/`stored-org`).
24
+ */
25
+ export type ProviderCredentialSource = 'oauth' | 'stored' | 'env' | 'none' | 'oauth-user' | 'stored-user' | 'stored-org';
26
+ /** A model provider with the current source of its credentials. */
27
+ export interface ProviderInfo {
28
+ provider: string;
29
+ /** Env var the provider's key is read from, if any. */
30
+ envVar?: string;
31
+ /** Where the active credential comes from. */
32
+ source: ProviderCredentialSource;
33
+ /**
34
+ * Tenant mode: whether an org-wide API key exists for this provider, even
35
+ * when the caller's personal credential shadows it. Lets the UI tell
36
+ * "shared with the org" apart from "only works for me".
37
+ */
38
+ orgKey?: boolean;
39
+ /** Web OAuth sign-in capability, when the provider supports it. */
40
+ oauth?: {
41
+ supported: true;
42
+ modes: LoginSessionKind[];
43
+ };
44
+ }
45
+ /** Minimal session surface a pack activation touches. */
46
+ interface PackSession {
47
+ mode: {
48
+ get: () => string;
49
+ };
50
+ model: {
51
+ switch: (args: {
52
+ modelId: string;
53
+ }) => Promise<void>;
54
+ };
55
+ subagents: {
56
+ model: {
57
+ set: (args: {
58
+ modelId: string;
59
+ agentType: string;
60
+ }) => Promise<void>;
61
+ };
62
+ };
63
+ thread: {
64
+ getId: () => string | null;
65
+ setSetting: (args: {
66
+ key: string;
67
+ value: unknown;
68
+ }) => Promise<void>;
69
+ list: () => Promise<Array<{
70
+ id: string;
71
+ metadata?: Record<string, unknown>;
72
+ }>>;
73
+ };
74
+ }
75
+ /** One observational-memory role's read/switch surface. */
76
+ interface OMRole {
77
+ modelId: () => string | undefined;
78
+ threshold: () => number | undefined;
79
+ switchModel: (args: {
80
+ modelId: string;
81
+ }) => Promise<void>;
82
+ }
83
+ /**
84
+ * Session-state fields the OM config routes write. The index signatures mirror
85
+ * `MastraCodeState` so the concrete `Session.state.set(Partial<MastraCodeState>)`
86
+ * stays assignable to this minimal surface (contravariant parameter check).
87
+ */
88
+ interface OMStateWrites {
89
+ [key: string]: unknown;
90
+ [key: `subagentModelId_${string}`]: string | undefined;
91
+ observationThreshold?: number;
92
+ reflectionThreshold?: number;
93
+ observeAttachments?: 'auto' | boolean;
94
+ }
95
+ /** Minimal session surface the OM config routes touch. */
96
+ export interface OMSession extends PackSession {
97
+ state: {
98
+ get: () => Record<string, unknown> | undefined;
99
+ set: (updates: OMStateWrites) => Promise<void> | void;
100
+ };
101
+ om: {
102
+ observer: OMRole;
103
+ reflector: OMRole;
104
+ };
105
+ }
106
+ /** Minimal controller surface this module needs (model catalog + modes + sessions). */
107
+ interface ModelCatalog {
108
+ listAvailableModels: () => Promise<Array<{
109
+ id?: string;
110
+ modelName?: string;
111
+ provider: string;
112
+ hasApiKey: boolean;
113
+ apiKeyEnvVar?: string;
114
+ }>>;
115
+ listModes?: () => Array<{
116
+ id: string;
117
+ defaultModelId?: string;
118
+ }>;
119
+ getSessionByResource?: (resourceId: string, scope?: string) => Promise<OMSession | undefined>;
120
+ }
121
+ /**
122
+ * Build a deduplicated, sorted list of providers from the model catalog,
123
+ * annotated with where each provider's credential currently comes from.
124
+ * Mirrors the TUI's `/api-keys` provider list.
125
+ *
126
+ * When `tenantCredentials` is given (deployed mode), sources reflect the
127
+ * *caller's* tenant rows with user > org precedence and the server-global
128
+ * `authStorage` is ignored; otherwise the local `auth.json` view is reported.
129
+ */
130
+ export declare function listProviders({ controller, authStorage, tenantCredentials, }: {
131
+ controller: ModelCatalog;
132
+ authStorage?: AuthStorage;
133
+ tenantCredentials?: CredentialRecord[];
134
+ }): Promise<ProviderInfo[]>;
135
+ /** A user-defined OpenAI-compatible provider, with key presence (never the key). */
136
+ export interface CustomProviderInfo {
137
+ id: string;
138
+ name: string;
139
+ url: string;
140
+ hasApiKey: boolean;
141
+ models: string[];
142
+ }
143
+ /** A model pack as surfaced to the web client, with an `active` flag. */
144
+ export interface ModelPackInfo extends ModePack {
145
+ custom: boolean;
146
+ active: boolean;
147
+ }
148
+ /**
149
+ * Compute which providers the user can reach, mirroring the TUI's
150
+ * `/models-pack` access derivation: OAuth/api-key from the credential store for
151
+ * the named providers, plus any other provider that has a usable key.
152
+ */
153
+ export declare function buildProviderAccess({ controller, authStorage, tenantCredentials, }: {
154
+ controller: ModelCatalog;
155
+ authStorage?: AuthStorage;
156
+ tenantCredentials?: CredentialRecord[];
157
+ }): Promise<ProviderAccess>;
158
+ /**
159
+ * Where a request's custom model packs live. Same posture as memory settings
160
+ * and custom providers: the `model-packs` factory storage domain, scoped per
161
+ * org in deployed mode and to a sentinel `local` org in no-auth mode — never
162
+ * settings.json.
163
+ */
164
+ export interface PackContext {
165
+ storage: ModelPacksStorage;
166
+ orgId: string;
167
+ userId: string;
168
+ }
169
+ /**
170
+ * List available model packs (built-in, gated by provider access, plus saved
171
+ * custom packs from the request's pack context). Drops the synthetic
172
+ * "New Custom" placeholder — the web client has its own create flow. `active`
173
+ * is set from the given session's thread when a resourceId is supplied.
174
+ */
175
+ export declare function listModelPacks({ controller, authStorage, tenantCredentials, packContext, activePackId, }: {
176
+ controller: ModelCatalog;
177
+ authStorage?: AuthStorage;
178
+ tenantCredentials?: CredentialRecord[];
179
+ packContext: PackContext;
180
+ activePackId?: string | null;
181
+ }): Promise<ModelPackInfo[]>;
182
+ /** Read the current OM config from a session. */
183
+ export interface OMConfigInfo {
184
+ observerModelId: string;
185
+ reflectorModelId: string;
186
+ observationThreshold: number;
187
+ reflectionThreshold: number;
188
+ observeAttachments: 'auto' | boolean;
189
+ }
190
+ export interface ProviderOMDefaultsResponse {
191
+ ok: true;
192
+ config: OMConfigInfo;
193
+ }
194
+ export declare function readOMConfig(session: OMSession): OMConfigInfo;
195
+ /** Dependencies injected into {@link ConfigRoutes}. */
196
+ export interface ConfigRoutesDeps extends RouteDependencies {
197
+ controller: ModelCatalog;
198
+ authStorage?: AuthStorage;
199
+ /** Tenant credential domain handle; absent in local (no-DB) mode. */
200
+ modelCredentials?: ModelCredentialsStorage;
201
+ /** Tenant model-packs domain handle; absent in local (no-DB) mode. */
202
+ modelPacks?: ModelPacksStorage;
203
+ /** Tenant memory-settings domain handle; absent in local (no-DB) mode. */
204
+ memorySettings?: MemorySettingsStorage;
205
+ /** Custom-providers domain handle; absent when the app database is missing. */
206
+ customProviders?: CustomProvidersStorage;
207
+ /** Notifies the host after tenant credentials change so caches can be dropped. */
208
+ onCredentialsChanged?: (tenant: {
209
+ orgId: string;
210
+ userId?: string;
211
+ }) => void;
212
+ /** Notifies the host after custom providers change so model-router caches can be dropped. */
213
+ onCustomProvidersChanged?: (tenant: {
214
+ orgId: string;
215
+ }) => void;
216
+ }
217
+ /**
218
+ * The web config routes as Mastra `apiRoutes`:
219
+ * - `GET /web/config/providers` — list providers + key source
220
+ * - `PUT /web/config/providers/:provider/key` — set/update a provider's API key
221
+ * - `DELETE /web/config/providers/:provider/key` — remove a stored API key
222
+ * - `GET /web/config/models` — list available models (credentialed providers)
223
+ * - `GET /web/config/custom-providers` — list custom OpenAI-compatible providers
224
+ * - `POST /web/config/custom-providers` — create/update a custom provider
225
+ * - `DELETE /web/config/custom-providers/:id` — remove a custom provider
226
+ * - `GET /web/config/om` — read OM models/thresholds/observe-attachments
227
+ * - `PUT /web/config/om/:role/model` — switch observer/reflector model
228
+ * - `PUT /web/config/om/thresholds` — set observation/reflection thresholds
229
+ * - `PUT /web/config/om/observe-attachments` — set observe-attachments (auto/on/off)
230
+ */
231
+ export declare class ConfigRoutes extends Route<ConfigRoutesDeps> {
232
+ routes(): ApiRoute[];
233
+ }
234
+ export {};
235
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,mCAAmC,CAAC;AAGvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAwB,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAChH,OAAO,KAAK,EAIV,qBAAqB,EACtB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAQjG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO/D;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAChC,OAAO,GACP,QAAQ,GACR,KAAK,GACL,MAAM,GACN,YAAY,GACZ,aAAa,GACb,YAAY,CAAC;AAEjB,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,MAAM,EAAE,wBAAwB,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;CACxD;AAED,yDAAyD;AACzD,UAAU,WAAW;IACnB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IAChE,SAAS,EAAE;QAAE,KAAK,EAAE;YAAE,GAAG,EAAE,CAAC,IAAI,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;IAC/F,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,EAAE,CAAC,IAAI,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC,CAAC,CAAC;KAChF,CAAC;CACH;AAED,2DAA2D;AAC3D,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAClC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;;;GAIG;AACH,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,mBAAmB,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACvC;AAED,0DAA0D;AAC1D,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;QAC/C,GAAG,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACvD,CAAC;IACF,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,uFAAuF;AACvF,UAAU,YAAY;IACpB,mBAAmB,EAAE,MAAM,OAAO,CAChC,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CACxG,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;CAC/F;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,EAClC,UAAU,EACV,WAAW,EACX,iBAAiB,GAClB,EAAE;IACD,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA0C1B;AAED,oFAAoF;AACpF,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAmFD,yEAAyE;AACzE,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,UAAU,EACV,WAAW,EACX,iBAAiB,GAClB,EAAE;IACD,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC,GAAG,OAAO,CAAC,cAAc,CAAC,CAqC1B;AAMD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAyCD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,EACnC,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,YAAY,GACb,EAAE;IACD,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAa3B;AA8DD,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,CAU7D;AAmGD,uDAAuD;AACvD,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,UAAU,EAAE,YAAY,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,sEAAsE;IACtE,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,6FAA6F;IAC7F,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IACvD,MAAM,IAAI,QAAQ,EAAE;CAsnBrB"}