@soulcraft/sdk 3.4.0 → 3.5.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.
- package/dist/modules/auth/sveltekit.d.ts +11 -0
- package/dist/modules/auth/sveltekit.d.ts.map +1 -1
- package/dist/modules/auth/sveltekit.js +53 -2
- package/dist/modules/auth/sveltekit.js.map +1 -1
- package/dist/modules/skills/index.d.ts +19 -29
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +54 -171
- package/dist/modules/skills/index.js.map +1 -1
- package/dist/modules/skills/types.d.ts +39 -62
- package/dist/modules/skills/types.d.ts.map +1 -1
- package/dist/modules/skills/types.js +12 -9
- package/dist/modules/skills/types.js.map +1 -1
- package/dist/server/handlers/imagine.d.ts +10 -17
- package/dist/server/handlers/imagine.d.ts.map +1 -1
- package/dist/server/handlers/imagine.js +52 -159
- package/dist/server/handlers/imagine.js.map +1 -1
- package/package.json +1 -1
|
@@ -123,6 +123,17 @@ export interface SoulcraftAuthOptions {
|
|
|
123
123
|
* Default: `'/api/auth/backchannel-logout'`.
|
|
124
124
|
*/
|
|
125
125
|
backchannelPath?: string;
|
|
126
|
+
/**
|
|
127
|
+
* Default role for auto-login in dev mode. When set and no `SOULCRAFT_IDP_URL`
|
|
128
|
+
* is configured, the auth handle automatically creates a dev session on the
|
|
129
|
+
* first request if no dev cookie is present. The developer is logged in the
|
|
130
|
+
* moment the page loads — no manual `/api/dev/login` call needed.
|
|
131
|
+
*
|
|
132
|
+
* Set to `false` to disable auto-login (require explicit `/api/dev/login`).
|
|
133
|
+
*
|
|
134
|
+
* @default 'owner'
|
|
135
|
+
*/
|
|
136
|
+
defaultDevRole?: SoulcraftSessionUser['platformRole'] | false;
|
|
126
137
|
}
|
|
127
138
|
/**
|
|
128
139
|
* @description The return value of `createSoulcraftAuth()`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sveltekit.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/sveltekit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"sveltekit.d.ts","sourceRoot":"","sources":["../../../src/modules/auth/sveltekit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAA;AAOxE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE;QACP,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KACrD,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE;IACpC,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CACtD,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEvB;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAMlF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAE1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,cAAc,KAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/D;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,KAAK,CAAA;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,MAAM,EAAE,eAAe,CAAA;IAEvB;;;;;;;;;;;;OAYG;IACH,kBAAkB,EAAE,uBAAuB,CAAA;IAE3C;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,uBAAuB,CAAA;IAEtC;;;;;;;;;;;OAWG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,QAAQ,CAAA;IAEpD;;;OAGG;IACH,aAAa,EAAE,eAAe,CAAA;CAC/B;AAuFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAgNhF;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAE5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAiBnE"}
|
|
@@ -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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"sveltekit.js","sourceRoot":"","sources":["../../../src/modules/auth/sveltekit.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
*
|
|
10
|
-
*
|
|
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/{
|
|
14
|
+
* /.soulcraft/skills/{skill-id}/SKILL.md
|
|
19
15
|
* ```
|
|
20
|
-
* Example:
|
|
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
|
-
*
|
|
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
|
|
38
|
-
*
|
|
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
|
|
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('
|
|
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
|
|
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
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
*
|
|
10
|
-
*
|
|
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/{
|
|
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
|
|
43
|
-
? () => options.bundledRegistry ?? null
|
|
44
|
-
: () => null;
|
|
21
|
+
const testRegistry = options.bundledRegistry ?? null;
|
|
45
22
|
return {
|
|
46
|
-
async load(id
|
|
47
|
-
// 1. Try VFS first
|
|
23
|
+
async load(id) {
|
|
48
24
|
if (brain) {
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
return
|
|
25
|
+
const skill = await _loadFromVfs(brain, id);
|
|
26
|
+
if (skill)
|
|
27
|
+
return skill;
|
|
52
28
|
}
|
|
53
|
-
|
|
54
|
-
|
|
29
|
+
if (testRegistry && testRegistry[id]) {
|
|
30
|
+
return { id, content: testRegistry[id], source: 'bundled' };
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
55
33
|
},
|
|
56
|
-
async list(
|
|
57
|
-
const { kitId, includeVfs = true, includeBundled = true } = options;
|
|
34
|
+
async list(opts = {}) {
|
|
58
35
|
const results = [];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const vfsSkills = await _listFromVfs(brain, kitId);
|
|
36
|
+
if (brain) {
|
|
37
|
+
const vfsSkills = await _listFromVfs(brain);
|
|
62
38
|
results.push(...vfsSkills);
|
|
63
39
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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,
|
|
77
|
-
const
|
|
78
|
-
|
|
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
|
|
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
|
|
94
|
-
const
|
|
64
|
+
async function _loadFromVfs(brain, id) {
|
|
65
|
+
const filePath = `${SKILLS_DIR}/${id}/SKILL.md`;
|
|
95
66
|
try {
|
|
96
|
-
const raw = await brain.vfs.readFile(
|
|
67
|
+
const raw = await brain.vfs.readFile(filePath);
|
|
97
68
|
const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
|
|
98
|
-
return { id,
|
|
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
|
|
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
|
|
78
|
+
async function _listFromVfs(brain) {
|
|
113
79
|
const results = [];
|
|
114
80
|
try {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,120 +2,97 @@
|
|
|
2
2
|
* @module modules/skills/types
|
|
3
3
|
* @description Type definitions for `sdk.skills.*` — the skill loading and registry system.
|
|
4
4
|
*
|
|
5
|
-
* Skills are
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* within a kit's context.
|
|
5
|
+
* Skills are SKILL.md files stored at `/.soulcraft/skills/{id}/SKILL.md` in the Brainy VFS.
|
|
6
|
+
* Each skill is a directory containing a SKILL.md with YAML frontmatter and markdown
|
|
7
|
+
* instructions that define an AI persona, capabilities, or workflow.
|
|
9
8
|
*
|
|
10
|
-
* Skills are
|
|
11
|
-
*
|
|
9
|
+
* Skills are workspace-scoped — seeded from the kit at creation time and customizable
|
|
10
|
+
* per workspace. All products (Workshop, Venue, Academy, Pulse) read from the same path.
|
|
12
11
|
*
|
|
13
|
-
* ## Skill
|
|
12
|
+
* ## Skill types (via `type:` frontmatter)
|
|
13
|
+
* - `background` — passive knowledge, always loaded into AI context
|
|
14
|
+
* - `active` — user and/or AI can invoke
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* ## Path convention
|
|
17
|
+
* ```
|
|
18
|
+
* /.soulcraft/skills/{skill-id}/SKILL.md
|
|
19
|
+
* ```
|
|
17
20
|
*/
|
|
18
21
|
/**
|
|
19
|
-
* A parsed skill loaded from VFS or an in-memory test registry.
|
|
22
|
+
* @description A parsed skill loaded from VFS or an in-memory test registry.
|
|
20
23
|
*/
|
|
21
24
|
export interface Skill {
|
|
22
|
-
/** Kebab-case skill identifier (matches the `id:` frontmatter
|
|
25
|
+
/** Kebab-case skill identifier (matches the directory name and `id:` frontmatter). */
|
|
23
26
|
id: string;
|
|
24
|
-
/** The
|
|
25
|
-
kitId: string | null;
|
|
26
|
-
/** The full SKILL.md content including YAML frontmatter. */
|
|
27
|
+
/** The full SKILL.md content including YAML frontmatter and markdown instructions. */
|
|
27
28
|
content: string;
|
|
28
29
|
/** Where this skill was loaded from. */
|
|
29
30
|
source: 'vfs' | 'bundled';
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
|
-
* Options for listing skills.
|
|
33
|
+
* @description Options for listing skills.
|
|
33
34
|
*/
|
|
34
35
|
export interface SkillListOptions {
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
*/
|
|
38
|
-
kitId?: string;
|
|
39
|
-
/**
|
|
40
|
-
* Whether to include VFS-installed skills in the results.
|
|
41
|
-
*
|
|
42
|
-
* @default true
|
|
43
|
-
*/
|
|
44
|
-
includeVfs?: boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Whether to include skills from the test registry (when provided) in results.
|
|
47
|
-
*
|
|
48
|
-
* @default true
|
|
49
|
-
*/
|
|
50
|
-
includeBundled?: boolean;
|
|
36
|
+
/** Reserved for future filtering. */
|
|
37
|
+
_?: never;
|
|
51
38
|
}
|
|
52
39
|
/**
|
|
53
|
-
* Options for installing a skill into the VFS.
|
|
40
|
+
* @description Options for installing a skill into the VFS.
|
|
54
41
|
*/
|
|
55
42
|
export interface SkillInstallOptions {
|
|
56
|
-
/** The skill ID (kebab-case). */
|
|
43
|
+
/** The skill ID (kebab-case). Becomes the directory name. */
|
|
57
44
|
id: string;
|
|
58
|
-
/** The kit this skill belongs to. */
|
|
59
|
-
kitId: string;
|
|
60
45
|
/** The full SKILL.md content including YAML frontmatter. */
|
|
61
46
|
content: string;
|
|
62
47
|
}
|
|
63
48
|
/**
|
|
64
|
-
* The `sdk.skills` namespace.
|
|
49
|
+
* @description The `sdk.skills` namespace.
|
|
65
50
|
*
|
|
66
51
|
* Provides a unified interface for loading, listing, and installing skills
|
|
67
|
-
* from the Brainy VFS
|
|
52
|
+
* from the Brainy VFS at `/.soulcraft/skills/`.
|
|
68
53
|
*
|
|
69
54
|
* @example Loading a specific skill
|
|
70
55
|
* ```typescript
|
|
71
|
-
* const skill = await sdk.skills.load('
|
|
56
|
+
* const skill = await sdk.skills.load('candle-expertise')
|
|
72
57
|
* if (skill) {
|
|
73
|
-
* const systemPrompt = buildSystemPrompt(
|
|
58
|
+
* const systemPrompt = buildSystemPrompt([skill.content])
|
|
74
59
|
* }
|
|
75
60
|
* ```
|
|
76
61
|
*
|
|
77
|
-
* @example Listing all skills
|
|
62
|
+
* @example Listing all skills
|
|
78
63
|
* ```typescript
|
|
79
|
-
* const skills = await sdk.skills.list(
|
|
80
|
-
* const systemPrompt = buildSystemPrompt(
|
|
64
|
+
* const skills = await sdk.skills.list()
|
|
65
|
+
* const systemPrompt = buildSystemPrompt(skills.map(s => s.content))
|
|
81
66
|
* ```
|
|
82
67
|
*
|
|
83
|
-
* @example Installing a skill
|
|
68
|
+
* @example Installing a skill
|
|
84
69
|
* ```typescript
|
|
85
70
|
* await sdk.skills.install({
|
|
86
71
|
* id: 'custom-flow',
|
|
87
|
-
*
|
|
88
|
-
* content: `---\nid: custom-flow\ntitle: Custom Flow\n---\n...`,
|
|
72
|
+
* content: '---\nid: custom-flow\nname: Custom Flow\ntype: active\n---\n...',
|
|
89
73
|
* })
|
|
90
74
|
* ```
|
|
91
75
|
*/
|
|
92
76
|
export interface SkillsModule {
|
|
93
77
|
/**
|
|
94
|
-
* Load a single skill by ID
|
|
78
|
+
* @description Load a single skill by ID from `/.soulcraft/skills/{id}/SKILL.md`.
|
|
95
79
|
*
|
|
96
|
-
* @param id - Kebab-case skill ID (e.g. `'
|
|
97
|
-
* @
|
|
98
|
-
* @returns The skill, or `null` if not found in VFS or bundled registry.
|
|
80
|
+
* @param id - Kebab-case skill ID (e.g. `'candle-expertise'`).
|
|
81
|
+
* @returns The skill, or `null` if not found.
|
|
99
82
|
*/
|
|
100
|
-
load(id: string
|
|
83
|
+
load(id: string): Promise<Skill | null>;
|
|
101
84
|
/**
|
|
102
|
-
* List skills
|
|
103
|
-
*
|
|
104
|
-
* Skills are returned from VFS. When a test registry is provided, VFS skills
|
|
105
|
-
* appear first, followed by test registry skills (no deduplication).
|
|
85
|
+
* @description List all skills in the workspace.
|
|
106
86
|
*
|
|
107
|
-
* @param options -
|
|
108
|
-
* @returns
|
|
87
|
+
* @param options - Optional filtering (reserved for future use).
|
|
88
|
+
* @returns Array of all installed skills.
|
|
109
89
|
*/
|
|
110
90
|
list(options?: SkillListOptions): Promise<Skill[]>;
|
|
111
91
|
/**
|
|
112
|
-
* Install a skill into
|
|
113
|
-
*
|
|
114
|
-
* Writes the skill content to `/skills/{kitId}/{id}.md` in the Brainy VFS.
|
|
115
|
-
* Overwrites any existing skill at that path.
|
|
92
|
+
* @description Install a skill into `/.soulcraft/skills/{id}/SKILL.md`.
|
|
93
|
+
* Creates the directory if it doesn't exist. Overwrites if it does.
|
|
116
94
|
*
|
|
117
|
-
* @param options - The skill to install.
|
|
118
|
-
* @throws {Error} If the VFS is not available on this SDK instance.
|
|
95
|
+
* @param options - The skill ID and content to install.
|
|
119
96
|
*/
|
|
120
97
|
install(options: SkillInstallOptions): Promise<void>;
|
|
121
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAA;IACV,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAA;IACf,wCAAwC;IACxC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,CAAC,CAAC,EAAE,KAAK,CAAA;CACV;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAA;IACV,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEvC;;;;;OAKG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAElD;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD"}
|
|
@@ -2,18 +2,21 @@
|
|
|
2
2
|
* @module modules/skills/types
|
|
3
3
|
* @description Type definitions for `sdk.skills.*` — the skill loading and registry system.
|
|
4
4
|
*
|
|
5
|
-
* Skills are
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* within a kit's context.
|
|
5
|
+
* Skills are SKILL.md files stored at `/.soulcraft/skills/{id}/SKILL.md` in the Brainy VFS.
|
|
6
|
+
* Each skill is a directory containing a SKILL.md with YAML frontmatter and markdown
|
|
7
|
+
* instructions that define an AI persona, capabilities, or workflow.
|
|
9
8
|
*
|
|
10
|
-
* Skills are
|
|
11
|
-
*
|
|
9
|
+
* Skills are workspace-scoped — seeded from the kit at creation time and customizable
|
|
10
|
+
* per workspace. All products (Workshop, Venue, Academy, Pulse) read from the same path.
|
|
12
11
|
*
|
|
13
|
-
* ## Skill
|
|
12
|
+
* ## Skill types (via `type:` frontmatter)
|
|
13
|
+
* - `background` — passive knowledge, always loaded into AI context
|
|
14
|
+
* - `active` — user and/or AI can invoke
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* ## Path convention
|
|
17
|
+
* ```
|
|
18
|
+
* /.soulcraft/skills/{skill-id}/SKILL.md
|
|
19
|
+
* ```
|
|
17
20
|
*/
|
|
18
21
|
export {};
|
|
19
22
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -5,20 +5,17 @@
|
|
|
5
5
|
*
|
|
6
6
|
* ## Entity Model
|
|
7
7
|
*
|
|
8
|
-
* Each generated image is stored as two Brainy entities
|
|
8
|
+
* Each generated image is stored as two Brainy entities:
|
|
9
9
|
*
|
|
10
|
-
* - **
|
|
11
|
-
* (enables Cortex semantic search)
|
|
12
|
-
* `metadata
|
|
13
|
-
* from other document nouns.
|
|
10
|
+
* - **Media noun** (`type: 'media'`) — the generation record with prompt text
|
|
11
|
+
* in `data` (enables Cortex semantic search) and structured parameters in
|
|
12
|
+
* `metadata` (style, seed, dimensions, timing, vfsPath).
|
|
14
13
|
*
|
|
15
|
-
* - **VFS file**
|
|
16
|
-
*
|
|
14
|
+
* - **VFS file** — the actual PNG bytes at `/images/{uuid}.png`, auto-created
|
|
15
|
+
* by `brain.vfs.writeFile()` with `metadata.isVFS: true`.
|
|
17
16
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* Gallery queries target `noun: 'document'` with `metadata.imagineGeneration: true`,
|
|
21
|
-
* so VFS entries and other document types are excluded.
|
|
17
|
+
* Gallery queries use `excludeVFS: true` to return only the generation records,
|
|
18
|
+
* not the raw VFS file entities.
|
|
22
19
|
*/
|
|
23
20
|
import type { NamespaceProvider } from '../namespace-router.js';
|
|
24
21
|
/**
|
|
@@ -79,17 +76,13 @@ export interface ImagineBackend {
|
|
|
79
76
|
height: number;
|
|
80
77
|
}>;
|
|
81
78
|
}
|
|
82
|
-
/**
|
|
83
|
-
* @description Options for {@link createImagineHandler}.
|
|
84
|
-
*/
|
|
85
79
|
export interface ImagineHandlerOptions {
|
|
86
80
|
backend: ImagineBackend;
|
|
87
81
|
}
|
|
88
82
|
/**
|
|
89
83
|
* @description Creates the `imagine` namespace handler.
|
|
90
|
-
*
|
|
91
|
-
* @
|
|
92
|
-
* @returns A {@link NamespaceProvider} implementing {@link ImagineNamespace}.
|
|
84
|
+
* @param options - Handler dependencies with GPU backend.
|
|
85
|
+
* @returns A {@link NamespaceProvider} for the `imagine` namespace.
|
|
93
86
|
*/
|
|
94
87
|
export declare function createImagineHandler(options?: ImagineHandlerOptions): NamespaceProvider;
|
|
95
88
|
//# sourceMappingURL=imagine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagine.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/imagine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"imagine.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/imagine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAA;AAM/E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CACN,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;QAC7C,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAC9C,EACD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAEjG,cAAc,CAAC,CACb,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;QAC7C,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAC9C,EACD,MAAM,EAAE,MAAM,GACb,aAAa,CACZ;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACjD;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACrF;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CACrC,CAAA;IAED,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,GAAG,aAAa,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAChF,eAAe,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7F,cAAc,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACvF;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAA;CACxB;AAsFD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,iBAAiB,CAyGvF"}
|
|
@@ -5,90 +5,67 @@
|
|
|
5
5
|
*
|
|
6
6
|
* ## Entity Model
|
|
7
7
|
*
|
|
8
|
-
* Each generated image is stored as two Brainy entities
|
|
8
|
+
* Each generated image is stored as two Brainy entities:
|
|
9
9
|
*
|
|
10
|
-
* - **
|
|
11
|
-
* (enables Cortex semantic search)
|
|
12
|
-
* `metadata
|
|
13
|
-
* from other document nouns.
|
|
10
|
+
* - **Media noun** (`type: 'media'`) — the generation record with prompt text
|
|
11
|
+
* in `data` (enables Cortex semantic search) and structured parameters in
|
|
12
|
+
* `metadata` (style, seed, dimensions, timing, vfsPath).
|
|
14
13
|
*
|
|
15
|
-
* - **VFS file**
|
|
16
|
-
*
|
|
14
|
+
* - **VFS file** — the actual PNG bytes at `/images/{uuid}.png`, auto-created
|
|
15
|
+
* by `brain.vfs.writeFile()` with `metadata.isVFS: true`.
|
|
17
16
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* Gallery queries target `noun: 'document'` with `metadata.imagineGeneration: true`,
|
|
21
|
-
* so VFS entries and other document types are excluded.
|
|
17
|
+
* Gallery queries use `excludeVFS: true` to return only the generation records,
|
|
18
|
+
* not the raw VFS file entities.
|
|
22
19
|
*/
|
|
23
20
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
24
21
|
// Constants
|
|
25
22
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
26
|
-
/** VFS directory where generated images are stored. */
|
|
27
23
|
const IMAGES_VFS_PATH = '/images';
|
|
28
|
-
|
|
29
|
-
const GEN_NOUN_TYPE = 'document';
|
|
30
|
-
/** Metadata flag distinguishing Imagine generation records from other documents. */
|
|
31
|
-
const GEN_FLAG = 'imagineGeneration';
|
|
32
|
-
/** Verb type linking generation → VFS image file. */
|
|
33
|
-
const GEN_VERB = 'creates';
|
|
24
|
+
const NOUN_TYPE = 'media';
|
|
34
25
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
35
|
-
//
|
|
26
|
+
// Helpers
|
|
36
27
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
37
28
|
function resolveStylePrefix(key, backend) {
|
|
38
|
-
|
|
39
|
-
return preset?.prefix ?? '';
|
|
29
|
+
return backend.getStylePresets().find((s) => s.key === key)?.prefix ?? '';
|
|
40
30
|
}
|
|
41
31
|
function resolveDimensions(key, backend) {
|
|
42
|
-
|
|
43
|
-
return preset ?? { width: 1024, height: 576 };
|
|
32
|
+
return backend.getSizePresets().find((s) => s.key === key) ?? { width: 1024, height: 576 };
|
|
44
33
|
}
|
|
45
34
|
/**
|
|
46
|
-
* @description Extract image metadata from a Brainy
|
|
47
|
-
*
|
|
35
|
+
* @description Extract image metadata from a Brainy entity. The prompt is
|
|
36
|
+
* stored as `data` (string for semantic search); parameters in `metadata`.
|
|
48
37
|
*/
|
|
49
38
|
function toImageMeta(r) {
|
|
50
|
-
const
|
|
51
|
-
const prompt = typeof r.data === 'string' ? r.data : '';
|
|
39
|
+
const m = (r.metadata ?? {});
|
|
52
40
|
return {
|
|
53
41
|
id: r.id,
|
|
54
|
-
prompt,
|
|
55
|
-
style:
|
|
56
|
-
size:
|
|
57
|
-
steps:
|
|
58
|
-
guidance:
|
|
59
|
-
seed:
|
|
60
|
-
width:
|
|
61
|
-
height:
|
|
62
|
-
elapsed:
|
|
63
|
-
createdAt:
|
|
42
|
+
prompt: typeof r.data === 'string' ? r.data : '',
|
|
43
|
+
style: m['style'] ?? 'none',
|
|
44
|
+
size: m['size'] ?? 'landscape',
|
|
45
|
+
steps: m['steps'] ?? 25,
|
|
46
|
+
guidance: m['guidance'] ?? 7.5,
|
|
47
|
+
seed: m['seed'] ?? 0,
|
|
48
|
+
width: m['width'] ?? 1024,
|
|
49
|
+
height: m['height'] ?? 576,
|
|
50
|
+
elapsed: m['elapsed'] ?? 0,
|
|
51
|
+
createdAt: m['createdAt'] ?? 0,
|
|
64
52
|
filename: `${r.id}.png`,
|
|
65
53
|
};
|
|
66
54
|
}
|
|
67
55
|
/**
|
|
68
|
-
* @description Store a generated image in Brainy.
|
|
69
|
-
*
|
|
70
|
-
* 1. Write PNG to VFS (`/images/{uuid}.png`) — creates a `media` noun internally
|
|
71
|
-
* 2. Create `document` noun with prompt as data + generation metadata
|
|
72
|
-
* 3. Relate document → VFS file via `creates` verb
|
|
73
|
-
*
|
|
74
|
-
* @returns The generation document entity ID.
|
|
56
|
+
* @description Store a generated image in Brainy: VFS file + media noun.
|
|
57
|
+
* @returns The media noun entity ID.
|
|
75
58
|
*/
|
|
76
59
|
async function storeImage(brain, imageBytes, meta) {
|
|
77
|
-
// 1. Write PNG to VFS
|
|
78
60
|
await brain.vfs.mkdir(IMAGES_VFS_PATH, { recursive: true });
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
const vfsPath = `${IMAGES_VFS_PATH}/${tempId}.png`;
|
|
61
|
+
const fileId = crypto.randomUUID();
|
|
62
|
+
const vfsPath = `${IMAGES_VFS_PATH}/${fileId}.png`;
|
|
82
63
|
await brain.vfs.writeFile(vfsPath, Buffer.from(imageBytes));
|
|
83
|
-
// 2. Create generation document noun
|
|
84
|
-
// data = prompt text (enables semantic search via Cortex)
|
|
85
|
-
// metadata = structured generation parameters
|
|
86
64
|
const genId = await brain.add({
|
|
87
|
-
type:
|
|
65
|
+
type: NOUN_TYPE,
|
|
88
66
|
data: meta.prompt,
|
|
89
67
|
metadata: {
|
|
90
68
|
name: meta.prompt.slice(0, 100),
|
|
91
|
-
[GEN_FLAG]: true,
|
|
92
69
|
style: meta.style,
|
|
93
70
|
size: meta.size,
|
|
94
71
|
steps: meta.steps,
|
|
@@ -101,14 +78,6 @@ async function storeImage(brain, imageBytes, meta) {
|
|
|
101
78
|
vfsPath,
|
|
102
79
|
},
|
|
103
80
|
});
|
|
104
|
-
// 3. Relate generation → VFS file
|
|
105
|
-
await brain.relate({
|
|
106
|
-
from: genId,
|
|
107
|
-
to: vfsPath,
|
|
108
|
-
type: GEN_VERB,
|
|
109
|
-
}).catch(() => {
|
|
110
|
-
// VFS entity may not be directly addressable — non-fatal
|
|
111
|
-
});
|
|
112
81
|
return genId;
|
|
113
82
|
}
|
|
114
83
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -116,37 +85,33 @@ async function storeImage(brain, imageBytes, meta) {
|
|
|
116
85
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
117
86
|
/**
|
|
118
87
|
* @description Creates the `imagine` namespace handler.
|
|
119
|
-
*
|
|
120
|
-
* @
|
|
121
|
-
* @returns A {@link NamespaceProvider} implementing {@link ImagineNamespace}.
|
|
88
|
+
* @param options - Handler dependencies with GPU backend.
|
|
89
|
+
* @returns A {@link NamespaceProvider} for the `imagine` namespace.
|
|
122
90
|
*/
|
|
123
91
|
export function createImagineHandler(options) {
|
|
124
92
|
const backend = options?.backend;
|
|
125
|
-
function
|
|
126
|
-
if (!backend)
|
|
127
|
-
throw new Error('imagine namespace
|
|
128
|
-
}
|
|
93
|
+
function gpu() {
|
|
94
|
+
if (!backend)
|
|
95
|
+
throw new Error('imagine namespace not configured — provide ImagineBackend');
|
|
129
96
|
return backend;
|
|
130
97
|
}
|
|
131
98
|
return {
|
|
132
99
|
async generate(params, ctx) {
|
|
133
|
-
const
|
|
100
|
+
const g = gpu();
|
|
134
101
|
const { brain } = ctx;
|
|
135
102
|
const count = Math.min(Math.max(params.count ?? 1, 1), 4);
|
|
136
103
|
const style = params.style ?? 'none';
|
|
137
104
|
const sizeKey = params.size ?? 'landscape';
|
|
138
105
|
const steps = params.steps ?? 25;
|
|
139
106
|
const guidance = params.guidance ?? 7.5;
|
|
140
|
-
const prefix = resolveStylePrefix(style,
|
|
141
|
-
const { width, height } = resolveDimensions(sizeKey,
|
|
107
|
+
const prefix = resolveStylePrefix(style, g);
|
|
108
|
+
const { width, height } = resolveDimensions(sizeKey, g);
|
|
142
109
|
const fullPrompt = prefix + params.prompt;
|
|
143
110
|
const images = [];
|
|
144
111
|
for (let i = 0; i < count; i++) {
|
|
145
|
-
const seed = params.seed != null
|
|
146
|
-
? params.seed + i
|
|
147
|
-
: Math.floor(Math.random() * 2147483647);
|
|
112
|
+
const seed = params.seed != null ? params.seed + i : Math.floor(Math.random() * 2147483647);
|
|
148
113
|
const start = performance.now();
|
|
149
|
-
const result = await
|
|
114
|
+
const result = await g.generate({ prompt: fullPrompt, width, height, steps, guidance, seed }, ctx.user.id);
|
|
150
115
|
const elapsed = (performance.now() - start) / 1000;
|
|
151
116
|
const id = await storeImage(brain, result.bytes, {
|
|
152
117
|
prompt: params.prompt, style, size: sizeKey, steps, guidance,
|
|
@@ -160,83 +125,16 @@ export function createImagineHandler(options) {
|
|
|
160
125
|
}
|
|
161
126
|
return images;
|
|
162
127
|
},
|
|
163
|
-
async *generateStream(params, ctx) {
|
|
164
|
-
const gpu = requireBackend();
|
|
165
|
-
const { brain } = ctx;
|
|
166
|
-
const style = params.style ?? 'none';
|
|
167
|
-
const sizeKey = params.size ?? 'landscape';
|
|
168
|
-
const steps = params.steps ?? 25;
|
|
169
|
-
const guidance = params.guidance ?? 7.5;
|
|
170
|
-
const seed = params.seed ?? Math.floor(Math.random() * 2147483647);
|
|
171
|
-
const prefix = resolveStylePrefix(style, gpu);
|
|
172
|
-
const { width, height } = resolveDimensions(sizeKey, gpu);
|
|
173
|
-
const fullPrompt = prefix + params.prompt;
|
|
174
|
-
if (gpu.generateStream) {
|
|
175
|
-
const start = performance.now();
|
|
176
|
-
let resultBytes = null;
|
|
177
|
-
let resultSeed = seed, resultWidth = width, resultHeight = height;
|
|
178
|
-
for await (const event of gpu.generateStream({ prompt: fullPrompt, width, height, steps, guidance, seed }, ctx.user.id)) {
|
|
179
|
-
if (event.type === 'progress') {
|
|
180
|
-
yield { type: 'progress', step: event.step, total: event.total };
|
|
181
|
-
}
|
|
182
|
-
else if (event.type === 'complete') {
|
|
183
|
-
resultBytes = event.bytes;
|
|
184
|
-
resultSeed = event.seed;
|
|
185
|
-
resultWidth = event.width;
|
|
186
|
-
resultHeight = event.height;
|
|
187
|
-
}
|
|
188
|
-
else if (event.type === 'error') {
|
|
189
|
-
yield { type: 'error', message: event.message };
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
if (resultBytes) {
|
|
194
|
-
const elapsed = (performance.now() - start) / 1000;
|
|
195
|
-
const id = await storeImage(brain, resultBytes, {
|
|
196
|
-
prompt: params.prompt, style, size: sizeKey, steps, guidance,
|
|
197
|
-
seed: resultSeed, width: resultWidth, height: resultHeight, elapsed,
|
|
198
|
-
});
|
|
199
|
-
yield {
|
|
200
|
-
type: 'complete',
|
|
201
|
-
images: [{
|
|
202
|
-
id, prompt: params.prompt, style, size: sizeKey, steps, guidance,
|
|
203
|
-
seed: resultSeed, width: resultWidth, height: resultHeight,
|
|
204
|
-
elapsed, createdAt: Date.now(), filename: `${id}.png`,
|
|
205
|
-
}],
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
yield { type: 'progress', step: 0, total: steps };
|
|
211
|
-
const start = performance.now();
|
|
212
|
-
const result = await gpu.generate({ prompt: fullPrompt, width, height, steps, guidance, seed }, ctx.user.id);
|
|
213
|
-
const elapsed = (performance.now() - start) / 1000;
|
|
214
|
-
const id = await storeImage(brain, result.bytes, {
|
|
215
|
-
prompt: params.prompt, style, size: sizeKey, steps, guidance,
|
|
216
|
-
seed: result.seed, width: result.width, height: result.height, elapsed,
|
|
217
|
-
});
|
|
218
|
-
yield {
|
|
219
|
-
type: 'complete',
|
|
220
|
-
images: [{
|
|
221
|
-
id, prompt: params.prompt, style, size: sizeKey, steps, guidance,
|
|
222
|
-
seed: result.seed, width: result.width, height: result.height,
|
|
223
|
-
elapsed, createdAt: Date.now(), filename: `${id}.png`,
|
|
224
|
-
}],
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
128
|
async list(options, ctx) {
|
|
229
|
-
const { brain } = ctx;
|
|
230
129
|
const limit = options?.limit ?? 50;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
130
|
+
const findOpts = {
|
|
131
|
+
where: { noun: NOUN_TYPE },
|
|
132
|
+
excludeVFS: true,
|
|
133
|
+
limit,
|
|
235
134
|
};
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
return results.map(toImageMeta);
|
|
135
|
+
if (options?.query)
|
|
136
|
+
findOpts.query = options.query;
|
|
137
|
+
return (await ctx.brain.find(findOpts)).map(toImageMeta);
|
|
240
138
|
},
|
|
241
139
|
async get(imageId, ctx) {
|
|
242
140
|
const entity = await ctx.brain.get(imageId);
|
|
@@ -263,22 +161,17 @@ export function createImagineHandler(options) {
|
|
|
263
161
|
const entity = await ctx.brain.get(imageId);
|
|
264
162
|
const vfsPath = entity?.metadata?.vfsPath ?? `${IMAGES_VFS_PATH}/${imageId}.png`;
|
|
265
163
|
await ctx.brain.delete(imageId);
|
|
266
|
-
|
|
267
|
-
await ctx.brain.vfs.unlink(vfsPath);
|
|
268
|
-
}
|
|
269
|
-
catch {
|
|
270
|
-
// VFS file may already be gone
|
|
271
|
-
}
|
|
164
|
+
await ctx.brain.vfs.unlink(vfsPath).catch(() => { });
|
|
272
165
|
},
|
|
273
166
|
async getPresets() {
|
|
274
|
-
const
|
|
167
|
+
const g = gpu();
|
|
275
168
|
return {
|
|
276
|
-
styles:
|
|
277
|
-
sizes:
|
|
169
|
+
styles: g.getStylePresets().map(({ key, label, description }) => ({ key, label, description })),
|
|
170
|
+
sizes: g.getSizePresets(),
|
|
278
171
|
};
|
|
279
172
|
},
|
|
280
173
|
async health() {
|
|
281
|
-
return
|
|
174
|
+
return gpu().health();
|
|
282
175
|
},
|
|
283
176
|
};
|
|
284
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagine.js","sourceRoot":"","sources":["../../../src/server/handlers/imagine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA6CH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,uDAAuD;AACvD,MAAM,eAAe,GAAG,SAAS,CAAA;AAEjC,oFAAoF;AACpF,MAAM,aAAa,GAAG,UAAU,CAAA;AAEhC,oFAAoF;AACpF,MAAM,QAAQ,GAAG,mBAAmB,CAAA;AAEpC,qDAAqD;AACrD,MAAM,QAAQ,GAAG,SAAS,CAAA;AAE1B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAuB;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACnE,OAAO,MAAM,EAAE,MAAM,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAuB;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IAClE,OAAO,MAAM,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAqE;IACxF,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAA;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACvD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,MAAM;QACN,KAAK,EAAG,IAAI,CAAC,OAAO,CAAY,IAAI,MAAM;QAC1C,IAAI,EAAG,IAAI,CAAC,MAAM,CAAY,IAAI,WAAW;QAC7C,KAAK,EAAG,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE;QACtC,QAAQ,EAAG,IAAI,CAAC,UAAU,CAAY,IAAI,GAAG;QAC7C,IAAI,EAAG,IAAI,CAAC,MAAM,CAAY,IAAI,CAAC;QACnC,KAAK,EAAG,IAAI,CAAC,OAAO,CAAY,IAAI,IAAI;QACxC,MAAM,EAAG,IAAI,CAAC,QAAQ,CAAY,IAAI,GAAG;QACzC,OAAO,EAAG,IAAI,CAAC,SAAS,CAAY,IAAI,CAAC;QACzC,SAAS,EAAG,IAAI,CAAC,WAAW,CAAY,IAAI,CAAC;QAC7C,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM;KACxB,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,UAAU,CACvB,KAAU,EACV,UAAuB,EACvB,IAGC;IAED,sBAAsB;IACtB,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3D,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IAClC,MAAM,OAAO,GAAG,GAAG,eAAe,IAAI,MAAM,MAAM,CAAA;IAClD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IAE3D,qCAAqC;IACrC,6DAA6D;IAC7D,iDAAiD;IACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;QAC5B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC/B,CAAC,QAAQ,CAAC,EAAE,IAAI;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;SACR;KACF,CAAC,CAAA;IAEF,kCAAkC;IAClC,MAAM,KAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,yDAAyD;IAC3D,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA+B;IAClE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAA;IAEhC,SAAS,cAAc;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAA;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,QAAQ,CACZ,MAGC,EACD,GAAmB;YAEnB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;YAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAA;YACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAA;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;YACvC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC7C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YACzD,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAEzC,MAAM,MAAM,GAAG,EAAE,CAAA;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI;oBAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;oBACjB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAA;gBAE1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAC/B,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CACZ,CAAA;gBACD,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAA;gBAElD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;oBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;oBAC5D,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO;iBACvE,CAAC,CAAA;gBAEF,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;oBAChE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;oBAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;iBACtD,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,CAAC,CAAC,cAAc,CACnB,MAGC,EACD,GAAmB;YAEnB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;YAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAA;YACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAA;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAA;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAA;YAClE,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC7C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YACzD,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAEzC,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;gBAC/B,IAAI,WAAW,GAAuB,IAAI,CAAA;gBAC1C,IAAI,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE,YAAY,GAAG,MAAM,CAAA;gBAEjE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,cAAc,CAC1C,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CACZ,EAAE,CAAC;oBACF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC9B,MAAM,EAAE,IAAI,EAAE,UAAmB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;oBAC3E,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACrC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAA;wBACzB,UAAU,GAAG,KAAK,CAAC,IAAI,CAAA;wBACvB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAA;wBACzB,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;oBAC7B,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAClC,MAAM,EAAE,IAAI,EAAE,OAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;wBACxD,OAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAA;oBAClD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE;wBAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;wBAC5D,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO;qBACpE,CAAC,CAAA;oBACF,MAAM;wBACJ,IAAI,EAAE,UAAmB;wBACzB,MAAM,EAAE,CAAC;gCACP,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;gCAChE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY;gCAC1D,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;6BACtD,CAAC;qBACH,CAAA;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,IAAI,EAAE,UAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;gBAE1D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;gBAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAC/B,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CACZ,CAAA;gBACD,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAA;gBAElD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;oBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;oBAC5D,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO;iBACvE,CAAC,CAAA;gBAEF,MAAM;oBACJ,IAAI,EAAE,UAAmB;oBACzB,MAAM,EAAE,CAAC;4BACP,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ;4BAChE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;4BAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;yBACtD,CAAC;iBACH,CAAA;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CACR,OAAuD,EACvD,GAAmB;YAEnB,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;YACrB,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAA;YAElC,0EAA0E;YAC1E,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,aAAa;gBACnB,CAAC,YAAY,QAAQ,EAAE,CAAC,EAAE,IAAI;aAC/B,CAAA;YACD,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK;gBAC5B,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAS,CAAC;gBACjE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAS,CAAC,CAAA;YAE7C,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACjC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,GAAmB;YAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3C,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAA;YACxB,OAAO,WAAW,CAAC,MAAa,CAAC,CAAA;QACnC,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,GAAmB;YACjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAQ,CAAA;gBAClD,MAAM,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,GAAG,eAAe,IAAI,OAAO,MAAM,CAAA;gBAChF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACpD,IAAI,MAAM,YAAY,WAAW;oBAAE,OAAO,MAAM,CAAA;gBAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAgB,CAAA;gBAChI,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAmB;YAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAQ,CAAA;YAClD,MAAM,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,GAAG,eAAe,IAAI,OAAO,MAAM,CAAA;YAEhF,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAE/B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,UAAU;YACd,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;YAC5B,OAAO;gBACL,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBACjG,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE;aAC5B,CAAA;QACH,CAAC;QAED,KAAK,CAAC,MAAM;YACV,OAAO,cAAc,EAAE,CAAC,MAAM,EAAE,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"imagine.js","sourceRoot":"","sources":["../../../src/server/handlers/imagine.ts"],"names":[],"mappings":"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"}
|