@soleri/core 9.10.0 → 9.12.1

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 (248) hide show
  1. package/dist/adapters/types.d.ts +2 -0
  2. package/dist/adapters/types.d.ts.map +1 -1
  3. package/dist/brain/brain.d.ts +5 -1
  4. package/dist/brain/brain.d.ts.map +1 -1
  5. package/dist/brain/brain.js +97 -10
  6. package/dist/brain/brain.js.map +1 -1
  7. package/dist/brain/intelligence.d.ts.map +1 -1
  8. package/dist/brain/intelligence.js +4 -0
  9. package/dist/brain/intelligence.js.map +1 -1
  10. package/dist/brain/types.d.ts +1 -1
  11. package/dist/brain/types.d.ts.map +1 -1
  12. package/dist/dream/cron-manager.d.ts +10 -0
  13. package/dist/dream/cron-manager.d.ts.map +1 -0
  14. package/dist/dream/cron-manager.js +122 -0
  15. package/dist/dream/cron-manager.js.map +1 -0
  16. package/dist/dream/dream-engine.d.ts +34 -0
  17. package/dist/dream/dream-engine.d.ts.map +1 -0
  18. package/dist/dream/dream-engine.js +88 -0
  19. package/dist/dream/dream-engine.js.map +1 -0
  20. package/dist/dream/dream-ops.d.ts +8 -0
  21. package/dist/dream/dream-ops.d.ts.map +1 -0
  22. package/dist/dream/dream-ops.js +49 -0
  23. package/dist/dream/dream-ops.js.map +1 -0
  24. package/dist/dream/index.d.ts +7 -0
  25. package/dist/dream/index.d.ts.map +1 -0
  26. package/dist/dream/index.js +5 -0
  27. package/dist/dream/index.js.map +1 -0
  28. package/dist/dream/schema.d.ts +3 -0
  29. package/dist/dream/schema.d.ts.map +1 -0
  30. package/dist/dream/schema.js +16 -0
  31. package/dist/dream/schema.js.map +1 -0
  32. package/dist/embeddings/index.d.ts +5 -0
  33. package/dist/embeddings/index.d.ts.map +1 -0
  34. package/dist/embeddings/index.js +3 -0
  35. package/dist/embeddings/index.js.map +1 -0
  36. package/dist/embeddings/openai-provider.d.ts +31 -0
  37. package/dist/embeddings/openai-provider.d.ts.map +1 -0
  38. package/dist/embeddings/openai-provider.js +120 -0
  39. package/dist/embeddings/openai-provider.js.map +1 -0
  40. package/dist/embeddings/pipeline.d.ts +36 -0
  41. package/dist/embeddings/pipeline.d.ts.map +1 -0
  42. package/dist/embeddings/pipeline.js +78 -0
  43. package/dist/embeddings/pipeline.js.map +1 -0
  44. package/dist/embeddings/types.d.ts +62 -0
  45. package/dist/embeddings/types.d.ts.map +1 -0
  46. package/dist/embeddings/types.js +3 -0
  47. package/dist/embeddings/types.js.map +1 -0
  48. package/dist/engine/bin/soleri-engine.js +4 -1
  49. package/dist/engine/bin/soleri-engine.js.map +1 -1
  50. package/dist/engine/module-manifest.d.ts.map +1 -1
  51. package/dist/engine/module-manifest.js +20 -0
  52. package/dist/engine/module-manifest.js.map +1 -1
  53. package/dist/engine/register-engine.d.ts.map +1 -1
  54. package/dist/engine/register-engine.js +12 -0
  55. package/dist/engine/register-engine.js.map +1 -1
  56. package/dist/flows/chain-types.d.ts +8 -8
  57. package/dist/flows/dispatch-registry.d.ts +15 -1
  58. package/dist/flows/dispatch-registry.d.ts.map +1 -1
  59. package/dist/flows/dispatch-registry.js +28 -1
  60. package/dist/flows/dispatch-registry.js.map +1 -1
  61. package/dist/flows/executor.d.ts +20 -2
  62. package/dist/flows/executor.d.ts.map +1 -1
  63. package/dist/flows/executor.js +79 -1
  64. package/dist/flows/executor.js.map +1 -1
  65. package/dist/flows/index.d.ts +2 -1
  66. package/dist/flows/index.d.ts.map +1 -1
  67. package/dist/flows/index.js.map +1 -1
  68. package/dist/flows/types.d.ts +43 -21
  69. package/dist/flows/types.d.ts.map +1 -1
  70. package/dist/index.d.ts +5 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +3 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/planning/plan-lifecycle.d.ts.map +1 -1
  75. package/dist/planning/plan-lifecycle.js +4 -2
  76. package/dist/planning/plan-lifecycle.js.map +1 -1
  77. package/dist/planning/planner-types.d.ts +1 -1
  78. package/dist/planning/planner-types.d.ts.map +1 -1
  79. package/dist/plugins/types.d.ts +31 -31
  80. package/dist/runtime/admin-ops.d.ts.map +1 -1
  81. package/dist/runtime/admin-ops.js +15 -0
  82. package/dist/runtime/admin-ops.js.map +1 -1
  83. package/dist/runtime/admin-setup-ops.js +2 -2
  84. package/dist/runtime/admin-setup-ops.js.map +1 -1
  85. package/dist/runtime/embedding-ops.d.ts +12 -0
  86. package/dist/runtime/embedding-ops.d.ts.map +1 -0
  87. package/dist/runtime/embedding-ops.js +96 -0
  88. package/dist/runtime/embedding-ops.js.map +1 -0
  89. package/dist/runtime/facades/embedding-facade.d.ts +7 -0
  90. package/dist/runtime/facades/embedding-facade.d.ts.map +1 -0
  91. package/dist/runtime/facades/embedding-facade.js +8 -0
  92. package/dist/runtime/facades/embedding-facade.js.map +1 -0
  93. package/dist/runtime/facades/index.d.ts.map +1 -1
  94. package/dist/runtime/facades/index.js +12 -0
  95. package/dist/runtime/facades/index.js.map +1 -1
  96. package/dist/runtime/facades/orchestrate-facade.d.ts.map +1 -1
  97. package/dist/runtime/facades/orchestrate-facade.js +120 -0
  98. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  99. package/dist/runtime/feature-flags.d.ts.map +1 -1
  100. package/dist/runtime/feature-flags.js +4 -0
  101. package/dist/runtime/feature-flags.js.map +1 -1
  102. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  103. package/dist/runtime/orchestrate-ops.js +146 -12
  104. package/dist/runtime/orchestrate-ops.js.map +1 -1
  105. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  106. package/dist/runtime/planning-extra-ops.js +51 -0
  107. package/dist/runtime/planning-extra-ops.js.map +1 -1
  108. package/dist/runtime/preflight.d.ts +32 -0
  109. package/dist/runtime/preflight.d.ts.map +1 -0
  110. package/dist/runtime/preflight.js +29 -0
  111. package/dist/runtime/preflight.js.map +1 -0
  112. package/dist/runtime/quality-signals.d.ts +6 -1
  113. package/dist/runtime/quality-signals.d.ts.map +1 -1
  114. package/dist/runtime/quality-signals.js +41 -5
  115. package/dist/runtime/quality-signals.js.map +1 -1
  116. package/dist/runtime/runtime.d.ts.map +1 -1
  117. package/dist/runtime/runtime.js +33 -2
  118. package/dist/runtime/runtime.js.map +1 -1
  119. package/dist/runtime/types.d.ts +27 -0
  120. package/dist/runtime/types.d.ts.map +1 -1
  121. package/dist/skills/step-tracker.d.ts +39 -0
  122. package/dist/skills/step-tracker.d.ts.map +1 -0
  123. package/dist/skills/step-tracker.js +105 -0
  124. package/dist/skills/step-tracker.js.map +1 -0
  125. package/dist/skills/sync-skills.d.ts +3 -2
  126. package/dist/skills/sync-skills.d.ts.map +1 -1
  127. package/dist/skills/sync-skills.js +42 -8
  128. package/dist/skills/sync-skills.js.map +1 -1
  129. package/dist/subagent/dispatcher.d.ts +4 -3
  130. package/dist/subagent/dispatcher.d.ts.map +1 -1
  131. package/dist/subagent/dispatcher.js +57 -35
  132. package/dist/subagent/dispatcher.js.map +1 -1
  133. package/dist/subagent/index.d.ts +1 -0
  134. package/dist/subagent/index.d.ts.map +1 -1
  135. package/dist/subagent/index.js.map +1 -1
  136. package/dist/subagent/orphan-reaper.d.ts +51 -4
  137. package/dist/subagent/orphan-reaper.d.ts.map +1 -1
  138. package/dist/subagent/orphan-reaper.js +103 -3
  139. package/dist/subagent/orphan-reaper.js.map +1 -1
  140. package/dist/subagent/types.d.ts +7 -0
  141. package/dist/subagent/types.d.ts.map +1 -1
  142. package/dist/subagent/workspace-resolver.d.ts +2 -0
  143. package/dist/subagent/workspace-resolver.d.ts.map +1 -1
  144. package/dist/subagent/workspace-resolver.js +3 -1
  145. package/dist/subagent/workspace-resolver.js.map +1 -1
  146. package/dist/vault/vault-entries.d.ts +18 -0
  147. package/dist/vault/vault-entries.d.ts.map +1 -1
  148. package/dist/vault/vault-entries.js +73 -0
  149. package/dist/vault/vault-entries.js.map +1 -1
  150. package/dist/vault/vault-manager.d.ts.map +1 -1
  151. package/dist/vault/vault-manager.js +1 -0
  152. package/dist/vault/vault-manager.js.map +1 -1
  153. package/dist/vault/vault-schema.d.ts.map +1 -1
  154. package/dist/vault/vault-schema.js +14 -0
  155. package/dist/vault/vault-schema.js.map +1 -1
  156. package/dist/vault/vault.d.ts +1 -0
  157. package/dist/vault/vault.d.ts.map +1 -1
  158. package/dist/vault/vault.js.map +1 -1
  159. package/package.json +3 -5
  160. package/src/__tests__/cron-manager.test.ts +132 -0
  161. package/src/__tests__/deviation-detection.test.ts +234 -0
  162. package/src/__tests__/embeddings.test.ts +536 -0
  163. package/src/__tests__/preflight.test.ts +97 -0
  164. package/src/__tests__/step-persistence.test.ts +324 -0
  165. package/src/__tests__/step-tracker.test.ts +260 -0
  166. package/src/__tests__/subagent/dispatcher.test.ts +122 -4
  167. package/src/__tests__/subagent/orphan-reaper.test.ts +148 -12
  168. package/src/__tests__/subagent/process-lifecycle.test.ts +422 -0
  169. package/src/__tests__/subagent/workspace-resolver.test.ts +6 -1
  170. package/src/adapters/types.ts +2 -0
  171. package/src/brain/brain.ts +117 -9
  172. package/src/brain/intelligence.ts +4 -0
  173. package/src/brain/types.ts +6 -1
  174. package/src/dream/cron-manager.ts +137 -0
  175. package/src/dream/dream-engine.ts +119 -0
  176. package/src/dream/dream-ops.ts +56 -0
  177. package/src/dream/dream.test.ts +182 -0
  178. package/src/dream/index.ts +6 -0
  179. package/src/dream/schema.ts +17 -0
  180. package/src/embeddings/openai-provider.ts +158 -0
  181. package/src/embeddings/pipeline.ts +126 -0
  182. package/src/embeddings/types.ts +67 -0
  183. package/src/engine/bin/soleri-engine.ts +4 -1
  184. package/src/engine/module-manifest.test.ts +4 -4
  185. package/src/engine/module-manifest.ts +20 -0
  186. package/src/engine/register-engine.ts +12 -0
  187. package/src/flows/dispatch-registry.ts +44 -1
  188. package/src/flows/executor.ts +93 -2
  189. package/src/flows/index.ts +2 -0
  190. package/src/flows/types.ts +39 -1
  191. package/src/index.ts +11 -0
  192. package/src/planning/goal-ancestry.test.ts +3 -5
  193. package/src/planning/plan-lifecycle.ts +5 -2
  194. package/src/planning/planner-types.ts +1 -1
  195. package/src/planning/planner.test.ts +73 -3
  196. package/src/runtime/admin-ops.test.ts +2 -2
  197. package/src/runtime/admin-ops.ts +17 -0
  198. package/src/runtime/admin-setup-ops.ts +2 -2
  199. package/src/runtime/embedding-ops.ts +116 -0
  200. package/src/runtime/facades/admin-facade.test.ts +31 -0
  201. package/src/runtime/facades/embedding-facade.ts +11 -0
  202. package/src/runtime/facades/index.ts +12 -0
  203. package/src/runtime/facades/orchestrate-facade.test.ts +16 -0
  204. package/src/runtime/facades/orchestrate-facade.ts +146 -0
  205. package/src/runtime/feature-flags.ts +4 -0
  206. package/src/runtime/orchestrate-ops.test.ts +182 -2
  207. package/src/runtime/orchestrate-ops.ts +170 -13
  208. package/src/runtime/planning-extra-ops.ts +77 -0
  209. package/src/runtime/preflight.ts +53 -0
  210. package/src/runtime/quality-signals.test.ts +182 -8
  211. package/src/runtime/quality-signals.ts +44 -5
  212. package/src/runtime/runtime.ts +41 -2
  213. package/src/runtime/types.ts +20 -0
  214. package/src/skills/__tests__/sync-skills.test.ts +132 -0
  215. package/src/skills/step-tracker.ts +162 -0
  216. package/src/skills/sync-skills.ts +54 -9
  217. package/src/subagent/dispatcher.ts +62 -39
  218. package/src/subagent/index.ts +1 -0
  219. package/src/subagent/orphan-reaper.test.ts +135 -0
  220. package/src/subagent/orphan-reaper.ts +130 -7
  221. package/src/subagent/types.ts +10 -0
  222. package/src/subagent/workspace-resolver.ts +3 -1
  223. package/src/vault/vault-entries.ts +112 -0
  224. package/src/vault/vault-manager.ts +1 -0
  225. package/src/vault/vault-scaling.test.ts +3 -2
  226. package/src/vault/vault-schema.ts +15 -0
  227. package/src/vault/vault.ts +1 -0
  228. package/vitest.config.ts +2 -1
  229. package/dist/brain/strength-scorer.d.ts +0 -31
  230. package/dist/brain/strength-scorer.d.ts.map +0 -1
  231. package/dist/brain/strength-scorer.js +0 -264
  232. package/dist/brain/strength-scorer.js.map +0 -1
  233. package/dist/engine/index.d.ts +0 -21
  234. package/dist/engine/index.d.ts.map +0 -1
  235. package/dist/engine/index.js +0 -18
  236. package/dist/engine/index.js.map +0 -1
  237. package/dist/hooks/index.d.ts +0 -2
  238. package/dist/hooks/index.d.ts.map +0 -1
  239. package/dist/hooks/index.js +0 -2
  240. package/dist/hooks/index.js.map +0 -1
  241. package/dist/persona/index.d.ts +0 -5
  242. package/dist/persona/index.d.ts.map +0 -1
  243. package/dist/persona/index.js +0 -4
  244. package/dist/persona/index.js.map +0 -1
  245. package/dist/vault/vault-interfaces.d.ts +0 -153
  246. package/dist/vault/vault-interfaces.d.ts.map +0 -1
  247. package/dist/vault/vault-interfaces.js +0 -2
  248. package/dist/vault/vault-interfaces.js.map +0 -1
@@ -0,0 +1,122 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { existsSync, mkdirSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const CRON_TAG = '# soleri:dream';
6
+ const SOLERI_DIR = join(homedir(), '.soleri');
7
+ const LOG_PATH = join(SOLERI_DIR, 'dream-cron.log');
8
+ function ensureSoleriDir() {
9
+ if (!existsSync(SOLERI_DIR)) {
10
+ mkdirSync(SOLERI_DIR, { recursive: true });
11
+ }
12
+ }
13
+ function getCurrentCrontab() {
14
+ try {
15
+ return execSync('crontab -l 2>/dev/null', { encoding: 'utf-8' });
16
+ }
17
+ catch {
18
+ return '';
19
+ }
20
+ }
21
+ function writeCrontab(content) {
22
+ execSync(`echo ${JSON.stringify(content)} | crontab -`, { encoding: 'utf-8' });
23
+ }
24
+ function resolveClaudePath() {
25
+ try {
26
+ const result = execSync('which claude 2>/dev/null', { encoding: 'utf-8' }).trim();
27
+ if (result)
28
+ return result;
29
+ }
30
+ catch {
31
+ // fall through to default
32
+ }
33
+ return join(homedir(), '.claude', 'local', 'claude');
34
+ }
35
+ function parseDreamLine(line) {
36
+ if (!line.includes(CRON_TAG))
37
+ return null;
38
+ const parts = line.trim().split(/\s+/);
39
+ if (parts.length < 6)
40
+ return null;
41
+ const minute = parts[0];
42
+ const hour = parts[1];
43
+ // Extract --project-dir value from the line
44
+ const projDirMatch = line.match(/--project-dir\s+(\S+)/);
45
+ const projectDir = projDirMatch ? projDirMatch[1] : '';
46
+ return { minute, hour, projectDir };
47
+ }
48
+ export function getSchedule() {
49
+ try {
50
+ const crontab = getCurrentCrontab();
51
+ const dreamLine = crontab.split('\n').find((l) => l.includes(CRON_TAG));
52
+ if (!dreamLine) {
53
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
54
+ }
55
+ const parsed = parseDreamLine(dreamLine);
56
+ if (!parsed) {
57
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
58
+ }
59
+ const time = `${parsed.hour.padStart(2, '0')}:${parsed.minute.padStart(2, '0')}`;
60
+ return {
61
+ isScheduled: true,
62
+ time,
63
+ logPath: LOG_PATH,
64
+ projectDir: parsed.projectDir || null,
65
+ };
66
+ }
67
+ catch {
68
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
69
+ }
70
+ }
71
+ export function schedule(time, projectDir) {
72
+ ensureSoleriDir();
73
+ const match = time.match(/^(\d{1,2}):(\d{2})$/);
74
+ if (!match) {
75
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
76
+ }
77
+ const hour = parseInt(match[1], 10);
78
+ let minute = parseInt(match[2], 10);
79
+ // Add a few minutes offset to avoid running exactly on the hour
80
+ if (minute === 0) {
81
+ minute = 3;
82
+ }
83
+ const claudePath = resolveClaudePath();
84
+ const cronLine = `${minute} ${hour} * * * ${claudePath} --dangerously-skip-permissions -p "Run /ernesto-dream" --project-dir ${projectDir} >> ${LOG_PATH} 2>&1 ${CRON_TAG}`;
85
+ try {
86
+ const crontab = getCurrentCrontab();
87
+ // Remove any existing dream lines (idempotent)
88
+ const filtered = crontab
89
+ .split('\n')
90
+ .filter((l) => !l.includes(CRON_TAG))
91
+ .join('\n');
92
+ const newCrontab = filtered.endsWith('\n')
93
+ ? `${filtered}${cronLine}\n`
94
+ : `${filtered}\n${cronLine}\n`;
95
+ writeCrontab(newCrontab);
96
+ const formattedTime = `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;
97
+ return {
98
+ isScheduled: true,
99
+ time: formattedTime,
100
+ logPath: LOG_PATH,
101
+ projectDir,
102
+ };
103
+ }
104
+ catch {
105
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
106
+ }
107
+ }
108
+ export function unschedule() {
109
+ try {
110
+ const crontab = getCurrentCrontab();
111
+ const filtered = crontab
112
+ .split('\n')
113
+ .filter((l) => !l.includes(CRON_TAG))
114
+ .join('\n');
115
+ writeCrontab(filtered);
116
+ }
117
+ catch {
118
+ // Graceful degradation — if crontab fails, just return unscheduled
119
+ }
120
+ return { isScheduled: false, time: null, logPath: null, projectDir: null };
121
+ }
122
+ //# sourceMappingURL=cron-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-manager.js","sourceRoot":"","sources":["../../src/dream/cron-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Vault } from '../vault/vault.js';
2
+ import type { Curator } from '../curator/curator.js';
3
+ export interface DreamReport {
4
+ durationMs: number;
5
+ duplicatesFound: number;
6
+ staleArchived: number;
7
+ contradictionsFound: number;
8
+ totalDreams: number;
9
+ timestamp: string;
10
+ }
11
+ export interface DreamStatus {
12
+ sessionsSinceLastDream: number;
13
+ lastDreamAt: string | null;
14
+ lastDreamDurationMs: number | null;
15
+ totalDreams: number;
16
+ gateEligible: boolean;
17
+ }
18
+ export declare class DreamEngine {
19
+ private curator;
20
+ private sessionThreshold;
21
+ private hourThreshold;
22
+ private provider;
23
+ constructor(vault: Vault, curator: Curator, sessionThreshold?: number, hourThreshold?: number);
24
+ run(): DreamReport;
25
+ incrementSessionCount(): void;
26
+ getStatus(): DreamStatus;
27
+ checkGate(): {
28
+ eligible: boolean;
29
+ reason: string;
30
+ };
31
+ private isGateEligible;
32
+ private getMeta;
33
+ }
34
+ //# sourceMappingURL=dream-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream-engine.d.ts","sourceRoot":"","sources":["../../src/dream/dream-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,WAAW;IAKpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,aAAa;IANvB,OAAO,CAAC,QAAQ,CAAsB;gBAGpC,KAAK,EAAE,KAAK,EACJ,OAAO,EAAE,OAAO,EAChB,gBAAgB,GAAE,MAAU,EAC5B,aAAa,GAAE,MAAW;IAKpC,GAAG,IAAI,WAAW;IAkClB,qBAAqB,IAAI,IAAI;IAM7B,SAAS,IAAI,WAAW;IAWxB,SAAS,IAAI;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAsBlD,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,OAAO;CAGhB"}
@@ -0,0 +1,88 @@
1
+ export class DreamEngine {
2
+ curator;
3
+ sessionThreshold;
4
+ hourThreshold;
5
+ provider;
6
+ constructor(vault, curator, sessionThreshold = 5, hourThreshold = 24) {
7
+ this.curator = curator;
8
+ this.sessionThreshold = sessionThreshold;
9
+ this.hourThreshold = hourThreshold;
10
+ this.provider = vault.getProvider();
11
+ }
12
+ run() {
13
+ const start = Date.now();
14
+ const result = this.curator.consolidate({
15
+ dryRun: false,
16
+ staleDaysThreshold: 90,
17
+ duplicateThreshold: 0.45,
18
+ contradictionThreshold: 0.4,
19
+ });
20
+ const durationMs = Date.now() - start;
21
+ const now = new Date().toISOString();
22
+ this.provider.run(`UPDATE dream_meta SET
23
+ sessions_since_last_dream = 0,
24
+ last_dream_at = ?,
25
+ last_dream_duration_ms = ?,
26
+ last_dream_report = ?,
27
+ total_dreams = total_dreams + 1,
28
+ updated_at = ?
29
+ WHERE id = 1`, [now, durationMs, JSON.stringify(result), now]);
30
+ const meta = this.getMeta();
31
+ return {
32
+ durationMs,
33
+ duplicatesFound: result.duplicates?.length ?? 0,
34
+ staleArchived: result.staleEntries?.length ?? 0,
35
+ contradictionsFound: result.contradictions?.length ?? 0,
36
+ totalDreams: meta.total_dreams,
37
+ timestamp: now,
38
+ };
39
+ }
40
+ incrementSessionCount() {
41
+ this.provider.run("UPDATE dream_meta SET sessions_since_last_dream = sessions_since_last_dream + 1, updated_at = datetime('now') WHERE id = 1");
42
+ }
43
+ getStatus() {
44
+ const meta = this.getMeta();
45
+ return {
46
+ sessionsSinceLastDream: meta.sessions_since_last_dream,
47
+ lastDreamAt: meta.last_dream_at,
48
+ lastDreamDurationMs: meta.last_dream_duration_ms,
49
+ totalDreams: meta.total_dreams,
50
+ gateEligible: this.isGateEligible(meta),
51
+ };
52
+ }
53
+ checkGate() {
54
+ const meta = this.getMeta();
55
+ const sessions = meta.sessions_since_last_dream;
56
+ const lastDream = meta.last_dream_at;
57
+ if (sessions < this.sessionThreshold) {
58
+ return {
59
+ eligible: false,
60
+ reason: `Only ${sessions}/${this.sessionThreshold} sessions since last dream`,
61
+ };
62
+ }
63
+ if (lastDream) {
64
+ const hoursSince = (Date.now() - new Date(lastDream).getTime()) / (1000 * 60 * 60);
65
+ if (hoursSince < this.hourThreshold) {
66
+ return {
67
+ eligible: false,
68
+ reason: `Only ${Math.round(hoursSince)}h/${this.hourThreshold}h since last dream`,
69
+ };
70
+ }
71
+ }
72
+ return { eligible: true, reason: 'Gate conditions met' };
73
+ }
74
+ isGateEligible(meta) {
75
+ const sessions = meta.sessions_since_last_dream;
76
+ const lastDream = meta.last_dream_at;
77
+ if (sessions < this.sessionThreshold)
78
+ return false;
79
+ if (!lastDream)
80
+ return true;
81
+ const hoursSince = (Date.now() - new Date(lastDream).getTime()) / (1000 * 60 * 60);
82
+ return hoursSince >= this.hourThreshold;
83
+ }
84
+ getMeta() {
85
+ return this.provider.get('SELECT * FROM dream_meta WHERE id = 1');
86
+ }
87
+ }
88
+ //# sourceMappingURL=dream-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream-engine.js","sourceRoot":"","sources":["../../src/dream/dream-engine.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,WAAW;IAKZ;IACA;IACA;IANF,QAAQ,CAAsB;IAEtC,YACE,KAAY,EACJ,OAAgB,EAChB,mBAA2B,CAAC,EAC5B,gBAAwB,EAAE;QAF1B,YAAO,GAAP,OAAO,CAAS;QAChB,qBAAgB,GAAhB,gBAAgB,CAAY;QAC5B,kBAAa,GAAb,aAAa,CAAa;QAElC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACtC,MAAM,EAAE,KAAK;YACb,kBAAkB,EAAE,EAAE;YACtB,kBAAkB,EAAE,IAAI;YACxB,sBAAsB,EAAE,GAAG;SAC5B,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf;;;;;;;mBAOa,EACb,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAC/C,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO;YACL,UAAU;YACV,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;YAC/C,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;YAC/C,mBAAmB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;YACvD,WAAW,EAAE,IAAI,CAAC,YAAsB;YACxC,SAAS,EAAE,GAAG;SACf,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,4HAA4H,CAC7H,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO;YACL,sBAAsB,EAAE,IAAI,CAAC,yBAAmC;YAChE,WAAW,EAAE,IAAI,CAAC,aAA8B;YAChD,mBAAmB,EAAE,IAAI,CAAC,sBAAuC;YACjE,WAAW,EAAE,IAAI,CAAC,YAAsB;YACxC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAmC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,aAA8B,CAAC;QACtD,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,QAAQ,QAAQ,IAAI,IAAI,CAAC,gBAAgB,4BAA4B;aAC9E,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACnF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpC,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,aAAa,oBAAoB;iBAClF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;IAEO,cAAc,CAAC,IAA6B;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAmC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,aAA8B,CAAC;QACtD,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB;YAAE,OAAO,KAAK,CAAC;QACnD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnF,OAAO,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC;IAC1C,CAAC;IAEO,OAAO;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,uCAAuC,CAA4B,CAAC;IAC/F,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dream runtime ops — facade operations for the dream engine.
3
+ * dream_run, dream_status, dream_check_gate.
4
+ */
5
+ import type { OpDefinition } from '../facades/types.js';
6
+ import type { AgentRuntime } from '../runtime/types.js';
7
+ export declare function createDreamOps(runtime: AgentRuntime): OpDefinition[];
8
+ //# sourceMappingURL=dream-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream-ops.d.ts","sourceRoot":"","sources":["../../src/dream/dream-ops.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CA4CpE"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Dream runtime ops — facade operations for the dream engine.
3
+ * dream_run, dream_status, dream_check_gate.
4
+ */
5
+ import { z } from 'zod';
6
+ import { DreamEngine } from './dream-engine.js';
7
+ import { ensureDreamSchema } from './schema.js';
8
+ export function createDreamOps(runtime) {
9
+ const { vault, curator } = runtime;
10
+ ensureDreamSchema(vault.getProvider());
11
+ const engine = new DreamEngine(vault, curator);
12
+ return [
13
+ {
14
+ name: 'dream_run',
15
+ description: 'Run a dream cycle — consolidate vault knowledge (duplicates, stale entries, contradictions). Checks gate unless force=true.',
16
+ auth: 'write',
17
+ schema: z.object({
18
+ force: z.boolean().optional().describe('Skip gate check. Default false.'),
19
+ }),
20
+ handler: async (params) => {
21
+ const force = params.force ?? false;
22
+ if (!force) {
23
+ const gate = engine.checkGate();
24
+ if (!gate.eligible) {
25
+ return { skipped: true, reason: gate.reason, status: engine.getStatus() };
26
+ }
27
+ }
28
+ return engine.run();
29
+ },
30
+ },
31
+ {
32
+ name: 'dream_status',
33
+ description: 'Dream status — sessions since last dream, last dream timestamp, gate eligibility.',
34
+ auth: 'read',
35
+ handler: async () => {
36
+ return engine.getStatus();
37
+ },
38
+ },
39
+ {
40
+ name: 'dream_check_gate',
41
+ description: 'Check whether dream gate conditions are met (session threshold + time threshold).',
42
+ auth: 'read',
43
+ handler: async () => {
44
+ return engine.checkGate();
45
+ },
46
+ },
47
+ ];
48
+ }
49
+ //# sourceMappingURL=dream-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dream-ops.js","sourceRoot":"","sources":["../../src/dream/dream-ops.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,OAAqB;IAClD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACnC,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE/C,OAAO;QACL;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,6HAA6H;YAC/H,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACf,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;aAC1E,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACxB,MAAM,KAAK,GAAI,MAAM,CAAC,KAAiB,IAAI,KAAK,CAAC;gBACjD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;oBAC5E,CAAC;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;YACtB,CAAC;SACF;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EACT,mFAAmF;YACrF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;SACF;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,WAAW,EACT,mFAAmF;YACrF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { ensureDreamSchema } from './schema.js';
2
+ export { DreamEngine } from './dream-engine.js';
3
+ export type { DreamReport, DreamStatus } from './dream-engine.js';
4
+ export { createDreamOps } from './dream-ops.js';
5
+ export { getSchedule, schedule, unschedule } from './cron-manager.js';
6
+ export type { CronSchedule } from './cron-manager.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { ensureDreamSchema } from './schema.js';
2
+ export { DreamEngine } from './dream-engine.js';
3
+ export { createDreamOps } from './dream-ops.js';
4
+ export { getSchedule, schedule, unschedule } from './cron-manager.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PersistenceProvider } from '../persistence/types.js';
2
+ export declare function ensureDreamSchema(provider: PersistenceProvider): void;
3
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/dream/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAcrE"}
@@ -0,0 +1,16 @@
1
+ export function ensureDreamSchema(provider) {
2
+ provider.execSql(`
3
+ CREATE TABLE IF NOT EXISTS dream_meta (
4
+ id INTEGER PRIMARY KEY CHECK (id = 1),
5
+ sessions_since_last_dream INTEGER NOT NULL DEFAULT 0,
6
+ last_dream_at TEXT,
7
+ last_dream_duration_ms INTEGER,
8
+ last_dream_report TEXT,
9
+ total_dreams INTEGER NOT NULL DEFAULT 0,
10
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
11
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
12
+ )
13
+ `);
14
+ provider.run('INSERT OR IGNORE INTO dream_meta (id) VALUES (1)');
15
+ }
16
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/dream/schema.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,QAA6B;IAC7D,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { EmbeddingProvider, EmbeddingResult, EmbeddingConfig, StoredVector, EmbeddingStats, } from './types.js';
2
+ export { OpenAIEmbeddingProvider } from './openai-provider.js';
3
+ export { EmbeddingPipeline } from './pipeline.js';
4
+ export type { BatchEmbedOptions, BatchEmbedResult } from './pipeline.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { OpenAIEmbeddingProvider } from './openai-provider.js';
2
+ export { EmbeddingPipeline } from './pipeline.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * OpenAI Embedding Provider — generates dense vector embeddings via the
3
+ * OpenAI embeddings API. Supports key pool rotation and batch chunking.
4
+ */
5
+ import type { EmbeddingProvider, EmbeddingResult, EmbeddingConfig } from './types.js';
6
+ import type { KeyPool } from '../llm/key-pool.js';
7
+ /**
8
+ * Embedding provider that calls the OpenAI `/v1/embeddings` endpoint.
9
+ *
10
+ * Supports optional {@link KeyPool} for key rotation — on 429 responses the
11
+ * pool is rotated so the next call uses a fresh key. If no pool is provided,
12
+ * falls back to `config.apiKey`.
13
+ */
14
+ export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
15
+ readonly providerName = "openai";
16
+ readonly model: string;
17
+ readonly dimensions: number;
18
+ private readonly apiUrl;
19
+ private readonly batchSize;
20
+ private readonly apiKey?;
21
+ private readonly keyPool?;
22
+ constructor(config: EmbeddingConfig, keyPool?: KeyPool);
23
+ /**
24
+ * Embed one or more texts, returning one vector per input text.
25
+ * Automatically chunks requests that exceed {@link batchSize}.
26
+ */
27
+ embed(texts: string[]): Promise<EmbeddingResult>;
28
+ private resolveApiKey;
29
+ private callApi;
30
+ }
31
+ //# sourceMappingURL=openai-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../src/embeddings/openai-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AA4BlD;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,YAAY,YAAY;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAU;gBAEvB,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO;IAkBtD;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BtD,OAAO,CAAC,aAAa;YAUP,OAAO;CA6CtB"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * OpenAI Embedding Provider — generates dense vector embeddings via the
3
+ * OpenAI embeddings API. Supports key pool rotation and batch chunking.
4
+ */
5
+ import { LLMError } from '../llm/types.js';
6
+ import { retry } from '../llm/utils.js';
7
+ // =============================================================================
8
+ // CONSTANTS
9
+ // =============================================================================
10
+ const DEFAULT_MODEL = 'text-embedding-3-small';
11
+ const DEFAULT_DIMENSIONS = 1536;
12
+ const DEFAULT_BATCH_SIZE = 2048;
13
+ const DEFAULT_BASE_URL = 'https://api.openai.com';
14
+ const REQUEST_TIMEOUT_MS = 60_000;
15
+ // =============================================================================
16
+ // PROVIDER
17
+ // =============================================================================
18
+ /**
19
+ * Embedding provider that calls the OpenAI `/v1/embeddings` endpoint.
20
+ *
21
+ * Supports optional {@link KeyPool} for key rotation — on 429 responses the
22
+ * pool is rotated so the next call uses a fresh key. If no pool is provided,
23
+ * falls back to `config.apiKey`.
24
+ */
25
+ export class OpenAIEmbeddingProvider {
26
+ providerName = 'openai';
27
+ model;
28
+ dimensions;
29
+ apiUrl;
30
+ batchSize;
31
+ apiKey;
32
+ keyPool;
33
+ constructor(config, keyPool) {
34
+ this.model = config.model || DEFAULT_MODEL;
35
+ this.dimensions = DEFAULT_DIMENSIONS;
36
+ this.batchSize = config.batchSize ?? DEFAULT_BATCH_SIZE;
37
+ this.apiKey = config.apiKey;
38
+ this.keyPool = keyPool;
39
+ const baseUrl = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, '');
40
+ this.apiUrl = `${baseUrl}/v1/embeddings`;
41
+ if (!this.keyPool?.hasKeys && !this.apiKey) {
42
+ throw new LLMError('OpenAI embedding provider requires an API key — provide config.apiKey or a KeyPool with keys', { retryable: false });
43
+ }
44
+ }
45
+ /**
46
+ * Embed one or more texts, returning one vector per input text.
47
+ * Automatically chunks requests that exceed {@link batchSize}.
48
+ */
49
+ async embed(texts) {
50
+ if (texts.length === 0) {
51
+ return { vectors: [], tokensUsed: 0, model: this.model };
52
+ }
53
+ // Single batch — no chunking needed
54
+ if (texts.length <= this.batchSize) {
55
+ return this.callApi(texts);
56
+ }
57
+ // Chunk into batches and concatenate results
58
+ const allVectors = [];
59
+ let totalTokens = 0;
60
+ for (let offset = 0; offset < texts.length; offset += this.batchSize) {
61
+ const chunk = texts.slice(offset, offset + this.batchSize);
62
+ // oxlint-disable-next-line eslint(no-await-in-loop)
63
+ const result = await this.callApi(chunk);
64
+ allVectors.push(...result.vectors);
65
+ totalTokens += result.tokensUsed;
66
+ }
67
+ return { vectors: allVectors, tokensUsed: totalTokens, model: this.model };
68
+ }
69
+ // ===========================================================================
70
+ // INTERNALS
71
+ // ===========================================================================
72
+ resolveApiKey() {
73
+ if (this.keyPool?.hasKeys) {
74
+ return this.keyPool.getActiveKey().expose();
75
+ }
76
+ if (this.apiKey) {
77
+ return this.apiKey;
78
+ }
79
+ throw new LLMError('No API key available for OpenAI embeddings', { retryable: false });
80
+ }
81
+ async callApi(texts) {
82
+ const doRequest = async () => {
83
+ const apiKey = this.resolveApiKey();
84
+ const response = await fetch(this.apiUrl, {
85
+ method: 'POST',
86
+ headers: {
87
+ 'Content-Type': 'application/json',
88
+ Authorization: `Bearer ${apiKey}`,
89
+ },
90
+ body: JSON.stringify({
91
+ model: this.model,
92
+ input: texts,
93
+ }),
94
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
95
+ });
96
+ if (!response.ok) {
97
+ // Rotate key on rate limit
98
+ if (response.status === 429 && this.keyPool && this.keyPool.poolSize > 1) {
99
+ this.keyPool.rotateOnError();
100
+ }
101
+ const errorBody = await response.text();
102
+ throw new LLMError(`OpenAI Embeddings API error: ${response.status} - ${errorBody}`, {
103
+ retryable: response.status === 429 || response.status >= 500,
104
+ statusCode: response.status,
105
+ });
106
+ }
107
+ const data = (await response.json());
108
+ // OpenAI returns data sorted by index, but sort defensively
109
+ const sorted = [...data.data].sort((a, b) => a.index - b.index);
110
+ const vectors = sorted.map((d) => d.embedding);
111
+ return {
112
+ vectors,
113
+ tokensUsed: data.usage?.total_tokens ?? 0,
114
+ model: this.model,
115
+ };
116
+ };
117
+ return retry(doRequest, { maxAttempts: 3 });
118
+ }
119
+ }
120
+ //# sourceMappingURL=openai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../src/embeddings/openai-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Embedding pipeline — batch and incremental embedding of vault entries.
3
+ */
4
+ import type { EmbeddingProvider } from './types.js';
5
+ import type { PersistenceProvider } from '../persistence/types.js';
6
+ export interface BatchEmbedOptions {
7
+ /** Number of entries per API call (default 100). */
8
+ batchSize?: number;
9
+ /** Called after each batch with (completed, total). */
10
+ onProgress?: (completed: number, total: number) => void;
11
+ }
12
+ export interface BatchEmbedResult {
13
+ embedded: number;
14
+ skipped: number;
15
+ failed: number;
16
+ tokensUsed: number;
17
+ }
18
+ export declare class EmbeddingPipeline {
19
+ private provider;
20
+ private persistence;
21
+ constructor(provider: EmbeddingProvider, persistence: PersistenceProvider);
22
+ /**
23
+ * Batch embed all entries missing vectors for the current model.
24
+ * Processes in chunks; skips entries that already have vectors.
25
+ * On batch failure, logs and continues with the next batch.
26
+ */
27
+ batchEmbed(options?: BatchEmbedOptions): Promise<BatchEmbedResult>;
28
+ /**
29
+ * Embed a single entry and store its vector.
30
+ * Returns true if embedded, false if skipped (vector already exists).
31
+ */
32
+ embedEntry(entryId: string, text: string): Promise<boolean>;
33
+ /** Build the text to embed for a vault entry. */
34
+ private getEmbeddableText;
35
+ }
36
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/embeddings/pipeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;gBADX,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,mBAAmB;IAG1C;;;;OAIG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8DxE;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAejE,iDAAiD;IACjD,OAAO,CAAC,iBAAiB;CAW1B"}