@soulcraft/sdk 1.0.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/client/index.d.ts +62 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +60 -0
- package/dist/client/index.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/ai/index.d.ts +55 -0
- package/dist/modules/ai/index.d.ts.map +1 -0
- package/dist/modules/ai/index.js +263 -0
- package/dist/modules/ai/index.js.map +1 -0
- package/dist/modules/ai/types.d.ts +216 -0
- package/dist/modules/ai/types.d.ts.map +1 -0
- package/dist/modules/ai/types.js +30 -0
- package/dist/modules/ai/types.js.map +1 -0
- package/dist/modules/auth/backchannel.d.ts +85 -0
- package/dist/modules/auth/backchannel.d.ts.map +1 -0
- package/dist/modules/auth/backchannel.js +168 -0
- package/dist/modules/auth/backchannel.js.map +1 -0
- package/dist/modules/auth/config.d.ts +122 -0
- package/dist/modules/auth/config.d.ts.map +1 -0
- package/dist/modules/auth/config.js +158 -0
- package/dist/modules/auth/config.js.map +1 -0
- package/dist/modules/auth/middleware.d.ts +146 -0
- package/dist/modules/auth/middleware.d.ts.map +1 -0
- package/dist/modules/auth/middleware.js +204 -0
- package/dist/modules/auth/middleware.js.map +1 -0
- package/dist/modules/auth/types.d.ts +162 -0
- package/dist/modules/auth/types.d.ts.map +1 -0
- package/dist/modules/auth/types.js +14 -0
- package/dist/modules/auth/types.js.map +1 -0
- package/dist/modules/billing/types.d.ts +7 -0
- package/dist/modules/billing/types.d.ts.map +1 -0
- package/dist/modules/billing/types.js +7 -0
- package/dist/modules/billing/types.js.map +1 -0
- package/dist/modules/brainy/auth.d.ts +104 -0
- package/dist/modules/brainy/auth.d.ts.map +1 -0
- package/dist/modules/brainy/auth.js +144 -0
- package/dist/modules/brainy/auth.js.map +1 -0
- package/dist/modules/brainy/errors.d.ts +118 -0
- package/dist/modules/brainy/errors.d.ts.map +1 -0
- package/dist/modules/brainy/errors.js +142 -0
- package/dist/modules/brainy/errors.js.map +1 -0
- package/dist/modules/brainy/events.d.ts +63 -0
- package/dist/modules/brainy/events.d.ts.map +1 -0
- package/dist/modules/brainy/events.js +14 -0
- package/dist/modules/brainy/events.js.map +1 -0
- package/dist/modules/brainy/proxy.d.ts +48 -0
- package/dist/modules/brainy/proxy.d.ts.map +1 -0
- package/dist/modules/brainy/proxy.js +95 -0
- package/dist/modules/brainy/proxy.js.map +1 -0
- package/dist/modules/brainy/types.d.ts +83 -0
- package/dist/modules/brainy/types.d.ts.map +1 -0
- package/dist/modules/brainy/types.js +21 -0
- package/dist/modules/brainy/types.js.map +1 -0
- package/dist/modules/events/index.d.ts +41 -0
- package/dist/modules/events/index.d.ts.map +1 -0
- package/dist/modules/events/index.js +53 -0
- package/dist/modules/events/index.js.map +1 -0
- package/dist/modules/events/types.d.ts +129 -0
- package/dist/modules/events/types.d.ts.map +1 -0
- package/dist/modules/events/types.js +32 -0
- package/dist/modules/events/types.js.map +1 -0
- package/dist/modules/formats/types.d.ts +7 -0
- package/dist/modules/formats/types.d.ts.map +1 -0
- package/dist/modules/formats/types.js +7 -0
- package/dist/modules/formats/types.js.map +1 -0
- package/dist/modules/hall/types.d.ts +56 -0
- package/dist/modules/hall/types.d.ts.map +1 -0
- package/dist/modules/hall/types.js +16 -0
- package/dist/modules/hall/types.js.map +1 -0
- package/dist/modules/kits/types.d.ts +7 -0
- package/dist/modules/kits/types.d.ts.map +1 -0
- package/dist/modules/kits/types.js +7 -0
- package/dist/modules/kits/types.js.map +1 -0
- package/dist/modules/license/types.d.ts +7 -0
- package/dist/modules/license/types.d.ts.map +1 -0
- package/dist/modules/license/types.js +7 -0
- package/dist/modules/license/types.js.map +1 -0
- package/dist/modules/notifications/types.d.ts +7 -0
- package/dist/modules/notifications/types.d.ts.map +1 -0
- package/dist/modules/notifications/types.js +7 -0
- package/dist/modules/notifications/types.js.map +1 -0
- package/dist/modules/skills/index.d.ts +60 -0
- package/dist/modules/skills/index.d.ts.map +1 -0
- package/dist/modules/skills/index.js +253 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/types.d.ts +127 -0
- package/dist/modules/skills/types.d.ts.map +1 -0
- package/dist/modules/skills/types.js +23 -0
- package/dist/modules/skills/types.js.map +1 -0
- package/dist/modules/versions/types.d.ts +31 -0
- package/dist/modules/versions/types.d.ts.map +1 -0
- package/dist/modules/versions/types.js +9 -0
- package/dist/modules/versions/types.js.map +1 -0
- package/dist/modules/vfs/types.d.ts +26 -0
- package/dist/modules/vfs/types.d.ts.map +1 -0
- package/dist/modules/vfs/types.js +11 -0
- package/dist/modules/vfs/types.js.map +1 -0
- package/dist/server/create-sdk.d.ts +70 -0
- package/dist/server/create-sdk.d.ts.map +1 -0
- package/dist/server/create-sdk.js +125 -0
- package/dist/server/create-sdk.js.map +1 -0
- package/dist/server/hall-handlers.d.ts +195 -0
- package/dist/server/hall-handlers.d.ts.map +1 -0
- package/dist/server/hall-handlers.js +239 -0
- package/dist/server/hall-handlers.js.map +1 -0
- package/dist/server/handlers.d.ts +216 -0
- package/dist/server/handlers.d.ts.map +1 -0
- package/dist/server/handlers.js +214 -0
- package/dist/server/handlers.js.map +1 -0
- package/dist/server/index.d.ts +52 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +50 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/instance-pool.d.ts +299 -0
- package/dist/server/instance-pool.d.ts.map +1 -0
- package/dist/server/instance-pool.js +359 -0
- package/dist/server/instance-pool.js.map +1 -0
- package/dist/transports/http.d.ts +86 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +134 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/local.d.ts +76 -0
- package/dist/transports/local.d.ts.map +1 -0
- package/dist/transports/local.js +101 -0
- package/dist/transports/local.js.map +1 -0
- package/dist/transports/sse.d.ts +99 -0
- package/dist/transports/sse.d.ts.map +1 -0
- package/dist/transports/sse.js +192 -0
- package/dist/transports/sse.js.map +1 -0
- package/dist/transports/transport.d.ts +68 -0
- package/dist/transports/transport.d.ts.map +1 -0
- package/dist/transports/transport.js +14 -0
- package/dist/transports/transport.js.map +1 -0
- package/dist/transports/ws.d.ts +135 -0
- package/dist/transports/ws.d.ts.map +1 -0
- package/dist/transports/ws.js +331 -0
- package/dist/transports/ws.js.map +1 -0
- package/dist/types.d.ts +152 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/docs/ADR-001-sdk-design.md +282 -0
- package/docs/IMPLEMENTATION-PLAN.md +708 -0
- package/docs/USAGE.md +646 -0
- package/docs/kit-sdk-guide.md +474 -0
- package/package.json +61 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/skills
|
|
3
|
+
* @description Skill loading and registry for @soulcraft/sdk.
|
|
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 two sources:
|
|
8
|
+
*
|
|
9
|
+
* 1. **VFS** (priority) — `/skills/{kitId}/{skillId}.md` in the Brainy VFS.
|
|
10
|
+
* Managed at runtime via `install()` or the kit initialization pipeline.
|
|
11
|
+
* 2. **Bundled** (fallback) — skills shipped with `@soulcraft/kits`.
|
|
12
|
+
* Loaded dynamically via `require` so the kits package is an optional dependency.
|
|
13
|
+
*
|
|
14
|
+
* ## VFS path convention
|
|
15
|
+
* ```
|
|
16
|
+
* /skills/{kitId}/{skillId}.md
|
|
17
|
+
* ```
|
|
18
|
+
* Example: `/skills/wicks-and-whiskers/inventory-health.md`
|
|
19
|
+
*
|
|
20
|
+
* ## Bundled fallback
|
|
21
|
+
*
|
|
22
|
+
* If `@soulcraft/kits` is installed, `skillRegistry[kitId]` is a Record mapping
|
|
23
|
+
* skill IDs to their raw SKILL.md content strings. The skills module reads from
|
|
24
|
+
* this registry when VFS lookup misses. If `@soulcraft/kits` is not installed,
|
|
25
|
+
* bundled lookup silently returns nothing.
|
|
26
|
+
*/
|
|
27
|
+
import { createRequire } from 'node:module';
|
|
28
|
+
// ESM-compatible require for loading CJS packages like @soulcraft/kits.
|
|
29
|
+
const _require = createRequire(import.meta.url);
|
|
30
|
+
/**
|
|
31
|
+
* Creates a `SkillsModule` backed by a Brainy VFS instance and the bundled
|
|
32
|
+
* `@soulcraft/kits` skill registry.
|
|
33
|
+
*
|
|
34
|
+
* @param brain - An initialized Brainy instance. Required for VFS operations.
|
|
35
|
+
* Pass `null` to disable VFS skill loading (bundled registry only).
|
|
36
|
+
* @param options - Optional configuration including a registry override for tests.
|
|
37
|
+
* @returns A configured {@link SkillsModule}.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const brain = await pool.forUser(user.emailHash, workspaceId)
|
|
42
|
+
* const skills = createSkillsModule(brain)
|
|
43
|
+
*
|
|
44
|
+
* const skill = await skills.load('inventory-health', 'wicks-and-whiskers')
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export function createSkillsModule(brain, options = {}) {
|
|
48
|
+
const getRegistry = options.bundledRegistry !== undefined
|
|
49
|
+
? () => options.bundledRegistry ?? null
|
|
50
|
+
: _getBundledRegistry;
|
|
51
|
+
return {
|
|
52
|
+
async load(id, kitId) {
|
|
53
|
+
// 1. Try VFS first
|
|
54
|
+
if (brain) {
|
|
55
|
+
const vfsSkill = await _loadFromVfs(brain, id, kitId);
|
|
56
|
+
if (vfsSkill)
|
|
57
|
+
return vfsSkill;
|
|
58
|
+
}
|
|
59
|
+
// 2. Fall back to bundled registry
|
|
60
|
+
return _loadBundled(id, kitId, getRegistry);
|
|
61
|
+
},
|
|
62
|
+
async list(options = {}) {
|
|
63
|
+
const { kitId, includeVfs = true, includeBundled = true } = options;
|
|
64
|
+
const results = [];
|
|
65
|
+
// Collect VFS skills
|
|
66
|
+
if (includeVfs && brain) {
|
|
67
|
+
const vfsSkills = await _listFromVfs(brain, kitId);
|
|
68
|
+
results.push(...vfsSkills);
|
|
69
|
+
}
|
|
70
|
+
// Collect bundled skills
|
|
71
|
+
if (includeBundled) {
|
|
72
|
+
const bundledSkills = _listBundled(kitId, getRegistry);
|
|
73
|
+
results.push(...bundledSkills);
|
|
74
|
+
}
|
|
75
|
+
return results;
|
|
76
|
+
},
|
|
77
|
+
async install(options) {
|
|
78
|
+
if (!brain) {
|
|
79
|
+
throw new Error('sdk.skills.install() requires a Brainy instance with VFS support. ' +
|
|
80
|
+
'Ensure the SDK was created with a valid brain parameter.');
|
|
81
|
+
}
|
|
82
|
+
const { id, kitId, content } = options;
|
|
83
|
+
const vfsPath = `/skills/${kitId}/${id}.md`;
|
|
84
|
+
await brain.vfs.writeFile(vfsPath, content);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
89
|
+
// VFS helpers
|
|
90
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Load a skill from the VFS at `/skills/{kitId}/{id}.md`.
|
|
93
|
+
*
|
|
94
|
+
* @param brain - Initialized Brainy instance.
|
|
95
|
+
* @param id - Skill ID.
|
|
96
|
+
* @param kitId - Kit ID.
|
|
97
|
+
* @returns The skill if found, or `null`.
|
|
98
|
+
*/
|
|
99
|
+
async function _loadFromVfs(brain, id, kitId) {
|
|
100
|
+
const vfsPath = `/skills/${kitId}/${id}.md`;
|
|
101
|
+
try {
|
|
102
|
+
const raw = await brain.vfs.readFile(vfsPath);
|
|
103
|
+
const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
|
|
104
|
+
return { id, kitId, content, source: 'vfs' };
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// File not found in VFS — normal, fall through to bundled
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* List all skills installed in the VFS, optionally filtered by kit ID.
|
|
113
|
+
*
|
|
114
|
+
* @param brain - Initialized Brainy instance.
|
|
115
|
+
* @param kitId - Optional kit filter. If omitted, all skills are returned.
|
|
116
|
+
* @returns Array of VFS-sourced skills.
|
|
117
|
+
*/
|
|
118
|
+
async function _listFromVfs(brain, kitId) {
|
|
119
|
+
const results = [];
|
|
120
|
+
try {
|
|
121
|
+
if (kitId) {
|
|
122
|
+
// List skills for a specific kit
|
|
123
|
+
const dir = `/skills/${kitId}`;
|
|
124
|
+
const entries = await brain.vfs.readdir(dir);
|
|
125
|
+
for (const entry of entries) {
|
|
126
|
+
if (typeof entry === 'string' && entry.endsWith('.md')) {
|
|
127
|
+
const id = entry.slice(0, -3); // strip .md
|
|
128
|
+
const vfsPath = `${dir}/${entry}`;
|
|
129
|
+
try {
|
|
130
|
+
const raw = await brain.vfs.readFile(vfsPath);
|
|
131
|
+
const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
|
|
132
|
+
results.push({ id, kitId, content, source: 'vfs' });
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Skip unreadable files
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (typeof entry === 'object' && 'name' in entry) {
|
|
139
|
+
const name = entry.name;
|
|
140
|
+
if (name.endsWith('.md')) {
|
|
141
|
+
const id = name.slice(0, -3);
|
|
142
|
+
const vfsPath = `${dir}/${name}`;
|
|
143
|
+
try {
|
|
144
|
+
const raw = await brain.vfs.readFile(vfsPath);
|
|
145
|
+
const content = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
|
|
146
|
+
results.push({ id, kitId, content, source: 'vfs' });
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Skip unreadable files
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// List all kits then list skills per kit
|
|
157
|
+
const skillsDir = '/skills';
|
|
158
|
+
let kitEntries;
|
|
159
|
+
try {
|
|
160
|
+
kitEntries = await brain.vfs.readdir(skillsDir);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return results; // /skills doesn't exist yet
|
|
164
|
+
}
|
|
165
|
+
for (const kitEntry of kitEntries) {
|
|
166
|
+
const kitName = typeof kitEntry === 'string' ? kitEntry
|
|
167
|
+
: typeof kitEntry === 'object' && kitEntry !== null && 'name' in kitEntry
|
|
168
|
+
? kitEntry.name
|
|
169
|
+
: null;
|
|
170
|
+
if (!kitName)
|
|
171
|
+
continue;
|
|
172
|
+
const kitSkills = await _listFromVfs(brain, kitName);
|
|
173
|
+
results.push(...kitSkills);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// VFS unavailable or /skills not initialized — return empty
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
183
|
+
// Bundled registry helpers
|
|
184
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
185
|
+
/**
|
|
186
|
+
* Load a single skill from the bundled `@soulcraft/kits` skill registry.
|
|
187
|
+
*
|
|
188
|
+
* @param id - Skill ID.
|
|
189
|
+
* @param kitId - Kit ID.
|
|
190
|
+
* @param getRegistry - Function that returns the bundled registry (or null).
|
|
191
|
+
* @returns The skill if found in the bundled registry, or `null`.
|
|
192
|
+
*/
|
|
193
|
+
function _loadBundled(id, kitId, getRegistry) {
|
|
194
|
+
const registry = getRegistry();
|
|
195
|
+
if (!registry)
|
|
196
|
+
return null;
|
|
197
|
+
const kitSkills = registry[kitId];
|
|
198
|
+
if (!kitSkills)
|
|
199
|
+
return null;
|
|
200
|
+
const content = kitSkills[id];
|
|
201
|
+
if (!content)
|
|
202
|
+
return null;
|
|
203
|
+
return { id, kitId, content, source: 'bundled' };
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* List skills from the bundled registry, optionally filtered by kit ID.
|
|
207
|
+
*
|
|
208
|
+
* @param kitId - Optional kit filter.
|
|
209
|
+
* @param getRegistry - Function that returns the bundled registry (or null).
|
|
210
|
+
* @returns Array of bundled skills.
|
|
211
|
+
*/
|
|
212
|
+
function _listBundled(kitId, getRegistry) {
|
|
213
|
+
const registry = getRegistry();
|
|
214
|
+
if (!registry)
|
|
215
|
+
return [];
|
|
216
|
+
const results = [];
|
|
217
|
+
const kitsToList = kitId ? [kitId] : Object.keys(registry);
|
|
218
|
+
for (const kit of kitsToList) {
|
|
219
|
+
const kitSkills = registry[kit];
|
|
220
|
+
if (!kitSkills)
|
|
221
|
+
continue;
|
|
222
|
+
for (const [skillId, content] of Object.entries(kitSkills)) {
|
|
223
|
+
results.push({ id: skillId, kitId: kit, content, source: 'bundled' });
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return results;
|
|
227
|
+
}
|
|
228
|
+
// Lazily-resolved bundled registry cache.
|
|
229
|
+
// `undefined` = not yet attempted; `null` = @soulcraft/kits not installed.
|
|
230
|
+
let _registryCache = undefined;
|
|
231
|
+
/**
|
|
232
|
+
* Return the bundled `@soulcraft/kits` skill registry, loading it on first call.
|
|
233
|
+
*
|
|
234
|
+
* Uses `createRequire` (ESM-compatible CJS require) to load the package. Returns
|
|
235
|
+
* `null` and degrades gracefully if `@soulcraft/kits` is not installed — VFS
|
|
236
|
+
* skills continue to work normally.
|
|
237
|
+
*
|
|
238
|
+
* @returns The skill registry (kitId → skillId → content), or null.
|
|
239
|
+
*/
|
|
240
|
+
function _getBundledRegistry() {
|
|
241
|
+
if (_registryCache !== undefined)
|
|
242
|
+
return _registryCache;
|
|
243
|
+
try {
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
245
|
+
const kits = _require('@soulcraft/kits');
|
|
246
|
+
_registryCache = (kits.skillRegistry ?? null);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
_registryCache = null;
|
|
250
|
+
}
|
|
251
|
+
return _registryCache;
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAI3C,wEAAwE;AACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAmB/C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAoB,EACpB,UAAqC,EAAE;IAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS;QACvD,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI;QACvC,CAAC,CAAC,mBAAmB,CAAA;IAEvB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,KAAa;YAClC,mBAAmB;YACnB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;gBACrD,IAAI,QAAQ;oBAAE,OAAO,QAAQ,CAAA;YAC/B,CAAC;YAED,mCAAmC;YACnC,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;QAC7C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAA4B,EAAE;YACvC,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;YACnE,MAAM,OAAO,GAAY,EAAE,CAAA;YAE3B,qBAAqB;YACrB,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAClD,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;YAC5B,CAAC;YAED,yBAAyB;YACzB,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;gBACtD,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAA;YAChC,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,OAA4B;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,oEAAoE;oBACpE,0DAA0D,CAC3D,CAAA;YACH,CAAC;YACD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;YACtC,MAAM,OAAO,GAAG,WAAW,KAAK,IAAI,EAAE,KAAK,CAAA;YAC3C,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;KACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;;GAOG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,EAAU,EAAE,KAAa;IAClE,MAAM,OAAO,GAAG,WAAW,KAAK,IAAI,EAAE,KAAK,CAAA;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC7C,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,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;QAC1D,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,KAAc;IACvD,MAAM,OAAO,GAAY,EAAE,CAAA;IAE3B,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,iCAAiC;YACjC,MAAM,GAAG,GAAG,WAAW,KAAK,EAAE,CAAA;YAC9B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,YAAY;oBAC1C,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;oBACjC,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;wBAC7C,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;wBAC1E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;oBACrD,CAAC;oBAAC,MAAM,CAAC;wBACP,wBAAwB;oBAC1B,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBACxD,MAAM,IAAI,GAAI,KAA0B,CAAC,IAAI,CAAA;oBAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;wBAC5B,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;wBAChC,IAAI,CAAC;4BACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;4BAC7C,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;4BAC1E,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;wBACrD,CAAC;wBAAC,MAAM,CAAC;4BACP,wBAAwB;wBAC1B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,MAAM,SAAS,GAAG,SAAS,CAAA;YAC3B,IAAI,UAAqB,CAAA;YACzB,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,OAAO,CAAA,CAAC,4BAA4B;YAC7C,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBACrD,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,IAAI,QAAQ;wBACvE,CAAC,CAAE,QAA6B,CAAC,IAAI;wBACrC,CAAC,CAAC,IAAI,CAAA;gBACV,IAAI,CAAC,OAAO;oBAAE,SAAQ;gBAEtB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBACpD,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,EAAU,EACV,KAAa,EACb,WAA4E;IAE5E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAE3B,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CACnB,KAAyB,EACzB,WAA4E;IAE5E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IAExB,MAAM,OAAO,GAAY,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAE1D,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,SAAS;YAAE,SAAQ;QACxB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,0CAA0C;AAC1C,2EAA2E;AAC3E,IAAI,cAAc,GAA8D,SAAS,CAAA;AAEzF;;;;;;;;GAQG;AACH,SAAS,mBAAmB;IAC1B,IAAI,cAAc,KAAK,SAAS;QAAE,OAAO,cAAc,CAAA;IAEvD,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAQ,CAAA;QAC/C,cAAc,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAkD,CAAA;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,IAAI,CAAA;IACvB,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/skills/types
|
|
3
|
+
* @description Type definitions for `sdk.skills.*` — the skill loading and registry system.
|
|
4
|
+
*
|
|
5
|
+
* Skills are Markdown files (SKILL.md convention) that define an AI persona,
|
|
6
|
+
* capabilities, glossary, and workflow steps for a specific domain. They drive
|
|
7
|
+
* Briggy's system prompt construction and define what Claude knows how to do
|
|
8
|
+
* within a kit's context.
|
|
9
|
+
*
|
|
10
|
+
* ## Skill sources (in priority order)
|
|
11
|
+
*
|
|
12
|
+
* 1. **VFS** — `/skills/{kitId}/{skillId}.md` in the Brainy VFS. Installed by the
|
|
13
|
+
* user or kit initialization pipeline. Takes priority over bundled skills.
|
|
14
|
+
* 2. **Bundled** — skills shipped with `@soulcraft/kits` as part of the kit manifest.
|
|
15
|
+
* Available without any VFS setup.
|
|
16
|
+
*
|
|
17
|
+
* ## Skill ID convention
|
|
18
|
+
*
|
|
19
|
+
* Skill IDs are kebab-case strings matching the `id:` frontmatter field in the
|
|
20
|
+
* SKILL.md file. Examples: `'inventory-health'`, `'session-flow'`, `'daily-brief'`.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* A parsed skill loaded from VFS or the bundled skill registry.
|
|
24
|
+
*/
|
|
25
|
+
export interface Skill {
|
|
26
|
+
/** Kebab-case skill identifier (matches the `id:` frontmatter field). */
|
|
27
|
+
id: string;
|
|
28
|
+
/** The kit this skill belongs to (`null` for global/shared skills). */
|
|
29
|
+
kitId: string | null;
|
|
30
|
+
/** The full SKILL.md content including YAML frontmatter. */
|
|
31
|
+
content: string;
|
|
32
|
+
/** Where this skill was loaded from. */
|
|
33
|
+
source: 'vfs' | 'bundled';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for listing skills.
|
|
37
|
+
*/
|
|
38
|
+
export interface SkillListOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Filter by kit ID. When omitted, all skills across all kits are returned.
|
|
41
|
+
*/
|
|
42
|
+
kitId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Whether to include VFS-installed skills in the results.
|
|
45
|
+
*
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
includeVfs?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Whether to include bundled skills from `@soulcraft/kits` in the results.
|
|
51
|
+
*
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
54
|
+
includeBundled?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Options for installing a skill into the VFS.
|
|
58
|
+
*/
|
|
59
|
+
export interface SkillInstallOptions {
|
|
60
|
+
/** The skill ID (kebab-case). */
|
|
61
|
+
id: string;
|
|
62
|
+
/** The kit this skill belongs to. */
|
|
63
|
+
kitId: string;
|
|
64
|
+
/** The full SKILL.md content including YAML frontmatter. */
|
|
65
|
+
content: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The `sdk.skills` namespace.
|
|
69
|
+
*
|
|
70
|
+
* Provides a unified interface for loading, listing, and installing skills
|
|
71
|
+
* across VFS and the bundled `@soulcraft/kits` registry.
|
|
72
|
+
*
|
|
73
|
+
* @example Loading a specific skill
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const skill = await sdk.skills.load('inventory-health', 'wicks-and-whiskers')
|
|
76
|
+
* if (skill) {
|
|
77
|
+
* const systemPrompt = buildSystemPrompt(kit, [skill.content])
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @example Listing all skills for a kit
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const skills = await sdk.skills.list({ kitId: 'wicks-and-whiskers' })
|
|
84
|
+
* const systemPrompt = buildSystemPrompt(kit, skills.map(s => s.content))
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @example Installing a skill into VFS
|
|
88
|
+
* ```typescript
|
|
89
|
+
* await sdk.skills.install({
|
|
90
|
+
* id: 'custom-flow',
|
|
91
|
+
* kitId: 'wicks-and-whiskers',
|
|
92
|
+
* content: `---\nid: custom-flow\ntitle: Custom Flow\n---\n...`,
|
|
93
|
+
* })
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export interface SkillsModule {
|
|
97
|
+
/**
|
|
98
|
+
* Load a single skill by ID, searching VFS first then bundled registry.
|
|
99
|
+
*
|
|
100
|
+
* @param id - Kebab-case skill ID (e.g. `'inventory-health'`).
|
|
101
|
+
* @param kitId - The kit the skill belongs to.
|
|
102
|
+
* @returns The skill, or `null` if not found in VFS or bundled registry.
|
|
103
|
+
*/
|
|
104
|
+
load(id: string, kitId: string): Promise<Skill | null>;
|
|
105
|
+
/**
|
|
106
|
+
* List skills matching the given options.
|
|
107
|
+
*
|
|
108
|
+
* Skills are returned in VFS-first order: VFS skills appear before bundled skills
|
|
109
|
+
* with the same ID (deduplication is not applied — callers may see both if a
|
|
110
|
+
* skill exists in both sources and both `includeVfs` and `includeBundled` are true).
|
|
111
|
+
*
|
|
112
|
+
* @param options - Filtering options.
|
|
113
|
+
* @returns An array of matching skills.
|
|
114
|
+
*/
|
|
115
|
+
list(options?: SkillListOptions): Promise<Skill[]>;
|
|
116
|
+
/**
|
|
117
|
+
* Install a skill into the VFS, making it available to all future `load()` calls.
|
|
118
|
+
*
|
|
119
|
+
* Writes the skill content to `/skills/{kitId}/{id}.md` in the Brainy VFS.
|
|
120
|
+
* Overwrites any existing skill at that path.
|
|
121
|
+
*
|
|
122
|
+
* @param options - The skill to install.
|
|
123
|
+
* @throws {Error} If the VFS is not available on this SDK instance.
|
|
124
|
+
*/
|
|
125
|
+
install(options: SkillInstallOptions): Promise<void>;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAA;IACV,uEAAuE;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAA;IACf,wCAAwC;IACxC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAA;CAChB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEtD;;;;;;;;;OASG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAElD;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/skills/types
|
|
3
|
+
* @description Type definitions for `sdk.skills.*` — the skill loading and registry system.
|
|
4
|
+
*
|
|
5
|
+
* Skills are Markdown files (SKILL.md convention) that define an AI persona,
|
|
6
|
+
* capabilities, glossary, and workflow steps for a specific domain. They drive
|
|
7
|
+
* Briggy's system prompt construction and define what Claude knows how to do
|
|
8
|
+
* within a kit's context.
|
|
9
|
+
*
|
|
10
|
+
* ## Skill sources (in priority order)
|
|
11
|
+
*
|
|
12
|
+
* 1. **VFS** — `/skills/{kitId}/{skillId}.md` in the Brainy VFS. Installed by the
|
|
13
|
+
* user or kit initialization pipeline. Takes priority over bundled skills.
|
|
14
|
+
* 2. **Bundled** — skills shipped with `@soulcraft/kits` as part of the kit manifest.
|
|
15
|
+
* Available without any VFS setup.
|
|
16
|
+
*
|
|
17
|
+
* ## Skill ID convention
|
|
18
|
+
*
|
|
19
|
+
* Skill IDs are kebab-case strings matching the `id:` frontmatter field in the
|
|
20
|
+
* SKILL.md file. Examples: `'inventory-health'`, `'session-flow'`, `'daily-brief'`.
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/versions/types
|
|
3
|
+
* @description Type definitions for `sdk.versions.*` — the entity version history namespace.
|
|
4
|
+
*
|
|
5
|
+
* `VersionsModule` is derived from `Brainy['versions']` so it stays in sync with
|
|
6
|
+
* the installed `@soulcraft/brainy` version automatically.
|
|
7
|
+
*/
|
|
8
|
+
import type { Brainy } from '@soulcraft/brainy';
|
|
9
|
+
/**
|
|
10
|
+
* The `sdk.versions` namespace — a type-safe handle to Brainy's VersioningAPI.
|
|
11
|
+
*
|
|
12
|
+
* At runtime this is implemented by the Brainy proxy. Derived from `Brainy['versions']`
|
|
13
|
+
* directly so it tracks Brainy's own VersioningAPI type without duplication.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Save a snapshot before a bulk edit
|
|
18
|
+
* const version = await sdk.versions.save(entityId, { tag: 'pre-edit' })
|
|
19
|
+
*
|
|
20
|
+
* // List all versions
|
|
21
|
+
* const history = await sdk.versions.list(entityId)
|
|
22
|
+
*
|
|
23
|
+
* // Restore to a previous version
|
|
24
|
+
* await sdk.versions.restore(entityId, 3)
|
|
25
|
+
*
|
|
26
|
+
* // Diff two versions
|
|
27
|
+
* const diff = await sdk.versions.compare(entityId, 2, 5)
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export type VersionsModule = Brainy['versions'];
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/versions/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/versions/types
|
|
3
|
+
* @description Type definitions for `sdk.versions.*` — the entity version history namespace.
|
|
4
|
+
*
|
|
5
|
+
* `VersionsModule` is derived from `Brainy['versions']` so it stays in sync with
|
|
6
|
+
* the installed `@soulcraft/brainy` version automatically.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/versions/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/vfs/types
|
|
3
|
+
* @description Type definitions for `sdk.vfs.*` — the Virtual Filesystem namespace.
|
|
4
|
+
*
|
|
5
|
+
* `VfsModule` is derived from `Brainy['vfs']` so it stays in sync with the installed
|
|
6
|
+
* `@soulcraft/brainy` version automatically. Sub-path types (VFSStats, VFSDirent, etc.)
|
|
7
|
+
* are re-exported from Brainy's internal vfs/types path so consumers only need a
|
|
8
|
+
* single `@soulcraft/sdk` import.
|
|
9
|
+
*/
|
|
10
|
+
import type { Brainy } from '@soulcraft/brainy';
|
|
11
|
+
/**
|
|
12
|
+
* The `sdk.vfs` namespace — a type-safe handle to Brainy's VirtualFileSystem API.
|
|
13
|
+
*
|
|
14
|
+
* At runtime this is implemented by the Brainy proxy. Derived from `Brainy['vfs']`
|
|
15
|
+
* directly so it tracks Brainy's own VirtualFileSystem type without any duplication.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const content = await sdk.vfs.readFile('/documents/spec.md')
|
|
20
|
+
* await sdk.vfs.writeFile('/notes/todo.txt', 'Buy more candles')
|
|
21
|
+
* const entries = await sdk.vfs.readdir('/documents')
|
|
22
|
+
* const info = await sdk.vfs.stat('/documents/spec.md')
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export type VfsModule = Brainy['vfs'];
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/vfs/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module modules/vfs/types
|
|
3
|
+
* @description Type definitions for `sdk.vfs.*` — the Virtual Filesystem namespace.
|
|
4
|
+
*
|
|
5
|
+
* `VfsModule` is derived from `Brainy['vfs']` so it stays in sync with the installed
|
|
6
|
+
* `@soulcraft/brainy` version automatically. Sub-path types (VFSStats, VFSDirent, etc.)
|
|
7
|
+
* are re-exported from Brainy's internal vfs/types path so consumers only need a
|
|
8
|
+
* single `@soulcraft/sdk` import.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/vfs/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module server/create-sdk
|
|
3
|
+
* @description `createSDK` factory for server-mode @soulcraft/sdk.
|
|
4
|
+
*
|
|
5
|
+
* Assembles a complete `SoulcraftSDK` instance from a live Brainy instance.
|
|
6
|
+
* In server mode the SDK uses the {@link LocalTransport} — zero overhead, no
|
|
7
|
+
* serialization, in-process method dispatch directly into the Brainy instance.
|
|
8
|
+
*
|
|
9
|
+
* The returned SDK object is scoped to a single Brainy instance. In a typical
|
|
10
|
+
* server request handler the caller resolves the correct Brainy instance from a
|
|
11
|
+
* {@link BrainyInstancePool} and then calls `createSDK({ brain })`. A new SDK
|
|
12
|
+
* object per request is cheap — it's a thin wrapper, not a connection.
|
|
13
|
+
*
|
|
14
|
+
* @example Workshop request handler
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { BrainyInstancePool, createSDK } from '@soulcraft/sdk/server'
|
|
17
|
+
*
|
|
18
|
+
* const pool = new BrainyInstancePool({ storage: 'filesystem', dataPath: './data', strategy: 'per-user' })
|
|
19
|
+
*
|
|
20
|
+
* app.get('/api/inventory', requireAuth, async (c) => {
|
|
21
|
+
* const user = c.get('user')!
|
|
22
|
+
* const brain = await pool.forUser(user.emailHash, 'main')
|
|
23
|
+
* const sdk = createSDK({ brain })
|
|
24
|
+
*
|
|
25
|
+
* const items = await sdk.brainy.find({ query: 'inventory items', type: 'Product' })
|
|
26
|
+
* const readme = await sdk.vfs.readFile('/projects/my-project/README.md')
|
|
27
|
+
* return c.json({ items })
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import type { Brainy } from '@soulcraft/brainy';
|
|
32
|
+
import type { SoulcraftSDK } from '../types.js';
|
|
33
|
+
/**
|
|
34
|
+
* Options for the server-mode {@link createSDK} factory.
|
|
35
|
+
*/
|
|
36
|
+
export interface CreateSDKOptions {
|
|
37
|
+
/**
|
|
38
|
+
* A fully initialized Brainy instance.
|
|
39
|
+
*
|
|
40
|
+
* Typically resolved from a {@link BrainyInstancePool} for the current user
|
|
41
|
+
* or tenant. The SDK wraps this instance in a {@link LocalTransport} so all
|
|
42
|
+
* `sdk.brainy.*` and `sdk.vfs.*` calls dispatch directly into it.
|
|
43
|
+
*/
|
|
44
|
+
brain: Brainy;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a server-mode `SoulcraftSDK` wrapping a live Brainy instance.
|
|
48
|
+
*
|
|
49
|
+
* All `sdk.brainy.*` and `sdk.vfs.*` calls are dispatched in-process with zero
|
|
50
|
+
* serialization overhead via {@link LocalTransport}.
|
|
51
|
+
*
|
|
52
|
+
* `sdk.ai.*` calls go directly to the Anthropic API (requires `ANTHROPIC_API_KEY`).
|
|
53
|
+
* `sdk.skills.*` reads from the Brainy VFS and falls back to `@soulcraft/kits`.
|
|
54
|
+
* `sdk.events` is a local EventEmitter — events do not cross process boundaries.
|
|
55
|
+
*
|
|
56
|
+
* @param options - SDK creation options.
|
|
57
|
+
* @returns A fully assembled `SoulcraftSDK` instance.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const brain = await pool.forUser(user.emailHash, workspaceId)
|
|
62
|
+
* const sdk = createSDK({ brain })
|
|
63
|
+
*
|
|
64
|
+
* const results = await sdk.brainy.find({ query: 'candle inventory' })
|
|
65
|
+
* const readme = await sdk.vfs.readFile('/projects/README.md')
|
|
66
|
+
* await sdk.events.emit('kit:session-completed', { userId, sessionId, kitId })
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function createSDK(options: CreateSDKOptions): SoulcraftSDK;
|
|
70
|
+
//# sourceMappingURL=create-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-sdk.d.ts","sourceRoot":"","sources":["../../src/server/create-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAO/C,OAAO,KAAK,EAAE,YAAY,EAAyC,MAAM,aAAa,CAAA;AAOtF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,CAiDjE"}
|