@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.
Files changed (212) hide show
  1. package/cli.d.ts +3 -0
  2. package/cli.d.ts.map +1 -0
  3. package/cli.js +46 -0
  4. package/cli.js.map +1 -0
  5. package/config.d.ts +16 -0
  6. package/config.d.ts.map +1 -0
  7. package/config.js +62 -0
  8. package/config.js.map +1 -0
  9. package/cursor/auto-activate.d.ts +16 -0
  10. package/cursor/auto-activate.d.ts.map +1 -0
  11. package/cursor/auto-activate.js +79 -0
  12. package/cursor/auto-activate.js.map +1 -0
  13. package/cursor/compile.d.ts +13 -0
  14. package/cursor/compile.d.ts.map +1 -0
  15. package/cursor/compile.js +47 -0
  16. package/cursor/compile.js.map +1 -0
  17. package/cursor/ensure-shrine.d.ts +25 -0
  18. package/cursor/ensure-shrine.d.ts.map +1 -0
  19. package/cursor/ensure-shrine.js +168 -0
  20. package/cursor/ensure-shrine.js.map +1 -0
  21. package/cursor/hash.d.ts +3 -0
  22. package/cursor/hash.d.ts.map +1 -0
  23. package/cursor/hash.js +7 -0
  24. package/cursor/hash.js.map +1 -0
  25. package/cursor/shrine-lock.d.ts +17 -0
  26. package/cursor/shrine-lock.d.ts.map +1 -0
  27. package/cursor/shrine-lock.js +82 -0
  28. package/cursor/shrine-lock.js.map +1 -0
  29. package/cursor/shrine-surface.d.ts +40 -0
  30. package/cursor/shrine-surface.d.ts.map +1 -0
  31. package/cursor/shrine-surface.js +152 -0
  32. package/cursor/shrine-surface.js.map +1 -0
  33. package/cursor/soul-source.d.ts +3 -0
  34. package/cursor/soul-source.d.ts.map +1 -0
  35. package/cursor/soul-source.js +15 -0
  36. package/cursor/soul-source.js.map +1 -0
  37. package/cursor/stale.d.ts +12 -0
  38. package/cursor/stale.d.ts.map +1 -0
  39. package/cursor/stale.js +41 -0
  40. package/cursor/stale.js.map +1 -0
  41. package/cursor/types.d.ts +24 -0
  42. package/cursor/types.d.ts.map +1 -0
  43. package/cursor/types.js +2 -0
  44. package/cursor/types.js.map +1 -0
  45. package/cursor/workspace-config.d.ts +13 -0
  46. package/cursor/workspace-config.d.ts.map +1 -0
  47. package/cursor/workspace-config.js +44 -0
  48. package/cursor/workspace-config.js.map +1 -0
  49. package/engram/loader.d.ts +3 -0
  50. package/engram/loader.d.ts.map +1 -0
  51. package/engram/loader.js +60 -0
  52. package/engram/loader.js.map +1 -0
  53. package/engram/parse.d.ts +4 -0
  54. package/engram/parse.d.ts.map +1 -0
  55. package/engram/parse.js +190 -0
  56. package/engram/parse.js.map +1 -0
  57. package/engram/registry.d.ts +9 -0
  58. package/engram/registry.d.ts.map +1 -0
  59. package/engram/registry.js +54 -0
  60. package/engram/registry.js.map +1 -0
  61. package/engram/types.d.ts +58 -0
  62. package/engram/types.d.ts.map +1 -0
  63. package/engram/types.js +12 -0
  64. package/engram/types.js.map +1 -0
  65. package/engram/validate.d.ts +7 -0
  66. package/engram/validate.d.ts.map +1 -0
  67. package/engram/validate.js +22 -0
  68. package/engram/validate.js.map +1 -0
  69. package/index.d.ts +30 -0
  70. package/index.d.ts.map +1 -0
  71. package/index.js +27 -0
  72. package/index.js.map +1 -0
  73. package/migrations/json-to-directory.d.ts +8 -0
  74. package/migrations/json-to-directory.d.ts.map +1 -0
  75. package/migrations/json-to-directory.js +151 -0
  76. package/migrations/json-to-directory.js.map +1 -0
  77. package/migrations/types.d.ts +46 -0
  78. package/migrations/types.d.ts.map +1 -0
  79. package/migrations/types.js +2 -0
  80. package/migrations/types.js.map +1 -0
  81. package/package.json +42 -0
  82. package/server.d.ts +5 -0
  83. package/server.d.ts.map +1 -0
  84. package/server.js +95 -0
  85. package/server.js.map +1 -0
  86. package/session/state.d.ts +29 -0
  87. package/session/state.d.ts.map +1 -0
  88. package/session/state.js +69 -0
  89. package/session/state.js.map +1 -0
  90. package/shrine/renderer/assets/index-C44XsM0B.js +4083 -0
  91. package/shrine/renderer/assets/index-DeRYP3aH.css +1 -0
  92. package/shrine/renderer/index.html +32 -0
  93. package/shrine/server/display-config.d.ts +20 -0
  94. package/shrine/server/display-config.d.ts.map +1 -0
  95. package/shrine/server/display-config.js +98 -0
  96. package/shrine/server/display-config.js.map +1 -0
  97. package/shrine/server/index.d.ts +35 -0
  98. package/shrine/server/index.d.ts.map +1 -0
  99. package/shrine/server/index.js +337 -0
  100. package/shrine/server/index.js.map +1 -0
  101. package/shrine/shared/approval-idle-logic.d.ts +17 -0
  102. package/shrine/shared/approval-idle-logic.d.ts.map +1 -0
  103. package/shrine/shared/approval-idle-logic.js +63 -0
  104. package/shrine/shared/approval-idle-logic.js.map +1 -0
  105. package/shrine/shared/approval-idle-logic.test.d.ts +2 -0
  106. package/shrine/shared/approval-idle-logic.test.d.ts.map +1 -0
  107. package/shrine/shared/approval-idle-logic.test.js +49 -0
  108. package/shrine/shared/approval-idle-logic.test.js.map +1 -0
  109. package/shrine/shared/kraken-detect.d.ts +36 -0
  110. package/shrine/shared/kraken-detect.d.ts.map +1 -0
  111. package/shrine/shared/kraken-detect.js +61 -0
  112. package/shrine/shared/kraken-detect.js.map +1 -0
  113. package/shrine/shared/kraken-detect.test.d.ts +2 -0
  114. package/shrine/shared/kraken-detect.test.d.ts.map +1 -0
  115. package/shrine/shared/kraken-detect.test.js +35 -0
  116. package/shrine/shared/kraken-detect.test.js.map +1 -0
  117. package/shrine/shared/shrine-api.d.ts +15 -0
  118. package/shrine/shared/shrine-api.d.ts.map +1 -0
  119. package/shrine/shared/shrine-api.js +2 -0
  120. package/shrine/shared/shrine-api.js.map +1 -0
  121. package/shrine/shared/shrine-display-config.d.ts +34 -0
  122. package/shrine/shared/shrine-display-config.d.ts.map +1 -0
  123. package/shrine/shared/shrine-display-config.js +197 -0
  124. package/shrine/shared/shrine-display-config.js.map +1 -0
  125. package/shrine/shared/shrine-display-config.test.d.ts +2 -0
  126. package/shrine/shared/shrine-display-config.test.d.ts.map +1 -0
  127. package/shrine/shared/shrine-display-config.test.js +53 -0
  128. package/shrine/shared/shrine-display-config.test.js.map +1 -0
  129. package/shrine/shared/shrine-state-colors.d.ts +4 -0
  130. package/shrine/shared/shrine-state-colors.d.ts.map +1 -0
  131. package/shrine/shared/shrine-state-colors.js +17 -0
  132. package/shrine/shared/shrine-state-colors.js.map +1 -0
  133. package/shrine/shared/shrine-surface.d.ts +32 -0
  134. package/shrine/shared/shrine-surface.d.ts.map +1 -0
  135. package/shrine/shared/shrine-surface.js +67 -0
  136. package/shrine/shared/shrine-surface.js.map +1 -0
  137. package/shrine/shared/shrine-surface.test.d.ts +2 -0
  138. package/shrine/shared/shrine-surface.test.d.ts.map +1 -0
  139. package/shrine/shared/shrine-surface.test.js +35 -0
  140. package/shrine/shared/shrine-surface.test.js.map +1 -0
  141. package/shrine/shared/state-socket-client.d.ts +30 -0
  142. package/shrine/shared/state-socket-client.d.ts.map +1 -0
  143. package/shrine/shared/state-socket-client.js +103 -0
  144. package/shrine/shared/state-socket-client.js.map +1 -0
  145. package/shrine/shared/state-socket-client.test.d.ts +2 -0
  146. package/shrine/shared/state-socket-client.test.d.ts.map +1 -0
  147. package/shrine/shared/state-socket-client.test.js +20 -0
  148. package/shrine/shared/state-socket-client.test.js.map +1 -0
  149. package/shrine/shared/types.d.ts +43 -0
  150. package/shrine/shared/types.d.ts.map +1 -0
  151. package/shrine/shared/types.js +58 -0
  152. package/shrine/shared/types.js.map +1 -0
  153. package/shrine/shared/types.test.d.ts +2 -0
  154. package/shrine/shared/types.test.d.ts.map +1 -0
  155. package/shrine/shared/types.test.js +26 -0
  156. package/shrine/shared/types.test.js.map +1 -0
  157. package/shrine/shared/vessel-resolver.d.ts +37 -0
  158. package/shrine/shared/vessel-resolver.d.ts.map +1 -0
  159. package/shrine/shared/vessel-resolver.js +135 -0
  160. package/shrine/shared/vessel-resolver.js.map +1 -0
  161. package/shrine/vendor/mcp.d.ts +3 -0
  162. package/shrine/vendor/mcp.d.ts.map +1 -0
  163. package/shrine/vendor/mcp.js +3 -0
  164. package/shrine/vendor/mcp.js.map +1 -0
  165. package/socket/expression.d.ts +3 -0
  166. package/socket/expression.d.ts.map +1 -0
  167. package/socket/expression.js +28 -0
  168. package/socket/expression.js.map +1 -0
  169. package/socket/protocol.d.ts +16 -0
  170. package/socket/protocol.d.ts.map +1 -0
  171. package/socket/protocol.js +75 -0
  172. package/socket/protocol.js.map +1 -0
  173. package/socket/server.d.ts +22 -0
  174. package/socket/server.d.ts.map +1 -0
  175. package/socket/server.js +184 -0
  176. package/socket/server.js.map +1 -0
  177. package/socket/types.d.ts +35 -0
  178. package/socket/types.d.ts.map +1 -0
  179. package/socket/types.js +18 -0
  180. package/socket/types.js.map +1 -0
  181. package/socket/visual-turn.d.ts +8 -0
  182. package/socket/visual-turn.d.ts.map +1 -0
  183. package/socket/visual-turn.js +27 -0
  184. package/socket/visual-turn.js.map +1 -0
  185. package/soul/injection.d.ts +13 -0
  186. package/soul/injection.d.ts.map +1 -0
  187. package/soul/injection.js +36 -0
  188. package/soul/injection.js.map +1 -0
  189. package/soul/reinject.d.ts +13 -0
  190. package/soul/reinject.d.ts.map +1 -0
  191. package/soul/reinject.js +28 -0
  192. package/soul/reinject.js.map +1 -0
  193. package/tools/handlers.d.ts +20 -0
  194. package/tools/handlers.d.ts.map +1 -0
  195. package/tools/handlers.js +148 -0
  196. package/tools/handlers.js.map +1 -0
  197. package/tools/register.d.ts +4 -0
  198. package/tools/register.d.ts.map +1 -0
  199. package/tools/register.js +48 -0
  200. package/tools/register.js.map +1 -0
  201. package/vendor/tool-state-pkg/index.d.ts +23 -0
  202. package/vendor/tool-state-pkg/index.d.ts.map +1 -0
  203. package/vendor/tool-state-pkg/index.js +140 -0
  204. package/vendor/tool-state-pkg/index.js.map +1 -0
  205. package/vendor/tool-state.d.ts +3 -0
  206. package/vendor/tool-state.d.ts.map +1 -0
  207. package/vendor/tool-state.js +3 -0
  208. package/vendor/tool-state.js.map +1 -0
  209. package/watch/filesystem.d.ts +7 -0
  210. package/watch/filesystem.d.ts.map +1 -0
  211. package/watch/filesystem.js +66 -0
  212. package/watch/filesystem.js.map +1 -0
@@ -0,0 +1,82 @@
1
+ import { readFile, unlink, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export const SHRINE_LOCK_FILENAME = 'eidola-shrine.lock';
4
+ export function shrineLockPath(workspaceRoot) {
5
+ return join(workspaceRoot, '.cursor', SHRINE_LOCK_FILENAME);
6
+ }
7
+ export function isProcessAlive(pid) {
8
+ if (!Number.isInteger(pid) || pid <= 0) {
9
+ return false;
10
+ }
11
+ try {
12
+ process.kill(pid, 0);
13
+ return true;
14
+ }
15
+ catch (error) {
16
+ const code = error.code;
17
+ return code === 'EPERM';
18
+ }
19
+ }
20
+ export async function readShrineLock(workspaceRoot) {
21
+ const lockPath = shrineLockPath(workspaceRoot);
22
+ try {
23
+ const raw = await readFile(lockPath, 'utf8');
24
+ const parsed = JSON.parse(raw);
25
+ if (typeof parsed.pid !== 'number' || typeof parsed.started_at !== 'string') {
26
+ return null;
27
+ }
28
+ if (typeof parsed.surface !== 'string') {
29
+ return null;
30
+ }
31
+ return parsed;
32
+ }
33
+ catch (error) {
34
+ const code = error.code;
35
+ if (code === 'ENOENT') {
36
+ return null;
37
+ }
38
+ throw error;
39
+ }
40
+ }
41
+ export async function writeShrineLock(workspaceRoot, lock) {
42
+ const lockPath = shrineLockPath(workspaceRoot);
43
+ await writeFile(lockPath, `${JSON.stringify(lock, null, 2)}\n`, 'utf8');
44
+ }
45
+ export async function removeShrineLock(workspaceRoot) {
46
+ try {
47
+ await unlink(shrineLockPath(workspaceRoot));
48
+ }
49
+ catch (error) {
50
+ const code = error.code;
51
+ if (code !== 'ENOENT') {
52
+ throw error;
53
+ }
54
+ }
55
+ }
56
+ export async function isShrineRunning(workspaceRoot) {
57
+ const lock = await readShrineLock(workspaceRoot);
58
+ if (!lock) {
59
+ return false;
60
+ }
61
+ return isProcessAlive(lock.pid);
62
+ }
63
+ export async function stopShrine(workspaceRoot) {
64
+ const lock = await readShrineLock(workspaceRoot);
65
+ if (!lock) {
66
+ return { stopped: false };
67
+ }
68
+ const pid = lock.pid;
69
+ if (!isProcessAlive(pid)) {
70
+ await removeShrineLock(workspaceRoot);
71
+ return { stopped: false, pid };
72
+ }
73
+ try {
74
+ process.kill(pid);
75
+ }
76
+ catch {
77
+ // Process may have exited between liveness check and kill.
78
+ }
79
+ await removeShrineLock(workspaceRoot);
80
+ return { stopped: true, pid };
81
+ }
82
+ //# sourceMappingURL=shrine-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shrine-lock.js","sourceRoot":"","sources":["../../src/cursor/shrine-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type ShrineSurfacePresetId = 'ultrawide-4-1' | 'square-1-1' | 'widescreen-16-9' | 'kraken-elite-v2';
2
+ export type ShrineLayoutTier = 'ultrawide' | 'square' | 'widescreen';
3
+ export interface ShrineSurface {
4
+ preset: ShrineSurfacePresetId | 'custom';
5
+ width: number;
6
+ height: number;
7
+ circularMask?: boolean;
8
+ layoutTier?: ShrineLayoutTier;
9
+ }
10
+ export declare const SHRINE_SURFACE_PRESETS: Record<ShrineSurfacePresetId, {
11
+ width: number;
12
+ height: number;
13
+ circularMask?: boolean;
14
+ layoutTier?: ShrineLayoutTier;
15
+ }>;
16
+ export declare const DEFAULT_SHRINE_SURFACE_PRESET: ShrineSurfacePresetId;
17
+ export declare function normalizeShrineSurfaceInput(value: string): string;
18
+ export declare const DEFAULT_SHRINE_HTTP_PORT = 9743;
19
+ export interface ResolveShrineSurfaceInput {
20
+ surfaceEnv?: string | undefined;
21
+ widthEnv?: string | undefined;
22
+ heightEnv?: string | undefined;
23
+ configSurface?: string | undefined;
24
+ aspectRatio?: string | undefined;
25
+ surfaceMode?: string | undefined;
26
+ }
27
+ export type ShrineAspectRatioId = 'ultrawide-4-1' | 'widescreen-16-9' | 'square-1-1';
28
+ export type ShrineSurfaceModeId = 'browser' | 'kraken';
29
+ export declare function decomposeLegacySurface(legacy: string): {
30
+ aspectRatio: ShrineAspectRatioId;
31
+ surfaceMode: ShrineSurfaceModeId;
32
+ legacyValue: string;
33
+ };
34
+ export declare function resolveShrineSurface(input?: ResolveShrineSurfaceInput): ShrineSurface;
35
+ /** All surfaces now run as HTTP — Electron removed in Phase 4.1. Always returns true. */
36
+ export declare function isHttpShrineSurface(_surface: ShrineSurface): boolean;
37
+ export declare function shrineHttpPort(): number;
38
+ export declare function shrineHttpUrl(port?: number): string;
39
+ export declare function shrineSurfaceEnv(surface: ShrineSurface): NodeJS.ProcessEnv;
40
+ //# sourceMappingURL=shrine-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shrine-surface.d.ts","sourceRoot":"","sources":["../../src/cursor/shrine-surface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,qBAAqB,GAAG,QAAQ,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CACzC,qBAAqB,EACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAWzF,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAAuC,CAAC;AASpF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBjE;AAED,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,YAAY,CAAC;AACrF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC;AA0BvD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IACtD,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB,CAiBA;AAmCD,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,yBAA8B,GAAG,aAAa,CAsCzF;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAEpE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAyB,GAAG,MAAM,CAErE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,UAAU,CAO1E"}
@@ -0,0 +1,152 @@
1
+ export const SHRINE_SURFACE_PRESETS = {
2
+ 'ultrawide-4-1': { width: 1920, height: 480, layoutTier: 'ultrawide' },
3
+ 'square-1-1': { width: 640, height: 640, layoutTier: 'square' },
4
+ 'widescreen-16-9': { width: 1920, height: 1080, layoutTier: 'widescreen' },
5
+ 'kraken-elite-v2': {
6
+ width: 640,
7
+ height: 640,
8
+ circularMask: true,
9
+ layoutTier: 'square',
10
+ },
11
+ };
12
+ export const DEFAULT_SHRINE_SURFACE_PRESET = 'ultrawide-4-1';
13
+ const KRAKEN_SURFACE_ALIASES = new Set([
14
+ 'kraken',
15
+ 'kraken-lcd',
16
+ 'kraken-elite',
17
+ 'kraken-elite-v2',
18
+ ]);
19
+ export function normalizeShrineSurfaceInput(value) {
20
+ const trimmed = value.trim();
21
+ const lower = trimmed.toLowerCase();
22
+ if (KRAKEN_SURFACE_ALIASES.has(lower)) {
23
+ return 'kraken-elite-v2';
24
+ }
25
+ if (lower in SHRINE_SURFACE_PRESETS) {
26
+ return lower;
27
+ }
28
+ if (parseCustomDimensions(trimmed)) {
29
+ return trimmed;
30
+ }
31
+ return trimmed;
32
+ }
33
+ export const DEFAULT_SHRINE_HTTP_PORT = 9743;
34
+ const ASPECT_RATIO_PRESETS = {
35
+ 'ultrawide-4-1': { width: 1920, height: 480, layoutTier: 'ultrawide' },
36
+ 'widescreen-16-9': { width: 1920, height: 1080, layoutTier: 'widescreen' },
37
+ 'square-1-1': { width: 640, height: 640, layoutTier: 'square' },
38
+ };
39
+ function isAspectRatioId(value) {
40
+ return value in ASPECT_RATIO_PRESETS;
41
+ }
42
+ function normalizeSurfaceMode(value) {
43
+ const lower = value.trim().toLowerCase();
44
+ if (lower === 'browser' || lower === 'standard') {
45
+ return 'browser';
46
+ }
47
+ if (KRAKEN_SURFACE_ALIASES.has(lower) || lower === 'kraken') {
48
+ return 'kraken';
49
+ }
50
+ return null;
51
+ }
52
+ export function decomposeLegacySurface(legacy) {
53
+ const normalized = normalizeShrineSurfaceInput(legacy);
54
+ if (normalized === 'kraken-elite-v2') {
55
+ return {
56
+ aspectRatio: 'square-1-1',
57
+ surfaceMode: 'kraken',
58
+ legacyValue: 'kraken-elite-v2',
59
+ };
60
+ }
61
+ if (isAspectRatioId(normalized)) {
62
+ return { aspectRatio: normalized, surfaceMode: 'browser', legacyValue: normalized };
63
+ }
64
+ return {
65
+ aspectRatio: 'ultrawide-4-1',
66
+ surfaceMode: 'browser',
67
+ legacyValue: DEFAULT_SHRINE_SURFACE_PRESET,
68
+ };
69
+ }
70
+ function composeFromDisplayFields(aspectRatio, surfaceMode) {
71
+ const aspect = ASPECT_RATIO_PRESETS[aspectRatio];
72
+ if (surfaceMode === 'kraken') {
73
+ const kraken = SHRINE_SURFACE_PRESETS['kraken-elite-v2'];
74
+ return {
75
+ preset: 'kraken-elite-v2',
76
+ width: aspect.width,
77
+ height: aspect.height,
78
+ circularMask: kraken.circularMask,
79
+ layoutTier: aspect.layoutTier,
80
+ };
81
+ }
82
+ return { preset: aspectRatio, ...aspect };
83
+ }
84
+ function parseCustomDimensions(value) {
85
+ const match = value.trim().match(/^(\d+)\s*[x×]\s*(\d+)$/i);
86
+ if (!match) {
87
+ return null;
88
+ }
89
+ const width = Number.parseInt(match[1] ?? '', 10);
90
+ const height = Number.parseInt(match[2] ?? '', 10);
91
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {
92
+ return null;
93
+ }
94
+ return { preset: 'custom', width, height };
95
+ }
96
+ export function resolveShrineSurface(input = {}) {
97
+ const widthEnv = input.widthEnv ?? process.env.EIDOLA_SHRINE_WIDTH;
98
+ const heightEnv = input.heightEnv ?? process.env.EIDOLA_SHRINE_HEIGHT;
99
+ if (widthEnv?.trim() && heightEnv?.trim()) {
100
+ const width = Number.parseInt(widthEnv.trim(), 10);
101
+ const height = Number.parseInt(heightEnv.trim(), 10);
102
+ if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {
103
+ return { preset: 'custom', width, height };
104
+ }
105
+ }
106
+ const aspectRatio = input.aspectRatio?.trim();
107
+ const surfaceMode = input.surfaceMode?.trim();
108
+ if (aspectRatio && surfaceMode && isAspectRatioId(aspectRatio)) {
109
+ const mode = normalizeSurfaceMode(surfaceMode);
110
+ if (mode) {
111
+ return composeFromDisplayFields(aspectRatio, mode);
112
+ }
113
+ }
114
+ const surfaceRaw = input.surfaceEnv?.trim() ||
115
+ input.configSurface?.trim() ||
116
+ process.env.EIDOLA_SHRINE_SURFACE?.trim() ||
117
+ DEFAULT_SHRINE_SURFACE_PRESET;
118
+ const custom = parseCustomDimensions(surfaceRaw);
119
+ if (custom) {
120
+ return custom;
121
+ }
122
+ const preset = SHRINE_SURFACE_PRESETS[surfaceRaw];
123
+ if (preset) {
124
+ return { preset: surfaceRaw, ...preset };
125
+ }
126
+ const fallback = SHRINE_SURFACE_PRESETS[DEFAULT_SHRINE_SURFACE_PRESET];
127
+ return { preset: DEFAULT_SHRINE_SURFACE_PRESET, ...fallback };
128
+ }
129
+ /** All surfaces now run as HTTP — Electron removed in Phase 4.1. Always returns true. */
130
+ export function isHttpShrineSurface(_surface) {
131
+ return true;
132
+ }
133
+ export function shrineHttpPort() {
134
+ const raw = process.env.EIDOLA_SHRINE_HTTP_PORT?.trim();
135
+ if (!raw) {
136
+ return DEFAULT_SHRINE_HTTP_PORT;
137
+ }
138
+ const port = Number.parseInt(raw, 10);
139
+ return Number.isFinite(port) && port > 0 ? port : DEFAULT_SHRINE_HTTP_PORT;
140
+ }
141
+ export function shrineHttpUrl(port = shrineHttpPort()) {
142
+ return `http://127.0.0.1:${port}/shrine`;
143
+ }
144
+ export function shrineSurfaceEnv(surface) {
145
+ const env = {
146
+ EIDOLA_SHRINE_SURFACE: surface.preset === 'custom' ? `${surface.width}x${surface.height}` : surface.preset,
147
+ EIDOLA_SHRINE_WIDTH: String(surface.width),
148
+ EIDOLA_SHRINE_HEIGHT: String(surface.height),
149
+ };
150
+ return env;
151
+ }
152
+ //# sourceMappingURL=shrine-surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shrine-surface.js","sourceRoot":"","sources":["../../src/cursor/shrine-surface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type SoulSource = 'cursor_rule' | 'injection' | 'none';
2
+ export declare function detectSoulSource(workspaceRoot: string | undefined, engramId: string): Promise<Exclude<SoulSource, 'none'>>;
3
+ //# sourceMappingURL=soul-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soul-source.d.ts","sourceRoot":"","sources":["../../src/cursor/soul-source.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9D,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAWtC"}
@@ -0,0 +1,15 @@
1
+ import { access } from 'node:fs/promises';
2
+ import { cursorRulePath } from './workspace-config.js';
3
+ export async function detectSoulSource(workspaceRoot, engramId) {
4
+ if (!workspaceRoot) {
5
+ return 'injection';
6
+ }
7
+ try {
8
+ await access(cursorRulePath(workspaceRoot, engramId));
9
+ return 'cursor_rule';
10
+ }
11
+ catch {
12
+ return 'injection';
13
+ }
14
+ }
15
+ //# sourceMappingURL=soul-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soul-source.js","sourceRoot":"","sources":["../../src/cursor/soul-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAiC,EACjC,QAAgB;IAEhB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { EidolaWorkspaceConfig } from './types.js';
2
+ export interface StaleSoulCompileCheck {
3
+ engramDirectory: string;
4
+ mdcPath: string;
5
+ workspaceConfig?: EidolaWorkspaceConfig;
6
+ }
7
+ /**
8
+ * Warn on stderr when SOUL.md content no longer matches the compiled rule hash.
9
+ * Non-blocking — MCP startup and link-engram validation call this for visibility only.
10
+ */
11
+ export declare function warnIfStaleSoulCompile(check: StaleSoulCompileCheck): Promise<boolean>;
12
+ //# sourceMappingURL=stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.d.ts","sourceRoot":"","sources":["../../src/cursor/stale.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC3F"}
@@ -0,0 +1,41 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { computeSoulHash } from './hash.js';
4
+ import { parseCompiledCursorRule } from './compile.js';
5
+ /**
6
+ * Warn on stderr when SOUL.md content no longer matches the compiled rule hash.
7
+ * Non-blocking — MCP startup and link-engram validation call this for visibility only.
8
+ */
9
+ export async function warnIfStaleSoulCompile(check) {
10
+ const soulPath = join(check.engramDirectory, 'SOUL.md');
11
+ let soulContent;
12
+ try {
13
+ soulContent = await readFile(soulPath, 'utf8');
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ const currentHash = computeSoulHash(soulContent);
19
+ const storedHash = check.workspaceConfig?.soul_hash;
20
+ if (storedHash && storedHash !== currentHash) {
21
+ const engramId = check.workspaceConfig?.active_engram_id ?? 'unknown';
22
+ console.error(`[eidola] Stale Cursor rule: SOUL.md changed since last compile (hash mismatch). Re-run: pnpm link-engram ${engramId}`);
23
+ return true;
24
+ }
25
+ let mdcContent;
26
+ try {
27
+ mdcContent = await readFile(check.mdcPath, 'utf8');
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ const { body } = parseCompiledCursorRule(mdcContent);
33
+ const compiledBodyHash = computeSoulHash(body);
34
+ if (compiledBodyHash !== currentHash) {
35
+ const engramId = check.workspaceConfig?.active_engram_id ?? 'unknown';
36
+ console.error(`[eidola] Stale Cursor rule: compiled .mdc body does not match SOUL.md. Re-run: pnpm link-engram ${engramId}`);
37
+ return true;
38
+ }
39
+ return false;
40
+ }
41
+ //# sourceMappingURL=stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.js","sourceRoot":"","sources":["../../src/cursor/stale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AASvD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAA4B;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC;IAEpD,IAAI,UAAU,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,gBAAgB,IAAI,SAAS,CAAC;QACtE,OAAO,CAAC,KAAK,CACX,4GAA4G,QAAQ,EAAE,CACvH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE,gBAAgB,IAAI,SAAS,CAAC;QACtE,OAAO,CAAC,KAAK,CACX,mGAAmG,QAAQ,EAAE,CAC9G,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface EidolaWorkspaceConfig {
2
+ /** Active Engram slug — matches directory name and compiled rule filename. */
3
+ active_engram_id: string;
4
+ /** Optional override for Engram directory root. Defaults to `{EIDOLA_ROOT}/engrams`. */
5
+ engrams_dir?: string;
6
+ /** SHA-256 hex of SOUL.md at last compile — used for stale-rule detection. */
7
+ soul_hash: string;
8
+ /** ISO-8601 timestamp when the Cursor rule was last compiled. */
9
+ compiled_at: string;
10
+ /** Legacy shrine preset — kept in sync when display settings change. */
11
+ shrine_surface?: string;
12
+ /** Aspect ratio layout: `ultrawide-4-1`, `widescreen-16-9`, `square-1-1`. */
13
+ shrine_aspect_ratio?: string;
14
+ /** Display surface: `browser` or `kraken`. */
15
+ shrine_surface_mode?: string;
16
+ }
17
+ export interface CompiledCursorRule {
18
+ engramId: string;
19
+ name: string;
20
+ soulHash: string;
21
+ /** Full `.mdc` file content including frontmatter. */
22
+ content: string;
23
+ }
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cursor/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cursor/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { EidolaWorkspaceConfig } from './types.js';
2
+ export declare const EIDOLA_WORKSPACE_CONFIG_FILENAME = "eidola.json";
3
+ export declare function workspaceConfigPath(workspaceRoot: string): string;
4
+ export declare function cursorRulePath(workspaceRoot: string, engramId: string): string;
5
+ export declare function readWorkspaceConfig(workspaceRoot: string): Promise<EidolaWorkspaceConfig | null>;
6
+ export declare function writeWorkspaceConfig(workspaceRoot: string, config: EidolaWorkspaceConfig): Promise<void>;
7
+ export declare function buildWorkspaceConfig(params: {
8
+ engramId: string;
9
+ soulHash: string;
10
+ engramsDir?: string;
11
+ shrineSurface?: EidolaWorkspaceConfig['shrine_surface'];
12
+ }): EidolaWorkspaceConfig;
13
+ //# sourceMappingURL=workspace-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-config.d.ts","sourceRoot":"","sources":["../../src/cursor/workspace-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gCAAgC,gBAAgB,CAAC;AAE9D,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAYtG;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CACzD,GAAG,qBAAqB,CAgBxB"}
@@ -0,0 +1,44 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ export const EIDOLA_WORKSPACE_CONFIG_FILENAME = 'eidola.json';
4
+ export function workspaceConfigPath(workspaceRoot) {
5
+ return join(workspaceRoot, '.cursor', EIDOLA_WORKSPACE_CONFIG_FILENAME);
6
+ }
7
+ export function cursorRulePath(workspaceRoot, engramId) {
8
+ return join(workspaceRoot, '.cursor', 'rules', `${engramId}.mdc`);
9
+ }
10
+ export async function readWorkspaceConfig(workspaceRoot) {
11
+ const configPath = workspaceConfigPath(workspaceRoot);
12
+ try {
13
+ const raw = await readFile(configPath, 'utf8');
14
+ return JSON.parse(raw);
15
+ }
16
+ catch (error) {
17
+ const code = error.code;
18
+ if (code === 'ENOENT') {
19
+ return null;
20
+ }
21
+ throw error;
22
+ }
23
+ }
24
+ export async function writeWorkspaceConfig(workspaceRoot, config) {
25
+ const cursorDir = join(workspaceRoot, '.cursor');
26
+ await mkdir(cursorDir, { recursive: true });
27
+ const configPath = workspaceConfigPath(workspaceRoot);
28
+ await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, 'utf8');
29
+ }
30
+ export function buildWorkspaceConfig(params) {
31
+ const config = {
32
+ active_engram_id: params.engramId,
33
+ soul_hash: params.soulHash,
34
+ compiled_at: new Date().toISOString(),
35
+ };
36
+ if (params.engramsDir) {
37
+ config.engrams_dir = params.engramsDir;
38
+ }
39
+ if (params.shrineSurface) {
40
+ config.shrine_surface = params.shrineSurface;
41
+ }
42
+ return config;
43
+ }
44
+ //# sourceMappingURL=workspace-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-config.js","sourceRoot":"","sources":["../../src/cursor/workspace-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,gCAAgC,GAAG,aAAa,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,gCAAgC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,aAAqB,EAAE,QAAgB;IACpE,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAqB;IAC7D,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,MAA6B;IAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAKpC;IACC,MAAM,MAAM,GAA0B;QACpC,gBAAgB,EAAE,MAAM,CAAC,QAAQ;QACjC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type LoadedEngram } from './types.js';
2
+ export declare function loadEngramFromDirectory(directory: string): Promise<LoadedEngram>;
3
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/engram/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AA0ChE,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BtF"}
@@ -0,0 +1,60 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import yaml from 'js-yaml';
4
+ import { EngramLoadError } from './types.js';
5
+ import { parseEngramYaml, parseVesselYaml } from './parse.js';
6
+ const REQUIRED_FILES = ['SOUL.md', 'vessel.yaml', 'engram.yaml'];
7
+ async function readRequiredFile(directory, filename) {
8
+ const filePath = join(directory, filename);
9
+ try {
10
+ return await readFile(filePath, 'utf8');
11
+ }
12
+ catch (error) {
13
+ const code = error.code;
14
+ if (code === 'ENOENT') {
15
+ throw new EngramLoadError(`Engram directory is missing required file "${filename}".`, 'MISSING_FILE', directory);
16
+ }
17
+ throw error;
18
+ }
19
+ }
20
+ function parseYamlFile(content, filename, parser) {
21
+ let raw;
22
+ try {
23
+ raw = yaml.load(content);
24
+ }
25
+ catch (error) {
26
+ const message = error instanceof Error ? error.message : String(error);
27
+ throw new EngramLoadError(`Failed to parse ${filename}: ${message}`, 'INVALID_YAML', undefined);
28
+ }
29
+ try {
30
+ return parser(raw);
31
+ }
32
+ catch (error) {
33
+ if (error instanceof EngramLoadError) {
34
+ throw error;
35
+ }
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new EngramLoadError(`Invalid ${filename}: ${message}`, 'INVALID_FIELD', undefined);
38
+ }
39
+ }
40
+ export async function loadEngramFromDirectory(directory) {
41
+ for (const filename of REQUIRED_FILES) {
42
+ await readRequiredFile(directory, filename);
43
+ }
44
+ const [soul, vesselContent, engramContent] = await Promise.all(REQUIRED_FILES.map((filename) => readRequiredFile(directory, filename)));
45
+ const engram = parseYamlFile(engramContent, 'engram.yaml', parseEngramYaml);
46
+ const vessel = parseYamlFile(vesselContent, 'vessel.yaml', parseVesselYaml);
47
+ if (engram.id !== undefined) {
48
+ const dirName = directory.replace(/[/\\]+$/, '').split(/[/\\]/).pop();
49
+ if (dirName && dirName !== engram.id) {
50
+ throw new EngramLoadError(`Engram id "${engram.id}" does not match directory name "${dirName}".`, 'ID_MISMATCH', directory);
51
+ }
52
+ }
53
+ return {
54
+ directory,
55
+ soul: soul.replace(/\r\n/g, '\n'),
56
+ engram,
57
+ vessel,
58
+ };
59
+ }
60
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/engram/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type EngramConfig, type VesselConfig } from './types.js';
2
+ export declare function parseEngramYaml(raw: unknown): EngramConfig;
3
+ export declare function parseVesselYaml(raw: unknown): VesselConfig;
4
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/engram/parse.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAwBnF,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAqD1D;AAkHD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAyD1D"}