@soleri/core 2.11.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/data/flows/build.flow.yaml +128 -0
  2. package/data/flows/deliver.flow.yaml +110 -0
  3. package/data/flows/design.flow.yaml +108 -0
  4. package/data/flows/enhance.flow.yaml +90 -0
  5. package/data/flows/explore.flow.yaml +84 -0
  6. package/data/flows/fix.flow.yaml +90 -0
  7. package/data/flows/plan.flow.yaml +87 -0
  8. package/data/flows/review.flow.yaml +90 -0
  9. package/dist/brain/brain.d.ts.map +1 -1
  10. package/dist/brain/brain.js +10 -0
  11. package/dist/brain/brain.js.map +1 -1
  12. package/dist/brain/intelligence.d.ts.map +1 -1
  13. package/dist/brain/intelligence.js +16 -2
  14. package/dist/brain/intelligence.js.map +1 -1
  15. package/dist/capabilities/chain-mapping.d.ts +21 -0
  16. package/dist/capabilities/chain-mapping.d.ts.map +1 -0
  17. package/dist/capabilities/chain-mapping.js +86 -0
  18. package/dist/capabilities/chain-mapping.js.map +1 -0
  19. package/dist/capabilities/index.d.ts +10 -0
  20. package/dist/capabilities/index.d.ts.map +1 -0
  21. package/dist/capabilities/index.js +8 -0
  22. package/dist/capabilities/index.js.map +1 -0
  23. package/dist/capabilities/registry.d.ts +95 -0
  24. package/dist/capabilities/registry.d.ts.map +1 -0
  25. package/dist/capabilities/registry.js +227 -0
  26. package/dist/capabilities/registry.js.map +1 -0
  27. package/dist/capabilities/types.d.ts +106 -0
  28. package/dist/capabilities/types.d.ts.map +1 -0
  29. package/dist/capabilities/types.js +12 -0
  30. package/dist/capabilities/types.js.map +1 -0
  31. package/dist/control/intent-router.d.ts.map +1 -1
  32. package/dist/control/intent-router.js +58 -2
  33. package/dist/control/intent-router.js.map +1 -1
  34. package/dist/domain-packs/index.d.ts +8 -0
  35. package/dist/domain-packs/index.d.ts.map +1 -0
  36. package/dist/domain-packs/index.js +8 -0
  37. package/dist/domain-packs/index.js.map +1 -0
  38. package/dist/domain-packs/inject-rules.d.ts +24 -0
  39. package/dist/domain-packs/inject-rules.d.ts.map +1 -0
  40. package/dist/domain-packs/inject-rules.js +65 -0
  41. package/dist/domain-packs/inject-rules.js.map +1 -0
  42. package/dist/domain-packs/knowledge-installer.d.ts +27 -0
  43. package/dist/domain-packs/knowledge-installer.d.ts.map +1 -0
  44. package/dist/domain-packs/knowledge-installer.js +89 -0
  45. package/dist/domain-packs/knowledge-installer.js.map +1 -0
  46. package/dist/domain-packs/loader.d.ts +28 -0
  47. package/dist/domain-packs/loader.d.ts.map +1 -0
  48. package/dist/domain-packs/loader.js +105 -0
  49. package/dist/domain-packs/loader.js.map +1 -0
  50. package/dist/domain-packs/pack-runtime.d.ts +80 -0
  51. package/dist/domain-packs/pack-runtime.d.ts.map +1 -0
  52. package/dist/domain-packs/pack-runtime.js +36 -0
  53. package/dist/domain-packs/pack-runtime.js.map +1 -0
  54. package/dist/domain-packs/skills-installer.d.ts +21 -0
  55. package/dist/domain-packs/skills-installer.d.ts.map +1 -0
  56. package/dist/domain-packs/skills-installer.js +38 -0
  57. package/dist/domain-packs/skills-installer.js.map +1 -0
  58. package/dist/domain-packs/token-resolver.d.ts +37 -0
  59. package/dist/domain-packs/token-resolver.d.ts.map +1 -0
  60. package/dist/domain-packs/token-resolver.js +109 -0
  61. package/dist/domain-packs/token-resolver.js.map +1 -0
  62. package/dist/domain-packs/types.d.ts +91 -0
  63. package/dist/domain-packs/types.d.ts.map +1 -0
  64. package/dist/domain-packs/types.js +122 -0
  65. package/dist/domain-packs/types.js.map +1 -0
  66. package/dist/engine/bin/soleri-engine.d.ts +12 -0
  67. package/dist/engine/bin/soleri-engine.d.ts.map +1 -0
  68. package/dist/engine/bin/soleri-engine.js +183 -0
  69. package/dist/engine/bin/soleri-engine.js.map +1 -0
  70. package/dist/engine/core-ops.d.ts +27 -0
  71. package/dist/engine/core-ops.d.ts.map +1 -0
  72. package/dist/engine/core-ops.js +159 -0
  73. package/dist/engine/core-ops.js.map +1 -0
  74. package/dist/engine/index.d.ts +19 -0
  75. package/dist/engine/index.d.ts.map +1 -0
  76. package/dist/engine/index.js +17 -0
  77. package/dist/engine/index.js.map +1 -0
  78. package/dist/engine/register-engine.d.ts +54 -0
  79. package/dist/engine/register-engine.d.ts.map +1 -0
  80. package/dist/engine/register-engine.js +270 -0
  81. package/dist/engine/register-engine.js.map +1 -0
  82. package/dist/engine/test-helpers.d.ts +30 -0
  83. package/dist/engine/test-helpers.d.ts.map +1 -0
  84. package/dist/engine/test-helpers.js +59 -0
  85. package/dist/engine/test-helpers.js.map +1 -0
  86. package/dist/flows/context-router.d.ts +39 -0
  87. package/dist/flows/context-router.d.ts.map +1 -0
  88. package/dist/flows/context-router.js +206 -0
  89. package/dist/flows/context-router.js.map +1 -0
  90. package/dist/flows/dispatch-registry.d.ts +24 -0
  91. package/dist/flows/dispatch-registry.d.ts.map +1 -0
  92. package/dist/flows/dispatch-registry.js +70 -0
  93. package/dist/flows/dispatch-registry.js.map +1 -0
  94. package/dist/flows/epilogue.d.ts +24 -0
  95. package/dist/flows/epilogue.d.ts.map +1 -0
  96. package/dist/flows/epilogue.js +52 -0
  97. package/dist/flows/epilogue.js.map +1 -0
  98. package/dist/flows/executor.d.ts +25 -0
  99. package/dist/flows/executor.d.ts.map +1 -0
  100. package/dist/flows/executor.js +153 -0
  101. package/dist/flows/executor.js.map +1 -0
  102. package/dist/flows/gate-evaluator.d.ts +26 -0
  103. package/dist/flows/gate-evaluator.d.ts.map +1 -0
  104. package/dist/flows/gate-evaluator.js +162 -0
  105. package/dist/flows/gate-evaluator.js.map +1 -0
  106. package/dist/flows/index.d.ts +14 -0
  107. package/dist/flows/index.d.ts.map +1 -0
  108. package/dist/flows/index.js +20 -0
  109. package/dist/flows/index.js.map +1 -0
  110. package/dist/flows/loader.d.ts +17 -0
  111. package/dist/flows/loader.d.ts.map +1 -0
  112. package/dist/flows/loader.js +61 -0
  113. package/dist/flows/loader.js.map +1 -0
  114. package/dist/flows/plan-builder.d.ts +40 -0
  115. package/dist/flows/plan-builder.d.ts.map +1 -0
  116. package/dist/flows/plan-builder.js +213 -0
  117. package/dist/flows/plan-builder.js.map +1 -0
  118. package/dist/flows/probes.d.ts +11 -0
  119. package/dist/flows/probes.d.ts.map +1 -0
  120. package/dist/flows/probes.js +62 -0
  121. package/dist/flows/probes.js.map +1 -0
  122. package/dist/flows/types.d.ts +950 -0
  123. package/dist/flows/types.d.ts.map +1 -0
  124. package/dist/flows/types.js +105 -0
  125. package/dist/flows/types.js.map +1 -0
  126. package/dist/index.d.ts +11 -1
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +10 -1
  129. package/dist/index.js.map +1 -1
  130. package/dist/intelligence/loader.d.ts +19 -0
  131. package/dist/intelligence/loader.d.ts.map +1 -1
  132. package/dist/intelligence/loader.js +86 -5
  133. package/dist/intelligence/loader.js.map +1 -1
  134. package/dist/intelligence/types.d.ts +1 -0
  135. package/dist/intelligence/types.d.ts.map +1 -1
  136. package/dist/packs/types.d.ts +58 -19
  137. package/dist/packs/types.d.ts.map +1 -1
  138. package/dist/packs/types.js +14 -0
  139. package/dist/packs/types.js.map +1 -1
  140. package/dist/playbooks/generic/onboarding.d.ts +9 -0
  141. package/dist/playbooks/generic/onboarding.d.ts.map +1 -0
  142. package/dist/playbooks/generic/onboarding.js +74 -0
  143. package/dist/playbooks/generic/onboarding.js.map +1 -0
  144. package/dist/playbooks/playbook-registry.d.ts.map +1 -1
  145. package/dist/playbooks/playbook-registry.js +2 -0
  146. package/dist/playbooks/playbook-registry.js.map +1 -1
  147. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  148. package/dist/runtime/admin-extra-ops.js +15 -9
  149. package/dist/runtime/admin-extra-ops.js.map +1 -1
  150. package/dist/runtime/admin-ops.js +4 -4
  151. package/dist/runtime/admin-ops.js.map +1 -1
  152. package/dist/runtime/capture-ops.d.ts.map +1 -1
  153. package/dist/runtime/capture-ops.js +33 -1
  154. package/dist/runtime/capture-ops.js.map +1 -1
  155. package/dist/runtime/domain-ops.d.ts +21 -5
  156. package/dist/runtime/domain-ops.d.ts.map +1 -1
  157. package/dist/runtime/domain-ops.js +85 -8
  158. package/dist/runtime/domain-ops.js.map +1 -1
  159. package/dist/runtime/facades/cognee-facade.d.ts.map +1 -1
  160. package/dist/runtime/facades/cognee-facade.js +3 -1
  161. package/dist/runtime/facades/cognee-facade.js.map +1 -1
  162. package/dist/runtime/facades/index.d.ts.map +1 -1
  163. package/dist/runtime/facades/index.js +10 -6
  164. package/dist/runtime/facades/index.js.map +1 -1
  165. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  166. package/dist/runtime/facades/vault-facade.js +2 -0
  167. package/dist/runtime/facades/vault-facade.js.map +1 -1
  168. package/dist/runtime/orchestrate-ops.d.ts +8 -7
  169. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  170. package/dist/runtime/orchestrate-ops.js +227 -58
  171. package/dist/runtime/orchestrate-ops.js.map +1 -1
  172. package/dist/runtime/runtime.d.ts.map +1 -1
  173. package/dist/runtime/runtime.js +23 -17
  174. package/dist/runtime/runtime.js.map +1 -1
  175. package/dist/runtime/types.d.ts +6 -2
  176. package/dist/runtime/types.d.ts.map +1 -1
  177. package/dist/runtime/vault-linking-ops.d.ts +13 -0
  178. package/dist/runtime/vault-linking-ops.d.ts.map +1 -0
  179. package/dist/runtime/vault-linking-ops.js +367 -0
  180. package/dist/runtime/vault-linking-ops.js.map +1 -0
  181. package/dist/vault/linking.d.ts +46 -0
  182. package/dist/vault/linking.d.ts.map +1 -0
  183. package/dist/vault/linking.js +275 -0
  184. package/dist/vault/linking.js.map +1 -0
  185. package/dist/vault/vault-types.d.ts +37 -0
  186. package/dist/vault/vault-types.d.ts.map +1 -1
  187. package/dist/vault/vault.d.ts +12 -0
  188. package/dist/vault/vault.d.ts.map +1 -1
  189. package/dist/vault/vault.js +85 -6
  190. package/dist/vault/vault.js.map +1 -1
  191. package/package.json +4 -1
  192. package/src/__tests__/admin-extra-ops.test.ts +1 -1
  193. package/src/__tests__/admin-ops.test.ts +2 -1
  194. package/src/__tests__/cognee-client-gaps.test.ts +470 -0
  195. package/src/__tests__/cognee-hybrid-search.test.ts +478 -0
  196. package/src/__tests__/cognee-sync-manager-deep.test.ts +630 -0
  197. package/src/__tests__/cognee-sync-manager.test.ts +1 -0
  198. package/src/__tests__/core-ops.test.ts +9 -61
  199. package/src/__tests__/domain-packs.test.ts +421 -0
  200. package/src/__tests__/flows.test.ts +604 -0
  201. package/src/__tests__/playbook-registry.test.ts +2 -2
  202. package/src/__tests__/playbook-seeder.test.ts +8 -8
  203. package/src/__tests__/playbook.test.ts +5 -5
  204. package/src/__tests__/token-resolver.test.ts +79 -0
  205. package/src/brain/brain.ts +12 -0
  206. package/src/brain/intelligence.ts +21 -2
  207. package/src/capabilities/chain-mapping.ts +93 -0
  208. package/src/capabilities/index.ts +21 -0
  209. package/src/capabilities/registry.ts +290 -0
  210. package/src/capabilities/types.ts +143 -0
  211. package/src/control/intent-router.ts +46 -2
  212. package/src/domain-packs/index.ts +27 -0
  213. package/src/domain-packs/inject-rules.ts +74 -0
  214. package/src/domain-packs/knowledge-installer.ts +116 -0
  215. package/src/domain-packs/loader.ts +124 -0
  216. package/src/domain-packs/pack-runtime.ts +99 -0
  217. package/src/domain-packs/skills-installer.ts +56 -0
  218. package/src/domain-packs/token-resolver.ts +126 -0
  219. package/src/domain-packs/types.ts +229 -0
  220. package/src/engine/__tests__/register-engine.test.ts +104 -0
  221. package/src/engine/bin/soleri-engine.ts +217 -0
  222. package/src/engine/core-ops.ts +178 -0
  223. package/src/engine/index.ts +19 -0
  224. package/src/engine/register-engine.ts +385 -0
  225. package/src/engine/test-helpers.ts +83 -0
  226. package/src/flows/context-router.ts +257 -0
  227. package/src/flows/dispatch-registry.ts +80 -0
  228. package/src/flows/epilogue.ts +65 -0
  229. package/src/flows/executor.ts +182 -0
  230. package/src/flows/gate-evaluator.ts +171 -0
  231. package/src/flows/index.ts +52 -0
  232. package/src/flows/loader.ts +63 -0
  233. package/src/flows/plan-builder.ts +250 -0
  234. package/src/flows/probes.ts +70 -0
  235. package/src/flows/types.ts +217 -0
  236. package/src/index.ts +68 -1
  237. package/src/intelligence/loader.ts +96 -5
  238. package/src/intelligence/types.ts +1 -0
  239. package/src/packs/types.ts +19 -0
  240. package/src/playbooks/generic/onboarding.ts +79 -0
  241. package/src/playbooks/playbook-registry.ts +2 -0
  242. package/src/runtime/admin-extra-ops.ts +14 -8
  243. package/src/runtime/admin-ops.ts +4 -4
  244. package/src/runtime/capture-ops.ts +40 -1
  245. package/src/runtime/domain-ops.ts +92 -7
  246. package/src/runtime/facades/cognee-facade.ts +3 -1
  247. package/src/runtime/facades/index.ts +12 -6
  248. package/src/runtime/facades/vault-facade.ts +2 -0
  249. package/src/runtime/orchestrate-ops.ts +271 -62
  250. package/src/runtime/runtime.ts +27 -18
  251. package/src/runtime/types.ts +6 -2
  252. package/src/runtime/vault-linking-ops.ts +454 -0
  253. package/src/vault/linking.ts +333 -0
  254. package/src/vault/vault-types.ts +46 -0
  255. package/src/vault/vault.ts +94 -7
@@ -136,6 +136,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
136
136
  counterExample: entry.counterExample,
137
137
  why: entry.why,
138
138
  tier: finalTier,
139
+ origin: 'user',
139
140
  });
140
141
  const scopeMeta = scopeResult
141
142
  ? {
@@ -227,7 +228,44 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
227
228
  }
228
229
  }
229
230
 
230
- return { captured, proposed, rejected, duplicated, results };
231
+ // Auto-suggest links for captured entries (Zettelkasten enrichment)
232
+ let suggestedLinks: Array<{
233
+ entryId: string;
234
+ title: string;
235
+ suggestedType: string;
236
+ score: number;
237
+ }> = [];
238
+ try {
239
+ if (captured > 0) {
240
+ const firstCaptured = results.find((r) => r.action === 'capture');
241
+ if (firstCaptured) {
242
+ const { LinkManager } = await import('../vault/linking.js');
243
+ const lm = new LinkManager(vault.getProvider());
244
+ const suggestions = lm.suggestLinks(firstCaptured.id, 3);
245
+ suggestedLinks = suggestions
246
+ .filter(
247
+ (s) => s.entryId !== firstCaptured.id && !s.entryId.endsWith(firstCaptured.id),
248
+ )
249
+ .map((s) => ({
250
+ entryId: s.entryId,
251
+ title: s.title,
252
+ suggestedType: s.suggestedType,
253
+ score: s.score,
254
+ }));
255
+ }
256
+ }
257
+ } catch {
258
+ /* never break capture for suggestions */
259
+ }
260
+
261
+ return {
262
+ captured,
263
+ proposed,
264
+ rejected,
265
+ duplicated,
266
+ results,
267
+ ...(suggestedLinks.length > 0 ? { suggestedLinks } : {}),
268
+ };
231
269
  },
232
270
  },
233
271
 
@@ -307,6 +345,7 @@ export function createCaptureOps(runtime: AgentRuntime): OpDefinition[] {
307
345
  description,
308
346
  tags,
309
347
  tier: finalTier,
348
+ origin: 'user',
310
349
  });
311
350
  if (captureResult.blocked) {
312
351
  return {
@@ -1,13 +1,18 @@
1
1
  /**
2
- * Domain facade factory — creates the standard 5-op domain facade pattern.
2
+ * Domain facade factory — creates domain facades with optional pack support.
3
3
  *
4
- * Every domain gets: get_patterns, search, get_entry, capture, remove.
5
- * This replaces per-domain generated facade files.
4
+ * Without packs: every domain gets the standard 5 ops (get_patterns, search,
5
+ * get_entry, capture, remove).
6
+ *
7
+ * With packs: pack ops are PRIMARY, standard 5 ops are FALLBACK for any op
8
+ * name not defined by the pack. Pack standalone facades are registered as
9
+ * additional MCP tools.
6
10
  */
7
11
 
8
12
  import { z } from 'zod';
9
13
  import type { FacadeConfig, OpDefinition } from '../facades/types.js';
10
14
  import type { AgentRuntime } from './types.js';
15
+ import type { DomainPack } from '../domain-packs/types.js';
11
16
 
12
17
  function capitalize(s: string): string {
13
18
  return s.charAt(0).toUpperCase() + s.slice(1);
@@ -59,11 +64,30 @@ export function createDomainFacade(
59
64
  limit: z.number().optional(),
60
65
  }),
61
66
  handler: async (params) => {
62
- return brain.intelligentSearch(params.query as string, {
67
+ const limit = (params.limit as number) ?? 10;
68
+ const results = await brain.intelligentSearch(params.query as string, {
63
69
  domain,
64
70
  tags: params.tags as string[] | undefined,
65
- limit: (params.limit as number) ?? 10,
71
+ limit,
66
72
  });
73
+ // Fallback: when brain returns empty, try vault FTS directly
74
+ if (results.length === 0) {
75
+ const ftsResults = vault.search(params.query as string, { domain, limit });
76
+ return ftsResults.map((r) => ({
77
+ entry: r.entry,
78
+ score: 0,
79
+ breakdown: {
80
+ semantic: 0,
81
+ vector: 0,
82
+ severity: 0,
83
+ temporalDecay: 0,
84
+ tagOverlap: 0,
85
+ domainMatch: 0,
86
+ total: 0,
87
+ },
88
+ }));
89
+ }
90
+ return results;
67
91
  },
68
92
  },
69
93
  {
@@ -181,16 +205,77 @@ export function createDomainFacade(
181
205
  }
182
206
 
183
207
  /**
184
- * Create domain facades for all domains.
208
+ * Create domain facades for all domains, with optional pack support.
209
+ *
210
+ * When packs are provided:
211
+ * - For each domain, check if any pack claims it via pack.domains[]
212
+ * - If a pack claims the domain: pack ops are PRIMARY, standard 5 ops are
213
+ * FALLBACK (only for op names not defined by the pack)
214
+ * - Pack standalone facades (pack.facades[]) are registered as additional
215
+ * MCP tools with agentId prefix
216
+ * - Domains not claimed by any pack get the standard 5 ops (OCP)
217
+ *
218
+ * When packs is undefined or empty: identical to previous behavior.
185
219
  *
186
220
  * @param runtime - The agent runtime
187
221
  * @param agentId - Agent identifier
188
222
  * @param domains - Array of domain names
223
+ * @param packs - Optional array of loaded domain packs
189
224
  */
190
225
  export function createDomainFacades(
191
226
  runtime: AgentRuntime,
192
227
  agentId: string,
193
228
  domains: string[],
229
+ packs?: DomainPack[],
194
230
  ): FacadeConfig[] {
195
- return domains.map((d) => createDomainFacade(runtime, agentId, d));
231
+ // Build a map: domain name pack that claims it
232
+ const packByDomain = new Map<string, DomainPack>();
233
+ if (packs) {
234
+ for (const pack of packs) {
235
+ for (const domain of pack.domains) {
236
+ packByDomain.set(domain, pack);
237
+ }
238
+ }
239
+ }
240
+
241
+ // Create domain facades (with pack merge when applicable)
242
+ const domainFacades = domains.map((domain) => {
243
+ const pack = packByDomain.get(domain);
244
+ if (!pack) {
245
+ // No pack claims this domain — standard 5-op facade (OCP)
246
+ return createDomainFacade(runtime, agentId, domain);
247
+ }
248
+
249
+ // Pack claims this domain — merge ops
250
+ const standardFacade = createDomainFacade(runtime, agentId, domain);
251
+ const packOpNames = new Set(pack.ops.map((op) => op.name));
252
+
253
+ // Pack ops are primary; standard ops are fallback for unclaimed names
254
+ const mergedOps: OpDefinition[] = [
255
+ ...pack.ops,
256
+ ...standardFacade.ops.filter((op) => !packOpNames.has(op.name)),
257
+ ];
258
+
259
+ return {
260
+ ...standardFacade,
261
+ ops: mergedOps,
262
+ };
263
+ });
264
+
265
+ // Collect standalone facades from packs (prefixed with agentId)
266
+ const standaloneFacades: FacadeConfig[] = [];
267
+ if (packs) {
268
+ for (const pack of packs) {
269
+ if (pack.facades) {
270
+ for (const facade of pack.facades) {
271
+ standaloneFacades.push({
272
+ ...facade,
273
+ name: `${agentId}_${facade.name}`,
274
+ });
275
+ }
276
+ }
277
+ }
278
+ }
279
+
280
+ return [...domainFacades, ...standaloneFacades];
196
281
  }
@@ -11,7 +11,9 @@ import type { CogneeSearchType } from '../../cognee/types.js';
11
11
  import { createCogneeSyncOps } from '../cognee-sync-ops.js';
12
12
 
13
13
  export function createCogneeFacadeOps(runtime: AgentRuntime): OpDefinition[] {
14
- const { cognee, vault, syncManager } = runtime;
14
+ // Only called when runtime.cognee is non-null (guarded in createSemanticFacades)
15
+ const cognee = runtime.cognee!;
16
+ const { vault, syncManager } = runtime;
15
17
 
16
18
  return [
17
19
  // ─── Cognee (inline from core-ops.ts) ───────────────────────
@@ -22,7 +22,7 @@ import { createAgencyFacadeOps } from './agency-facade.js';
22
22
  import { createChatFacadeOps } from './chat-facade.js';
23
23
 
24
24
  export function createSemanticFacades(runtime: AgentRuntime, agentId: string): FacadeConfig[] {
25
- return [
25
+ const facades: FacadeConfig[] = [
26
26
  {
27
27
  name: `${agentId}_vault`,
28
28
  description: 'Knowledge management — search, CRUD, import/export, intake, archival.',
@@ -69,11 +69,6 @@ export function createSemanticFacades(runtime: AgentRuntime, agentId: string): F
69
69
  description: 'Agent behavior — identity, intent routing, morphing, guidelines, governance.',
70
70
  ops: createControlFacadeOps(runtime),
71
71
  },
72
- {
73
- name: `${agentId}_cognee`,
74
- description: 'Knowledge graph — Cognee search, sync, export, graph stats.',
75
- ops: createCogneeFacadeOps(runtime),
76
- },
77
72
  {
78
73
  name: `${agentId}_context`,
79
74
  description: 'Context analysis — entity extraction, knowledge retrieval, confidence scoring.',
@@ -92,4 +87,15 @@ export function createSemanticFacades(runtime: AgentRuntime, agentId: string): F
92
87
  ops: createChatFacadeOps(runtime),
93
88
  },
94
89
  ];
90
+
91
+ // Cognee facade — only registered when Cognee integration is enabled
92
+ if (runtime.cognee) {
93
+ facades.push({
94
+ name: `${agentId}_cognee`,
95
+ description: 'Knowledge graph — Cognee search, sync, export, graph stats.',
96
+ ops: createCogneeFacadeOps(runtime),
97
+ });
98
+ }
99
+
100
+ return facades;
95
101
  }
@@ -12,6 +12,7 @@ import { createVaultExtraOps } from '../vault-extra-ops.js';
12
12
  import { createCaptureOps } from '../capture-ops.js';
13
13
  import { createIntakeOps } from '../intake-ops.js';
14
14
  import { createVaultSharingOps } from '../vault-sharing-ops.js';
15
+ import { createVaultLinkingOps } from '../vault-linking-ops.js';
15
16
  import { ObsidianSync } from '../../vault/obsidian-sync.js';
16
17
 
17
18
  export function createVaultFacadeOps(runtime: AgentRuntime): OpDefinition[] {
@@ -479,5 +480,6 @@ export function createVaultFacadeOps(runtime: AgentRuntime): OpDefinition[] {
479
480
  ...createCaptureOps(runtime),
480
481
  ...createIntakeOps(intakePipeline),
481
482
  ...createVaultSharingOps(runtime),
483
+ ...createVaultLinkingOps(runtime),
482
484
  ];
483
485
  }