@eidola.app/cli 0.2.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/cli.d.ts +3 -0
- package/cli.d.ts.map +1 -0
- package/cli.js +46 -0
- package/cli.js.map +1 -0
- package/config.d.ts +16 -0
- package/config.d.ts.map +1 -0
- package/config.js +62 -0
- package/config.js.map +1 -0
- package/cursor/auto-activate.d.ts +16 -0
- package/cursor/auto-activate.d.ts.map +1 -0
- package/cursor/auto-activate.js +79 -0
- package/cursor/auto-activate.js.map +1 -0
- package/cursor/compile.d.ts +13 -0
- package/cursor/compile.d.ts.map +1 -0
- package/cursor/compile.js +47 -0
- package/cursor/compile.js.map +1 -0
- package/cursor/ensure-shrine.d.ts +25 -0
- package/cursor/ensure-shrine.d.ts.map +1 -0
- package/cursor/ensure-shrine.js +168 -0
- package/cursor/ensure-shrine.js.map +1 -0
- package/cursor/hash.d.ts +3 -0
- package/cursor/hash.d.ts.map +1 -0
- package/cursor/hash.js +7 -0
- package/cursor/hash.js.map +1 -0
- package/cursor/shrine-lock.d.ts +17 -0
- package/cursor/shrine-lock.d.ts.map +1 -0
- package/cursor/shrine-lock.js +82 -0
- package/cursor/shrine-lock.js.map +1 -0
- package/cursor/shrine-surface.d.ts +40 -0
- package/cursor/shrine-surface.d.ts.map +1 -0
- package/cursor/shrine-surface.js +152 -0
- package/cursor/shrine-surface.js.map +1 -0
- package/cursor/soul-source.d.ts +3 -0
- package/cursor/soul-source.d.ts.map +1 -0
- package/cursor/soul-source.js +15 -0
- package/cursor/soul-source.js.map +1 -0
- package/cursor/stale.d.ts +12 -0
- package/cursor/stale.d.ts.map +1 -0
- package/cursor/stale.js +41 -0
- package/cursor/stale.js.map +1 -0
- package/cursor/types.d.ts +24 -0
- package/cursor/types.d.ts.map +1 -0
- package/cursor/types.js +2 -0
- package/cursor/types.js.map +1 -0
- package/cursor/workspace-config.d.ts +13 -0
- package/cursor/workspace-config.d.ts.map +1 -0
- package/cursor/workspace-config.js +44 -0
- package/cursor/workspace-config.js.map +1 -0
- package/engram/loader.d.ts +3 -0
- package/engram/loader.d.ts.map +1 -0
- package/engram/loader.js +60 -0
- package/engram/loader.js.map +1 -0
- package/engram/parse.d.ts +4 -0
- package/engram/parse.d.ts.map +1 -0
- package/engram/parse.js +190 -0
- package/engram/parse.js.map +1 -0
- package/engram/registry.d.ts +9 -0
- package/engram/registry.d.ts.map +1 -0
- package/engram/registry.js +54 -0
- package/engram/registry.js.map +1 -0
- package/engram/types.d.ts +58 -0
- package/engram/types.d.ts.map +1 -0
- package/engram/types.js +12 -0
- package/engram/types.js.map +1 -0
- package/engram/validate.d.ts +7 -0
- package/engram/validate.d.ts.map +1 -0
- package/engram/validate.js +22 -0
- package/engram/validate.js.map +1 -0
- package/index.d.ts +30 -0
- package/index.d.ts.map +1 -0
- package/index.js +27 -0
- package/index.js.map +1 -0
- package/migrations/json-to-directory.d.ts +8 -0
- package/migrations/json-to-directory.d.ts.map +1 -0
- package/migrations/json-to-directory.js +151 -0
- package/migrations/json-to-directory.js.map +1 -0
- package/migrations/types.d.ts +46 -0
- package/migrations/types.d.ts.map +1 -0
- package/migrations/types.js +2 -0
- package/migrations/types.js.map +1 -0
- package/package.json +42 -0
- package/server.d.ts +5 -0
- package/server.d.ts.map +1 -0
- package/server.js +95 -0
- package/server.js.map +1 -0
- package/session/state.d.ts +29 -0
- package/session/state.d.ts.map +1 -0
- package/session/state.js +69 -0
- package/session/state.js.map +1 -0
- package/shrine/renderer/assets/index-C44XsM0B.js +4083 -0
- package/shrine/renderer/assets/index-DeRYP3aH.css +1 -0
- package/shrine/renderer/index.html +32 -0
- package/shrine/server/display-config.d.ts +20 -0
- package/shrine/server/display-config.d.ts.map +1 -0
- package/shrine/server/display-config.js +98 -0
- package/shrine/server/display-config.js.map +1 -0
- package/shrine/server/index.d.ts +35 -0
- package/shrine/server/index.d.ts.map +1 -0
- package/shrine/server/index.js +337 -0
- package/shrine/server/index.js.map +1 -0
- package/shrine/shared/approval-idle-logic.d.ts +17 -0
- package/shrine/shared/approval-idle-logic.d.ts.map +1 -0
- package/shrine/shared/approval-idle-logic.js +63 -0
- package/shrine/shared/approval-idle-logic.js.map +1 -0
- package/shrine/shared/approval-idle-logic.test.d.ts +2 -0
- package/shrine/shared/approval-idle-logic.test.d.ts.map +1 -0
- package/shrine/shared/approval-idle-logic.test.js +49 -0
- package/shrine/shared/approval-idle-logic.test.js.map +1 -0
- package/shrine/shared/kraken-detect.d.ts +36 -0
- package/shrine/shared/kraken-detect.d.ts.map +1 -0
- package/shrine/shared/kraken-detect.js +61 -0
- package/shrine/shared/kraken-detect.js.map +1 -0
- package/shrine/shared/kraken-detect.test.d.ts +2 -0
- package/shrine/shared/kraken-detect.test.d.ts.map +1 -0
- package/shrine/shared/kraken-detect.test.js +35 -0
- package/shrine/shared/kraken-detect.test.js.map +1 -0
- package/shrine/shared/shrine-api.d.ts +15 -0
- package/shrine/shared/shrine-api.d.ts.map +1 -0
- package/shrine/shared/shrine-api.js +2 -0
- package/shrine/shared/shrine-api.js.map +1 -0
- package/shrine/shared/shrine-display-config.d.ts +34 -0
- package/shrine/shared/shrine-display-config.d.ts.map +1 -0
- package/shrine/shared/shrine-display-config.js +197 -0
- package/shrine/shared/shrine-display-config.js.map +1 -0
- package/shrine/shared/shrine-display-config.test.d.ts +2 -0
- package/shrine/shared/shrine-display-config.test.d.ts.map +1 -0
- package/shrine/shared/shrine-display-config.test.js +53 -0
- package/shrine/shared/shrine-display-config.test.js.map +1 -0
- package/shrine/shared/shrine-state-colors.d.ts +4 -0
- package/shrine/shared/shrine-state-colors.d.ts.map +1 -0
- package/shrine/shared/shrine-state-colors.js +17 -0
- package/shrine/shared/shrine-state-colors.js.map +1 -0
- package/shrine/shared/shrine-surface.d.ts +32 -0
- package/shrine/shared/shrine-surface.d.ts.map +1 -0
- package/shrine/shared/shrine-surface.js +67 -0
- package/shrine/shared/shrine-surface.js.map +1 -0
- package/shrine/shared/shrine-surface.test.d.ts +2 -0
- package/shrine/shared/shrine-surface.test.d.ts.map +1 -0
- package/shrine/shared/shrine-surface.test.js +35 -0
- package/shrine/shared/shrine-surface.test.js.map +1 -0
- package/shrine/shared/state-socket-client.d.ts +30 -0
- package/shrine/shared/state-socket-client.d.ts.map +1 -0
- package/shrine/shared/state-socket-client.js +103 -0
- package/shrine/shared/state-socket-client.js.map +1 -0
- package/shrine/shared/state-socket-client.test.d.ts +2 -0
- package/shrine/shared/state-socket-client.test.d.ts.map +1 -0
- package/shrine/shared/state-socket-client.test.js +20 -0
- package/shrine/shared/state-socket-client.test.js.map +1 -0
- package/shrine/shared/types.d.ts +43 -0
- package/shrine/shared/types.d.ts.map +1 -0
- package/shrine/shared/types.js +58 -0
- package/shrine/shared/types.js.map +1 -0
- package/shrine/shared/types.test.d.ts +2 -0
- package/shrine/shared/types.test.d.ts.map +1 -0
- package/shrine/shared/types.test.js +26 -0
- package/shrine/shared/types.test.js.map +1 -0
- package/shrine/shared/vessel-resolver.d.ts +37 -0
- package/shrine/shared/vessel-resolver.d.ts.map +1 -0
- package/shrine/shared/vessel-resolver.js +135 -0
- package/shrine/shared/vessel-resolver.js.map +1 -0
- package/shrine/vendor/mcp.d.ts +3 -0
- package/shrine/vendor/mcp.d.ts.map +1 -0
- package/shrine/vendor/mcp.js +3 -0
- package/shrine/vendor/mcp.js.map +1 -0
- package/socket/expression.d.ts +3 -0
- package/socket/expression.d.ts.map +1 -0
- package/socket/expression.js +28 -0
- package/socket/expression.js.map +1 -0
- package/socket/protocol.d.ts +16 -0
- package/socket/protocol.d.ts.map +1 -0
- package/socket/protocol.js +75 -0
- package/socket/protocol.js.map +1 -0
- package/socket/server.d.ts +22 -0
- package/socket/server.d.ts.map +1 -0
- package/socket/server.js +184 -0
- package/socket/server.js.map +1 -0
- package/socket/types.d.ts +35 -0
- package/socket/types.d.ts.map +1 -0
- package/socket/types.js +18 -0
- package/socket/types.js.map +1 -0
- package/socket/visual-turn.d.ts +8 -0
- package/socket/visual-turn.d.ts.map +1 -0
- package/socket/visual-turn.js +27 -0
- package/socket/visual-turn.js.map +1 -0
- package/soul/injection.d.ts +13 -0
- package/soul/injection.d.ts.map +1 -0
- package/soul/injection.js +36 -0
- package/soul/injection.js.map +1 -0
- package/soul/reinject.d.ts +13 -0
- package/soul/reinject.d.ts.map +1 -0
- package/soul/reinject.js +28 -0
- package/soul/reinject.js.map +1 -0
- package/tools/handlers.d.ts +20 -0
- package/tools/handlers.d.ts.map +1 -0
- package/tools/handlers.js +148 -0
- package/tools/handlers.js.map +1 -0
- package/tools/register.d.ts +4 -0
- package/tools/register.d.ts.map +1 -0
- package/tools/register.js +48 -0
- package/tools/register.js.map +1 -0
- package/vendor/tool-state-pkg/index.d.ts +23 -0
- package/vendor/tool-state-pkg/index.d.ts.map +1 -0
- package/vendor/tool-state-pkg/index.js +140 -0
- package/vendor/tool-state-pkg/index.js.map +1 -0
- package/vendor/tool-state.d.ts +3 -0
- package/vendor/tool-state.d.ts.map +1 -0
- package/vendor/tool-state.js +3 -0
- package/vendor/tool-state.js.map +1 -0
- package/watch/filesystem.d.ts +7 -0
- package/watch/filesystem.d.ts.map +1 -0
- package/watch/filesystem.js +66 -0
- package/watch/filesystem.js.map +1 -0
package/engram/parse.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { normalizeExpressionKeys } from '../vendor/tool-state.js';
|
|
2
|
+
import { EngramLoadError } from './types.js';
|
|
3
|
+
import { validateEngramVersion } from './validate.js';
|
|
4
|
+
function requireString(value, field) {
|
|
5
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
6
|
+
throw new EngramLoadError(`Missing or invalid required field "${field}".`, 'INVALID_FIELD');
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
function requireNumber(value, field) {
|
|
11
|
+
if (typeof value !== 'number' || Number.isNaN(value)) {
|
|
12
|
+
throw new EngramLoadError(`Missing or invalid required field "${field}".`, 'INVALID_FIELD');
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
function requireObject(value, field) {
|
|
17
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
18
|
+
throw new EngramLoadError(`Missing or invalid required field "${field}".`, 'INVALID_FIELD');
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
export function parseEngramYaml(raw) {
|
|
23
|
+
const data = requireObject(raw, 'engram.yaml root');
|
|
24
|
+
const engramVersion = requireString(data.engram_version, 'engram_version');
|
|
25
|
+
validateEngramVersion(engramVersion);
|
|
26
|
+
const metaRaw = requireObject(data.meta, 'meta');
|
|
27
|
+
const extensionsRaw = data.extensions;
|
|
28
|
+
if (extensionsRaw === undefined) {
|
|
29
|
+
throw new EngramLoadError('Missing or invalid required field "extensions".', 'INVALID_FIELD');
|
|
30
|
+
}
|
|
31
|
+
if (!extensionsRaw || typeof extensionsRaw !== 'object' || Array.isArray(extensionsRaw)) {
|
|
32
|
+
throw new EngramLoadError('Missing or invalid required field "extensions".', 'INVALID_FIELD');
|
|
33
|
+
}
|
|
34
|
+
const voiceId = data.voice_id;
|
|
35
|
+
if (voiceId !== null && typeof voiceId !== 'string') {
|
|
36
|
+
throw new EngramLoadError('Field "voice_id" must be a string or null.', 'INVALID_FIELD');
|
|
37
|
+
}
|
|
38
|
+
const tagsRaw = metaRaw.tags;
|
|
39
|
+
let tags;
|
|
40
|
+
if (tagsRaw !== undefined) {
|
|
41
|
+
if (!Array.isArray(tagsRaw) || tagsRaw.some((tag) => typeof tag !== 'string')) {
|
|
42
|
+
throw new EngramLoadError('Field "meta.tags" must be an array of strings.', 'INVALID_FIELD');
|
|
43
|
+
}
|
|
44
|
+
tags = tagsRaw;
|
|
45
|
+
}
|
|
46
|
+
const descriptionRaw = metaRaw.description;
|
|
47
|
+
const description = descriptionRaw === undefined
|
|
48
|
+
? undefined
|
|
49
|
+
: typeof descriptionRaw === 'string'
|
|
50
|
+
? descriptionRaw
|
|
51
|
+
: (() => {
|
|
52
|
+
throw new EngramLoadError('Field "meta.description" must be a string.', 'INVALID_FIELD');
|
|
53
|
+
})();
|
|
54
|
+
return {
|
|
55
|
+
engram_version: engramVersion,
|
|
56
|
+
id: requireString(data.id, 'id'),
|
|
57
|
+
name: requireString(data.name, 'name'),
|
|
58
|
+
reinject_interval: requireNumber(data.reinject_interval, 'reinject_interval'),
|
|
59
|
+
voice_id: voiceId ?? null,
|
|
60
|
+
meta: {
|
|
61
|
+
author: requireString(metaRaw.author, 'meta.author'),
|
|
62
|
+
created: requireString(metaRaw.created, 'meta.created'),
|
|
63
|
+
...(description !== undefined ? { description } : {}),
|
|
64
|
+
...(tags !== undefined ? { tags } : {}),
|
|
65
|
+
},
|
|
66
|
+
extensions: { ...extensionsRaw },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function parseExpressions(data, required) {
|
|
70
|
+
const expressions = {};
|
|
71
|
+
if (!data.expressions) {
|
|
72
|
+
if (required) {
|
|
73
|
+
requireObject(data.expressions, 'expressions'); // throws
|
|
74
|
+
}
|
|
75
|
+
return expressions;
|
|
76
|
+
}
|
|
77
|
+
const expressionsRaw = requireObject(data.expressions, 'expressions');
|
|
78
|
+
for (const [state, clip] of Object.entries(expressionsRaw)) {
|
|
79
|
+
if (typeof clip !== 'string' || clip.trim().length === 0) {
|
|
80
|
+
if (required) {
|
|
81
|
+
throw new EngramLoadError(`Expression "${state}" must map to a clip filename.`, 'INVALID_FIELD');
|
|
82
|
+
}
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
expressions[state] = clip;
|
|
86
|
+
}
|
|
87
|
+
return normalizeExpressionKeys(expressions);
|
|
88
|
+
}
|
|
89
|
+
function parseTransitionsAndPlayback(data) {
|
|
90
|
+
const transitionsRaw = data.transitions && typeof data.transitions === 'object' && !Array.isArray(data.transitions)
|
|
91
|
+
? data.transitions
|
|
92
|
+
: {};
|
|
93
|
+
// For component renderers, transitions.default may be an object; treat as crossfade
|
|
94
|
+
const transitionDefaultRaw = transitionsRaw.default;
|
|
95
|
+
const transitionDefaultStr = typeof transitionDefaultRaw === 'object' ? 'crossfade' : transitionDefaultRaw;
|
|
96
|
+
const defaultTransition = transitionDefaultStr === undefined
|
|
97
|
+
? 'crossfade'
|
|
98
|
+
: transitionDefaultStr === 'crossfade' || transitionDefaultStr === 'cut'
|
|
99
|
+
? transitionDefaultStr
|
|
100
|
+
: (() => {
|
|
101
|
+
throw new EngramLoadError('Field "transitions.default" must be "crossfade" or "cut".', 'INVALID_FIELD');
|
|
102
|
+
})();
|
|
103
|
+
const durationRaw = transitionsRaw.duration_ms;
|
|
104
|
+
const durationMs = durationRaw === undefined
|
|
105
|
+
? 300
|
|
106
|
+
: typeof durationRaw === 'number' && !Number.isNaN(durationRaw)
|
|
107
|
+
? durationRaw
|
|
108
|
+
: (() => {
|
|
109
|
+
throw new EngramLoadError('Field "transitions.duration_ms" must be a number.', 'INVALID_FIELD');
|
|
110
|
+
})();
|
|
111
|
+
const playbackRaw = data.playback && typeof data.playback === 'object' && !Array.isArray(data.playback)
|
|
112
|
+
? data.playback
|
|
113
|
+
: {};
|
|
114
|
+
const idleLoopsRaw = playbackRaw.idle_loops;
|
|
115
|
+
const idleLoops = idleLoopsRaw === undefined
|
|
116
|
+
? true
|
|
117
|
+
: typeof idleLoopsRaw === 'boolean'
|
|
118
|
+
? idleLoopsRaw
|
|
119
|
+
: (() => {
|
|
120
|
+
throw new EngramLoadError('Field "playback.idle_loops" must be a boolean.', 'INVALID_FIELD');
|
|
121
|
+
})();
|
|
122
|
+
const approvalIdleMsRaw = playbackRaw.approval_idle_ms;
|
|
123
|
+
const approvalIdleMs = approvalIdleMsRaw === undefined
|
|
124
|
+
? 3000
|
|
125
|
+
: typeof approvalIdleMsRaw === 'number' && !Number.isNaN(approvalIdleMsRaw)
|
|
126
|
+
? approvalIdleMsRaw
|
|
127
|
+
: (() => {
|
|
128
|
+
throw new EngramLoadError('Field "playback.approval_idle_ms" must be a number.', 'INVALID_FIELD');
|
|
129
|
+
})();
|
|
130
|
+
const successHoldMsRaw = playbackRaw.success_hold_ms ?? playbackRaw.completed_hold_ms;
|
|
131
|
+
const successHoldMs = successHoldMsRaw === undefined
|
|
132
|
+
? 3000
|
|
133
|
+
: typeof successHoldMsRaw === 'number' && !Number.isNaN(successHoldMsRaw)
|
|
134
|
+
? successHoldMsRaw
|
|
135
|
+
: (() => {
|
|
136
|
+
throw new EngramLoadError('Field "playback.success_hold_ms" must be a number.', 'INVALID_FIELD');
|
|
137
|
+
})();
|
|
138
|
+
return {
|
|
139
|
+
transitions: { default: defaultTransition, duration_ms: durationMs },
|
|
140
|
+
playback: {
|
|
141
|
+
idle_loops: idleLoops,
|
|
142
|
+
approval_idle_ms: approvalIdleMs,
|
|
143
|
+
success_hold_ms: successHoldMs,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function parseVesselYaml(raw) {
|
|
148
|
+
const data = requireObject(raw, 'vessel.yaml root');
|
|
149
|
+
const type = data.type;
|
|
150
|
+
if (type !== 'lottie' &&
|
|
151
|
+
type !== 'webm' &&
|
|
152
|
+
type !== 'mp4' &&
|
|
153
|
+
type !== 'gif' &&
|
|
154
|
+
type !== 'component') {
|
|
155
|
+
throw new EngramLoadError('Field "type" must be "lottie", "webm", "mp4", "gif", or "component".', 'INVALID_FIELD');
|
|
156
|
+
}
|
|
157
|
+
// component renderers manage expressions internally; lottie/webm require them
|
|
158
|
+
const expressions = parseExpressions(data, type !== 'component');
|
|
159
|
+
// Parse optional fallback block (present when type === 'component')
|
|
160
|
+
let fallback;
|
|
161
|
+
if (type === 'component' &&
|
|
162
|
+
data.fallback &&
|
|
163
|
+
typeof data.fallback === 'object' &&
|
|
164
|
+
!Array.isArray(data.fallback)) {
|
|
165
|
+
const fb = data.fallback;
|
|
166
|
+
const fbExpressions = parseExpressions(fb, true);
|
|
167
|
+
const { transitions: fbTransitions, playback: fbPlayback } = parseTransitionsAndPlayback(fb);
|
|
168
|
+
const fbType = fb.type;
|
|
169
|
+
if (fbType !== 'lottie' && fbType !== 'webm' && fbType !== 'mp4' && fbType !== 'gif') {
|
|
170
|
+
throw new EngramLoadError('Field "fallback.type" must be "lottie", "webm", "mp4", or "gif".', 'INVALID_FIELD');
|
|
171
|
+
}
|
|
172
|
+
fallback = {
|
|
173
|
+
type: fbType,
|
|
174
|
+
pack: requireString(fb.pack, 'fallback.pack'),
|
|
175
|
+
expressions: fbExpressions,
|
|
176
|
+
transitions: fbTransitions,
|
|
177
|
+
playback: fbPlayback,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const { transitions, playback } = parseTransitionsAndPlayback(data);
|
|
181
|
+
return {
|
|
182
|
+
type,
|
|
183
|
+
pack: requireString(data.pack, 'pack'),
|
|
184
|
+
expressions,
|
|
185
|
+
transitions,
|
|
186
|
+
playback,
|
|
187
|
+
...(fallback !== undefined ? { fallback } : {}),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/engram/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface EngramListEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
directory: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function listEngramDirectories(engramsDir: string): Promise<EngramListEntry[]>;
|
|
8
|
+
export declare function resolveEngramDirectory(engramsDir: string, engramId: string): string;
|
|
9
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/engram/registry.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA+B1F;AAiBD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import { parseEngramYaml } from './parse.js';
|
|
5
|
+
export async function listEngramDirectories(engramsDir) {
|
|
6
|
+
let entries;
|
|
7
|
+
try {
|
|
8
|
+
entries = await readdir(engramsDir);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const code = error.code;
|
|
12
|
+
if (code === 'ENOENT') {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
const results = [];
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
const directory = join(engramsDir, entry);
|
|
20
|
+
const info = await stat(directory);
|
|
21
|
+
if (!info.isDirectory()) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const metadata = await readEngramListMetadata(directory);
|
|
25
|
+
results.push({
|
|
26
|
+
id: entry,
|
|
27
|
+
name: metadata?.name,
|
|
28
|
+
description: metadata?.description,
|
|
29
|
+
directory,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return results.sort((a, b) => a.id.localeCompare(b.id));
|
|
33
|
+
}
|
|
34
|
+
async function readEngramListMetadata(directory) {
|
|
35
|
+
try {
|
|
36
|
+
const raw = yaml.load(await readFile(join(directory, 'engram.yaml'), 'utf8'));
|
|
37
|
+
const config = parseEngramYaml(raw);
|
|
38
|
+
return {
|
|
39
|
+
name: config.name,
|
|
40
|
+
description: config.meta.description,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function resolveEngramDirectory(engramsDir, engramId) {
|
|
48
|
+
const normalized = engramId.trim();
|
|
49
|
+
if (!normalized || normalized.includes('..') || /[/\\]/.test(normalized)) {
|
|
50
|
+
throw new Error(`Invalid engram_id "${engramId}".`);
|
|
51
|
+
}
|
|
52
|
+
return join(engramsDir, normalized);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/engram/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAS7C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,QAAQ,EAAE,IAAI;YACpB,WAAW,EAAE,QAAQ,EAAE,WAAW;YAClC,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;SACrC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB,EAAE,QAAgB;IACzE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare const SUPPORTED_ENGRAM_MAJOR = 1;
|
|
2
|
+
export interface EngramMeta {
|
|
3
|
+
author: string;
|
|
4
|
+
created: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface EngramConfig {
|
|
9
|
+
engram_version: string;
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
reinject_interval: number;
|
|
13
|
+
voice_id: string | null;
|
|
14
|
+
meta: EngramMeta;
|
|
15
|
+
extensions: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export type VesselType = 'lottie' | 'webm' | 'mp4' | 'gif' | 'component';
|
|
18
|
+
export interface VesselTransitions {
|
|
19
|
+
default: 'crossfade' | 'cut';
|
|
20
|
+
duration_ms: number;
|
|
21
|
+
}
|
|
22
|
+
export interface VesselPlayback {
|
|
23
|
+
idle_loops: boolean;
|
|
24
|
+
/** Mid-turn approval idle timer (ms). Overlay-only; default 3000. */
|
|
25
|
+
approval_idle_ms?: number;
|
|
26
|
+
/** How long overlay holds `success` before returning to idle. Overlay-only; default 3000. */
|
|
27
|
+
success_hold_ms?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface VesselConfig {
|
|
30
|
+
type: VesselType;
|
|
31
|
+
pack: string;
|
|
32
|
+
/** Expression map — required for lottie/webm, omitted for component renderers */
|
|
33
|
+
expressions: Record<string, string>;
|
|
34
|
+
transitions: VesselTransitions;
|
|
35
|
+
playback: VesselPlayback;
|
|
36
|
+
/**
|
|
37
|
+
* Lottie fallback for overlays that don't support component renderers.
|
|
38
|
+
* Present when type === 'component'.
|
|
39
|
+
*/
|
|
40
|
+
fallback?: Omit<VesselConfig, 'fallback'>;
|
|
41
|
+
}
|
|
42
|
+
export interface LoadedEngram {
|
|
43
|
+
directory: string;
|
|
44
|
+
soul: string;
|
|
45
|
+
engram: EngramConfig;
|
|
46
|
+
vessel: VesselConfig;
|
|
47
|
+
}
|
|
48
|
+
export interface EngramDirectoryOutput {
|
|
49
|
+
soul: string;
|
|
50
|
+
vessel: VesselConfig;
|
|
51
|
+
engram: EngramConfig;
|
|
52
|
+
}
|
|
53
|
+
export declare class EngramLoadError extends Error {
|
|
54
|
+
readonly code: string;
|
|
55
|
+
readonly directory?: string;
|
|
56
|
+
constructor(message: string, code: string, directory?: string);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engram/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,GAAG,KAAK,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAM9D"}
|
package/engram/types.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const SUPPORTED_ENGRAM_MAJOR = 1;
|
|
2
|
+
export class EngramLoadError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
directory;
|
|
5
|
+
constructor(message, code, directory) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'EngramLoadError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.directory = directory;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/engram/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AA6DxC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IACb,SAAS,CAAU;IAE5B,YAAY,OAAe,EAAE,IAAY,EAAE,SAAkB;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/engram/validate.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQnG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAe3D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SUPPORTED_ENGRAM_MAJOR, EngramLoadError } from './types.js';
|
|
2
|
+
const SEMVER_PATTERN = /^(\d+)\.(\d+)\.(\d+)$/;
|
|
3
|
+
export function parseSemver(version) {
|
|
4
|
+
const match = SEMVER_PATTERN.exec(version.trim());
|
|
5
|
+
if (!match)
|
|
6
|
+
return null;
|
|
7
|
+
return {
|
|
8
|
+
major: Number(match[1]),
|
|
9
|
+
minor: Number(match[2]),
|
|
10
|
+
patch: Number(match[3]),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function validateEngramVersion(version) {
|
|
14
|
+
const parsed = parseSemver(version);
|
|
15
|
+
if (!parsed) {
|
|
16
|
+
throw new EngramLoadError(`Unrecognised engram_version "${version}". Expected semver (e.g. "1.0.0").`, 'INVALID_ENGRAM_VERSION');
|
|
17
|
+
}
|
|
18
|
+
if (parsed.major !== SUPPORTED_ENGRAM_MAJOR) {
|
|
19
|
+
throw new EngramLoadError(`Unsupported engram_version "${version}". This runtime supports major version ${SUPPORTED_ENGRAM_MAJOR}.x.x only.`, 'UNSUPPORTED_ENGRAM_VERSION');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/engram/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CACvB,gCAAgC,OAAO,oCAAoC,EAC3E,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,+BAA+B,OAAO,0CAA0C,sBAAsB,YAAY,EAClH,4BAA4B,CAC7B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { loadEngramFromDirectory } from './engram/loader.js';
|
|
2
|
+
export { listEngramDirectories, resolveEngramDirectory } from './engram/registry.js';
|
|
3
|
+
export { parseEngramYaml, parseVesselYaml } from './engram/parse.js';
|
|
4
|
+
export { validateEngramVersion, parseSemver } from './engram/validate.js';
|
|
5
|
+
export { EngramLoadError, SUPPORTED_ENGRAM_MAJOR, type EngramConfig, type EngramDirectoryOutput, type EngramMeta, type LoadedEngram, type VesselConfig, type VesselPlayback, type VesselTransitions, type VesselType, } from './engram/types.js';
|
|
6
|
+
export { migrateJsonToDirectory } from './migrations/json-to-directory.js';
|
|
7
|
+
export type { LegacyEngramJson } from './migrations/types.js';
|
|
8
|
+
export { resolveEidolaPaths, resolveEidolaRuntimeConfig, type EidolaPaths, type EidolaRuntimeConfig, } from './config.js';
|
|
9
|
+
export { STATE_PROTOCOL_VERSION, STATE_SOCKET_HOST, DEFAULT_STATE_SOCKET_PORT, DEFAULT_STATE_BUFFER_SIZE, SURFACES, VESSEL_STATES, type Surface, type StateBroadcast, type StateInboundEvent, type StateSocketConfig, type VesselState, } from './socket/types.js';
|
|
10
|
+
export { createBroadcast, isKnownVesselState, normalizeInbound, parseInboundLine, serializeBroadcast, } from './socket/protocol.js';
|
|
11
|
+
export { resolveExpressionClip } from './socket/expression.js';
|
|
12
|
+
export { resolveVisualState, WORKING_CLUSTER, isWorkingClusterState } from './vendor/tool-state.js';
|
|
13
|
+
export type { ResolveVisualStateInput, WorkingClusterState } from './vendor/tool-state.js';
|
|
14
|
+
export { createStateSocketServer, type StateSocketServer } from './socket/server.js';
|
|
15
|
+
export { SessionState, type ActiveEidolonSnapshot } from './session/state.js';
|
|
16
|
+
export { buildSoulInjectionPayload, isValidSoulInjectionPayload, wrapSoulAsSystemReminder, type SoulInjectionPayload, } from './soul/injection.js';
|
|
17
|
+
export { ReinjectTracker, type ReinjectStatus } from './soul/reinject.js';
|
|
18
|
+
export { createToolHandlers, type EidolaToolHandlers, type ToolTextResult } from './tools/handlers.js';
|
|
19
|
+
export { startEidolaMcpServer } from './server.js';
|
|
20
|
+
export { autoActivateFromWorkspace, type AutoActivateResult } from './cursor/auto-activate.js';
|
|
21
|
+
export { launchShrine, ensureShrineRunning, type LaunchShrineResult, type LaunchShrineOptions, type EnsureShrineResult, } from './cursor/ensure-shrine.js';
|
|
22
|
+
export { isShrineRunning, isProcessAlive, shrineLockPath, readShrineLock, removeShrineLock, stopShrine, writeShrineLock, type ShrineLockFile, } from './cursor/shrine-lock.js';
|
|
23
|
+
export { resolveShrineSurface, normalizeShrineSurfaceInput, shrineSurfaceEnv, isHttpShrineSurface, shrineHttpPort, shrineHttpUrl, SHRINE_SURFACE_PRESETS, DEFAULT_SHRINE_SURFACE_PRESET, DEFAULT_SHRINE_HTTP_PORT, type ShrineSurface, type ShrineSurfacePresetId, type ShrineLayoutTier, } from './cursor/shrine-surface.js';
|
|
24
|
+
export { compileSoulToCursorRule, parseCompiledCursorRule, } from './cursor/compile.js';
|
|
25
|
+
export { detectSoulSource, type SoulSource } from './cursor/soul-source.js';
|
|
26
|
+
export { computeSoulHash } from './cursor/hash.js';
|
|
27
|
+
export { warnIfStaleSoulCompile, type StaleSoulCompileCheck } from './cursor/stale.js';
|
|
28
|
+
export { buildWorkspaceConfig, cursorRulePath, EIDOLA_WORKSPACE_CONFIG_FILENAME, readWorkspaceConfig, workspaceConfigPath, writeWorkspaceConfig, } from './cursor/workspace-config.js';
|
|
29
|
+
export type { CompiledCursorRule, EidolaWorkspaceConfig } from './cursor/types.js';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,QAAQ,EACR,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpG,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gCAAgC,EAChC,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export { loadEngramFromDirectory } from './engram/loader.js';
|
|
2
|
+
export { listEngramDirectories, resolveEngramDirectory } from './engram/registry.js';
|
|
3
|
+
export { parseEngramYaml, parseVesselYaml } from './engram/parse.js';
|
|
4
|
+
export { validateEngramVersion, parseSemver } from './engram/validate.js';
|
|
5
|
+
export { EngramLoadError, SUPPORTED_ENGRAM_MAJOR, } from './engram/types.js';
|
|
6
|
+
export { migrateJsonToDirectory } from './migrations/json-to-directory.js';
|
|
7
|
+
export { resolveEidolaPaths, resolveEidolaRuntimeConfig, } from './config.js';
|
|
8
|
+
export { STATE_PROTOCOL_VERSION, STATE_SOCKET_HOST, DEFAULT_STATE_SOCKET_PORT, DEFAULT_STATE_BUFFER_SIZE, SURFACES, VESSEL_STATES, } from './socket/types.js';
|
|
9
|
+
export { createBroadcast, isKnownVesselState, normalizeInbound, parseInboundLine, serializeBroadcast, } from './socket/protocol.js';
|
|
10
|
+
export { resolveExpressionClip } from './socket/expression.js';
|
|
11
|
+
export { resolveVisualState, WORKING_CLUSTER, isWorkingClusterState } from './vendor/tool-state.js';
|
|
12
|
+
export { createStateSocketServer } from './socket/server.js';
|
|
13
|
+
export { SessionState } from './session/state.js';
|
|
14
|
+
export { buildSoulInjectionPayload, isValidSoulInjectionPayload, wrapSoulAsSystemReminder, } from './soul/injection.js';
|
|
15
|
+
export { ReinjectTracker } from './soul/reinject.js';
|
|
16
|
+
export { createToolHandlers } from './tools/handlers.js';
|
|
17
|
+
export { startEidolaMcpServer } from './server.js';
|
|
18
|
+
export { autoActivateFromWorkspace } from './cursor/auto-activate.js';
|
|
19
|
+
export { launchShrine, ensureShrineRunning, } from './cursor/ensure-shrine.js';
|
|
20
|
+
export { isShrineRunning, isProcessAlive, shrineLockPath, readShrineLock, removeShrineLock, stopShrine, writeShrineLock, } from './cursor/shrine-lock.js';
|
|
21
|
+
export { resolveShrineSurface, normalizeShrineSurfaceInput, shrineSurfaceEnv, isHttpShrineSurface, shrineHttpPort, shrineHttpUrl, SHRINE_SURFACE_PRESETS, DEFAULT_SHRINE_SURFACE_PRESET, DEFAULT_SHRINE_HTTP_PORT, } from './cursor/shrine-surface.js';
|
|
22
|
+
export { compileSoulToCursorRule, parseCompiledCursorRule, } from './cursor/compile.js';
|
|
23
|
+
export { detectSoulSource } from './cursor/soul-source.js';
|
|
24
|
+
export { computeSoulHash } from './cursor/hash.js';
|
|
25
|
+
export { warnIfStaleSoulCompile } from './cursor/stale.js';
|
|
26
|
+
export { buildWorkspaceConfig, cursorRulePath, EIDOLA_WORKSPACE_CONFIG_FILENAME, readWorkspaceConfig, workspaceConfigPath, writeWorkspaceConfig, } from './cursor/workspace-config.js';
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,sBAAsB,GASvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAG3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,QAAQ,EACR,aAAa,GAMd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAA8B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,GAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAuB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAgD,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EACL,YAAY,EACZ,mBAAmB,GAIpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,GAEhB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,GAIzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAA8B,MAAM,mBAAmB,CAAC;AACvF,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gCAAgC,EAChC,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EngramDirectoryOutput } from '../engram/types.js';
|
|
2
|
+
import type { LegacyEngramJson } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Pure migration from legacy `.engram.json` to directory package fields.
|
|
5
|
+
* Never mutates the input object.
|
|
6
|
+
*/
|
|
7
|
+
export declare function migrateJsonToDirectory(legacy: LegacyEngramJson): EngramDirectoryOutput;
|
|
8
|
+
//# sourceMappingURL=json-to-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-to-directory.d.ts","sourceRoot":"","sources":["../../src/migrations/json-to-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAgB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA0InD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CA0BtF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const CURRENT_ENGRAM_VERSION = '1.0.0';
|
|
2
|
+
/** Old persona/pack state names → Phase 1 expression keys. */
|
|
3
|
+
const LEGACY_STATE_TO_EXPRESSION = {
|
|
4
|
+
idle: 'idle',
|
|
5
|
+
thinking: 'thinking',
|
|
6
|
+
debug: 'working',
|
|
7
|
+
working: 'working',
|
|
8
|
+
warn: 'attention',
|
|
9
|
+
alerting: 'attention',
|
|
10
|
+
attention: 'attention',
|
|
11
|
+
shipit: 'writing',
|
|
12
|
+
writing: 'writing',
|
|
13
|
+
searching: 'searching',
|
|
14
|
+
result: 'responding',
|
|
15
|
+
responding: 'responding',
|
|
16
|
+
speaking: 'responding',
|
|
17
|
+
confused: 'error',
|
|
18
|
+
error: 'error',
|
|
19
|
+
completed: 'success',
|
|
20
|
+
success: 'success',
|
|
21
|
+
};
|
|
22
|
+
const DEFAULT_EXPRESSIONS = {
|
|
23
|
+
idle: 'idle.json',
|
|
24
|
+
thinking: 'thinking.json',
|
|
25
|
+
working: 'working.json',
|
|
26
|
+
searching: 'searching.json',
|
|
27
|
+
writing: 'writing.json',
|
|
28
|
+
responding: 'responding.json',
|
|
29
|
+
success: 'responding.json',
|
|
30
|
+
error: 'error.json',
|
|
31
|
+
attention: 'attention.json',
|
|
32
|
+
};
|
|
33
|
+
function slugify(value) {
|
|
34
|
+
return value
|
|
35
|
+
.trim()
|
|
36
|
+
.toLowerCase()
|
|
37
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
38
|
+
.replace(/^-+|-+$/g, '');
|
|
39
|
+
}
|
|
40
|
+
function toIsoDate(value) {
|
|
41
|
+
if (!value)
|
|
42
|
+
return new Date().toISOString().slice(0, 10);
|
|
43
|
+
const parsed = new Date(value);
|
|
44
|
+
if (Number.isNaN(parsed.getTime()))
|
|
45
|
+
return new Date().toISOString().slice(0, 10);
|
|
46
|
+
return parsed.toISOString().slice(0, 10);
|
|
47
|
+
}
|
|
48
|
+
function resolvePackId(legacy) {
|
|
49
|
+
if (typeof legacy.packId === 'string' && legacy.packId.trim().length > 0) {
|
|
50
|
+
return legacy.packId.trim();
|
|
51
|
+
}
|
|
52
|
+
const vessel = legacy.vessel;
|
|
53
|
+
if (vessel && typeof vessel === 'object' && 'packId' in vessel) {
|
|
54
|
+
const packId = vessel.packId;
|
|
55
|
+
if (typeof packId === 'string' && packId.trim().length > 0) {
|
|
56
|
+
return packId.trim();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const id = legacy.id?.trim() || slugify(legacy.name);
|
|
60
|
+
return id ? `${id}-v1` : 'default-v1';
|
|
61
|
+
}
|
|
62
|
+
function resolveVesselType(legacy) {
|
|
63
|
+
const vessel = legacy.vessel;
|
|
64
|
+
if (vessel && typeof vessel === 'object' && 'sourceType' in vessel) {
|
|
65
|
+
const sourceType = vessel.sourceType;
|
|
66
|
+
if (sourceType === 'webm')
|
|
67
|
+
return 'webm';
|
|
68
|
+
}
|
|
69
|
+
return 'lottie';
|
|
70
|
+
}
|
|
71
|
+
function buildSoul(legacy) {
|
|
72
|
+
if (typeof legacy.soulMd === 'string' && legacy.soulMd.trim().length > 0) {
|
|
73
|
+
return legacy.soulMd.replace(/\r\n/g, '\n').trimEnd() + '\n';
|
|
74
|
+
}
|
|
75
|
+
const sections = [`# ${legacy.name.trim()}`];
|
|
76
|
+
if (legacy.description?.trim()) {
|
|
77
|
+
sections.push('', legacy.description.trim());
|
|
78
|
+
}
|
|
79
|
+
if (legacy.systemPrompt?.trim()) {
|
|
80
|
+
sections.push('', legacy.systemPrompt.trim());
|
|
81
|
+
}
|
|
82
|
+
if (legacy.styleRules?.length) {
|
|
83
|
+
sections.push('', '## Style', ...legacy.styleRules.map((rule) => `- ${rule}`));
|
|
84
|
+
}
|
|
85
|
+
if (legacy.behaviorRules?.length) {
|
|
86
|
+
sections.push('', '## Rules', ...legacy.behaviorRules.map((rule) => `- ${rule}`));
|
|
87
|
+
}
|
|
88
|
+
return sections.join('\n').trimEnd() + '\n';
|
|
89
|
+
}
|
|
90
|
+
function expressionFilename(key) {
|
|
91
|
+
return `${key}.json`;
|
|
92
|
+
}
|
|
93
|
+
function buildExpressions(legacy) {
|
|
94
|
+
if (legacy.expressions && Object.keys(legacy.expressions).length > 0) {
|
|
95
|
+
return { ...legacy.expressions };
|
|
96
|
+
}
|
|
97
|
+
const expressions = { ...DEFAULT_EXPRESSIONS };
|
|
98
|
+
const states = legacy.states ?? Object.keys(LEGACY_STATE_TO_EXPRESSION);
|
|
99
|
+
for (const state of states) {
|
|
100
|
+
const mapped = LEGACY_STATE_TO_EXPRESSION[state.toLowerCase()];
|
|
101
|
+
if (!mapped)
|
|
102
|
+
continue;
|
|
103
|
+
expressions[mapped] = expressionFilename(mapped);
|
|
104
|
+
}
|
|
105
|
+
expressions.success ??= 'responding.json';
|
|
106
|
+
return expressions;
|
|
107
|
+
}
|
|
108
|
+
function buildVesselConfig(legacy) {
|
|
109
|
+
return {
|
|
110
|
+
type: resolveVesselType(legacy),
|
|
111
|
+
pack: resolvePackId(legacy),
|
|
112
|
+
expressions: buildExpressions(legacy),
|
|
113
|
+
transitions: {
|
|
114
|
+
default: 'crossfade',
|
|
115
|
+
duration_ms: 300,
|
|
116
|
+
},
|
|
117
|
+
playback: {
|
|
118
|
+
idle_loops: true,
|
|
119
|
+
approval_idle_ms: 3000,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Pure migration from legacy `.engram.json` to directory package fields.
|
|
125
|
+
* Never mutates the input object.
|
|
126
|
+
*/
|
|
127
|
+
export function migrateJsonToDirectory(legacy) {
|
|
128
|
+
const source = structuredClone(legacy);
|
|
129
|
+
const id = source.id?.trim() || slugify(source.name);
|
|
130
|
+
return {
|
|
131
|
+
soul: buildSoul(source),
|
|
132
|
+
vessel: buildVesselConfig(source),
|
|
133
|
+
engram: {
|
|
134
|
+
engram_version: CURRENT_ENGRAM_VERSION,
|
|
135
|
+
id,
|
|
136
|
+
name: source.name.trim(),
|
|
137
|
+
reinject_interval: typeof source.reinject_interval === 'number' ? source.reinject_interval : 3,
|
|
138
|
+
voice_id: source.voice && typeof source.voice.voiceId === 'string' ? source.voice.voiceId : null,
|
|
139
|
+
meta: {
|
|
140
|
+
author: source.metadata?.author?.trim() || 'unknown',
|
|
141
|
+
created: toIsoDate(source.metadata?.createdAt),
|
|
142
|
+
...(source.description?.trim() ? { description: source.description.trim() } : {}),
|
|
143
|
+
...(source.metadata?.tags?.length ? { tags: [...source.metadata.tags] } : {}),
|
|
144
|
+
},
|
|
145
|
+
extensions: source.extensions && typeof source.extensions === 'object' && !Array.isArray(source.extensions)
|
|
146
|
+
? structuredClone(source.extensions)
|
|
147
|
+
: {},
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=json-to-directory.js.map
|