@soleri/core 9.0.3 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/dist/brain/intelligence.d.ts +27 -0
  2. package/dist/brain/intelligence.d.ts.map +1 -1
  3. package/dist/brain/intelligence.js +160 -14
  4. package/dist/brain/intelligence.js.map +1 -1
  5. package/dist/brain/learning-radar.d.ts +4 -0
  6. package/dist/brain/learning-radar.d.ts.map +1 -1
  7. package/dist/brain/learning-radar.js +20 -1
  8. package/dist/brain/learning-radar.js.map +1 -1
  9. package/dist/brain/strength-scorer.d.ts +31 -0
  10. package/dist/brain/strength-scorer.d.ts.map +1 -0
  11. package/dist/brain/strength-scorer.js +264 -0
  12. package/dist/brain/strength-scorer.js.map +1 -0
  13. package/dist/chat/agent-loop.d.ts.map +1 -1
  14. package/dist/chat/agent-loop.js +2 -0
  15. package/dist/chat/agent-loop.js.map +1 -1
  16. package/dist/chat/notifications.d.ts.map +1 -1
  17. package/dist/chat/notifications.js +2 -0
  18. package/dist/chat/notifications.js.map +1 -1
  19. package/dist/claudemd/compose.js +1 -1
  20. package/dist/claudemd/compose.js.map +1 -1
  21. package/dist/control/intent-router.d.ts.map +1 -1
  22. package/dist/control/intent-router.js +12 -4
  23. package/dist/control/intent-router.js.map +1 -1
  24. package/dist/curator/contradiction-detector.d.ts +27 -0
  25. package/dist/curator/contradiction-detector.d.ts.map +1 -0
  26. package/dist/curator/contradiction-detector.js +62 -0
  27. package/dist/curator/contradiction-detector.js.map +1 -0
  28. package/dist/curator/curator.d.ts +3 -4
  29. package/dist/curator/curator.d.ts.map +1 -1
  30. package/dist/curator/curator.js +90 -525
  31. package/dist/curator/curator.js.map +1 -1
  32. package/dist/curator/duplicate-detector.d.ts +14 -0
  33. package/dist/curator/duplicate-detector.d.ts.map +1 -0
  34. package/dist/curator/duplicate-detector.js +77 -0
  35. package/dist/curator/duplicate-detector.js.map +1 -0
  36. package/dist/curator/health-audit.d.ts +15 -0
  37. package/dist/curator/health-audit.d.ts.map +1 -0
  38. package/dist/curator/health-audit.js +97 -0
  39. package/dist/curator/health-audit.js.map +1 -0
  40. package/dist/curator/metadata-enricher.d.ts +17 -0
  41. package/dist/curator/metadata-enricher.d.ts.map +1 -0
  42. package/dist/curator/metadata-enricher.js +60 -0
  43. package/dist/curator/metadata-enricher.js.map +1 -0
  44. package/dist/curator/schema.d.ts +7 -0
  45. package/dist/curator/schema.d.ts.map +1 -0
  46. package/dist/curator/schema.js +62 -0
  47. package/dist/curator/schema.js.map +1 -0
  48. package/dist/curator/tag-manager.d.ts +36 -0
  49. package/dist/curator/tag-manager.d.ts.map +1 -0
  50. package/dist/curator/tag-manager.js +78 -0
  51. package/dist/curator/tag-manager.js.map +1 -0
  52. package/dist/engine/bin/soleri-engine.js +55 -3
  53. package/dist/engine/bin/soleri-engine.js.map +1 -1
  54. package/dist/engine/core-ops.d.ts.map +1 -1
  55. package/dist/engine/core-ops.js +33 -10
  56. package/dist/engine/core-ops.js.map +1 -1
  57. package/dist/engine/module-manifest.d.ts.map +1 -1
  58. package/dist/engine/module-manifest.js +22 -2
  59. package/dist/engine/module-manifest.js.map +1 -1
  60. package/dist/engine/register-engine.d.ts.map +1 -1
  61. package/dist/engine/register-engine.js +26 -2
  62. package/dist/engine/register-engine.js.map +1 -1
  63. package/dist/errors/retry.d.ts.map +1 -1
  64. package/dist/errors/retry.js +2 -0
  65. package/dist/errors/retry.js.map +1 -1
  66. package/dist/facades/types.d.ts +1 -1
  67. package/dist/flows/chain-types.d.ts +18 -18
  68. package/dist/flows/gate-evaluator.d.ts.map +1 -1
  69. package/dist/flows/gate-evaluator.js +22 -0
  70. package/dist/flows/gate-evaluator.js.map +1 -1
  71. package/dist/flows/types.d.ts +157 -28
  72. package/dist/flows/types.d.ts.map +1 -1
  73. package/dist/flows/types.js +4 -0
  74. package/dist/flows/types.js.map +1 -1
  75. package/dist/index.d.ts +10 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +9 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  80. package/dist/intake/intake-pipeline.js +1 -0
  81. package/dist/intake/intake-pipeline.js.map +1 -1
  82. package/dist/intake/text-ingester.d.ts.map +1 -1
  83. package/dist/intake/text-ingester.js +2 -0
  84. package/dist/intake/text-ingester.js.map +1 -1
  85. package/dist/llm/key-pool.d.ts +1 -1
  86. package/dist/llm/key-pool.d.ts.map +1 -1
  87. package/dist/llm/key-pool.js +3 -4
  88. package/dist/llm/key-pool.js.map +1 -1
  89. package/dist/llm/utils.d.ts.map +1 -1
  90. package/dist/llm/utils.js +2 -0
  91. package/dist/llm/utils.js.map +1 -1
  92. package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
  93. package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
  94. package/dist/migrations/migration-runner.test-helpers.js +47 -0
  95. package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
  96. package/dist/operator/operator-profile.d.ts +44 -0
  97. package/dist/operator/operator-profile.d.ts.map +1 -0
  98. package/dist/operator/operator-profile.js +377 -0
  99. package/dist/operator/operator-profile.js.map +1 -0
  100. package/dist/operator/operator-signals.d.ts +45 -0
  101. package/dist/operator/operator-signals.d.ts.map +1 -0
  102. package/dist/operator/operator-signals.js +228 -0
  103. package/dist/operator/operator-signals.js.map +1 -0
  104. package/dist/operator/operator-types.d.ts +360 -0
  105. package/dist/operator/operator-types.d.ts.map +1 -0
  106. package/dist/operator/operator-types.js +24 -0
  107. package/dist/operator/operator-types.js.map +1 -0
  108. package/dist/packs/types.d.ts +27 -27
  109. package/dist/paths.d.ts +40 -0
  110. package/dist/paths.d.ts.map +1 -0
  111. package/dist/paths.js +98 -0
  112. package/dist/paths.js.map +1 -0
  113. package/dist/persistence/index.d.ts +1 -1
  114. package/dist/persistence/index.d.ts.map +1 -1
  115. package/dist/persistence/index.js +1 -1
  116. package/dist/persistence/index.js.map +1 -1
  117. package/dist/persistence/sqlite-provider.d.ts +2 -0
  118. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  119. package/dist/persistence/sqlite-provider.js +8 -5
  120. package/dist/persistence/sqlite-provider.js.map +1 -1
  121. package/dist/planning/evidence-collector.d.ts +13 -1
  122. package/dist/planning/evidence-collector.d.ts.map +1 -1
  123. package/dist/planning/evidence-collector.js +33 -0
  124. package/dist/planning/evidence-collector.js.map +1 -1
  125. package/dist/planning/gap-analysis.d.ts +5 -4
  126. package/dist/planning/gap-analysis.d.ts.map +1 -1
  127. package/dist/planning/gap-analysis.js +7 -341
  128. package/dist/planning/gap-analysis.js.map +1 -1
  129. package/dist/planning/gap-passes.d.ts +19 -0
  130. package/dist/planning/gap-passes.d.ts.map +1 -0
  131. package/dist/planning/gap-passes.js +157 -0
  132. package/dist/planning/gap-passes.js.map +1 -0
  133. package/dist/planning/gap-patterns.d.ts +29 -0
  134. package/dist/planning/gap-patterns.d.ts.map +1 -0
  135. package/dist/planning/gap-patterns.js +129 -0
  136. package/dist/planning/gap-patterns.js.map +1 -0
  137. package/dist/planning/gap-types.d.ts +1 -1
  138. package/dist/planning/gap-types.d.ts.map +1 -1
  139. package/dist/planning/gap-types.js +1 -0
  140. package/dist/planning/gap-types.js.map +1 -1
  141. package/dist/planning/github-projection.d.ts +122 -0
  142. package/dist/planning/github-projection.d.ts.map +1 -0
  143. package/dist/planning/github-projection.js +294 -0
  144. package/dist/planning/github-projection.js.map +1 -0
  145. package/dist/planning/impact-analyzer.d.ts +26 -0
  146. package/dist/planning/impact-analyzer.d.ts.map +1 -0
  147. package/dist/planning/impact-analyzer.js +199 -0
  148. package/dist/planning/impact-analyzer.js.map +1 -0
  149. package/dist/planning/plan-lifecycle.d.ts +136 -0
  150. package/dist/planning/plan-lifecycle.d.ts.map +1 -0
  151. package/dist/planning/plan-lifecycle.js +296 -0
  152. package/dist/planning/plan-lifecycle.js.map +1 -0
  153. package/dist/planning/planner-types.d.ts +202 -0
  154. package/dist/planning/planner-types.d.ts.map +1 -0
  155. package/dist/planning/planner-types.js +6 -0
  156. package/dist/planning/planner-types.js.map +1 -0
  157. package/dist/planning/planner.d.ts +31 -383
  158. package/dist/planning/planner.d.ts.map +1 -1
  159. package/dist/planning/planner.js +154 -878
  160. package/dist/planning/planner.js.map +1 -1
  161. package/dist/planning/rationalization-detector.d.ts +32 -0
  162. package/dist/planning/rationalization-detector.d.ts.map +1 -0
  163. package/dist/planning/rationalization-detector.js +89 -0
  164. package/dist/planning/rationalization-detector.js.map +1 -0
  165. package/dist/planning/reconciliation-engine.d.ts +47 -0
  166. package/dist/planning/reconciliation-engine.d.ts.map +1 -0
  167. package/dist/planning/reconciliation-engine.js +128 -0
  168. package/dist/planning/reconciliation-engine.js.map +1 -0
  169. package/dist/planning/task-verifier.d.ts +85 -0
  170. package/dist/planning/task-verifier.d.ts.map +1 -0
  171. package/dist/planning/task-verifier.js +227 -0
  172. package/dist/planning/task-verifier.js.map +1 -0
  173. package/dist/plugins/types.d.ts +4 -4
  174. package/dist/runtime/admin-ops.d.ts +2 -2
  175. package/dist/runtime/admin-ops.d.ts.map +1 -1
  176. package/dist/runtime/admin-ops.js +44 -17
  177. package/dist/runtime/admin-ops.js.map +1 -1
  178. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  179. package/dist/runtime/admin-setup-ops.js +21 -46
  180. package/dist/runtime/admin-setup-ops.js.map +1 -1
  181. package/dist/runtime/archive-ops.d.ts +10 -0
  182. package/dist/runtime/archive-ops.d.ts.map +1 -0
  183. package/dist/runtime/archive-ops.js +310 -0
  184. package/dist/runtime/archive-ops.js.map +1 -0
  185. package/dist/runtime/capture-ops.d.ts.map +1 -1
  186. package/dist/runtime/capture-ops.js +42 -7
  187. package/dist/runtime/capture-ops.js.map +1 -1
  188. package/dist/runtime/claude-md-helpers.js +1 -1
  189. package/dist/runtime/claude-md-helpers.js.map +1 -1
  190. package/dist/runtime/context-health.d.ts +31 -0
  191. package/dist/runtime/context-health.d.ts.map +1 -0
  192. package/dist/runtime/context-health.js +57 -0
  193. package/dist/runtime/context-health.js.map +1 -0
  194. package/dist/runtime/facades/archive-facade.d.ts +10 -0
  195. package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
  196. package/dist/runtime/facades/archive-facade.js +11 -0
  197. package/dist/runtime/facades/archive-facade.js.map +1 -0
  198. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  199. package/dist/runtime/facades/brain-facade.js +2 -0
  200. package/dist/runtime/facades/brain-facade.js.map +1 -1
  201. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  202. package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
  203. package/dist/runtime/facades/chat-facade.js +15 -800
  204. package/dist/runtime/facades/chat-facade.js.map +1 -1
  205. package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
  206. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
  207. package/dist/runtime/facades/chat-service-ops.js +330 -0
  208. package/dist/runtime/facades/chat-service-ops.js.map +1 -0
  209. package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
  210. package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
  211. package/dist/runtime/facades/chat-session-ops.js +136 -0
  212. package/dist/runtime/facades/chat-session-ops.js.map +1 -0
  213. package/dist/runtime/facades/chat-state.d.ts +31 -0
  214. package/dist/runtime/facades/chat-state.d.ts.map +1 -0
  215. package/dist/runtime/facades/chat-state.js +32 -0
  216. package/dist/runtime/facades/chat-state.js.map +1 -0
  217. package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
  218. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
  219. package/dist/runtime/facades/chat-transport-ops.js +337 -0
  220. package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
  221. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  222. package/dist/runtime/facades/control-facade.js +4 -1
  223. package/dist/runtime/facades/control-facade.js.map +1 -1
  224. package/dist/runtime/facades/index.d.ts.map +1 -1
  225. package/dist/runtime/facades/index.js +6 -0
  226. package/dist/runtime/facades/index.js.map +1 -1
  227. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  228. package/dist/runtime/facades/memory-facade.js +75 -6
  229. package/dist/runtime/facades/memory-facade.js.map +1 -1
  230. package/dist/runtime/facades/operator-facade.d.ts +8 -0
  231. package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
  232. package/dist/runtime/facades/operator-facade.js +220 -0
  233. package/dist/runtime/facades/operator-facade.js.map +1 -0
  234. package/dist/runtime/facades/orchestrate-facade.js +3 -3
  235. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  236. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  237. package/dist/runtime/facades/plan-facade.js +39 -6
  238. package/dist/runtime/facades/plan-facade.js.map +1 -1
  239. package/dist/runtime/facades/review-facade.d.ts +7 -0
  240. package/dist/runtime/facades/review-facade.d.ts.map +1 -0
  241. package/dist/runtime/facades/review-facade.js +8 -0
  242. package/dist/runtime/facades/review-facade.js.map +1 -0
  243. package/dist/runtime/facades/sync-facade.d.ts +7 -0
  244. package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
  245. package/dist/runtime/facades/sync-facade.js +8 -0
  246. package/dist/runtime/facades/sync-facade.js.map +1 -0
  247. package/dist/runtime/facades/vault-facade.d.ts +4 -1
  248. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/vault-facade.js +13 -66
  250. package/dist/runtime/facades/vault-facade.js.map +1 -1
  251. package/dist/runtime/github-integration.d.ts +49 -0
  252. package/dist/runtime/github-integration.d.ts.map +1 -0
  253. package/dist/runtime/github-integration.js +113 -0
  254. package/dist/runtime/github-integration.js.map +1 -0
  255. package/dist/runtime/grading-ops.js +1 -1
  256. package/dist/runtime/grading-ops.js.map +1 -1
  257. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  258. package/dist/runtime/memory-extra-ops.js +6 -2
  259. package/dist/runtime/memory-extra-ops.js.map +1 -1
  260. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  261. package/dist/runtime/orchestrate-ops.js +367 -40
  262. package/dist/runtime/orchestrate-ops.js.map +1 -1
  263. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  264. package/dist/runtime/planning-extra-ops.js +69 -4
  265. package/dist/runtime/planning-extra-ops.js.map +1 -1
  266. package/dist/runtime/review-ops.d.ts +10 -0
  267. package/dist/runtime/review-ops.d.ts.map +1 -0
  268. package/dist/runtime/review-ops.js +97 -0
  269. package/dist/runtime/review-ops.js.map +1 -0
  270. package/dist/runtime/runtime.d.ts.map +1 -1
  271. package/dist/runtime/runtime.js +27 -12
  272. package/dist/runtime/runtime.js.map +1 -1
  273. package/dist/runtime/session-briefing.d.ts +3 -0
  274. package/dist/runtime/session-briefing.d.ts.map +1 -1
  275. package/dist/runtime/session-briefing.js +68 -1
  276. package/dist/runtime/session-briefing.js.map +1 -1
  277. package/dist/runtime/sync-ops.d.ts +12 -0
  278. package/dist/runtime/sync-ops.d.ts.map +1 -0
  279. package/dist/runtime/sync-ops.js +288 -0
  280. package/dist/runtime/sync-ops.js.map +1 -0
  281. package/dist/runtime/types.d.ts +10 -4
  282. package/dist/runtime/types.d.ts.map +1 -1
  283. package/dist/runtime/vault-extra-ops.d.ts +5 -4
  284. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  285. package/dist/runtime/vault-extra-ops.js +5 -300
  286. package/dist/runtime/vault-extra-ops.js.map +1 -1
  287. package/dist/runtime/vault-sharing-ops.d.ts +4 -4
  288. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
  289. package/dist/runtime/vault-sharing-ops.js +5 -300
  290. package/dist/runtime/vault-sharing-ops.js.map +1 -1
  291. package/dist/skills/sync-skills.d.ts +27 -0
  292. package/dist/skills/sync-skills.d.ts.map +1 -0
  293. package/dist/skills/sync-skills.js +81 -0
  294. package/dist/skills/sync-skills.js.map +1 -0
  295. package/dist/update-check.d.ts +14 -0
  296. package/dist/update-check.d.ts.map +1 -0
  297. package/dist/update-check.js +96 -0
  298. package/dist/update-check.js.map +1 -0
  299. package/dist/vault/linking.d.ts +10 -12
  300. package/dist/vault/linking.d.ts.map +1 -1
  301. package/dist/vault/linking.js +104 -161
  302. package/dist/vault/linking.js.map +1 -1
  303. package/dist/vault/vault-entries.d.ts +69 -0
  304. package/dist/vault/vault-entries.d.ts.map +1 -0
  305. package/dist/vault/vault-entries.js +257 -0
  306. package/dist/vault/vault-entries.js.map +1 -0
  307. package/dist/vault/vault-interfaces.d.ts +153 -0
  308. package/dist/vault/vault-interfaces.d.ts.map +1 -0
  309. package/dist/vault/vault-interfaces.js +2 -0
  310. package/dist/vault/vault-interfaces.js.map +1 -0
  311. package/dist/vault/vault-maintenance.d.ts +40 -0
  312. package/dist/vault/vault-maintenance.d.ts.map +1 -0
  313. package/dist/vault/vault-maintenance.js +142 -0
  314. package/dist/vault/vault-maintenance.js.map +1 -0
  315. package/dist/vault/vault-markdown-sync.d.ts +22 -0
  316. package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
  317. package/dist/vault/vault-markdown-sync.js +143 -0
  318. package/dist/vault/vault-markdown-sync.js.map +1 -0
  319. package/dist/vault/vault-memories.d.ts +61 -0
  320. package/dist/vault/vault-memories.d.ts.map +1 -0
  321. package/dist/vault/vault-memories.js +240 -0
  322. package/dist/vault/vault-memories.js.map +1 -0
  323. package/dist/vault/vault-schema.d.ts +9 -0
  324. package/dist/vault/vault-schema.d.ts.map +1 -0
  325. package/dist/vault/vault-schema.js +179 -0
  326. package/dist/vault/vault-schema.js.map +1 -0
  327. package/dist/vault/vault.d.ts +29 -81
  328. package/dist/vault/vault.d.ts.map +1 -1
  329. package/dist/vault/vault.js +78 -931
  330. package/dist/vault/vault.js.map +1 -1
  331. package/package.json +1 -1
  332. package/src/agency/agency-manager.test.ts +600 -0
  333. package/src/agency/default-rules.test.ts +228 -0
  334. package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
  335. package/src/{__tests__ → brain}/brain.test.ts +1 -1
  336. package/src/brain/intelligence.ts +196 -15
  337. package/src/brain/learning-radar.ts +22 -1
  338. package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
  339. package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
  340. package/src/brain/strength-scorer.ts +404 -0
  341. package/src/capabilities/chain-mapping.test.ts +66 -0
  342. package/src/capabilities/registry.test.ts +369 -0
  343. package/src/chat/agent-loop.test.ts +394 -0
  344. package/src/chat/agent-loop.ts +2 -0
  345. package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
  346. package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
  347. package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
  348. package/src/chat/mcp-bridge.test.ts +173 -0
  349. package/src/chat/notifications.ts +2 -0
  350. package/src/chat/output-compressor.test.ts +164 -0
  351. package/src/claudemd/compose.test.ts +178 -0
  352. package/src/claudemd/compose.ts +1 -1
  353. package/src/claudemd/inject.test.ts +211 -0
  354. package/src/context/context-engine.test.ts +461 -0
  355. package/src/control/identity-manager.test.ts +305 -0
  356. package/src/control/intent-router.test.ts +360 -0
  357. package/src/control/intent-router.ts +13 -4
  358. package/src/curator/classifier.test.ts +104 -0
  359. package/src/curator/contradiction-detector.test.ts +180 -0
  360. package/src/curator/contradiction-detector.ts +87 -0
  361. package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
  362. package/src/{__tests__ → curator}/curator.test.ts +77 -1
  363. package/src/curator/curator.ts +115 -777
  364. package/src/curator/duplicate-detector.test.ts +183 -0
  365. package/src/curator/duplicate-detector.ts +103 -0
  366. package/src/curator/health-audit.ts +126 -0
  367. package/src/curator/metadata-enricher.ts +84 -0
  368. package/src/curator/quality-gate.test.ts +135 -0
  369. package/src/curator/schema.ts +65 -0
  370. package/src/curator/tag-manager.test.ts +165 -0
  371. package/src/curator/tag-manager.ts +109 -0
  372. package/src/domain-packs/inject-rules.test.ts +117 -0
  373. package/src/domain-packs/knowledge-installer.test.ts +171 -0
  374. package/src/domain-packs/loader.test.ts +86 -0
  375. package/src/domain-packs/pack-runtime.test.ts +140 -0
  376. package/src/domain-packs/skills-installer.test.ts +135 -0
  377. package/src/domain-packs/token-resolver.test.ts +150 -0
  378. package/src/domain-packs/types.test.ts +130 -0
  379. package/src/enforcement/adapters/claude-code.test.ts +216 -0
  380. package/src/enforcement/registry.test.ts +264 -0
  381. package/src/engine/bin/soleri-engine.ts +59 -3
  382. package/src/engine/core-ops.test.ts +254 -0
  383. package/src/engine/core-ops.ts +35 -10
  384. package/src/engine/module-manifest.test.ts +124 -0
  385. package/src/engine/module-manifest.ts +22 -2
  386. package/src/engine/register-engine.test.ts +230 -0
  387. package/src/engine/register-engine.ts +26 -2
  388. package/src/errors/classify.test.ts +199 -0
  389. package/src/errors/retry.test.ts +156 -0
  390. package/src/errors/retry.ts +2 -0
  391. package/src/errors/types.test.ts +108 -0
  392. package/src/events/event-bus.test.ts +149 -0
  393. package/src/extensions/middleware.test.ts +234 -0
  394. package/src/facades/facade-factory.test.ts +424 -0
  395. package/src/flows/chain-runner.test.ts +273 -0
  396. package/src/flows/context-router.test.ts +52 -0
  397. package/src/flows/dispatch-registry.test.ts +128 -0
  398. package/src/flows/epilogue.test.ts +107 -0
  399. package/src/flows/executor.test.ts +263 -0
  400. package/src/flows/gate-evaluator.test.ts +194 -0
  401. package/src/flows/gate-evaluator.ts +25 -0
  402. package/src/flows/types.ts +4 -0
  403. package/src/governance/governance.test.ts +726 -0
  404. package/src/health/health-registry.test.ts +186 -0
  405. package/src/health/vault-integrity.test.ts +110 -0
  406. package/src/index.ts +92 -0
  407. package/src/intake/content-classifier.test.ts +209 -0
  408. package/src/intake/dedup-gate.test.ts +131 -0
  409. package/src/intake/intake-pipeline.test.ts +506 -0
  410. package/src/intake/intake-pipeline.ts +1 -0
  411. package/src/intake/text-ingester.test.ts +194 -0
  412. package/src/intake/text-ingester.ts +2 -0
  413. package/src/llm/key-pool.test.ts +236 -0
  414. package/src/llm/key-pool.ts +3 -4
  415. package/src/llm/llm-client.test.ts +345 -0
  416. package/src/llm/oauth-discovery.test.ts +180 -0
  417. package/src/llm/utils.test.ts +327 -0
  418. package/src/llm/utils.ts +2 -0
  419. package/src/{__tests__ → logging}/logger.test.ts +41 -62
  420. package/src/loop/loop-manager.test.ts +519 -0
  421. package/src/migrations/migration-runner.edge-cases.test.ts +319 -0
  422. package/src/migrations/migration-runner.test-helpers.ts +64 -0
  423. package/src/migrations/migration-runner.test.ts +385 -0
  424. package/src/operator/auto-signal-pipeline.test.ts +207 -0
  425. package/src/operator/operator-profile-extended.test.ts +320 -0
  426. package/src/operator/operator-profile.test.ts +314 -0
  427. package/src/operator/operator-profile.ts +469 -0
  428. package/src/operator/operator-signals-extended.test.ts +245 -0
  429. package/src/operator/operator-signals.test.ts +281 -0
  430. package/src/operator/operator-signals.ts +261 -0
  431. package/src/operator/operator-types.ts +444 -0
  432. package/src/operator/prompts/hook-precompact-operator-dispatch.md +94 -0
  433. package/src/operator/prompts/subagent-soft-signal-extractor.md +125 -0
  434. package/src/operator/prompts/subagent-synthesis-cognition.md +181 -0
  435. package/src/operator/prompts/subagent-synthesis-communication.md +140 -0
  436. package/src/operator/prompts/subagent-synthesis-technical.md +160 -0
  437. package/src/operator/prompts/subagent-synthesis-trust.md +143 -0
  438. package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
  439. package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
  440. package/src/paths.ts +115 -0
  441. package/src/persistence/index.ts +1 -1
  442. package/src/persistence/sqlite-provider.test.ts +540 -0
  443. package/src/persistence/sqlite-provider.ts +8 -5
  444. package/src/persona/defaults.test.ts +59 -0
  445. package/src/persona/loader.test.ts +67 -0
  446. package/src/persona/prompt-generator.test.ts +127 -0
  447. package/src/planning/evidence-collector.test.ts +406 -0
  448. package/src/planning/evidence-collector.ts +50 -0
  449. package/src/planning/gap-analysis-alternatives.test.ts +169 -0
  450. package/src/planning/gap-analysis.ts +21 -636
  451. package/src/planning/gap-passes.test.ts +372 -0
  452. package/src/planning/gap-passes.ts +298 -0
  453. package/src/planning/gap-patterns.test.ts +320 -0
  454. package/src/planning/gap-patterns.ts +234 -0
  455. package/src/planning/gap-types.ts +4 -1
  456. package/src/planning/github-projection.test.ts +177 -0
  457. package/src/planning/github-projection.ts +425 -0
  458. package/src/planning/impact-analyzer.test.ts +180 -0
  459. package/src/planning/impact-analyzer.ts +264 -0
  460. package/src/planning/plan-lifecycle.test.ts +312 -0
  461. package/src/planning/plan-lifecycle.ts +346 -0
  462. package/src/planning/planner-types.ts +215 -0
  463. package/src/{__tests__ → planning}/planner.test.ts +169 -15
  464. package/src/planning/planner.ts +197 -1228
  465. package/src/planning/rationalization-detector.test.ts +171 -0
  466. package/src/planning/rationalization-detector.ts +138 -0
  467. package/src/planning/reconciliation-engine.test.ts +141 -0
  468. package/src/planning/reconciliation-engine.ts +162 -0
  469. package/src/planning/task-verifier.test.ts +235 -0
  470. package/src/planning/task-verifier.ts +303 -0
  471. package/src/planning/verification-protocol.test.ts +201 -0
  472. package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
  473. package/src/playbooks/index.test.ts +77 -0
  474. package/src/playbooks/playbook-executor.test.ts +255 -0
  475. package/src/playbooks/playbook-registry.test.ts +232 -0
  476. package/src/playbooks/playbook-seeder.test.ts +153 -0
  477. package/src/plugins/plugin-loader.test.ts +212 -0
  478. package/src/plugins/plugin-registry.test.ts +272 -0
  479. package/src/project/project-registry.test.ts +428 -0
  480. package/src/prompts/parser.test.ts +100 -0
  481. package/src/prompts/template-manager.test.ts +109 -0
  482. package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
  483. package/src/queue/job-queue.test.ts +331 -0
  484. package/src/queue/pipeline-runner.test.ts +209 -0
  485. package/src/runtime/admin-extra-ops.test.ts +527 -0
  486. package/src/runtime/admin-ops.test.ts +257 -0
  487. package/src/runtime/admin-ops.ts +45 -17
  488. package/src/runtime/admin-setup-ops.test.ts +328 -0
  489. package/src/runtime/admin-setup-ops.ts +20 -43
  490. package/src/runtime/archive-ops.test.ts +269 -0
  491. package/src/runtime/archive-ops.ts +347 -0
  492. package/src/runtime/capture-ops.test.ts +433 -0
  493. package/src/runtime/capture-ops.ts +50 -8
  494. package/src/runtime/chain-ops.test.ts +149 -0
  495. package/src/runtime/claude-md-helpers.test.ts +191 -0
  496. package/src/runtime/claude-md-helpers.ts +1 -1
  497. package/src/runtime/context-health.test.ts +78 -0
  498. package/src/runtime/context-health.ts +85 -0
  499. package/src/runtime/curator-extra-ops.test.ts +202 -0
  500. package/src/runtime/deprecation.test.ts +98 -0
  501. package/src/runtime/domain-ops.test.ts +268 -0
  502. package/src/runtime/facades/admin-facade.test.ts +333 -0
  503. package/src/runtime/facades/agency-facade.test.ts +278 -0
  504. package/src/runtime/facades/archive-facade.test.ts +294 -0
  505. package/src/runtime/facades/archive-facade.ts +14 -0
  506. package/src/runtime/facades/brain-facade.test.ts +714 -0
  507. package/src/runtime/facades/brain-facade.ts +2 -0
  508. package/src/runtime/facades/chat-facade.test.ts +166 -0
  509. package/src/runtime/facades/chat-facade.ts +15 -906
  510. package/src/runtime/facades/chat-service-ops.test.ts +276 -0
  511. package/src/runtime/facades/chat-service-ops.ts +374 -0
  512. package/src/runtime/facades/chat-session-ops.test.ts +197 -0
  513. package/src/runtime/facades/chat-session-ops.ts +146 -0
  514. package/src/runtime/facades/chat-state.ts +60 -0
  515. package/src/runtime/facades/chat-transport-ops.test.ts +269 -0
  516. package/src/runtime/facades/chat-transport-ops.ts +380 -0
  517. package/src/runtime/facades/context-facade.test.ts +108 -0
  518. package/src/runtime/facades/control-facade.test.ts +436 -0
  519. package/src/runtime/facades/control-facade.ts +6 -1
  520. package/src/runtime/facades/curator-facade.test.ts +303 -0
  521. package/src/runtime/facades/index.ts +6 -0
  522. package/src/runtime/facades/loop-facade.test.ts +245 -0
  523. package/src/runtime/facades/memory-facade.test.ts +269 -0
  524. package/src/runtime/facades/memory-facade.ts +78 -6
  525. package/src/runtime/facades/operator-facade.test.ts +208 -0
  526. package/src/runtime/facades/operator-facade.ts +236 -0
  527. package/src/runtime/facades/orchestrate-facade.test.ts +185 -0
  528. package/src/runtime/facades/orchestrate-facade.ts +3 -3
  529. package/src/runtime/facades/plan-facade.test.ts +266 -0
  530. package/src/runtime/facades/plan-facade.ts +42 -6
  531. package/src/runtime/facades/review-facade.test.ts +82 -0
  532. package/src/runtime/facades/review-facade.ts +11 -0
  533. package/src/runtime/facades/sync-facade.test.ts +113 -0
  534. package/src/runtime/facades/sync-facade.ts +11 -0
  535. package/src/runtime/facades/vault-facade.test.ts +631 -0
  536. package/src/runtime/facades/vault-facade.ts +15 -70
  537. package/src/runtime/feature-flags.test.ts +140 -0
  538. package/src/runtime/github-integration.test.ts +89 -0
  539. package/src/runtime/github-integration.ts +159 -0
  540. package/src/runtime/grading-ops.test.ts +141 -0
  541. package/src/runtime/grading-ops.ts +1 -1
  542. package/src/runtime/intake-ops.test.ts +208 -0
  543. package/src/runtime/loop-ops.test.ts +238 -0
  544. package/src/runtime/memory-cross-project-ops.test.ts +177 -0
  545. package/src/runtime/memory-extra-ops.test.ts +453 -0
  546. package/src/runtime/memory-extra-ops.ts +6 -2
  547. package/src/runtime/orchestrate-ops.test.ts +302 -0
  548. package/src/runtime/orchestrate-ops.ts +435 -46
  549. package/src/runtime/pack-ops.test.ts +158 -0
  550. package/src/runtime/planning-extra-ops.test.ts +583 -0
  551. package/src/runtime/planning-extra-ops.ts +72 -4
  552. package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
  553. package/src/runtime/playbook-ops.test.ts +262 -0
  554. package/src/runtime/plugin-ops.test.ts +201 -0
  555. package/src/runtime/project-ops.test.ts +235 -0
  556. package/src/runtime/review-ops.test.ts +142 -0
  557. package/src/runtime/review-ops.ts +99 -0
  558. package/src/runtime/runtime.test.ts +363 -0
  559. package/src/runtime/runtime.ts +39 -12
  560. package/src/runtime/session-briefing.test.ts +302 -0
  561. package/src/runtime/session-briefing.ts +80 -1
  562. package/src/runtime/sync-ops.test.ts +221 -0
  563. package/src/runtime/sync-ops.ts +325 -0
  564. package/src/runtime/telemetry-ops.test.ts +132 -0
  565. package/src/runtime/types.ts +10 -4
  566. package/src/runtime/vault-extra-ops.test.ts +246 -0
  567. package/src/runtime/vault-extra-ops.ts +5 -332
  568. package/src/runtime/vault-linking-ops.test.ts +237 -0
  569. package/src/runtime/vault-sharing-ops.test.ts +130 -0
  570. package/src/runtime/vault-sharing-ops.ts +5 -329
  571. package/src/skills/sync-skills.ts +108 -0
  572. package/src/streams/normalize.test.ts +95 -0
  573. package/src/streams/replayable-stream.test.ts +166 -0
  574. package/src/telemetry/telemetry.test.ts +143 -0
  575. package/src/transport/http-server.test.ts +394 -0
  576. package/src/transport/lsp-server.test.ts +458 -0
  577. package/src/transport/rate-limiter.test.ts +126 -0
  578. package/src/transport/session-manager.test.ts +133 -0
  579. package/src/transport/token-auth.test.ts +136 -0
  580. package/src/transport/ws-server.test.ts +294 -0
  581. package/src/update-check.ts +111 -0
  582. package/src/vault/__tests__/vault-characterization.test.ts +168 -0
  583. package/src/vault/content-hash.test.ts +78 -0
  584. package/src/vault/git-vault-sync.test.ts +234 -0
  585. package/src/vault/knowledge-review.test.ts +269 -0
  586. package/src/vault/linking.test.ts +358 -0
  587. package/src/vault/linking.ts +149 -183
  588. package/src/vault/obsidian-sync.test.ts +342 -0
  589. package/src/vault/playbook.test.ts +152 -0
  590. package/src/vault/scope-detector.test.ts +187 -0
  591. package/src/vault/vault-branching.test.ts +250 -0
  592. package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
  593. package/src/vault/vault-entries.ts +282 -0
  594. package/src/vault/vault-interfaces.ts +56 -0
  595. package/src/vault/vault-maintenance.ts +205 -0
  596. package/src/vault/vault-manager.test.ts +206 -0
  597. package/src/vault/vault-markdown-sync.test.ts +203 -0
  598. package/src/vault/vault-markdown-sync.ts +160 -0
  599. package/src/vault/vault-memories.ts +339 -0
  600. package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
  601. package/src/vault/vault-schema.ts +181 -0
  602. package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
  603. package/src/{__tests__ → vault}/vault.test.ts +2 -2
  604. package/src/vault/vault.ts +89 -1171
  605. package/dist/cognee/client.d.ts +0 -43
  606. package/dist/cognee/client.d.ts.map +0 -1
  607. package/dist/cognee/client.js +0 -375
  608. package/dist/cognee/client.js.map +0 -1
  609. package/dist/cognee/sync-manager.d.ts +0 -153
  610. package/dist/cognee/sync-manager.d.ts.map +0 -1
  611. package/dist/cognee/sync-manager.js +0 -390
  612. package/dist/cognee/sync-manager.js.map +0 -1
  613. package/dist/cognee/types.d.ts +0 -62
  614. package/dist/cognee/types.d.ts.map +0 -1
  615. package/dist/cognee/types.js +0 -3
  616. package/dist/cognee/types.js.map +0 -1
  617. package/dist/governance/index.d.ts +0 -3
  618. package/dist/governance/index.d.ts.map +0 -1
  619. package/dist/governance/index.js +0 -2
  620. package/dist/governance/index.js.map +0 -1
  621. package/dist/health/doctor-checks.d.ts +0 -15
  622. package/dist/health/doctor-checks.d.ts.map +0 -1
  623. package/dist/health/doctor-checks.js +0 -98
  624. package/dist/health/doctor-checks.js.map +0 -1
  625. package/dist/persistence/postgres-provider.d.ts +0 -81
  626. package/dist/persistence/postgres-provider.d.ts.map +0 -1
  627. package/dist/persistence/postgres-provider.js +0 -256
  628. package/dist/persistence/postgres-provider.js.map +0 -1
  629. package/dist/runtime/cognee-sync-ops.d.ts +0 -12
  630. package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
  631. package/dist/runtime/cognee-sync-ops.js +0 -93
  632. package/dist/runtime/cognee-sync-ops.js.map +0 -1
  633. package/dist/runtime/core-ops.d.ts +0 -23
  634. package/dist/runtime/core-ops.d.ts.map +0 -1
  635. package/dist/runtime/core-ops.js +0 -1296
  636. package/dist/runtime/core-ops.js.map +0 -1
  637. package/dist/runtime/facades/cognee-facade.d.ts +0 -8
  638. package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
  639. package/dist/runtime/facades/cognee-facade.js +0 -156
  640. package/dist/runtime/facades/cognee-facade.js.map +0 -1
  641. package/src/__tests__/admin-extra-ops.test.ts +0 -484
  642. package/src/__tests__/admin-ops.test.ts +0 -268
  643. package/src/__tests__/admin-setup-ops.test.ts +0 -355
  644. package/src/__tests__/agency-manager.test.ts +0 -374
  645. package/src/__tests__/agent-loop.test.ts +0 -256
  646. package/src/__tests__/capture-ops.test.ts +0 -784
  647. package/src/__tests__/claudemd.test.ts +0 -282
  648. package/src/__tests__/content-hash.test.ts +0 -60
  649. package/src/__tests__/context-engine.test.ts +0 -251
  650. package/src/__tests__/core-ops.test.ts +0 -550
  651. package/src/__tests__/curator-extra-ops.test.ts +0 -383
  652. package/src/__tests__/deprecation.test.ts +0 -78
  653. package/src/__tests__/domain-ops.test.ts +0 -226
  654. package/src/__tests__/domain-packs.test.ts +0 -421
  655. package/src/__tests__/enforcement.test.ts +0 -153
  656. package/src/__tests__/errors.test.ts +0 -388
  657. package/src/__tests__/extensions.test.ts +0 -233
  658. package/src/__tests__/facade-factory.test.ts +0 -271
  659. package/src/__tests__/feature-flags.test.ts +0 -137
  660. package/src/__tests__/flows.test.ts +0 -604
  661. package/src/__tests__/git-vault-sync.test.ts +0 -230
  662. package/src/__tests__/governance.test.ts +0 -522
  663. package/src/__tests__/grading-ops.test.ts +0 -361
  664. package/src/__tests__/health-registry.test.ts +0 -173
  665. package/src/__tests__/identity-manager.test.ts +0 -243
  666. package/src/__tests__/intake-pipeline.test.ts +0 -162
  667. package/src/__tests__/intent-router.test.ts +0 -222
  668. package/src/__tests__/knowledge-review.test.ts +0 -104
  669. package/src/__tests__/llm-client.test.ts +0 -69
  670. package/src/__tests__/llm.test.ts +0 -556
  671. package/src/__tests__/loader.test.ts +0 -176
  672. package/src/__tests__/loop-ops.test.ts +0 -469
  673. package/src/__tests__/lsp-transport.test.ts +0 -442
  674. package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
  675. package/src/__tests__/memory-extra-ops.test.ts +0 -352
  676. package/src/__tests__/migration-runner.test.ts +0 -170
  677. package/src/__tests__/module-manifest-drift.test.ts +0 -59
  678. package/src/__tests__/normalize.test.ts +0 -85
  679. package/src/__tests__/obsidian-sync.test.ts +0 -354
  680. package/src/__tests__/orchestrate-ops.test.ts +0 -289
  681. package/src/__tests__/pack-ops.test.ts +0 -146
  682. package/src/__tests__/persistence.test.ts +0 -291
  683. package/src/__tests__/planning-extra-ops.test.ts +0 -706
  684. package/src/__tests__/playbook-executor.test.ts +0 -249
  685. package/src/__tests__/playbook-registry.test.ts +0 -326
  686. package/src/__tests__/playbook-seeder.test.ts +0 -163
  687. package/src/__tests__/playbook.test.ts +0 -389
  688. package/src/__tests__/plugin-ops.test.ts +0 -411
  689. package/src/__tests__/plugin-system.test.ts +0 -509
  690. package/src/__tests__/project-ops.test.ts +0 -381
  691. package/src/__tests__/replayable-stream.test.ts +0 -177
  692. package/src/__tests__/runtime.test.ts +0 -95
  693. package/src/__tests__/scope-detector.test.ts +0 -121
  694. package/src/__tests__/template-manager.test.ts +0 -222
  695. package/src/__tests__/token-resolver.test.ts +0 -79
  696. package/src/__tests__/transport.test.ts +0 -758
  697. package/src/__tests__/vault-branching.test.ts +0 -274
  698. package/src/__tests__/vault-extra-ops.test.ts +0 -482
  699. package/src/__tests__/vault-integrity.test.ts +0 -71
  700. package/src/__tests__/vault-manager.test.ts +0 -238
  701. package/src/__tests__/ws-transport.test.ts +0 -479
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Sync Ops — git, Obsidian, and pack sync operations.
3
+ *
4
+ * Covers:
5
+ * - #67: Vault push/pull git sync with conflict resolution
6
+ * - Obsidian bidirectional sync
7
+ * - #104: Vault export/import shareable packs
8
+ */
9
+
10
+ import { z } from 'zod';
11
+ import type { OpDefinition } from '../facades/types.js';
12
+ import type { AgentRuntime } from './types.js';
13
+ import { GitVaultSync, type GitVaultSyncConfig } from '../vault/git-vault-sync.js';
14
+ import type {
15
+ IntelligenceEntry,
16
+ IntelligenceBundle,
17
+ IntelligenceBundleLink,
18
+ } from '../intelligence/types.js';
19
+ import { LinkManager } from '../vault/linking.js';
20
+ import { ObsidianSync } from '../vault/obsidian-sync.js';
21
+
22
+ export function createSyncOps(runtime: AgentRuntime): OpDefinition[] {
23
+ const { vault } = runtime;
24
+
25
+ return [
26
+ // ─── Git Sync (#67) ───────────────────────────────────────────
27
+ {
28
+ name: 'vault_git_push',
29
+ description:
30
+ 'Push all vault entries to a git-tracked directory. Each entry becomes a JSON file under domain subdirectories.',
31
+ auth: 'write' as const,
32
+ schema: z.object({
33
+ repoDir: z.string().describe('Path to git-tracked vault directory'),
34
+ authorName: z.string().optional().describe('Git author name'),
35
+ authorEmail: z.string().optional().describe('Git author email'),
36
+ }),
37
+ handler: async (params) => {
38
+ const config: GitVaultSyncConfig = {
39
+ repoDir: params.repoDir as string,
40
+ authorName: params.authorName as string | undefined,
41
+ authorEmail: params.authorEmail as string | undefined,
42
+ };
43
+ const sync = new GitVaultSync(config);
44
+ await sync.init();
45
+ const { entries } = vault.exportAll();
46
+ return sync.syncAll(entries);
47
+ },
48
+ },
49
+ {
50
+ name: 'vault_git_pull',
51
+ description:
52
+ 'Pull entries from a git-tracked directory into the vault. Reads JSON files and imports with conflict resolution.',
53
+ auth: 'write' as const,
54
+ schema: z.object({
55
+ repoDir: z.string().describe('Path to git-tracked vault directory'),
56
+ onConflict: z
57
+ .enum(['git', 'vault'])
58
+ .optional()
59
+ .describe(
60
+ 'Conflict resolution: "git" (default) overwrites vault, "vault" keeps existing',
61
+ ),
62
+ }),
63
+ handler: async (params) => {
64
+ const config: GitVaultSyncConfig = {
65
+ repoDir: params.repoDir as string,
66
+ autoCommit: false,
67
+ };
68
+ const sync = new GitVaultSync(config);
69
+ await sync.init();
70
+ return sync.pull(vault, {
71
+ onConflict: params.onConflict as 'git' | 'vault' | undefined,
72
+ });
73
+ },
74
+ },
75
+ {
76
+ name: 'vault_git_sync',
77
+ description:
78
+ 'Bidirectional sync between vault and git directory. Pushes vault entries to git and pulls git-only entries into vault.',
79
+ auth: 'write' as const,
80
+ schema: z.object({
81
+ repoDir: z.string().describe('Path to git-tracked vault directory'),
82
+ onConflict: z
83
+ .enum(['git', 'vault'])
84
+ .optional()
85
+ .describe('Conflict resolution for entries that exist in both'),
86
+ authorName: z.string().optional(),
87
+ authorEmail: z.string().optional(),
88
+ }),
89
+ handler: async (params) => {
90
+ const config: GitVaultSyncConfig = {
91
+ repoDir: params.repoDir as string,
92
+ authorName: params.authorName as string | undefined,
93
+ authorEmail: params.authorEmail as string | undefined,
94
+ };
95
+ const sync = new GitVaultSync(config);
96
+ await sync.init();
97
+ return sync.sync(vault, {
98
+ onConflict: params.onConflict as 'git' | 'vault' | undefined,
99
+ });
100
+ },
101
+ },
102
+
103
+ // ─── Obsidian Sync ──────────────────────────────────────────
104
+ {
105
+ name: 'obsidian_export',
106
+ description:
107
+ 'Export vault entries to Obsidian-compatible markdown files with YAML frontmatter. Creates domain subdirectories.',
108
+ auth: 'read' as const,
109
+ schema: z.object({
110
+ obsidianDir: z.string().describe('Path to Obsidian vault directory'),
111
+ types: z.array(z.string()).optional().describe('Filter by entry types'),
112
+ domains: z.array(z.string()).optional().describe('Filter by domains'),
113
+ dryRun: z.boolean().optional().describe('Preview without writing files'),
114
+ }),
115
+ handler: async (params) => {
116
+ const sync = new ObsidianSync({ vault });
117
+ return sync.export(params.obsidianDir as string, {
118
+ types: params.types as string[] | undefined,
119
+ domains: params.domains as string[] | undefined,
120
+ dryRun: params.dryRun as boolean | undefined,
121
+ });
122
+ },
123
+ },
124
+ {
125
+ name: 'obsidian_import',
126
+ description:
127
+ 'Import Obsidian markdown files with YAML frontmatter into the vault. Parses title, type, domain, tags from frontmatter.',
128
+ auth: 'write' as const,
129
+ schema: z.object({
130
+ obsidianDir: z.string().describe('Path to Obsidian vault directory to import from'),
131
+ defaultType: z
132
+ .string()
133
+ .optional()
134
+ .describe('Default type for entries without frontmatter type'),
135
+ defaultDomain: z.string().optional().describe('Default domain for entries without one'),
136
+ dryRun: z.boolean().optional().describe('Preview without modifying vault'),
137
+ }),
138
+ handler: async (params) => {
139
+ const sync = new ObsidianSync({ vault });
140
+ return sync.import(params.obsidianDir as string, {
141
+ defaultType: params.defaultType as string | undefined,
142
+ defaultDomain: params.defaultDomain as string | undefined,
143
+ dryRun: params.dryRun as boolean | undefined,
144
+ });
145
+ },
146
+ },
147
+ {
148
+ name: 'obsidian_sync',
149
+ description:
150
+ 'Bidirectional sync between vault and Obsidian directory. Modes: push (vault→Obsidian), pull (Obsidian→vault), bidirectional.',
151
+ auth: 'write' as const,
152
+ schema: z.object({
153
+ obsidianDir: z.string().describe('Path to Obsidian vault directory'),
154
+ mode: z
155
+ .enum(['push', 'pull', 'bidirectional'])
156
+ .optional()
157
+ .describe('Sync mode. Default: bidirectional'),
158
+ dryRun: z.boolean().optional().describe('Preview without making changes'),
159
+ }),
160
+ handler: async (params) => {
161
+ const sync = new ObsidianSync({ vault });
162
+ return sync.sync(params.obsidianDir as string, {
163
+ mode: params.mode as 'push' | 'pull' | 'bidirectional' | undefined,
164
+ dryRun: params.dryRun as boolean | undefined,
165
+ });
166
+ },
167
+ },
168
+
169
+ // ─── Export to Pack (#104) ─────────────────────────────────────
170
+ {
171
+ name: 'vault_export_pack',
172
+ description:
173
+ 'Export vault entries as a shareable intelligence pack. Filters by tier, domain, or tags. Returns IntelligenceBundle format.',
174
+ auth: 'read' as const,
175
+ schema: z.object({
176
+ name: z.string().optional().describe('Pack name (default: agent ID)'),
177
+ version: z.string().optional().describe('Pack version (default: 1.0.0)'),
178
+ tier: z.enum(['agent', 'project', 'team']).optional().describe('Filter by scope tier'),
179
+ domain: z.string().optional().describe('Filter by domain'),
180
+ tags: z.array(z.string()).optional().describe('Filter by tags (OR match)'),
181
+ excludeIds: z.array(z.string()).optional().describe('Entry IDs to exclude'),
182
+ }),
183
+ handler: async (params) => {
184
+ const tier = params.tier as string | undefined;
185
+ const domain = params.domain as string | undefined;
186
+ const tags = params.tags as string[] | undefined;
187
+ const excludeIds = new Set((params.excludeIds as string[] | undefined) ?? []);
188
+
189
+ // Get all matching entries
190
+ let entries = vault.list({ domain, tags, limit: 10000 });
191
+
192
+ // Filter by tier if specified
193
+ if (tier) {
194
+ entries = entries.filter((e) => e.tier === tier);
195
+ }
196
+
197
+ // Exclude specified IDs
198
+ if (excludeIds.size > 0) {
199
+ entries = entries.filter((e) => !excludeIds.has(e.id));
200
+ }
201
+
202
+ // Group by domain into bundles
203
+ const byDomain = new Map<string, IntelligenceEntry[]>();
204
+ for (const entry of entries) {
205
+ const d = entry.domain;
206
+ if (!byDomain.has(d)) byDomain.set(d, []);
207
+ byDomain.get(d)!.push(entry);
208
+ }
209
+
210
+ // Collect links for exported entries (Zettelkasten edge export)
211
+ const entryIds = new Set(entries.map((e) => e.id));
212
+ const linkManager = new LinkManager(vault.getProvider());
213
+ const allLinks = linkManager.getAllLinksForEntries([...entryIds]);
214
+ // Only include links where BOTH endpoints are in the export set
215
+ const exportLinks = allLinks.filter(
216
+ (l) => entryIds.has(l.sourceId) && entryIds.has(l.targetId),
217
+ );
218
+
219
+ // Build a domain→links map (group by source entry's domain)
220
+ const entryDomainMap = new Map(entries.map((e) => [e.id, e.domain]));
221
+ const linksByDomain = new Map<string, IntelligenceBundleLink[]>();
222
+ for (const link of exportLinks) {
223
+ const linkDomain = entryDomainMap.get(link.sourceId) ?? 'unknown';
224
+ if (!linksByDomain.has(linkDomain)) linksByDomain.set(linkDomain, []);
225
+ linksByDomain.get(linkDomain)!.push({
226
+ sourceId: link.sourceId,
227
+ targetId: link.targetId,
228
+ linkType: link.linkType,
229
+ note: link.note,
230
+ });
231
+ }
232
+
233
+ const version = (params.version as string) ?? '1.0.0';
234
+ const bundles: IntelligenceBundle[] = [];
235
+ for (const [d, domainEntries] of byDomain) {
236
+ bundles.push({
237
+ domain: d,
238
+ version,
239
+ entries: domainEntries,
240
+ links: linksByDomain.get(d) ?? [],
241
+ });
242
+ }
243
+
244
+ return {
245
+ name: (params.name as string) ?? runtime.config.agentId,
246
+ version,
247
+ bundles,
248
+ totalEntries: entries.length,
249
+ totalLinks: exportLinks.length,
250
+ domains: [...byDomain.keys()],
251
+ };
252
+ },
253
+ },
254
+ {
255
+ name: 'vault_import_pack',
256
+ description:
257
+ 'Import an intelligence pack into the vault with content-hash dedup. Entries with duplicate content are skipped.',
258
+ auth: 'write' as const,
259
+ schema: z.object({
260
+ bundles: z
261
+ .array(
262
+ z.object({
263
+ domain: z.string(),
264
+ version: z.string(),
265
+ entries: z.array(z.record(z.unknown())),
266
+ }),
267
+ )
268
+ .describe('Array of IntelligenceBundle objects to import'),
269
+ tier: z
270
+ .enum(['agent', 'project', 'team'])
271
+ .optional()
272
+ .describe('Force all imported entries to this tier'),
273
+ }),
274
+ handler: async (params) => {
275
+ const bundles = params.bundles as Array<{
276
+ domain: string;
277
+ version: string;
278
+ entries: IntelligenceEntry[];
279
+ links?: IntelligenceBundleLink[];
280
+ }>;
281
+ const forceTier = params.tier as 'agent' | 'project' | 'team' | undefined;
282
+ let imported = 0;
283
+ let duplicates = 0;
284
+ let linksCreated = 0;
285
+ let linksSkipped = 0;
286
+
287
+ // Track ID remapping: bundle entry ID → actual vault entry ID
288
+ const idRemap = new Map<string, string>();
289
+ const linkManager = new LinkManager(vault.getProvider());
290
+
291
+ for (const bundle of bundles) {
292
+ const entries = bundle.entries.map((e) => ({
293
+ ...e,
294
+ tier: forceTier ?? e.tier ?? 'project',
295
+ }));
296
+ const results = vault.seedDedup(entries);
297
+ for (let i = 0; i < results.length; i++) {
298
+ const r = results[i];
299
+ const originalId = bundle.entries[i].id;
300
+ // For duplicates, map to the existing vault entry; for inserts, keep original ID
301
+ idRemap.set(originalId, r.existingId ?? r.id);
302
+ if (r.action === 'inserted') imported++;
303
+ else duplicates++;
304
+ }
305
+
306
+ // Import links if present
307
+ if (bundle.links && bundle.links.length > 0) {
308
+ for (const link of bundle.links) {
309
+ const sourceId = idRemap.get(link.sourceId);
310
+ const targetId = idRemap.get(link.targetId);
311
+ if (sourceId && targetId) {
312
+ linkManager.addLink(sourceId, targetId, link.linkType, link.note);
313
+ linksCreated++;
314
+ } else {
315
+ linksSkipped++;
316
+ }
317
+ }
318
+ }
319
+ }
320
+
321
+ return { imported, duplicates, linksCreated, linksSkipped, total: imported + duplicates };
322
+ },
323
+ },
324
+ ];
325
+ }
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Unit tests for telemetry-ops — 2 ops: telemetry_errors, telemetry_slow_ops.
3
+ */
4
+
5
+ import { describe, it, expect } from 'vitest';
6
+ import { captureOps, executeOp } from '../engine/test-helpers.js';
7
+ import { createTelemetryOps } from './telemetry-ops.js';
8
+ import type { AgentRuntime } from './types.js';
9
+
10
+ function makeTelemetryStub(
11
+ stats: { errorsByOp: Record<string, number>; slowestOps: Array<{ op: string; avgMs: number }>; avgDurationMs: number },
12
+ recent: Array<{ op: string; facade: string; success: boolean; error?: string; timestamp: number }>,
13
+ ) {
14
+ return {
15
+ getStats: () => stats,
16
+ getRecent: (_limit: number) => recent,
17
+ };
18
+ }
19
+
20
+ describe('telemetry-ops', () => {
21
+ describe('telemetry_errors', () => {
22
+ it('returns empty when no errors', async () => {
23
+ const telemetry = makeTelemetryStub(
24
+ { errorsByOp: {}, slowestOps: [], avgDurationMs: 10 },
25
+ [],
26
+ );
27
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
28
+ const res = await executeOp(ops, 'telemetry_errors');
29
+
30
+ expect(res.success).toBe(true);
31
+ const data = res.data as { errorCount: number; errorsByOp: Record<string, number>; recentErrors: unknown[] };
32
+ expect(data.errorCount).toBe(0);
33
+ expect(data.recentErrors).toEqual([]);
34
+ expect(data.errorsByOp).toEqual({});
35
+ });
36
+
37
+ it('returns recent errors grouped by op', async () => {
38
+ const recent = [
39
+ { op: 'vault_search', facade: 'vault', success: false, error: 'timeout', timestamp: 1000 },
40
+ { op: 'vault_search', facade: 'vault', success: false, error: 'timeout', timestamp: 1001 },
41
+ { op: 'brain_recommend', facade: 'brain', success: true, timestamp: 1002 },
42
+ { op: 'plan_create', facade: 'plan', success: false, error: 'invalid', timestamp: 1003 },
43
+ ];
44
+ const telemetry = makeTelemetryStub(
45
+ { errorsByOp: { vault_search: 2, plan_create: 1 }, slowestOps: [], avgDurationMs: 50 },
46
+ recent,
47
+ );
48
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
49
+ const res = await executeOp(ops, 'telemetry_errors');
50
+
51
+ expect(res.success).toBe(true);
52
+ const data = res.data as { errorCount: number; errorsByOp: Record<string, number>; recentErrors: Array<{ op: string }> };
53
+ expect(data.errorCount).toBe(3);
54
+ expect(data.errorsByOp).toEqual({ vault_search: 2, plan_create: 1 });
55
+ expect(data.recentErrors).toHaveLength(3);
56
+ expect(data.recentErrors[0].op).toBe('vault_search');
57
+ });
58
+
59
+ it('caps recentErrors at 20', async () => {
60
+ const recent = Array.from({ length: 30 }, (_, i) => ({
61
+ op: `op_${i}`, facade: 'test', success: false, error: 'err', timestamp: i,
62
+ }));
63
+ const telemetry = makeTelemetryStub(
64
+ { errorsByOp: {}, slowestOps: [], avgDurationMs: 0 },
65
+ recent,
66
+ );
67
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
68
+ const res = await executeOp(ops, 'telemetry_errors');
69
+
70
+ const data = res.data as { recentErrors: unknown[] };
71
+ expect(data.recentErrors).toHaveLength(20);
72
+ });
73
+ });
74
+
75
+ describe('telemetry_slow_ops', () => {
76
+ it('filters by default threshold of 100ms', async () => {
77
+ const telemetry = makeTelemetryStub(
78
+ {
79
+ errorsByOp: {},
80
+ slowestOps: [
81
+ { op: 'vault_search', avgMs: 200 },
82
+ { op: 'brain_recommend', avgMs: 50 },
83
+ { op: 'plan_create', avgMs: 150 },
84
+ ],
85
+ avgDurationMs: 133,
86
+ },
87
+ [],
88
+ );
89
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
90
+ const res = await executeOp(ops, 'telemetry_slow_ops', {});
91
+
92
+ expect(res.success).toBe(true);
93
+ const data = res.data as { slowOps: Array<{ op: string; avgMs: number }>; avgDurationMs: number };
94
+ expect(data.slowOps).toHaveLength(2);
95
+ expect(data.slowOps.map((o) => o.op)).toEqual(['vault_search', 'plan_create']);
96
+ expect(data.avgDurationMs).toBe(133);
97
+ });
98
+
99
+ it('respects custom threshold', async () => {
100
+ const telemetry = makeTelemetryStub(
101
+ {
102
+ errorsByOp: {},
103
+ slowestOps: [
104
+ { op: 'a', avgMs: 300 },
105
+ { op: 'b', avgMs: 200 },
106
+ { op: 'c', avgMs: 100 },
107
+ ],
108
+ avgDurationMs: 200,
109
+ },
110
+ [],
111
+ );
112
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
113
+ const res = await executeOp(ops, 'telemetry_slow_ops', { threshold: 250 });
114
+
115
+ const data = res.data as { slowOps: Array<{ op: string }> };
116
+ expect(data.slowOps).toHaveLength(1);
117
+ expect(data.slowOps[0].op).toBe('a');
118
+ });
119
+
120
+ it('returns empty when no ops exceed threshold', async () => {
121
+ const telemetry = makeTelemetryStub(
122
+ { errorsByOp: {}, slowestOps: [{ op: 'fast', avgMs: 5 }], avgDurationMs: 5 },
123
+ [],
124
+ );
125
+ const ops = captureOps(createTelemetryOps({ telemetry } as unknown as AgentRuntime));
126
+ const res = await executeOp(ops, 'telemetry_slow_ops', { threshold: 100 });
127
+
128
+ const data = res.data as { slowOps: unknown[] };
129
+ expect(data.slowOps).toHaveLength(0);
130
+ });
131
+ });
132
+ });
@@ -33,21 +33,23 @@ import type { KnowledgeSynthesizer } from '../brain/knowledge-synthesizer.js';
33
33
  import type { ChainRunner } from '../flows/chain-runner.js';
34
34
  import type { JobQueue } from '../queue/job-queue.js';
35
35
  import type { PipelineRunner } from '../queue/pipeline-runner.js';
36
+ import type { OperatorProfileStore } from '../operator/operator-profile.js';
37
+ import type { ContextHealthMonitor } from './context-health.js';
36
38
 
37
39
  /**
38
40
  * Configuration for creating an agent runtime.
39
41
  * Only `agentId` is required — everything else has sensible defaults.
40
42
  */
41
43
  export interface AgentRuntimeConfig {
42
- /** Agent identifier (kebab-case), e.g. 'my-agent'. Used for paths: ~/.{agentId}/ */
44
+ /** Agent identifier (kebab-case), e.g. 'my-agent'. Used for paths: ~/.soleri/{agentId}/ */
43
45
  agentId: string;
44
- /** Path to vault database. Default: ~/.{agentId}/vault.db */
46
+ /** Path to vault database. Default: ~/.soleri/{agentId}/vault.db */
45
47
  vaultPath?: string;
46
- /** Path to plans JSON store. Default: ~/.{agentId}/plans.json */
48
+ /** Path to plans JSON store. Default: ~/.soleri/{agentId}/plans.json */
47
49
  plansPath?: string;
48
50
  /** Intelligence data directory to seed vault from. Optional. */
49
51
  dataDir?: string;
50
- /** Path to prompt templates directory. Default: ~/.{agentId}/templates */
52
+ /** Path to prompt templates directory. Default: ~/.soleri/{agentId}/templates */
51
53
  templatesDir?: string;
52
54
  /** Minimum log level. Default: 'info' (or SOLERI_LOG_LEVEL env var). */
53
55
  logLevel?: LogLevel;
@@ -117,10 +119,14 @@ export interface AgentRuntime {
117
119
  jobQueue: JobQueue;
118
120
  /** Pipeline runner — background polling loop for job execution. */
119
121
  pipelineRunner: PipelineRunner;
122
+ /** Operator profile — personality learning, signals, adaptation. */
123
+ operatorProfile: OperatorProfileStore;
120
124
  /** Agent persona — defines character, voice, and cultural texture. */
121
125
  persona: import('../persona/types.js').PersonaConfig;
122
126
  /** Generated persona system instructions for LLM context. */
123
127
  personaInstructions: import('../persona/types.js').PersonaSystemInstructions;
128
+ /** Context health monitor — tracks tool call volume and context window fill. */
129
+ contextHealth: ContextHealthMonitor;
124
130
  /** Timestamp (ms since epoch) when this runtime was created. */
125
131
  createdAt: number;
126
132
  /** Close the vault database connection. Call on shutdown. */