@soulcraft/sdk 3.4.2 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -48,6 +48,7 @@
48
48
  * ```
49
49
  */
50
50
  import { createRemoteSessionVerifier, createDevCookieVerifier, createRequestDevLoginHandler } from './request-middleware.js';
51
+ import { computeEmailHash } from './config.js';
51
52
  // ─────────────────────────────────────────────────────────────────────────────
52
53
  // Constants
53
54
  // ─────────────────────────────────────────────────────────────────────────────
@@ -142,13 +143,24 @@ async function verifyHS256JWT(token, secret) {
142
143
  * ```
143
144
  */
144
145
  export function createSoulcraftAuth(options) {
145
- const { product, enrichUser, devCookieName = 'soulcraft_dev_session', backchannelPath = '/api/auth/backchannel-logout', } = options;
146
+ const { product, enrichUser, devCookieName = 'soulcraft_dev_session', backchannelPath = '/api/auth/backchannel-logout', defaultDevRole = 'owner', } = options;
146
147
  // ── Session verifier selection ──────────────────────────────────────────
147
148
  const idpUrl = process.env['SOULCRAFT_IDP_URL'];
149
+ const isDevMode = !idpUrl;
148
150
  const verifySession = options.verifier
149
151
  ?? (idpUrl
150
152
  ? createRemoteSessionVerifier({ idpUrl })
151
153
  : createDevCookieVerifier(devCookieName));
154
+ // ── Dev mode startup banner ─────────────────────────────────────────────
155
+ if (isDevMode && defaultDevRole !== false) {
156
+ const roles = ['owner', 'staff', 'manager', 'creator', 'customer'];
157
+ console.log(`\n ⚡ DEV MODE — ${product} (auto-login: ${defaultDevRole})`);
158
+ console.log(` Switch roles:`);
159
+ for (const role of roles) {
160
+ console.log(` ▸ ${role.padEnd(10)} /api/dev/login?role=${role}`);
161
+ }
162
+ console.log();
163
+ }
152
164
  // ── Handle hook ─────────────────────────────────────────────────────────
153
165
  const handle = async ({ event, resolve }) => {
154
166
  // CSRF bypass for backchannel-logout — the IdP sends server-to-server
@@ -162,7 +174,7 @@ export function createSoulcraftAuth(options) {
162
174
  }
163
175
  // Resolve session
164
176
  const cookieHeader = event.request.headers.get('cookie') ?? '';
165
- const session = await verifySession(cookieHeader);
177
+ let session = await verifySession(cookieHeader);
166
178
  // Stale cookie recovery — if cookie present but session null, clear it
167
179
  const hasSessionCookie = cookieHeader.includes(SESSION_COOKIE);
168
180
  if (hasSessionCookie && !session) {
@@ -170,6 +182,45 @@ export function createSoulcraftAuth(options) {
170
182
  response.headers.append('Set-Cookie', CLEAR_SESSION_COOKIE);
171
183
  return response;
172
184
  }
185
+ // ── Dev auto-login ──────────────────────────────────────────────────
186
+ // In dev mode, if no session exists and auto-login is enabled, create
187
+ // a dev session automatically. The developer is logged in the moment
188
+ // the first page loads — no manual /api/dev/login call needed.
189
+ if (isDevMode && !session && defaultDevRole !== false) {
190
+ const role = defaultDevRole;
191
+ const email = `dev-${role}@soulcraft.com`;
192
+ const autoSession = {
193
+ user: {
194
+ id: `dev-user-${role}`,
195
+ email,
196
+ name: `Dev ${role.charAt(0).toUpperCase() + role.slice(1)}`,
197
+ image: null,
198
+ platformRole: role,
199
+ emailHash: computeEmailHash(email),
200
+ },
201
+ sessionId: `dev-session-auto-${Date.now()}`,
202
+ expiresAt: Date.now() + 86_400_000,
203
+ };
204
+ session = autoSession;
205
+ // Set the cookie so subsequent requests don't re-create the session
206
+ const cookieValue = Buffer.from(JSON.stringify(autoSession)).toString('base64url');
207
+ const setCookie = [
208
+ `${devCookieName}=${cookieValue}`,
209
+ `Path=/`,
210
+ `HttpOnly`,
211
+ `SameSite=Lax`,
212
+ `Max-Age=86400`,
213
+ ].join('; ');
214
+ // Attach session, resolve, then append the cookie to the response
215
+ event.locals['session'] = { sessionId: autoSession.sessionId, expiresAt: autoSession.expiresAt };
216
+ const user = enrichUser
217
+ ? await enrichUser(autoSession.user, event)
218
+ : autoSession.user;
219
+ event.locals['user'] = user;
220
+ const response = await resolve(event);
221
+ response.headers.append('Set-Cookie', setCookie);
222
+ return response;
223
+ }
173
224
  // Attach session and user to locals
174
225
  event.locals['session'] = session
175
226
  ? { sessionId: session.sessionId, expiresAt: session.expiresAt }
@@ -1 +1 @@
1
- {"version":3,"file":"sveltekit.js","sourceRoot":"","sources":["../../../src/modules/auth/sveltekit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sveltekit.js","sourceRoot":"","sources":["../../../src/modules/auth/sveltekit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAG5H,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA2K9C,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,cAAc,GAAG,oCAAoC,CAAA;AAE3D;;;GAGG;AACH,MAAM,oBAAoB,GACxB,GAAG,cAAc,6EAA6E,CAAA;AAEhG,qDAAqD;AACrD,MAAM,wBAAwB,GAAG,oDAAoD,CAAA;AAErF,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAEhF;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAC3B,KAAa,EACb,MAAc;IAEd,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,KAAiC,CAAA;IAEzE,IAAI,GAAc,CAAA;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACjC,KAAK,EACL,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,QAAQ,CAAC,CACX,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAA;IACjD,IAAI,QAAoB,CAAA;IACxB,IAAI,CAAC;QACH,QAAQ,GAAG,UAAU,CAAC,IAAI,CACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CACtC,MAAM,EACN,GAAG,EACH,QAAQ,CAAC,MAAqB,EAC9B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CACvC,CAAA;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAA4B,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,EACJ,OAAO,EACP,UAAU,EACV,aAAa,GAAG,uBAAuB,EACvC,eAAe,GAAG,8BAA8B,EAChD,cAAc,GAAG,OAAO,GACzB,GAAG,OAAO,CAAA;IAEX,2EAA2E;IAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,CAAC,MAAM,CAAA;IACzB,MAAM,aAAa,GAAoB,OAAO,CAAC,QAAQ;WAClD,CAAC,MAAM;YACR,CAAC,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;YACzC,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAA;IAE7C,2EAA2E;IAC3E,IAAI,SAAS,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,iBAAiB,cAAc,GAAG,CAAC,CAAA;QAC1E,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAA;QACrE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAED,2EAA2E;IAC3E,MAAM,MAAM,GAAoB,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3D,sEAAsE;QACtE,+DAA+D;QAC/D,uEAAuE;QACvE,IACE,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,eAAe;YACtC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAC/B,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACvC,KAAK,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9D,IAAI,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAA;QAE/C,uEAAuE;QACvE,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC9D,IAAI,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;YACrC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;YAC3D,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,+DAA+D;QAC/D,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,cAAc,CAAA;YAC3B,MAAM,KAAK,GAAG,OAAO,IAAI,gBAAgB,CAAA;YACzC,MAAM,WAAW,GAAqB;gBACpC,IAAI,EAAE;oBACJ,EAAE,EAAE,YAAY,IAAI,EAAE;oBACtB,KAAK;oBACL,IAAI,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC3D,KAAK,EAAE,IAAI;oBACX,YAAY,EAAE,IAAI;oBAClB,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC;iBACnC;gBACD,SAAS,EAAE,oBAAoB,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC3C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;aACnC,CAAA;YAED,OAAO,GAAG,WAAW,CAAA;YAErB,oEAAoE;YACpE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAClF,MAAM,SAAS,GAAG;gBAChB,GAAG,aAAa,IAAI,WAAW,EAAE;gBACjC,QAAQ;gBACR,UAAU;gBACV,cAAc;gBACd,eAAe;aAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEZ,kEAAkE;YAClE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAA;YAChG,MAAM,IAAI,GAAG,UAAU;gBACrB,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA;YACpB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;YAE3B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;YACrC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;YAChD,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,oCAAoC;QACpC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO;YAC/B,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YAChE,CAAC,CAAC,IAAI,CAAA;QAER,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,UAAU;gBACrB,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;gBACvC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;YAChB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,2EAA2E;IAC3E,MAAM,kBAAkB,GAA4B,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACxE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,OAAO,CAAA;QAEnE,oCAAoC;QACpC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,oCAAoC;QACpC,IAAI,WAAW,GAAkB,IAAI,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;YACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;YACxC,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,QAAQ,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,QAAQ,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC9D,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,QAAQ,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC9D,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAChD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QACxD,CAAC;QAED,oBAAoB;QACpB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAwC,CAAA;QACvE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,wBAAwB,IAAI,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,QAAQ,CAAC,wCAAwC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAChF,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,2EAA2E;QAC3E,0DAA0D;QAC1D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAA;IAED,2EAA2E;IAC3E,MAAM,aAAa,GAA4B,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QACxE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAElD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,4DAA4D;YAC5D,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YAC5C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;gBACrD,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAA;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,OAAO,CAAA;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,EAAE,CAAA;QAChF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,SAAS,EAAE,QAAQ;YACnB,wBAAwB,EAAE,GAAG,OAAO,GAAG;SACxC,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,GAAG,SAAS,+BAA+B,MAAM,EAAE,CAAA;QACzE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE;YAC/D,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,0EAA0E;IAC1E,MAAM,WAAW,GAAG,4BAA4B,CAAC;QAC/C,UAAU,EAAE,aAAa;KAC1B,CAAC,CAAA;IACF,MAAM,eAAe,GAAG,CAAC,KAAqB,EAAY,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEvF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,CAAA;AACtF,CAAC;AA8BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,8CAA8C;QAC9C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;QACrE,OAAO,kBAAkB,MAAM,EAAE,CAAA;IACnC,CAAC;IAED,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,QAAQ,EAAE,OAAO,CAAC,WAAW;KAC9B,CAAC,CAAA;IACF,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3D,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAExD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,MAAM,EAAE,CAAA;AACvD,CAAC"}
@@ -2,54 +2,44 @@
2
2
  * @module modules/skills
3
3
  * @description Skill loading and registry for @soulcraft/sdk.
4
4
  *
5
- * Skills are SKILL.md files that define an AI persona, capabilities, and workflow
6
- * for a kit domain. This module provides a unified `load()`/`list()`/`install()`
7
- * API backed by VFS storage.
5
+ * Skills are SKILL.md files stored in the Brainy VFS at `/.soulcraft/skills/{id}/SKILL.md`.
6
+ * Each skill is a directory containing a SKILL.md with YAML frontmatter (name, description,
7
+ * type, etc.) and markdown instructions.
8
8
  *
9
- * **VFS** `/skills/{kitId}/{skillId}.md` in the Brainy VFS. Managed at runtime
10
- * via `install()` or the kit initialization pipeline. Skills are installed from
11
- * the Forge Kit Registry during kit provisioning.
12
- *
13
- * For tests, pass `bundledRegistry` to inject an in-memory skill map without
14
- * any VFS or filesystem access.
9
+ * Skills are seeded from the kit at workspace creation time and can be customized per workspace.
10
+ * All products (Workshop, Venue, Academy, Pulse) read from the same path.
15
11
  *
16
12
  * ## VFS path convention
17
13
  * ```
18
- * /skills/{kitId}/{skillId}.md
14
+ * /.soulcraft/skills/{skill-id}/SKILL.md
19
15
  * ```
20
- * Example: `/skills/wicks-and-whiskers/inventory-health.md`
16
+ * Example: `/.soulcraft/skills/candle-expertise/SKILL.md`
21
17
  */
22
18
  import type { Brainy } from '@soulcraft/brainy';
23
19
  import type { SkillsModule } from './types.js';
20
+ /** Standard path for skills in every Brainy instance. */
21
+ export declare const SKILLS_DIR = "/.soulcraft/skills";
24
22
  /**
25
- * Options for {@link createSkillsModule}.
26
- */
27
- export interface CreateSkillsModuleOptions {
28
- /**
29
- * Inject an in-memory skill registry for tests. When provided, these skills
30
- * serve as the fallback when VFS lookup misses.
31
- */
32
- bundledRegistry?: Record<string, Record<string, string>> | null;
33
- }
34
- /**
35
- * Creates a `SkillsModule` backed by a Brainy VFS instance.
23
+ * @description Creates a `SkillsModule` backed by a Brainy VFS instance.
36
24
  *
37
- * Skills are loaded from the VFS at `/skills/{kitId}/{skillId}.md`. For tests,
38
- * pass `bundledRegistry` in options to provide an in-memory fallback.
25
+ * Skills are loaded from `/.soulcraft/skills/{id}/SKILL.md`. Each skill directory
26
+ * contains a SKILL.md file with YAML frontmatter and markdown instructions.
39
27
  *
40
- * @param brain - An initialized Brainy instance. Required for VFS operations.
41
- * Pass `null` to disable VFS skill loading (test registry only).
28
+ * @param brain - An initialized Brainy instance (or null for test-only mode).
42
29
  * @param options - Optional configuration including a registry override for tests.
43
30
  * @returns A configured {@link SkillsModule}.
44
31
  *
45
32
  * @example
46
33
  * ```typescript
47
- * const brain = await pool.forUser(user.emailHash, workspaceId)
48
34
  * const skills = createSkillsModule(brain)
49
- *
50
- * const skill = await skills.load('inventory-health', 'wicks-and-whiskers')
35
+ * const all = await skills.list()
36
+ * const skill = await skills.load('candle-expertise')
51
37
  * ```
52
38
  */
39
+ export interface CreateSkillsModuleOptions {
40
+ /** In-memory skill registry for tests. */
41
+ bundledRegistry?: Record<string, string> | null;
42
+ }
53
43
  export declare function createSkillsModule(brain: Brainy | null, options?: CreateSkillsModuleOptions): SkillsModule;
54
44
  export type { SkillsModule, Skill, SkillListOptions, SkillInstallOptions, } from './types.js';
55
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAgD,MAAM,YAAY,CAAA;AAM5F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAA;CAChE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,GAAE,yBAA8B,GACtC,YAAY,CAgDd;AAwJD,YAAY,EACV,YAAY,EACZ,KAAK,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAgD,MAAM,YAAY,CAAA;AAE5F,yDAAyD;AACzD,eAAO,MAAM,UAAU,uBAAuB,CAAA;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;CAChD;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,GAAE,yBAA8B,GACtC,YAAY,CA6Cd;AAgDD,YAAY,EACV,YAAY,EACZ,KAAK,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
@@ -2,220 +2,103 @@
2
2
  * @module modules/skills
3
3
  * @description Skill loading and registry for @soulcraft/sdk.
4
4
  *
5
- * Skills are SKILL.md files that define an AI persona, capabilities, and workflow
6
- * for a kit domain. This module provides a unified `load()`/`list()`/`install()`
7
- * API backed by VFS storage.
5
+ * Skills are SKILL.md files stored in the Brainy VFS at `/.soulcraft/skills/{id}/SKILL.md`.
6
+ * Each skill is a directory containing a SKILL.md with YAML frontmatter (name, description,
7
+ * type, etc.) and markdown instructions.
8
8
  *
9
- * **VFS** `/skills/{kitId}/{skillId}.md` in the Brainy VFS. Managed at runtime
10
- * via `install()` or the kit initialization pipeline. Skills are installed from
11
- * the Forge Kit Registry during kit provisioning.
12
- *
13
- * For tests, pass `bundledRegistry` to inject an in-memory skill map without
14
- * any VFS or filesystem access.
9
+ * Skills are seeded from the kit at workspace creation time and can be customized per workspace.
10
+ * All products (Workshop, Venue, Academy, Pulse) read from the same path.
15
11
  *
16
12
  * ## VFS path convention
17
13
  * ```
18
- * /skills/{kitId}/{skillId}.md
19
- * ```
20
- * Example: `/skills/wicks-and-whiskers/inventory-health.md`
21
- */
22
- /**
23
- * Creates a `SkillsModule` backed by a Brainy VFS instance.
24
- *
25
- * Skills are loaded from the VFS at `/skills/{kitId}/{skillId}.md`. For tests,
26
- * pass `bundledRegistry` in options to provide an in-memory fallback.
27
- *
28
- * @param brain - An initialized Brainy instance. Required for VFS operations.
29
- * Pass `null` to disable VFS skill loading (test registry only).
30
- * @param options - Optional configuration including a registry override for tests.
31
- * @returns A configured {@link SkillsModule}.
32
- *
33
- * @example
34
- * ```typescript
35
- * const brain = await pool.forUser(user.emailHash, workspaceId)
36
- * const skills = createSkillsModule(brain)
37
- *
38
- * const skill = await skills.load('inventory-health', 'wicks-and-whiskers')
14
+ * /.soulcraft/skills/{skill-id}/SKILL.md
39
15
  * ```
16
+ * Example: `/.soulcraft/skills/candle-expertise/SKILL.md`
40
17
  */
18
+ /** Standard path for skills in every Brainy instance. */
19
+ export const SKILLS_DIR = '/.soulcraft/skills';
41
20
  export function createSkillsModule(brain, options = {}) {
42
- const getTestRegistry = options.bundledRegistry !== undefined
43
- ? () => options.bundledRegistry ?? null
44
- : () => null;
21
+ const testRegistry = options.bundledRegistry ?? null;
45
22
  return {
46
- async load(id, kitId) {
47
- // 1. Try VFS first
23
+ async load(id) {
48
24
  if (brain) {
49
- const vfsSkill = await _loadFromVfs(brain, id, kitId);
50
- if (vfsSkill)
51
- return vfsSkill;
25
+ const skill = await _loadFromVfs(brain, id);
26
+ if (skill)
27
+ return skill;
52
28
  }
53
- // 2. Fall back to test registry (only populated in tests)
54
- return _loadBundled(id, kitId, getTestRegistry);
29
+ if (testRegistry && testRegistry[id]) {
30
+ return { id, content: testRegistry[id], source: 'bundled' };
31
+ }
32
+ return null;
55
33
  },
56
- async list(options = {}) {
57
- const { kitId, includeVfs = true, includeBundled = true } = options;
34
+ async list(opts = {}) {
58
35
  const results = [];
59
- // Collect VFS skills
60
- if (includeVfs && brain) {
61
- const vfsSkills = await _listFromVfs(brain, kitId);
36
+ if (brain) {
37
+ const vfsSkills = await _listFromVfs(brain);
62
38
  results.push(...vfsSkills);
63
39
  }
64
- // Collect test registry skills (only populated in tests)
65
- if (includeBundled) {
66
- const bundledSkills = _listBundled(kitId, getTestRegistry);
67
- results.push(...bundledSkills);
40
+ if (testRegistry) {
41
+ for (const [id, content] of Object.entries(testRegistry)) {
42
+ if (!results.some(s => s.id === id)) {
43
+ results.push({ id, content, source: 'bundled' });
44
+ }
45
+ }
68
46
  }
69
47
  return results;
70
48
  },
71
49
  async install(options) {
72
50
  if (!brain) {
73
- throw new Error('sdk.skills.install() requires a Brainy instance with VFS support. ' +
74
- 'Ensure the SDK was created with a valid brain parameter.');
51
+ throw new Error('sdk.skills.install() requires a Brainy instance with VFS support.');
75
52
  }
76
- const { id, kitId, content } = options;
77
- const vfsPath = `/skills/${kitId}/${id}.md`;
78
- await brain.vfs.writeFile(vfsPath, content);
53
+ const { id, content } = options;
54
+ const dirPath = `${SKILLS_DIR}/${id}`;
55
+ const filePath = `${dirPath}/SKILL.md`;
56
+ await brain.vfs.mkdir(dirPath, { recursive: true });
57
+ await brain.vfs.writeFile(filePath, content);
79
58
  },
80
59
  };
81
60
  }
82
- // ─────────────────────────────────────────────────────────────────────────────
83
- // VFS helpers
84
- // ─────────────────────────────────────────────────────────────────────────────
85
61
  /**
86
- * Load a skill from the VFS at `/skills/{kitId}/{id}.md`.
87
- *
88
- * @param brain - Initialized Brainy instance.
89
- * @param id - Skill ID.
90
- * @param kitId - Kit ID.
91
- * @returns The skill if found, or `null`.
62
+ * @description Load a skill from VFS at `/.soulcraft/skills/{id}/SKILL.md`.
92
63
  */
93
- async function _loadFromVfs(brain, id, kitId) {
94
- const vfsPath = `/skills/${kitId}/${id}.md`;
64
+ async function _loadFromVfs(brain, id) {
65
+ const filePath = `${SKILLS_DIR}/${id}/SKILL.md`;
95
66
  try {
96
- const raw = await brain.vfs.readFile(vfsPath);
67
+ const raw = await brain.vfs.readFile(filePath);
97
68
  const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
98
- return { id, kitId, content, source: 'vfs' };
69
+ return { id, content, source: 'vfs' };
99
70
  }
100
71
  catch {
101
- // File not found in VFS — normal, fall through to bundled
102
72
  return null;
103
73
  }
104
74
  }
105
75
  /**
106
- * List all skills installed in the VFS, optionally filtered by kit ID.
107
- *
108
- * @param brain - Initialized Brainy instance.
109
- * @param kitId - Optional kit filter. If omitted, all skills are returned.
110
- * @returns Array of VFS-sourced skills.
76
+ * @description List all skills from VFS at `/.soulcraft/skills/`.
111
77
  */
112
- async function _listFromVfs(brain, kitId) {
78
+ async function _listFromVfs(brain) {
113
79
  const results = [];
114
80
  try {
115
- if (kitId) {
116
- // List skills for a specific kit
117
- const dir = `/skills/${kitId}`;
118
- const entries = await brain.vfs.readdir(dir);
119
- for (const entry of entries) {
120
- if (typeof entry === 'string' && entry.endsWith('.md')) {
121
- const id = entry.slice(0, -3); // strip .md
122
- const vfsPath = `${dir}/${entry}`;
123
- try {
124
- const raw = await brain.vfs.readFile(vfsPath);
125
- const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
126
- results.push({ id, kitId, content, source: 'vfs' });
127
- }
128
- catch {
129
- // Skip unreadable files
130
- }
131
- }
132
- else if (typeof entry === 'object' && 'name' in entry) {
133
- const name = entry.name;
134
- if (name.endsWith('.md')) {
135
- const id = name.slice(0, -3);
136
- const vfsPath = `${dir}/${name}`;
137
- try {
138
- const raw = await brain.vfs.readFile(vfsPath);
139
- const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
140
- results.push({ id, kitId, content, source: 'vfs' });
141
- }
142
- catch {
143
- // Skip unreadable files
144
- }
145
- }
146
- }
147
- }
148
- }
149
- else {
150
- // List all kits then list skills per kit
151
- const skillsDir = '/skills';
152
- let kitEntries;
81
+ const entries = await brain.vfs.readdir(SKILLS_DIR);
82
+ for (const entry of entries) {
83
+ const name = typeof entry === 'string' ? entry
84
+ : typeof entry === 'object' && entry !== null && 'name' in entry
85
+ ? entry.name
86
+ : null;
87
+ if (!name)
88
+ continue;
89
+ const filePath = `${SKILLS_DIR}/${name}/SKILL.md`;
153
90
  try {
154
- kitEntries = await brain.vfs.readdir(skillsDir);
91
+ const raw = await brain.vfs.readFile(filePath);
92
+ const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
93
+ results.push({ id: name, content, source: 'vfs' });
155
94
  }
156
95
  catch {
157
- return results; // /skills doesn't exist yet
158
- }
159
- for (const kitEntry of kitEntries) {
160
- const kitName = typeof kitEntry === 'string' ? kitEntry
161
- : typeof kitEntry === 'object' && kitEntry !== null && 'name' in kitEntry
162
- ? kitEntry.name
163
- : null;
164
- if (!kitName)
165
- continue;
166
- const kitSkills = await _listFromVfs(brain, kitName);
167
- results.push(...kitSkills);
96
+ // Subdirectory without SKILL.md skip
168
97
  }
169
98
  }
170
99
  }
171
100
  catch {
172
- // VFS unavailable or /skills not initialized — return empty
173
- }
174
- return results;
175
- }
176
- // ─────────────────────────────────────────────────────────────────────────────
177
- // Bundled registry helpers
178
- // ─────────────────────────────────────────────────────────────────────────────
179
- /**
180
- * Load a single skill from the in-memory test registry.
181
- *
182
- * @param id - Skill ID.
183
- * @param kitId - Kit ID.
184
- * @param getRegistry - Function that returns the test registry (or null).
185
- * @returns The skill if found, or `null`.
186
- */
187
- function _loadBundled(id, kitId, getRegistry) {
188
- const registry = getRegistry();
189
- if (!registry)
190
- return null;
191
- const kitSkills = registry[kitId];
192
- if (!kitSkills)
193
- return null;
194
- const content = kitSkills[id];
195
- if (!content)
196
- return null;
197
- return { id, kitId, content, source: 'bundled' };
198
- }
199
- /**
200
- * List skills from the in-memory test registry, optionally filtered by kit ID.
201
- *
202
- * @param kitId - Optional kit filter.
203
- * @param getRegistry - Function that returns the test registry (or null).
204
- * @returns Array of skills from the registry.
205
- */
206
- function _listBundled(kitId, getRegistry) {
207
- const registry = getRegistry();
208
- if (!registry)
209
- return [];
210
- const results = [];
211
- const kitsToList = kitId ? [kitId] : Object.keys(registry);
212
- for (const kit of kitsToList) {
213
- const kitSkills = registry[kit];
214
- if (!kitSkills)
215
- continue;
216
- for (const [skillId, content] of Object.entries(kitSkills)) {
217
- results.push({ id: skillId, kitId: kit, content, source: 'bundled' });
218
- }
101
+ // /.soulcraft/skills doesn't exist yet — return empty
219
102
  }
220
103
  return results;
221
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAAA;AAwB9C,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,UAAqC,EAAE;IAEvC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAA;IAEpD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,EAAU;YACnB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;gBAC3C,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAA;YACzB,CAAC;YACD,IAAI,YAAY,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;YAC7D,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAyB,EAAE;YACpC,MAAM,OAAO,GAAY,EAAE,CAAA;YAE3B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;gBAC3C,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;YAC5B,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;wBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;oBAClD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,OAA4B;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;YACtF,CAAC;YACD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;YAC/B,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,EAAE,EAAE,CAAA;YACrC,MAAM,QAAQ,GAAG,GAAG,OAAO,WAAW,CAAA;YACtC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,EAAU;IACnD,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,EAAE,WAAW,CAAA;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1E,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa;IACvC,MAAM,OAAO,GAAY,EAAE,CAAA;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAEnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK;gBAC5C,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;oBAC9D,CAAC,CAAE,KAA0B,CAAC,IAAI;oBAClC,CAAC,CAAC,IAAI,CAAA;YACV,IAAI,CAAC,IAAI;gBAAE,SAAQ;YAEnB,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,WAAW,CAAA;YACjD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC1E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}