@soleri/core 7.0.0 → 8.1.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 (294) hide show
  1. package/dist/agency/agency-manager.d.ts +27 -1
  2. package/dist/agency/agency-manager.d.ts.map +1 -1
  3. package/dist/agency/agency-manager.js +180 -9
  4. package/dist/agency/agency-manager.js.map +1 -1
  5. package/dist/agency/default-rules.d.ts +7 -0
  6. package/dist/agency/default-rules.d.ts.map +1 -0
  7. package/dist/agency/default-rules.js +79 -0
  8. package/dist/agency/default-rules.js.map +1 -0
  9. package/dist/agency/types.d.ts +48 -0
  10. package/dist/agency/types.d.ts.map +1 -1
  11. package/dist/brain/brain.d.ts +17 -2
  12. package/dist/brain/brain.d.ts.map +1 -1
  13. package/dist/brain/brain.js +118 -8
  14. package/dist/brain/brain.js.map +1 -1
  15. package/dist/brain/knowledge-synthesizer.d.ts +37 -0
  16. package/dist/brain/knowledge-synthesizer.d.ts.map +1 -0
  17. package/dist/brain/knowledge-synthesizer.js +159 -0
  18. package/dist/brain/knowledge-synthesizer.js.map +1 -0
  19. package/dist/brain/learning-radar.d.ts +96 -0
  20. package/dist/brain/learning-radar.d.ts.map +1 -0
  21. package/dist/brain/learning-radar.js +202 -0
  22. package/dist/brain/learning-radar.js.map +1 -0
  23. package/dist/brain/types.d.ts +15 -0
  24. package/dist/brain/types.d.ts.map +1 -1
  25. package/dist/context/context-engine.d.ts.map +1 -1
  26. package/dist/context/context-engine.js +82 -17
  27. package/dist/context/context-engine.js.map +1 -1
  28. package/dist/context/types.d.ts +5 -0
  29. package/dist/context/types.d.ts.map +1 -1
  30. package/dist/control/intent-router.d.ts +12 -1
  31. package/dist/control/intent-router.d.ts.map +1 -1
  32. package/dist/control/intent-router.js +68 -0
  33. package/dist/control/intent-router.js.map +1 -1
  34. package/dist/control/types.d.ts +17 -0
  35. package/dist/control/types.d.ts.map +1 -1
  36. package/dist/curator/classifier.d.ts +18 -0
  37. package/dist/curator/classifier.d.ts.map +1 -0
  38. package/dist/curator/classifier.js +59 -0
  39. package/dist/curator/classifier.js.map +1 -0
  40. package/dist/curator/quality-gate.d.ts +29 -0
  41. package/dist/curator/quality-gate.d.ts.map +1 -0
  42. package/dist/curator/quality-gate.js +86 -0
  43. package/dist/curator/quality-gate.js.map +1 -0
  44. package/dist/domain-packs/index.d.ts +0 -3
  45. package/dist/domain-packs/index.d.ts.map +1 -1
  46. package/dist/domain-packs/index.js +0 -3
  47. package/dist/domain-packs/index.js.map +1 -1
  48. package/dist/domain-packs/loader.d.ts.map +1 -1
  49. package/dist/domain-packs/loader.js +20 -4
  50. package/dist/domain-packs/loader.js.map +1 -1
  51. package/dist/domain-packs/pack-runtime.d.ts +5 -5
  52. package/dist/domain-packs/pack-runtime.d.ts.map +1 -1
  53. package/dist/domain-packs/pack-runtime.js +2 -2
  54. package/dist/domain-packs/pack-runtime.js.map +1 -1
  55. package/dist/domain-packs/types.d.ts +8 -2
  56. package/dist/domain-packs/types.d.ts.map +1 -1
  57. package/dist/domain-packs/types.js.map +1 -1
  58. package/dist/engine/bin/soleri-engine.js +13 -2
  59. package/dist/engine/bin/soleri-engine.js.map +1 -1
  60. package/dist/engine/index.d.ts +2 -0
  61. package/dist/engine/index.d.ts.map +1 -1
  62. package/dist/engine/index.js +1 -0
  63. package/dist/engine/index.js.map +1 -1
  64. package/dist/engine/module-manifest.d.ts +28 -0
  65. package/dist/engine/module-manifest.d.ts.map +1 -0
  66. package/dist/engine/module-manifest.js +85 -0
  67. package/dist/engine/module-manifest.js.map +1 -0
  68. package/dist/engine/register-engine.d.ts +19 -0
  69. package/dist/engine/register-engine.d.ts.map +1 -1
  70. package/dist/engine/register-engine.js +15 -2
  71. package/dist/engine/register-engine.js.map +1 -1
  72. package/dist/events/event-bus.d.ts +30 -0
  73. package/dist/events/event-bus.d.ts.map +1 -0
  74. package/dist/events/event-bus.js +51 -0
  75. package/dist/events/event-bus.js.map +1 -0
  76. package/dist/flows/chain-runner.d.ts +46 -0
  77. package/dist/flows/chain-runner.d.ts.map +1 -0
  78. package/dist/flows/chain-runner.js +271 -0
  79. package/dist/flows/chain-runner.js.map +1 -0
  80. package/dist/flows/chain-types.d.ts +103 -0
  81. package/dist/flows/chain-types.d.ts.map +1 -0
  82. package/dist/flows/chain-types.js +23 -0
  83. package/dist/flows/chain-types.js.map +1 -0
  84. package/dist/health/doctor-checks.d.ts +15 -0
  85. package/dist/health/doctor-checks.d.ts.map +1 -0
  86. package/dist/health/doctor-checks.js +98 -0
  87. package/dist/health/doctor-checks.js.map +1 -0
  88. package/dist/index.d.ts +0 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +0 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/intake/content-classifier.d.ts.map +1 -1
  93. package/dist/intake/content-classifier.js +0 -2
  94. package/dist/intake/content-classifier.js.map +1 -1
  95. package/dist/intake/text-ingester.d.ts +52 -0
  96. package/dist/intake/text-ingester.d.ts.map +1 -0
  97. package/dist/intake/text-ingester.js +181 -0
  98. package/dist/intake/text-ingester.js.map +1 -0
  99. package/dist/llm/llm-client.d.ts.map +1 -1
  100. package/dist/llm/llm-client.js +45 -5
  101. package/dist/llm/llm-client.js.map +1 -1
  102. package/dist/llm/oauth-discovery.d.ts +18 -0
  103. package/dist/llm/oauth-discovery.d.ts.map +1 -0
  104. package/dist/llm/oauth-discovery.js +130 -0
  105. package/dist/llm/oauth-discovery.js.map +1 -0
  106. package/dist/llm/types.d.ts +4 -2
  107. package/dist/llm/types.d.ts.map +1 -1
  108. package/dist/packs/pack-installer.d.ts +2 -1
  109. package/dist/packs/pack-installer.d.ts.map +1 -1
  110. package/dist/packs/pack-installer.js +10 -1
  111. package/dist/packs/pack-installer.js.map +1 -1
  112. package/dist/persistence/index.d.ts +0 -1
  113. package/dist/persistence/index.d.ts.map +1 -1
  114. package/dist/persistence/index.js +0 -1
  115. package/dist/persistence/index.js.map +1 -1
  116. package/dist/persistence/types.d.ts +2 -6
  117. package/dist/persistence/types.d.ts.map +1 -1
  118. package/dist/planning/evidence-collector.d.ts +41 -0
  119. package/dist/planning/evidence-collector.d.ts.map +1 -0
  120. package/dist/planning/evidence-collector.js +194 -0
  121. package/dist/planning/evidence-collector.js.map +1 -0
  122. package/dist/planning/planner.d.ts +4 -0
  123. package/dist/planning/planner.d.ts.map +1 -1
  124. package/dist/planning/planner.js +11 -0
  125. package/dist/planning/planner.js.map +1 -1
  126. package/dist/plugins/index.d.ts +4 -0
  127. package/dist/plugins/index.d.ts.map +1 -1
  128. package/dist/plugins/index.js +4 -0
  129. package/dist/plugins/index.js.map +1 -1
  130. package/dist/plugins/plugin-registry.d.ts +4 -0
  131. package/dist/plugins/plugin-registry.d.ts.map +1 -1
  132. package/dist/plugins/plugin-registry.js +4 -0
  133. package/dist/plugins/plugin-registry.js.map +1 -1
  134. package/dist/plugins/types.d.ts +32 -27
  135. package/dist/plugins/types.d.ts.map +1 -1
  136. package/dist/plugins/types.js +6 -3
  137. package/dist/plugins/types.js.map +1 -1
  138. package/dist/queue/job-queue.d.ts +92 -0
  139. package/dist/queue/job-queue.d.ts.map +1 -0
  140. package/dist/queue/job-queue.js +180 -0
  141. package/dist/queue/job-queue.js.map +1 -0
  142. package/dist/queue/pipeline-runner.d.ts +62 -0
  143. package/dist/queue/pipeline-runner.d.ts.map +1 -0
  144. package/dist/queue/pipeline-runner.js +126 -0
  145. package/dist/queue/pipeline-runner.js.map +1 -0
  146. package/dist/runtime/admin-setup-ops.d.ts +20 -0
  147. package/dist/runtime/admin-setup-ops.d.ts.map +1 -0
  148. package/dist/runtime/admin-setup-ops.js +583 -0
  149. package/dist/runtime/admin-setup-ops.js.map +1 -0
  150. package/dist/runtime/chain-ops.d.ts +9 -0
  151. package/dist/runtime/chain-ops.d.ts.map +1 -0
  152. package/dist/runtime/chain-ops.js +107 -0
  153. package/dist/runtime/chain-ops.js.map +1 -0
  154. package/dist/runtime/claude-md-helpers.d.ts +56 -0
  155. package/dist/runtime/claude-md-helpers.d.ts.map +1 -0
  156. package/dist/runtime/claude-md-helpers.js +160 -0
  157. package/dist/runtime/claude-md-helpers.js.map +1 -0
  158. package/dist/runtime/curator-extra-ops.d.ts +3 -2
  159. package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
  160. package/dist/runtime/curator-extra-ops.js +81 -3
  161. package/dist/runtime/curator-extra-ops.js.map +1 -1
  162. package/dist/runtime/facades/admin-facade.d.ts.map +1 -1
  163. package/dist/runtime/facades/admin-facade.js +5 -2
  164. package/dist/runtime/facades/admin-facade.js.map +1 -1
  165. package/dist/runtime/facades/agency-facade.d.ts.map +1 -1
  166. package/dist/runtime/facades/agency-facade.js +64 -0
  167. package/dist/runtime/facades/agency-facade.js.map +1 -1
  168. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  169. package/dist/runtime/facades/brain-facade.js +122 -1
  170. package/dist/runtime/facades/brain-facade.js.map +1 -1
  171. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  172. package/dist/runtime/facades/control-facade.js +42 -0
  173. package/dist/runtime/facades/control-facade.js.map +1 -1
  174. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  175. package/dist/runtime/facades/memory-facade.js +20 -2
  176. package/dist/runtime/facades/memory-facade.js.map +1 -1
  177. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  178. package/dist/runtime/facades/plan-facade.js +2 -0
  179. package/dist/runtime/facades/plan-facade.js.map +1 -1
  180. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  181. package/dist/runtime/facades/vault-facade.js +25 -5
  182. package/dist/runtime/facades/vault-facade.js.map +1 -1
  183. package/dist/runtime/intake-ops.d.ts +7 -5
  184. package/dist/runtime/intake-ops.d.ts.map +1 -1
  185. package/dist/runtime/intake-ops.js +98 -5
  186. package/dist/runtime/intake-ops.js.map +1 -1
  187. package/dist/runtime/memory-extra-ops.d.ts +6 -3
  188. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  189. package/dist/runtime/memory-extra-ops.js +292 -4
  190. package/dist/runtime/memory-extra-ops.js.map +1 -1
  191. package/dist/runtime/pack-ops.d.ts +3 -0
  192. package/dist/runtime/pack-ops.d.ts.map +1 -1
  193. package/dist/runtime/pack-ops.js +18 -1
  194. package/dist/runtime/pack-ops.js.map +1 -1
  195. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  196. package/dist/runtime/planning-extra-ops.js +85 -0
  197. package/dist/runtime/planning-extra-ops.js.map +1 -1
  198. package/dist/runtime/playbook-ops.js +1 -1
  199. package/dist/runtime/playbook-ops.js.map +1 -1
  200. package/dist/runtime/plugin-ops.d.ts.map +1 -1
  201. package/dist/runtime/plugin-ops.js +3 -0
  202. package/dist/runtime/plugin-ops.js.map +1 -1
  203. package/dist/runtime/runtime.d.ts.map +1 -1
  204. package/dist/runtime/runtime.js +143 -2
  205. package/dist/runtime/runtime.js.map +1 -1
  206. package/dist/runtime/session-briefing.d.ts +23 -0
  207. package/dist/runtime/session-briefing.d.ts.map +1 -0
  208. package/dist/runtime/session-briefing.js +154 -0
  209. package/dist/runtime/session-briefing.js.map +1 -0
  210. package/dist/runtime/types.d.ts +23 -0
  211. package/dist/runtime/types.d.ts.map +1 -1
  212. package/dist/runtime/vault-linking-ops.d.ts.map +1 -1
  213. package/dist/runtime/vault-linking-ops.js +3 -7
  214. package/dist/runtime/vault-linking-ops.js.map +1 -1
  215. package/dist/vault/vault.d.ts +34 -0
  216. package/dist/vault/vault.d.ts.map +1 -1
  217. package/dist/vault/vault.js +89 -3
  218. package/dist/vault/vault.js.map +1 -1
  219. package/package.json +6 -4
  220. package/src/__tests__/admin-setup-ops.test.ts +355 -0
  221. package/src/__tests__/async-infrastructure.test.ts +307 -0
  222. package/src/__tests__/cognee-client-gaps.test.ts +6 -2
  223. package/src/__tests__/cognee-hybrid-search.test.ts +49 -35
  224. package/src/__tests__/cognee-sync-manager-deep.test.ts +89 -65
  225. package/src/__tests__/curator-extra-ops.test.ts +6 -2
  226. package/src/__tests__/curator-pipeline-e2e.test.ts +545 -0
  227. package/src/__tests__/memory-extra-ops.test.ts +2 -2
  228. package/src/__tests__/module-manifest-drift.test.ts +59 -0
  229. package/src/__tests__/planning-extra-ops.test.ts +2 -2
  230. package/src/__tests__/second-brain-features.test.ts +583 -0
  231. package/src/agency/agency-manager.ts +217 -9
  232. package/src/agency/default-rules.ts +83 -0
  233. package/src/agency/types.ts +61 -0
  234. package/src/brain/brain.ts +110 -8
  235. package/src/brain/knowledge-synthesizer.ts +216 -0
  236. package/src/brain/learning-radar.ts +340 -0
  237. package/src/brain/types.ts +16 -0
  238. package/src/context/context-engine.ts +114 -15
  239. package/src/context/types.ts +5 -0
  240. package/src/control/intent-router.ts +107 -0
  241. package/src/control/types.ts +10 -0
  242. package/src/curator/classifier.ts +86 -0
  243. package/src/curator/quality-gate.ts +127 -0
  244. package/src/domain-packs/index.ts +0 -6
  245. package/src/domain-packs/loader.ts +25 -5
  246. package/src/domain-packs/pack-runtime.ts +6 -6
  247. package/src/domain-packs/types.ts +8 -2
  248. package/src/engine/bin/soleri-engine.ts +18 -2
  249. package/src/engine/index.ts +2 -0
  250. package/src/engine/module-manifest.ts +99 -0
  251. package/src/engine/register-engine.ts +21 -2
  252. package/src/events/event-bus.ts +58 -0
  253. package/src/flows/chain-runner.ts +369 -0
  254. package/src/flows/chain-types.ts +57 -0
  255. package/src/index.ts +0 -1
  256. package/src/intake/content-classifier.ts +0 -2
  257. package/src/intake/text-ingester.ts +234 -0
  258. package/src/llm/llm-client.ts +50 -7
  259. package/src/llm/oauth-discovery.ts +151 -0
  260. package/src/llm/types.ts +4 -2
  261. package/src/packs/pack-installer.ts +16 -1
  262. package/src/persistence/index.ts +0 -1
  263. package/src/persistence/types.ts +2 -6
  264. package/src/planning/evidence-collector.ts +247 -0
  265. package/src/planning/planner.ts +11 -0
  266. package/src/plugins/index.ts +4 -0
  267. package/src/plugins/plugin-registry.ts +6 -1
  268. package/src/plugins/types.ts +10 -5
  269. package/src/queue/job-queue.ts +281 -0
  270. package/src/queue/pipeline-runner.ts +149 -0
  271. package/src/runtime/admin-setup-ops.ts +664 -0
  272. package/src/runtime/chain-ops.ts +121 -0
  273. package/src/runtime/claude-md-helpers.ts +218 -0
  274. package/src/runtime/curator-extra-ops.ts +86 -3
  275. package/src/runtime/facades/admin-facade.ts +5 -2
  276. package/src/runtime/facades/agency-facade.ts +68 -0
  277. package/src/runtime/facades/brain-facade.ts +142 -1
  278. package/src/runtime/facades/control-facade.ts +45 -0
  279. package/src/runtime/facades/memory-facade.ts +20 -2
  280. package/src/runtime/facades/plan-facade.ts +2 -0
  281. package/src/runtime/facades/vault-facade.ts +28 -5
  282. package/src/runtime/intake-ops.ts +107 -5
  283. package/src/runtime/memory-extra-ops.ts +312 -4
  284. package/src/runtime/pack-ops.ts +26 -1
  285. package/src/runtime/planning-extra-ops.ts +94 -0
  286. package/src/runtime/playbook-ops.ts +1 -1
  287. package/src/runtime/plugin-ops.ts +3 -0
  288. package/src/runtime/runtime.ts +138 -2
  289. package/src/runtime/session-briefing.ts +175 -0
  290. package/src/runtime/types.ts +23 -0
  291. package/src/runtime/vault-linking-ops.ts +3 -7
  292. package/src/vault/vault.ts +105 -4
  293. package/src/__tests__/postgres-provider.test.ts +0 -116
  294. package/src/persistence/postgres-provider.ts +0 -310
@@ -37,15 +37,19 @@ function makeEntry(overrides: Partial<IntelligenceEntry> = {}): IntelligenceEntr
37
37
  /**
38
38
  * Create a mock CogneeClient with controllable availability and behavior.
39
39
  */
40
- function makeMockCognee(overrides: {
41
- available?: boolean;
42
- addResult?: { added: number };
43
- addShouldFail?: boolean;
44
- deleteResult?: { deleted: number };
45
- } = {}): CogneeClient {
40
+ function makeMockCognee(
41
+ overrides: {
42
+ available?: boolean;
43
+ addResult?: { added: number };
44
+ addShouldFail?: boolean;
45
+ deleteResult?: { deleted: number };
46
+ } = {},
47
+ ): CogneeClient {
46
48
  const available = overrides.available ?? true;
47
49
  const client = {
48
- get isAvailable() { return available; },
50
+ get isAvailable() {
51
+ return available;
52
+ },
49
53
  healthCheck: vi.fn().mockResolvedValue({ available, url: 'http://mock:8000', latencyMs: 1 }),
50
54
  addEntries: vi.fn().mockImplementation(async () => {
51
55
  if (overrides.addShouldFail) throw new Error('Cognee ingest failed');
@@ -102,25 +106,19 @@ describe('CogneeSyncManager — deep coverage', () => {
102
106
  it('should change when title changes', () => {
103
107
  const base = makeEntry({ id: 'same-id' });
104
108
  const modified = { ...base, title: 'Different Title' };
105
- expect(CogneeSyncManager.contentHash(base)).not.toBe(
106
- CogneeSyncManager.contentHash(modified),
107
- );
109
+ expect(CogneeSyncManager.contentHash(base)).not.toBe(CogneeSyncManager.contentHash(modified));
108
110
  });
109
111
 
110
112
  it('should change when description changes', () => {
111
113
  const base = makeEntry({ id: 'same-id' });
112
114
  const modified = { ...base, description: 'Updated description' };
113
- expect(CogneeSyncManager.contentHash(base)).not.toBe(
114
- CogneeSyncManager.contentHash(modified),
115
- );
115
+ expect(CogneeSyncManager.contentHash(base)).not.toBe(CogneeSyncManager.contentHash(modified));
116
116
  });
117
117
 
118
118
  it('should change when tags change', () => {
119
119
  const base = makeEntry({ id: 'same-id', tags: ['a'] });
120
120
  const modified = { ...base, tags: ['a', 'b'] };
121
- expect(CogneeSyncManager.contentHash(base)).not.toBe(
122
- CogneeSyncManager.contentHash(modified),
123
- );
121
+ expect(CogneeSyncManager.contentHash(base)).not.toBe(CogneeSyncManager.contentHash(modified));
124
122
  });
125
123
 
126
124
  it('should NOT change when only updatedAt changes (not in hash)', () => {
@@ -147,18 +145,22 @@ describe('CogneeSyncManager — deep coverage', () => {
147
145
  const syncMgr = runtime.syncManager;
148
146
  const entry = makeEntry({ id: 'hash-test' });
149
147
  syncMgr.enqueue('ingest', entry.id, entry);
150
- const row = runtime.vault.getProvider().get<{ content_hash: string }>(
151
- `SELECT content_hash FROM cognee_sync_queue WHERE entry_id = 'hash-test'`,
152
- );
148
+ const row = runtime.vault
149
+ .getProvider()
150
+ .get<{ content_hash: string }>(
151
+ `SELECT content_hash FROM cognee_sync_queue WHERE entry_id = 'hash-test'`,
152
+ );
153
153
  expect(row?.content_hash).toMatch(/^[0-9a-f]{16}$/);
154
154
  });
155
155
 
156
156
  it('should store null hash when entry is not provided (delete op)', () => {
157
157
  const syncMgr = runtime.syncManager;
158
158
  syncMgr.enqueue('delete', 'deleted-entry');
159
- const row = runtime.vault.getProvider().get<{ content_hash: string | null }>(
160
- `SELECT content_hash FROM cognee_sync_queue WHERE entry_id = 'deleted-entry'`,
161
- );
159
+ const row = runtime.vault
160
+ .getProvider()
161
+ .get<{ content_hash: string | null }>(
162
+ `SELECT content_hash FROM cognee_sync_queue WHERE entry_id = 'deleted-entry'`,
163
+ );
162
164
  expect(row?.content_hash).toBeNull();
163
165
  });
164
166
  });
@@ -186,10 +188,12 @@ describe('CogneeSyncManager — deep coverage', () => {
186
188
  expect(mockCognee.addEntries).toHaveBeenCalledTimes(1);
187
189
 
188
190
  // Verify ingested hash was updated on the entries table
189
- const row = runtime.vault.getProvider().get<{ cognee_ingested_hash: string }>(
190
- `SELECT cognee_ingested_hash FROM entries WHERE id = @id`,
191
- { id: entry.id },
192
- );
191
+ const row = runtime.vault
192
+ .getProvider()
193
+ .get<{ cognee_ingested_hash: string }>(
194
+ `SELECT cognee_ingested_hash FROM entries WHERE id = @id`,
195
+ { id: entry.id },
196
+ );
193
197
  expect(row?.cognee_ingested_hash).toMatch(/^[0-9a-f]{16}$/);
194
198
 
195
199
  // Verify queue item is marked completed
@@ -214,10 +218,12 @@ describe('CogneeSyncManager — deep coverage', () => {
214
218
  expect(processed).toBe(1);
215
219
 
216
220
  // Verify ingested hash was cleared
217
- const row = runtime.vault.getProvider().get<{ cognee_ingested_hash: string | null }>(
218
- `SELECT cognee_ingested_hash FROM entries WHERE id = @id`,
219
- { id: entry.id },
220
- );
221
+ const row = runtime.vault
222
+ .getProvider()
223
+ .get<{ cognee_ingested_hash: string | null }>(
224
+ `SELECT cognee_ingested_hash FROM entries WHERE id = @id`,
225
+ { id: entry.id },
226
+ );
221
227
  expect(row?.cognee_ingested_hash).toBeNull();
222
228
  });
223
229
 
@@ -321,9 +327,11 @@ describe('CogneeSyncManager — deep coverage', () => {
321
327
  await syncMgr.drain();
322
328
  await syncMgr.drain();
323
329
 
324
- const row = runtime.vault.getProvider().get<{ error: string; status: string }>(
325
- `SELECT error, status FROM cognee_sync_queue WHERE entry_id = 'error-msg-test' AND dataset = 'test-dataset'`,
326
- );
330
+ const row = runtime.vault
331
+ .getProvider()
332
+ .get<{ error: string; status: string }>(
333
+ `SELECT error, status FROM cognee_sync_queue WHERE entry_id = 'error-msg-test' AND dataset = 'test-dataset'`,
334
+ );
327
335
  expect(row?.status).toBe('failed');
328
336
  expect(row?.error).toContain('Cognee ingest failed');
329
337
  });
@@ -336,13 +344,15 @@ describe('CogneeSyncManager — deep coverage', () => {
336
344
  // Mock: fail only for bad-entry
337
345
  let callCount = 0;
338
346
  const mockCognee = makeMockCognee({ available: true });
339
- (mockCognee.addEntries as ReturnType<typeof vi.fn>).mockImplementation(async (entries: IntelligenceEntry[]) => {
340
- callCount++;
341
- if (entries.some(e => e.id === 'bad-entry')) {
342
- throw new Error('Selective failure');
343
- }
344
- return { added: entries.length };
345
- });
347
+ (mockCognee.addEntries as ReturnType<typeof vi.fn>).mockImplementation(
348
+ async (entries: IntelligenceEntry[]) => {
349
+ callCount++;
350
+ if (entries.some((e) => e.id === 'bad-entry')) {
351
+ throw new Error('Selective failure');
352
+ }
353
+ return { added: entries.length };
354
+ },
355
+ );
346
356
 
347
357
  const syncMgr = new CogneeSyncManager(
348
358
  runtime.vault.getProvider(),
@@ -379,10 +389,11 @@ describe('CogneeSyncManager — deep coverage', () => {
379
389
  runtime.vault.seed([entry]);
380
390
 
381
391
  // Simulate a previously-synced entry by setting a hash
382
- runtime.vault.getProvider().run(
383
- `UPDATE entries SET cognee_ingested_hash = 'old-hash-value-xx' WHERE id = @id`,
384
- { id: entry.id },
385
- );
392
+ runtime.vault
393
+ .getProvider()
394
+ .run(`UPDATE entries SET cognee_ingested_hash = 'old-hash-value-xx' WHERE id = @id`, {
395
+ id: entry.id,
396
+ });
386
397
 
387
398
  // Clear queue
388
399
  runtime.vault.getProvider().run('DELETE FROM cognee_sync_queue');
@@ -399,10 +410,12 @@ describe('CogneeSyncManager — deep coverage', () => {
399
410
 
400
411
  // Set the correct hash
401
412
  const correctHash = CogneeSyncManager.contentHash(entry);
402
- runtime.vault.getProvider().run(
403
- `UPDATE entries SET cognee_ingested_hash = @hash WHERE id = @id`,
404
- { hash: correctHash, id: entry.id },
405
- );
413
+ runtime.vault
414
+ .getProvider()
415
+ .run(`UPDATE entries SET cognee_ingested_hash = @hash WHERE id = @id`, {
416
+ hash: correctHash,
417
+ id: entry.id,
418
+ });
406
419
 
407
420
  // Clear queue
408
421
  runtime.vault.getProvider().run('DELETE FROM cognee_sync_queue');
@@ -423,9 +436,11 @@ describe('CogneeSyncManager — deep coverage', () => {
423
436
  syncMgr.reconcile();
424
437
  syncMgr.reconcile(); // Second reconcile should not create duplicates
425
438
 
426
- const rows = runtime.vault.getProvider().all<{ id: number }>(
427
- `SELECT id FROM cognee_sync_queue WHERE entry_id = 'no-dupes' AND status = 'pending'`,
428
- );
439
+ const rows = runtime.vault
440
+ .getProvider()
441
+ .all<{ id: number }>(
442
+ `SELECT id FROM cognee_sync_queue WHERE entry_id = 'no-dupes' AND status = 'pending'`,
443
+ );
429
444
  expect(rows.length).toBe(1);
430
445
  });
431
446
 
@@ -437,22 +452,25 @@ describe('CogneeSyncManager — deep coverage', () => {
437
452
  // Entry 2: previously synced (stale hash)
438
453
  const entry2 = makeEntry({ id: 'stale-hash-entry' });
439
454
  runtime.vault.seed([entry2]);
440
- runtime.vault.getProvider().run(
441
- `UPDATE entries SET cognee_ingested_hash = 'stale-value-xxxxx' WHERE id = @id`,
442
- { id: entry2.id },
443
- );
455
+ runtime.vault
456
+ .getProvider()
457
+ .run(`UPDATE entries SET cognee_ingested_hash = 'stale-value-xxxxx' WHERE id = @id`, {
458
+ id: entry2.id,
459
+ });
444
460
 
445
461
  // Clear queue
446
462
  runtime.vault.getProvider().run('DELETE FROM cognee_sync_queue');
447
463
 
448
464
  runtime.syncManager.reconcile();
449
465
 
450
- const row1 = runtime.vault.getProvider().get<{ op: string }>(
451
- `SELECT op FROM cognee_sync_queue WHERE entry_id = 'null-hash-entry'`,
452
- );
453
- const row2 = runtime.vault.getProvider().get<{ op: string }>(
454
- `SELECT op FROM cognee_sync_queue WHERE entry_id = 'stale-hash-entry'`,
455
- );
466
+ const row1 = runtime.vault
467
+ .getProvider()
468
+ .get<{ op: string }>(`SELECT op FROM cognee_sync_queue WHERE entry_id = 'null-hash-entry'`);
469
+ const row2 = runtime.vault
470
+ .getProvider()
471
+ .get<{ op: string }>(
472
+ `SELECT op FROM cognee_sync_queue WHERE entry_id = 'stale-hash-entry'`,
473
+ );
456
474
 
457
475
  expect(row1?.op).toBe('ingest');
458
476
  expect(row2?.op).toBe('update');
@@ -469,8 +487,12 @@ describe('CogneeSyncManager — deep coverage', () => {
469
487
  // Start with unavailable Cognee
470
488
  let isAvailable = false;
471
489
  const mockCognee = {
472
- get isAvailable() { return isAvailable; },
473
- healthCheck: vi.fn().mockImplementation(async () => ({ available: isAvailable, url: 'mock', latencyMs: 1 })),
490
+ get isAvailable() {
491
+ return isAvailable;
492
+ },
493
+ healthCheck: vi
494
+ .fn()
495
+ .mockImplementation(async () => ({ available: isAvailable, url: 'mock', latencyMs: 1 })),
474
496
  addEntries: vi.fn().mockResolvedValue({ added: 1 }),
475
497
  deleteEntries: vi.fn().mockResolvedValue({ deleted: 1 }),
476
498
  cognify: vi.fn().mockResolvedValue({ status: 'ok' }),
@@ -502,9 +524,11 @@ describe('CogneeSyncManager — deep coverage', () => {
502
524
  });
503
525
 
504
526
  it('should NOT drain when Cognee stays available (no flip)', async () => {
505
- let isAvailable = true;
527
+ const isAvailable = true;
506
528
  const mockCognee = {
507
- get isAvailable() { return isAvailable; },
529
+ get isAvailable() {
530
+ return isAvailable;
531
+ },
508
532
  healthCheck: vi.fn().mockResolvedValue({ available: true, url: 'mock', latencyMs: 1 }),
509
533
  addEntries: vi.fn().mockResolvedValue({ added: 1 }),
510
534
  deleteEntries: vi.fn(),
@@ -26,9 +26,9 @@ describe('createCuratorExtraOps', () => {
26
26
  ops = createCuratorExtraOps(runtime);
27
27
  }
28
28
 
29
- it('should return 5 ops', () => {
29
+ it('should return 9 ops', () => {
30
30
  setup();
31
- expect(ops).toHaveLength(5);
31
+ expect(ops).toHaveLength(9);
32
32
  const names = ops.map((o) => o.name);
33
33
  expect(names).toEqual([
34
34
  'curator_entry_history',
@@ -36,6 +36,10 @@ describe('createCuratorExtraOps', () => {
36
36
  'curator_queue_stats',
37
37
  'curator_enrich',
38
38
  'curator_hybrid_contradictions',
39
+ 'curator_pipeline_status',
40
+ 'curator_enqueue_pipeline',
41
+ 'curator_schedule_start',
42
+ 'curator_schedule_stop',
39
43
  ]);
40
44
  });
41
45