@soleri/core 9.0.4 → 9.3.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 (744) hide show
  1. package/data/flows/build.flow.yaml +8 -9
  2. package/data/flows/deliver.flow.yaml +9 -10
  3. package/data/flows/design.flow.yaml +3 -4
  4. package/data/flows/enhance.flow.yaml +5 -6
  5. package/data/flows/explore.flow.yaml +3 -4
  6. package/data/flows/fix.flow.yaml +5 -6
  7. package/data/flows/plan.flow.yaml +4 -5
  8. package/data/flows/review.flow.yaml +3 -4
  9. package/dist/brain/intelligence.d.ts +27 -0
  10. package/dist/brain/intelligence.d.ts.map +1 -1
  11. package/dist/brain/intelligence.js +160 -14
  12. package/dist/brain/intelligence.js.map +1 -1
  13. package/dist/brain/learning-radar.d.ts +4 -0
  14. package/dist/brain/learning-radar.d.ts.map +1 -1
  15. package/dist/brain/learning-radar.js +20 -1
  16. package/dist/brain/learning-radar.js.map +1 -1
  17. package/dist/brain/strength-scorer.d.ts +31 -0
  18. package/dist/brain/strength-scorer.d.ts.map +1 -0
  19. package/dist/brain/strength-scorer.js +264 -0
  20. package/dist/brain/strength-scorer.js.map +1 -0
  21. package/dist/chat/agent-loop.d.ts.map +1 -1
  22. package/dist/chat/agent-loop.js +2 -0
  23. package/dist/chat/agent-loop.js.map +1 -1
  24. package/dist/chat/notifications.d.ts.map +1 -1
  25. package/dist/chat/notifications.js +2 -0
  26. package/dist/chat/notifications.js.map +1 -1
  27. package/dist/claudemd/compose.js +1 -1
  28. package/dist/claudemd/compose.js.map +1 -1
  29. package/dist/control/intent-router.d.ts.map +1 -1
  30. package/dist/control/intent-router.js +12 -4
  31. package/dist/control/intent-router.js.map +1 -1
  32. package/dist/curator/contradiction-detector.d.ts +27 -0
  33. package/dist/curator/contradiction-detector.d.ts.map +1 -0
  34. package/dist/curator/contradiction-detector.js +62 -0
  35. package/dist/curator/contradiction-detector.js.map +1 -0
  36. package/dist/curator/curator.d.ts +3 -4
  37. package/dist/curator/curator.d.ts.map +1 -1
  38. package/dist/curator/curator.js +94 -453
  39. package/dist/curator/curator.js.map +1 -1
  40. package/dist/curator/duplicate-detector.d.ts +14 -0
  41. package/dist/curator/duplicate-detector.d.ts.map +1 -0
  42. package/dist/curator/duplicate-detector.js +77 -0
  43. package/dist/curator/duplicate-detector.js.map +1 -0
  44. package/dist/curator/health-audit.d.ts +15 -0
  45. package/dist/curator/health-audit.d.ts.map +1 -0
  46. package/dist/curator/health-audit.js +97 -0
  47. package/dist/curator/health-audit.js.map +1 -0
  48. package/dist/curator/metadata-enricher.d.ts +17 -0
  49. package/dist/curator/metadata-enricher.d.ts.map +1 -0
  50. package/dist/curator/metadata-enricher.js +60 -0
  51. package/dist/curator/metadata-enricher.js.map +1 -0
  52. package/dist/curator/schema.d.ts +7 -0
  53. package/dist/curator/schema.d.ts.map +1 -0
  54. package/dist/curator/schema.js +62 -0
  55. package/dist/curator/schema.js.map +1 -0
  56. package/dist/curator/tag-manager.d.ts +36 -0
  57. package/dist/curator/tag-manager.d.ts.map +1 -0
  58. package/dist/curator/tag-manager.js +78 -0
  59. package/dist/curator/tag-manager.js.map +1 -0
  60. package/dist/engine/bin/soleri-engine.js +24 -3
  61. package/dist/engine/bin/soleri-engine.js.map +1 -1
  62. package/dist/engine/core-ops.d.ts.map +1 -1
  63. package/dist/engine/core-ops.js +23 -8
  64. package/dist/engine/core-ops.js.map +1 -1
  65. package/dist/engine/module-manifest.d.ts.map +1 -1
  66. package/dist/engine/module-manifest.js +42 -2
  67. package/dist/engine/module-manifest.js.map +1 -1
  68. package/dist/engine/register-engine.d.ts.map +1 -1
  69. package/dist/engine/register-engine.js +50 -2
  70. package/dist/engine/register-engine.js.map +1 -1
  71. package/dist/errors/retry.d.ts.map +1 -1
  72. package/dist/errors/retry.js +2 -0
  73. package/dist/errors/retry.js.map +1 -1
  74. package/dist/facades/types.d.ts +1 -1
  75. package/dist/flows/chain-types.d.ts +18 -18
  76. package/dist/flows/gate-evaluator.d.ts.map +1 -1
  77. package/dist/flows/gate-evaluator.js +22 -0
  78. package/dist/flows/gate-evaluator.js.map +1 -1
  79. package/dist/flows/types.d.ts +157 -28
  80. package/dist/flows/types.d.ts.map +1 -1
  81. package/dist/flows/types.js +4 -0
  82. package/dist/flows/types.js.map +1 -1
  83. package/dist/index.d.ts +10 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +9 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  88. package/dist/intake/intake-pipeline.js +1 -0
  89. package/dist/intake/intake-pipeline.js.map +1 -1
  90. package/dist/intake/text-ingester.d.ts.map +1 -1
  91. package/dist/intake/text-ingester.js +2 -0
  92. package/dist/intake/text-ingester.js.map +1 -1
  93. package/dist/llm/key-pool.d.ts +1 -1
  94. package/dist/llm/key-pool.d.ts.map +1 -1
  95. package/dist/llm/key-pool.js +3 -4
  96. package/dist/llm/key-pool.js.map +1 -1
  97. package/dist/llm/utils.d.ts.map +1 -1
  98. package/dist/llm/utils.js +2 -0
  99. package/dist/llm/utils.js.map +1 -1
  100. package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
  101. package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
  102. package/dist/migrations/migration-runner.test-helpers.js +47 -0
  103. package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
  104. package/dist/operator/operator-profile.d.ts +44 -0
  105. package/dist/operator/operator-profile.d.ts.map +1 -0
  106. package/dist/operator/operator-profile.js +383 -0
  107. package/dist/operator/operator-profile.js.map +1 -0
  108. package/dist/operator/operator-signals.d.ts +45 -0
  109. package/dist/operator/operator-signals.d.ts.map +1 -0
  110. package/dist/operator/operator-signals.js +228 -0
  111. package/dist/operator/operator-signals.js.map +1 -0
  112. package/dist/operator/operator-types.d.ts +360 -0
  113. package/dist/operator/operator-types.d.ts.map +1 -0
  114. package/dist/operator/operator-types.js +24 -0
  115. package/dist/operator/operator-types.js.map +1 -0
  116. package/dist/packs/types.d.ts +27 -27
  117. package/dist/paths.d.ts +40 -0
  118. package/dist/paths.d.ts.map +1 -0
  119. package/dist/paths.js +98 -0
  120. package/dist/paths.js.map +1 -0
  121. package/dist/persistence/index.d.ts +1 -1
  122. package/dist/persistence/index.d.ts.map +1 -1
  123. package/dist/persistence/index.js +1 -1
  124. package/dist/persistence/index.js.map +1 -1
  125. package/dist/persistence/sqlite-provider.d.ts +2 -0
  126. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  127. package/dist/persistence/sqlite-provider.js +8 -5
  128. package/dist/persistence/sqlite-provider.js.map +1 -1
  129. package/dist/planning/evidence-collector.d.ts +13 -1
  130. package/dist/planning/evidence-collector.d.ts.map +1 -1
  131. package/dist/planning/evidence-collector.js +33 -0
  132. package/dist/planning/evidence-collector.js.map +1 -1
  133. package/dist/planning/gap-analysis.d.ts +5 -4
  134. package/dist/planning/gap-analysis.d.ts.map +1 -1
  135. package/dist/planning/gap-analysis.js +7 -341
  136. package/dist/planning/gap-analysis.js.map +1 -1
  137. package/dist/planning/gap-passes.d.ts +19 -0
  138. package/dist/planning/gap-passes.d.ts.map +1 -0
  139. package/dist/planning/gap-passes.js +174 -0
  140. package/dist/planning/gap-passes.js.map +1 -0
  141. package/dist/planning/gap-patterns.d.ts +29 -0
  142. package/dist/planning/gap-patterns.d.ts.map +1 -0
  143. package/dist/planning/gap-patterns.js +175 -0
  144. package/dist/planning/gap-patterns.js.map +1 -0
  145. package/dist/planning/gap-types.d.ts +1 -1
  146. package/dist/planning/gap-types.d.ts.map +1 -1
  147. package/dist/planning/gap-types.js +1 -0
  148. package/dist/planning/gap-types.js.map +1 -1
  149. package/dist/planning/github-projection.d.ts +122 -0
  150. package/dist/planning/github-projection.d.ts.map +1 -0
  151. package/dist/planning/github-projection.js +313 -0
  152. package/dist/planning/github-projection.js.map +1 -0
  153. package/dist/planning/impact-analyzer.d.ts +26 -0
  154. package/dist/planning/impact-analyzer.d.ts.map +1 -0
  155. package/dist/planning/impact-analyzer.js +201 -0
  156. package/dist/planning/impact-analyzer.js.map +1 -0
  157. package/dist/planning/plan-lifecycle.d.ts +136 -0
  158. package/dist/planning/plan-lifecycle.d.ts.map +1 -0
  159. package/dist/planning/plan-lifecycle.js +309 -0
  160. package/dist/planning/plan-lifecycle.js.map +1 -0
  161. package/dist/planning/planner-types.d.ts +202 -0
  162. package/dist/planning/planner-types.d.ts.map +1 -0
  163. package/dist/planning/planner-types.js +6 -0
  164. package/dist/planning/planner-types.js.map +1 -0
  165. package/dist/planning/planner.d.ts +31 -383
  166. package/dist/planning/planner.d.ts.map +1 -1
  167. package/dist/planning/planner.js +151 -832
  168. package/dist/planning/planner.js.map +1 -1
  169. package/dist/planning/rationalization-detector.d.ts +32 -0
  170. package/dist/planning/rationalization-detector.d.ts.map +1 -0
  171. package/dist/planning/rationalization-detector.js +89 -0
  172. package/dist/planning/rationalization-detector.js.map +1 -0
  173. package/dist/planning/reconciliation-engine.d.ts +47 -0
  174. package/dist/planning/reconciliation-engine.d.ts.map +1 -0
  175. package/dist/planning/reconciliation-engine.js +128 -0
  176. package/dist/planning/reconciliation-engine.js.map +1 -0
  177. package/dist/planning/task-verifier.d.ts +85 -0
  178. package/dist/planning/task-verifier.d.ts.map +1 -0
  179. package/dist/planning/task-verifier.js +235 -0
  180. package/dist/planning/task-verifier.js.map +1 -0
  181. package/dist/plugins/types.d.ts +4 -4
  182. package/dist/runtime/admin-ops.d.ts +2 -2
  183. package/dist/runtime/admin-ops.d.ts.map +1 -1
  184. package/dist/runtime/admin-ops.js +44 -17
  185. package/dist/runtime/admin-ops.js.map +1 -1
  186. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  187. package/dist/runtime/admin-setup-ops.js +22 -46
  188. package/dist/runtime/admin-setup-ops.js.map +1 -1
  189. package/dist/runtime/archive-ops.d.ts +10 -0
  190. package/dist/runtime/archive-ops.d.ts.map +1 -0
  191. package/dist/runtime/archive-ops.js +310 -0
  192. package/dist/runtime/archive-ops.js.map +1 -0
  193. package/dist/runtime/branching-ops.d.ts +12 -0
  194. package/dist/runtime/branching-ops.d.ts.map +1 -0
  195. package/dist/runtime/branching-ops.js +100 -0
  196. package/dist/runtime/branching-ops.js.map +1 -0
  197. package/dist/runtime/capture-ops.d.ts.map +1 -1
  198. package/dist/runtime/capture-ops.js +42 -7
  199. package/dist/runtime/capture-ops.js.map +1 -1
  200. package/dist/runtime/claude-md-helpers.js +1 -1
  201. package/dist/runtime/claude-md-helpers.js.map +1 -1
  202. package/dist/runtime/context-health.d.ts +31 -0
  203. package/dist/runtime/context-health.d.ts.map +1 -0
  204. package/dist/runtime/context-health.js +57 -0
  205. package/dist/runtime/context-health.js.map +1 -0
  206. package/dist/runtime/facades/archive-facade.d.ts +10 -0
  207. package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
  208. package/dist/runtime/facades/archive-facade.js +11 -0
  209. package/dist/runtime/facades/archive-facade.js.map +1 -0
  210. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  211. package/dist/runtime/facades/brain-facade.js +2 -0
  212. package/dist/runtime/facades/brain-facade.js.map +1 -1
  213. package/dist/runtime/facades/branching-facade.d.ts +7 -0
  214. package/dist/runtime/facades/branching-facade.d.ts.map +1 -0
  215. package/dist/runtime/facades/branching-facade.js +8 -0
  216. package/dist/runtime/facades/branching-facade.js.map +1 -0
  217. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  218. package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
  219. package/dist/runtime/facades/chat-facade.js +15 -800
  220. package/dist/runtime/facades/chat-facade.js.map +1 -1
  221. package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
  222. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
  223. package/dist/runtime/facades/chat-service-ops.js +332 -0
  224. package/dist/runtime/facades/chat-service-ops.js.map +1 -0
  225. package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
  226. package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
  227. package/dist/runtime/facades/chat-session-ops.js +136 -0
  228. package/dist/runtime/facades/chat-session-ops.js.map +1 -0
  229. package/dist/runtime/facades/chat-state.d.ts +31 -0
  230. package/dist/runtime/facades/chat-state.d.ts.map +1 -0
  231. package/dist/runtime/facades/chat-state.js +32 -0
  232. package/dist/runtime/facades/chat-state.js.map +1 -0
  233. package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
  234. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
  235. package/dist/runtime/facades/chat-transport-ops.js +337 -0
  236. package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
  237. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  238. package/dist/runtime/facades/control-facade.js +4 -1
  239. package/dist/runtime/facades/control-facade.js.map +1 -1
  240. package/dist/runtime/facades/index.d.ts.map +1 -1
  241. package/dist/runtime/facades/index.js +48 -0
  242. package/dist/runtime/facades/index.js.map +1 -1
  243. package/dist/runtime/facades/intake-facade.d.ts +9 -0
  244. package/dist/runtime/facades/intake-facade.d.ts.map +1 -0
  245. package/dist/runtime/facades/intake-facade.js +11 -0
  246. package/dist/runtime/facades/intake-facade.js.map +1 -0
  247. package/dist/runtime/facades/links-facade.d.ts +9 -0
  248. package/dist/runtime/facades/links-facade.d.ts.map +1 -0
  249. package/dist/runtime/facades/links-facade.js +10 -0
  250. package/dist/runtime/facades/links-facade.js.map +1 -0
  251. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  252. package/dist/runtime/facades/memory-facade.js +75 -6
  253. package/dist/runtime/facades/memory-facade.js.map +1 -1
  254. package/dist/runtime/facades/operator-facade.d.ts +8 -0
  255. package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
  256. package/dist/runtime/facades/operator-facade.js +220 -0
  257. package/dist/runtime/facades/operator-facade.js.map +1 -0
  258. package/dist/runtime/facades/orchestrate-facade.js +3 -3
  259. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  260. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  261. package/dist/runtime/facades/plan-facade.js +42 -6
  262. package/dist/runtime/facades/plan-facade.js.map +1 -1
  263. package/dist/runtime/facades/review-facade.d.ts +7 -0
  264. package/dist/runtime/facades/review-facade.d.ts.map +1 -0
  265. package/dist/runtime/facades/review-facade.js +8 -0
  266. package/dist/runtime/facades/review-facade.js.map +1 -0
  267. package/dist/runtime/facades/sync-facade.d.ts +7 -0
  268. package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
  269. package/dist/runtime/facades/sync-facade.js +8 -0
  270. package/dist/runtime/facades/sync-facade.js.map +1 -0
  271. package/dist/runtime/facades/tier-facade.d.ts +7 -0
  272. package/dist/runtime/facades/tier-facade.d.ts.map +1 -0
  273. package/dist/runtime/facades/tier-facade.js +8 -0
  274. package/dist/runtime/facades/tier-facade.js.map +1 -0
  275. package/dist/runtime/facades/vault-facade.d.ts +12 -1
  276. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  277. package/dist/runtime/facades/vault-facade.js +55 -251
  278. package/dist/runtime/facades/vault-facade.js.map +1 -1
  279. package/dist/runtime/github-integration.d.ts +49 -0
  280. package/dist/runtime/github-integration.d.ts.map +1 -0
  281. package/dist/runtime/github-integration.js +120 -0
  282. package/dist/runtime/github-integration.js.map +1 -0
  283. package/dist/runtime/grading-ops.js +1 -1
  284. package/dist/runtime/grading-ops.js.map +1 -1
  285. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  286. package/dist/runtime/memory-extra-ops.js +6 -2
  287. package/dist/runtime/memory-extra-ops.js.map +1 -1
  288. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  289. package/dist/runtime/orchestrate-ops.js +386 -37
  290. package/dist/runtime/orchestrate-ops.js.map +1 -1
  291. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  292. package/dist/runtime/planning-extra-ops.js +69 -4
  293. package/dist/runtime/planning-extra-ops.js.map +1 -1
  294. package/dist/runtime/review-ops.d.ts +10 -0
  295. package/dist/runtime/review-ops.d.ts.map +1 -0
  296. package/dist/runtime/review-ops.js +97 -0
  297. package/dist/runtime/review-ops.js.map +1 -0
  298. package/dist/runtime/runtime.d.ts.map +1 -1
  299. package/dist/runtime/runtime.js +29 -12
  300. package/dist/runtime/runtime.js.map +1 -1
  301. package/dist/runtime/session-briefing.d.ts +3 -0
  302. package/dist/runtime/session-briefing.d.ts.map +1 -1
  303. package/dist/runtime/session-briefing.js +72 -1
  304. package/dist/runtime/session-briefing.js.map +1 -1
  305. package/dist/runtime/sync-ops.d.ts +12 -0
  306. package/dist/runtime/sync-ops.d.ts.map +1 -0
  307. package/dist/runtime/sync-ops.js +288 -0
  308. package/dist/runtime/sync-ops.js.map +1 -0
  309. package/dist/runtime/tier-ops.d.ts +13 -0
  310. package/dist/runtime/tier-ops.d.ts.map +1 -0
  311. package/dist/runtime/tier-ops.js +110 -0
  312. package/dist/runtime/tier-ops.js.map +1 -0
  313. package/dist/runtime/types.d.ts +10 -4
  314. package/dist/runtime/types.d.ts.map +1 -1
  315. package/dist/runtime/vault-extra-ops.d.ts +5 -4
  316. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  317. package/dist/runtime/vault-extra-ops.js +5 -300
  318. package/dist/runtime/vault-extra-ops.js.map +1 -1
  319. package/dist/runtime/vault-sharing-ops.d.ts +4 -4
  320. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
  321. package/dist/runtime/vault-sharing-ops.js +5 -300
  322. package/dist/runtime/vault-sharing-ops.js.map +1 -1
  323. package/dist/skills/sync-skills.d.ts +27 -0
  324. package/dist/skills/sync-skills.d.ts.map +1 -0
  325. package/dist/skills/sync-skills.js +81 -0
  326. package/dist/skills/sync-skills.js.map +1 -0
  327. package/dist/update-check.d.ts +14 -0
  328. package/dist/update-check.d.ts.map +1 -0
  329. package/dist/update-check.js +96 -0
  330. package/dist/update-check.js.map +1 -0
  331. package/dist/vault/linking.d.ts +10 -12
  332. package/dist/vault/linking.d.ts.map +1 -1
  333. package/dist/vault/linking.js +140 -161
  334. package/dist/vault/linking.js.map +1 -1
  335. package/dist/vault/vault-entries.d.ts +69 -0
  336. package/dist/vault/vault-entries.d.ts.map +1 -0
  337. package/dist/vault/vault-entries.js +299 -0
  338. package/dist/vault/vault-entries.js.map +1 -0
  339. package/dist/vault/vault-interfaces.d.ts +153 -0
  340. package/dist/vault/vault-interfaces.d.ts.map +1 -0
  341. package/dist/vault/vault-interfaces.js +2 -0
  342. package/dist/vault/vault-interfaces.js.map +1 -0
  343. package/dist/vault/vault-maintenance.d.ts +40 -0
  344. package/dist/vault/vault-maintenance.d.ts.map +1 -0
  345. package/dist/vault/vault-maintenance.js +146 -0
  346. package/dist/vault/vault-maintenance.js.map +1 -0
  347. package/dist/vault/vault-markdown-sync.d.ts +22 -0
  348. package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
  349. package/dist/vault/vault-markdown-sync.js +143 -0
  350. package/dist/vault/vault-markdown-sync.js.map +1 -0
  351. package/dist/vault/vault-memories.d.ts +61 -0
  352. package/dist/vault/vault-memories.d.ts.map +1 -0
  353. package/dist/vault/vault-memories.js +242 -0
  354. package/dist/vault/vault-memories.js.map +1 -0
  355. package/dist/vault/vault-schema.d.ts +9 -0
  356. package/dist/vault/vault-schema.d.ts.map +1 -0
  357. package/dist/vault/vault-schema.js +205 -0
  358. package/dist/vault/vault-schema.js.map +1 -0
  359. package/dist/vault/vault.d.ts +29 -81
  360. package/dist/vault/vault.d.ts.map +1 -1
  361. package/dist/vault/vault.js +82 -931
  362. package/dist/vault/vault.js.map +1 -1
  363. package/package.json +7 -7
  364. package/src/agency/agency-manager.test.ts +620 -0
  365. package/src/agency/default-rules.test.ts +236 -0
  366. package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
  367. package/src/{__tests__ → brain}/brain.test.ts +1 -1
  368. package/src/brain/intelligence.ts +196 -15
  369. package/src/brain/learning-radar.ts +22 -1
  370. package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
  371. package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
  372. package/src/capabilities/chain-mapping.test.ts +66 -0
  373. package/src/capabilities/registry.test.ts +359 -0
  374. package/src/chat/agent-loop.test.ts +384 -0
  375. package/src/chat/agent-loop.ts +2 -0
  376. package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
  377. package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
  378. package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
  379. package/src/chat/mcp-bridge.test.ts +178 -0
  380. package/src/chat/notifications.ts +2 -0
  381. package/src/chat/output-compressor.test.ts +164 -0
  382. package/src/claudemd/compose.test.ts +178 -0
  383. package/src/claudemd/compose.ts +1 -1
  384. package/src/claudemd/inject.test.ts +201 -0
  385. package/src/context/context-engine.test.ts +506 -0
  386. package/src/control/identity-manager.test.ts +305 -0
  387. package/src/control/intent-router.test.ts +360 -0
  388. package/src/control/intent-router.ts +13 -4
  389. package/src/curator/classifier.test.ts +110 -0
  390. package/src/curator/contradiction-detector.test.ts +205 -0
  391. package/src/curator/contradiction-detector.ts +87 -0
  392. package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
  393. package/src/{__tests__ → curator}/curator.test.ts +77 -1
  394. package/src/curator/curator.ts +160 -600
  395. package/src/curator/duplicate-detector.test.ts +245 -0
  396. package/src/curator/duplicate-detector.ts +103 -0
  397. package/src/curator/health-audit.ts +126 -0
  398. package/src/curator/metadata-enricher.ts +84 -0
  399. package/src/curator/quality-gate.test.ts +175 -0
  400. package/src/curator/schema.ts +65 -0
  401. package/src/curator/tag-manager.test.ts +173 -0
  402. package/src/curator/tag-manager.ts +109 -0
  403. package/src/domain-packs/inject-rules.test.ts +117 -0
  404. package/src/domain-packs/knowledge-installer.test.ts +163 -0
  405. package/src/domain-packs/loader.test.ts +86 -0
  406. package/src/domain-packs/pack-runtime.test.ts +140 -0
  407. package/src/domain-packs/skills-installer.test.ts +135 -0
  408. package/src/domain-packs/token-resolver.test.ts +148 -0
  409. package/src/domain-packs/types.test.ts +144 -0
  410. package/src/enforcement/adapters/claude-code.test.ts +216 -0
  411. package/src/enforcement/registry.test.ts +258 -0
  412. package/src/engine/bin/soleri-engine.ts +30 -4
  413. package/src/engine/core-ops.test.ts +254 -0
  414. package/src/engine/core-ops.ts +25 -8
  415. package/src/engine/module-manifest.test.ts +125 -0
  416. package/src/engine/module-manifest.ts +42 -2
  417. package/src/engine/register-engine.test.ts +235 -0
  418. package/src/engine/register-engine.ts +50 -3
  419. package/src/errors/classify.test.ts +203 -0
  420. package/src/errors/retry.test.ts +153 -0
  421. package/src/errors/retry.ts +2 -0
  422. package/src/errors/types.test.ts +108 -0
  423. package/src/events/event-bus.test.ts +149 -0
  424. package/src/extensions/middleware.test.ts +234 -0
  425. package/src/facades/facade-factory.test.ts +470 -0
  426. package/src/flows/chain-runner.test.ts +273 -0
  427. package/src/flows/context-router.test.ts +52 -0
  428. package/src/flows/dispatch-registry.test.ts +128 -0
  429. package/src/flows/epilogue.test.ts +113 -0
  430. package/src/flows/executor.test.ts +263 -0
  431. package/src/flows/gate-evaluator.test.ts +200 -0
  432. package/src/flows/gate-evaluator.ts +23 -0
  433. package/src/flows/types.ts +4 -0
  434. package/src/governance/governance.test.ts +842 -0
  435. package/src/{__tests__ → health}/health-registry.test.ts +75 -55
  436. package/src/health/vault-integrity.test.ts +110 -0
  437. package/src/index.ts +92 -0
  438. package/src/intake/content-classifier.test.ts +279 -0
  439. package/src/intake/dedup-gate.test.ts +147 -0
  440. package/src/intake/intake-pipeline.test.ts +508 -0
  441. package/src/intake/intake-pipeline.ts +1 -0
  442. package/src/intake/text-ingester.test.ts +200 -0
  443. package/src/intake/text-ingester.ts +2 -0
  444. package/src/llm/key-pool.test.ts +234 -0
  445. package/src/llm/key-pool.ts +3 -4
  446. package/src/llm/llm-client.test.ts +342 -0
  447. package/src/llm/oauth-discovery.test.ts +180 -0
  448. package/src/llm/utils.test.ts +371 -0
  449. package/src/llm/utils.ts +2 -0
  450. package/src/{__tests__ → logging}/logger.test.ts +44 -62
  451. package/src/loop/loop-manager.test.ts +515 -0
  452. package/src/migrations/migration-runner.edge-cases.test.ts +314 -0
  453. package/src/migrations/migration-runner.test-helpers.ts +64 -0
  454. package/src/migrations/migration-runner.test.ts +385 -0
  455. package/src/operator/auto-signal-pipeline.test.ts +207 -0
  456. package/src/operator/operator-profile-extended.test.ts +330 -0
  457. package/src/operator/operator-profile.test.ts +332 -0
  458. package/src/operator/operator-profile.ts +485 -0
  459. package/src/operator/operator-signals-extended.test.ts +257 -0
  460. package/src/operator/operator-signals.test.ts +277 -0
  461. package/src/operator/operator-signals.ts +262 -0
  462. package/src/operator/operator-types.ts +444 -0
  463. package/src/operator/prompts/hook-precompact-operator-dispatch.md +98 -0
  464. package/src/operator/prompts/subagent-soft-signal-extractor.md +130 -0
  465. package/src/operator/prompts/subagent-synthesis-cognition.md +190 -0
  466. package/src/operator/prompts/subagent-synthesis-communication.md +146 -0
  467. package/src/operator/prompts/subagent-synthesis-technical.md +170 -0
  468. package/src/operator/prompts/subagent-synthesis-trust.md +149 -0
  469. package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
  470. package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
  471. package/src/paths.ts +115 -0
  472. package/src/persistence/index.ts +1 -1
  473. package/src/persistence/sqlite-provider.test.ts +540 -0
  474. package/src/persistence/sqlite-provider.ts +8 -5
  475. package/src/persona/defaults.test.ts +55 -0
  476. package/src/persona/loader.test.ts +67 -0
  477. package/src/persona/prompt-generator.test.ts +127 -0
  478. package/src/planning/evidence-collector.test.ts +515 -0
  479. package/src/planning/evidence-collector.ts +47 -0
  480. package/src/planning/gap-analysis-alternatives.test.ts +199 -0
  481. package/src/planning/gap-analysis.ts +21 -636
  482. package/src/planning/gap-passes.test.ts +554 -0
  483. package/src/planning/gap-passes.ts +367 -0
  484. package/src/planning/gap-patterns.test.ts +394 -0
  485. package/src/planning/gap-patterns.ts +317 -0
  486. package/src/planning/gap-types.ts +4 -1
  487. package/src/planning/github-projection.test.ts +182 -0
  488. package/src/planning/github-projection.ts +446 -0
  489. package/src/planning/impact-analyzer.test.ts +167 -0
  490. package/src/planning/impact-analyzer.ts +251 -0
  491. package/src/planning/plan-lifecycle.test.ts +379 -0
  492. package/src/planning/plan-lifecycle.ts +377 -0
  493. package/src/planning/planner-types.ts +215 -0
  494. package/src/{__tests__ → planning}/planner.test.ts +179 -15
  495. package/src/planning/planner.ts +221 -1112
  496. package/src/planning/rationalization-detector.test.ts +156 -0
  497. package/src/planning/rationalization-detector.ts +136 -0
  498. package/src/planning/reconciliation-engine.test.ts +158 -0
  499. package/src/planning/reconciliation-engine.ts +161 -0
  500. package/src/planning/task-verifier.test.ts +267 -0
  501. package/src/planning/task-verifier.ts +309 -0
  502. package/src/planning/verification-protocol.test.ts +201 -0
  503. package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
  504. package/src/playbooks/index.test.ts +77 -0
  505. package/src/playbooks/playbook-executor.test.ts +253 -0
  506. package/src/playbooks/playbook-registry.test.ts +232 -0
  507. package/src/playbooks/playbook-seeder.test.ts +153 -0
  508. package/src/plugins/plugin-loader.test.ts +217 -0
  509. package/src/plugins/plugin-registry.test.ts +284 -0
  510. package/src/project/project-registry.test.ts +439 -0
  511. package/src/prompts/parser.test.ts +100 -0
  512. package/src/prompts/template-manager.test.ts +112 -0
  513. package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
  514. package/src/queue/job-queue.test.ts +327 -0
  515. package/src/queue/pipeline-runner.test.ts +209 -0
  516. package/src/runtime/admin-extra-ops.test.ts +513 -0
  517. package/src/runtime/admin-ops.test.ts +255 -0
  518. package/src/runtime/admin-ops.ts +45 -17
  519. package/src/runtime/admin-setup-ops.test.ts +327 -0
  520. package/src/runtime/admin-setup-ops.ts +26 -42
  521. package/src/runtime/archive-ops.test.ts +272 -0
  522. package/src/runtime/archive-ops.ts +347 -0
  523. package/src/runtime/branching-ops.test.ts +144 -0
  524. package/src/runtime/branching-ops.ts +107 -0
  525. package/src/runtime/capture-ops.test.ts +419 -0
  526. package/src/runtime/capture-ops.ts +50 -8
  527. package/src/runtime/chain-ops.test.ts +159 -0
  528. package/src/runtime/claude-md-helpers.test.ts +189 -0
  529. package/src/runtime/claude-md-helpers.ts +1 -1
  530. package/src/runtime/context-health.test.ts +76 -0
  531. package/src/runtime/context-health.ts +83 -0
  532. package/src/runtime/curator-extra-ops.test.ts +204 -0
  533. package/src/runtime/deprecation.test.ts +98 -0
  534. package/src/runtime/domain-ops.test.ts +278 -0
  535. package/src/runtime/facades/admin-facade.test.ts +330 -0
  536. package/src/runtime/facades/agency-facade.test.ts +278 -0
  537. package/src/runtime/facades/archive-facade.test.ts +308 -0
  538. package/src/runtime/facades/archive-facade.ts +14 -0
  539. package/src/runtime/facades/brain-facade.test.ts +818 -0
  540. package/src/runtime/facades/brain-facade.ts +2 -0
  541. package/src/runtime/facades/branching-facade.test.ts +43 -0
  542. package/src/runtime/facades/branching-facade.ts +11 -0
  543. package/src/runtime/facades/chat-facade.test.ts +219 -0
  544. package/src/runtime/facades/chat-facade.ts +15 -906
  545. package/src/runtime/facades/chat-service-ops.test.ts +381 -0
  546. package/src/runtime/facades/chat-service-ops.ts +376 -0
  547. package/src/runtime/facades/chat-session-ops.test.ts +212 -0
  548. package/src/runtime/facades/chat-session-ops.ts +146 -0
  549. package/src/runtime/facades/chat-state.ts +60 -0
  550. package/src/runtime/facades/chat-transport-ops.test.ts +336 -0
  551. package/src/runtime/facades/chat-transport-ops.ts +379 -0
  552. package/src/runtime/facades/context-facade.test.ts +123 -0
  553. package/src/runtime/facades/control-facade.test.ts +436 -0
  554. package/src/runtime/facades/control-facade.ts +6 -1
  555. package/src/runtime/facades/curator-facade.test.ts +303 -0
  556. package/src/runtime/facades/index.ts +48 -0
  557. package/src/runtime/facades/intake-facade.test.ts +215 -0
  558. package/src/runtime/facades/intake-facade.ts +14 -0
  559. package/src/runtime/facades/links-facade.test.ts +203 -0
  560. package/src/runtime/facades/links-facade.ts +13 -0
  561. package/src/runtime/facades/loop-facade.test.ts +262 -0
  562. package/src/runtime/facades/memory-facade.test.ts +283 -0
  563. package/src/runtime/facades/memory-facade.ts +78 -6
  564. package/src/runtime/facades/operator-facade.test.ts +221 -0
  565. package/src/runtime/facades/operator-facade.ts +244 -0
  566. package/src/runtime/facades/orchestrate-facade.test.ts +191 -0
  567. package/src/runtime/facades/orchestrate-facade.ts +3 -3
  568. package/src/runtime/facades/plan-facade.test.ts +283 -0
  569. package/src/runtime/facades/plan-facade.ts +47 -6
  570. package/src/runtime/facades/review-facade.test.ts +82 -0
  571. package/src/runtime/facades/review-facade.ts +11 -0
  572. package/src/runtime/facades/sync-facade.test.ts +113 -0
  573. package/src/runtime/facades/sync-facade.ts +11 -0
  574. package/src/runtime/facades/tier-facade.test.ts +47 -0
  575. package/src/runtime/facades/tier-facade.ts +11 -0
  576. package/src/runtime/facades/vault-facade.test.ts +563 -0
  577. package/src/runtime/facades/vault-facade.ts +66 -265
  578. package/src/runtime/feature-flags.test.ts +140 -0
  579. package/src/runtime/github-integration.test.ts +89 -0
  580. package/src/runtime/github-integration.ts +162 -0
  581. package/src/runtime/grading-ops.test.ts +172 -0
  582. package/src/runtime/grading-ops.ts +1 -1
  583. package/src/runtime/intake-ops.test.ts +261 -0
  584. package/src/runtime/loop-ops.test.ts +248 -0
  585. package/src/runtime/memory-cross-project-ops.test.ts +188 -0
  586. package/src/runtime/memory-extra-ops.test.ts +453 -0
  587. package/src/runtime/memory-extra-ops.ts +6 -2
  588. package/src/runtime/orchestrate-ops.test.ts +302 -0
  589. package/src/runtime/orchestrate-ops.ts +461 -45
  590. package/src/runtime/pack-ops.test.ts +175 -0
  591. package/src/runtime/planning-extra-ops.test.ts +593 -0
  592. package/src/runtime/planning-extra-ops.ts +74 -4
  593. package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
  594. package/src/runtime/playbook-ops.test.ts +285 -0
  595. package/src/runtime/plugin-ops.test.ts +259 -0
  596. package/src/runtime/project-ops.test.ts +255 -0
  597. package/src/runtime/review-ops.test.ts +142 -0
  598. package/src/runtime/review-ops.ts +99 -0
  599. package/src/runtime/runtime.test.ts +363 -0
  600. package/src/runtime/runtime.ts +41 -12
  601. package/src/runtime/session-briefing.test.ts +431 -0
  602. package/src/runtime/session-briefing.ts +86 -1
  603. package/src/runtime/sync-ops.test.ts +212 -0
  604. package/src/runtime/sync-ops.ts +325 -0
  605. package/src/runtime/telemetry-ops.test.ts +157 -0
  606. package/src/runtime/tier-ops.test.ts +159 -0
  607. package/src/runtime/tier-ops.ts +119 -0
  608. package/src/runtime/types.ts +10 -4
  609. package/src/runtime/vault-extra-ops.test.ts +270 -0
  610. package/src/runtime/vault-extra-ops.ts +5 -332
  611. package/src/runtime/vault-linking-ops.test.ts +237 -0
  612. package/src/runtime/vault-sharing-ops.test.ts +127 -0
  613. package/src/runtime/vault-sharing-ops.ts +5 -329
  614. package/src/skills/sync-skills.ts +98 -0
  615. package/src/streams/normalize.test.ts +95 -0
  616. package/src/streams/replayable-stream.test.ts +166 -0
  617. package/src/telemetry/telemetry.test.ts +143 -0
  618. package/src/transport/http-server.test.ts +394 -0
  619. package/src/transport/lsp-server.test.ts +458 -0
  620. package/src/transport/rate-limiter.test.ts +126 -0
  621. package/src/transport/session-manager.test.ts +133 -0
  622. package/src/transport/token-auth.test.ts +136 -0
  623. package/src/transport/ws-server.test.ts +297 -0
  624. package/src/update-check.ts +111 -0
  625. package/src/vault/__tests__/vault-characterization.test.ts +579 -0
  626. package/src/vault/content-hash.test.ts +78 -0
  627. package/src/vault/git-vault-sync.test.ts +234 -0
  628. package/src/vault/knowledge-review.test.ts +269 -0
  629. package/src/vault/linking.test.ts +391 -0
  630. package/src/vault/linking.ts +188 -181
  631. package/src/vault/obsidian-sync.test.ts +345 -0
  632. package/src/vault/playbook.test.ts +152 -0
  633. package/src/vault/scope-detector.test.ts +185 -0
  634. package/src/vault/vault-branching.test.ts +252 -0
  635. package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
  636. package/src/vault/vault-entries.ts +426 -0
  637. package/src/vault/vault-maintenance.ts +200 -0
  638. package/src/vault/vault-manager.test.ts +206 -0
  639. package/src/vault/vault-markdown-sync.test.ts +203 -0
  640. package/src/vault/vault-markdown-sync.ts +163 -0
  641. package/src/vault/vault-memories.ts +339 -0
  642. package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
  643. package/src/vault/vault-schema.ts +238 -0
  644. package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
  645. package/src/{__tests__ → vault}/vault.test.ts +2 -2
  646. package/src/vault/vault.ts +87 -1123
  647. package/dist/cognee/client.d.ts +0 -43
  648. package/dist/cognee/client.d.ts.map +0 -1
  649. package/dist/cognee/client.js +0 -375
  650. package/dist/cognee/client.js.map +0 -1
  651. package/dist/cognee/sync-manager.d.ts +0 -153
  652. package/dist/cognee/sync-manager.d.ts.map +0 -1
  653. package/dist/cognee/sync-manager.js +0 -390
  654. package/dist/cognee/sync-manager.js.map +0 -1
  655. package/dist/cognee/types.d.ts +0 -62
  656. package/dist/cognee/types.d.ts.map +0 -1
  657. package/dist/cognee/types.js +0 -3
  658. package/dist/cognee/types.js.map +0 -1
  659. package/dist/governance/index.d.ts +0 -3
  660. package/dist/governance/index.d.ts.map +0 -1
  661. package/dist/governance/index.js +0 -2
  662. package/dist/governance/index.js.map +0 -1
  663. package/dist/health/doctor-checks.d.ts +0 -15
  664. package/dist/health/doctor-checks.d.ts.map +0 -1
  665. package/dist/health/doctor-checks.js +0 -98
  666. package/dist/health/doctor-checks.js.map +0 -1
  667. package/dist/persistence/postgres-provider.d.ts +0 -81
  668. package/dist/persistence/postgres-provider.d.ts.map +0 -1
  669. package/dist/persistence/postgres-provider.js +0 -256
  670. package/dist/persistence/postgres-provider.js.map +0 -1
  671. package/dist/runtime/cognee-sync-ops.d.ts +0 -12
  672. package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
  673. package/dist/runtime/cognee-sync-ops.js +0 -93
  674. package/dist/runtime/cognee-sync-ops.js.map +0 -1
  675. package/dist/runtime/core-ops.d.ts +0 -23
  676. package/dist/runtime/core-ops.d.ts.map +0 -1
  677. package/dist/runtime/core-ops.js +0 -1296
  678. package/dist/runtime/core-ops.js.map +0 -1
  679. package/dist/runtime/facades/cognee-facade.d.ts +0 -8
  680. package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
  681. package/dist/runtime/facades/cognee-facade.js +0 -156
  682. package/dist/runtime/facades/cognee-facade.js.map +0 -1
  683. package/src/__tests__/admin-extra-ops.test.ts +0 -484
  684. package/src/__tests__/admin-ops.test.ts +0 -268
  685. package/src/__tests__/admin-setup-ops.test.ts +0 -355
  686. package/src/__tests__/agency-manager.test.ts +0 -374
  687. package/src/__tests__/agent-loop.test.ts +0 -256
  688. package/src/__tests__/capture-ops.test.ts +0 -784
  689. package/src/__tests__/claudemd.test.ts +0 -282
  690. package/src/__tests__/content-hash.test.ts +0 -60
  691. package/src/__tests__/context-engine.test.ts +0 -251
  692. package/src/__tests__/core-ops.test.ts +0 -550
  693. package/src/__tests__/curator-extra-ops.test.ts +0 -383
  694. package/src/__tests__/deprecation.test.ts +0 -78
  695. package/src/__tests__/domain-ops.test.ts +0 -226
  696. package/src/__tests__/domain-packs.test.ts +0 -421
  697. package/src/__tests__/enforcement.test.ts +0 -153
  698. package/src/__tests__/errors.test.ts +0 -388
  699. package/src/__tests__/extensions.test.ts +0 -233
  700. package/src/__tests__/facade-factory.test.ts +0 -271
  701. package/src/__tests__/feature-flags.test.ts +0 -137
  702. package/src/__tests__/flows.test.ts +0 -604
  703. package/src/__tests__/git-vault-sync.test.ts +0 -230
  704. package/src/__tests__/governance.test.ts +0 -522
  705. package/src/__tests__/grading-ops.test.ts +0 -361
  706. package/src/__tests__/identity-manager.test.ts +0 -243
  707. package/src/__tests__/intake-pipeline.test.ts +0 -162
  708. package/src/__tests__/intent-router.test.ts +0 -222
  709. package/src/__tests__/knowledge-review.test.ts +0 -104
  710. package/src/__tests__/llm-client.test.ts +0 -69
  711. package/src/__tests__/llm.test.ts +0 -556
  712. package/src/__tests__/loader.test.ts +0 -176
  713. package/src/__tests__/loop-ops.test.ts +0 -469
  714. package/src/__tests__/lsp-transport.test.ts +0 -442
  715. package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
  716. package/src/__tests__/memory-extra-ops.test.ts +0 -352
  717. package/src/__tests__/migration-runner.test.ts +0 -170
  718. package/src/__tests__/module-manifest-drift.test.ts +0 -59
  719. package/src/__tests__/normalize.test.ts +0 -85
  720. package/src/__tests__/obsidian-sync.test.ts +0 -354
  721. package/src/__tests__/orchestrate-ops.test.ts +0 -289
  722. package/src/__tests__/pack-ops.test.ts +0 -146
  723. package/src/__tests__/persistence.test.ts +0 -291
  724. package/src/__tests__/planning-extra-ops.test.ts +0 -706
  725. package/src/__tests__/playbook-executor.test.ts +0 -249
  726. package/src/__tests__/playbook-registry.test.ts +0 -326
  727. package/src/__tests__/playbook-seeder.test.ts +0 -163
  728. package/src/__tests__/playbook.test.ts +0 -389
  729. package/src/__tests__/plugin-ops.test.ts +0 -411
  730. package/src/__tests__/plugin-system.test.ts +0 -509
  731. package/src/__tests__/project-ops.test.ts +0 -381
  732. package/src/__tests__/replayable-stream.test.ts +0 -177
  733. package/src/__tests__/runtime.test.ts +0 -95
  734. package/src/__tests__/scope-detector.test.ts +0 -121
  735. package/src/__tests__/template-manager.test.ts +0 -222
  736. package/src/__tests__/token-resolver.test.ts +0 -79
  737. package/src/__tests__/transport.test.ts +0 -758
  738. package/src/__tests__/vault-branching.test.ts +0 -274
  739. package/src/__tests__/vault-extra-ops.test.ts +0 -482
  740. package/src/__tests__/vault-integrity.test.ts +0 -71
  741. package/src/__tests__/vault-manager.test.ts +0 -238
  742. package/src/__tests__/ws-transport.test.ts +0 -479
  743. package/src/engine/index.ts +0 -21
  744. package/src/persona/index.ts +0 -9
@@ -1,1296 +0,0 @@
1
- /**
2
- * Generic core operations factory — 209 ops that every agent gets.
3
- *
4
- * These ops are agent-agnostic (no persona, no activation).
5
- * The 5 agent-specific ops (health, identity, activate, inject_claude_md, setup)
6
- * stay in generated code because they reference agent-specific modules.
7
- */
8
- import { z } from 'zod';
9
- import { createPlanningExtraOps } from './planning-extra-ops.js';
10
- import { createMemoryExtraOps } from './memory-extra-ops.js';
11
- import { createVaultExtraOps } from './vault-extra-ops.js';
12
- import { createAdminOps } from './admin-ops.js';
13
- import { createAdminExtraOps } from './admin-extra-ops.js';
14
- import { createLoopOps } from './loop-ops.js';
15
- import { createOrchestrateOps } from './orchestrate-ops.js';
16
- import { createGradingOps } from './grading-ops.js';
17
- import { createCaptureOps } from './capture-ops.js';
18
- import { createCuratorExtraOps } from './curator-extra-ops.js';
19
- import { createProjectOps } from './project-ops.js';
20
- import { createMemoryCrossProjectOps } from './memory-cross-project-ops.js';
21
- import { createPlaybookOps } from './playbook-ops.js';
22
- import { createCogneeSyncOps } from './cognee-sync-ops.js';
23
- import { createIntakeOps } from './intake-ops.js';
24
- /**
25
- * Create the 207 generic core operations for an agent runtime.
26
- *
27
- * Groups: search/vault (4), memory (4), export (1), planning (5),
28
- * brain (8), brain intelligence (11), cognee (5),
29
- * llm (2), curator (8), control (8), governance (5),
30
- * playbook (5), prompt templates (2),
31
- * planning-extra (22), memory-extra (8), vault-extra (23),
32
- * admin (8), admin-extra (24), loop (9), orchestrate (5),
33
- * grading (5), capture (4), curator-extra (5), project (12),
34
- * cognee-sync (3), intake (4).
35
- */
36
- export function createCoreOps(runtime) {
37
- const { vault, brain, brainIntelligence, planner, curator, governance, cognee, identityManager, intentRouter, llmClient, keyPool, syncManager, intakePipeline, } = runtime;
38
- return [
39
- // ─── Search / Vault ──────────────────────────────────────────
40
- {
41
- name: 'search',
42
- description: 'Search across all knowledge domains. Results ranked by TF-IDF + severity + recency + tag overlap + domain match.',
43
- auth: 'read',
44
- schema: z.object({
45
- query: z.string(),
46
- domain: z.string().optional(),
47
- type: z.enum(['pattern', 'anti-pattern', 'rule', 'playbook']).optional(),
48
- severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
49
- tags: z.array(z.string()).optional(),
50
- limit: z.number().optional(),
51
- }),
52
- handler: async (params) => {
53
- return brain.intelligentSearch(params.query, {
54
- domain: params.domain,
55
- type: params.type,
56
- severity: params.severity,
57
- tags: params.tags,
58
- limit: params.limit ?? 10,
59
- });
60
- },
61
- },
62
- {
63
- name: 'vault_stats',
64
- description: 'Get vault statistics — entry counts by type, domain, severity.',
65
- auth: 'read',
66
- handler: async () => vault.stats(),
67
- },
68
- {
69
- name: 'list_all',
70
- description: 'List all knowledge entries with optional filters.',
71
- auth: 'read',
72
- schema: z.object({
73
- domain: z.string().optional(),
74
- type: z.enum(['pattern', 'anti-pattern', 'rule', 'playbook']).optional(),
75
- severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
76
- tags: z.array(z.string()).optional(),
77
- limit: z.number().optional(),
78
- offset: z.number().optional(),
79
- }),
80
- handler: async (params) => {
81
- return vault.list({
82
- domain: params.domain,
83
- type: params.type,
84
- severity: params.severity,
85
- tags: params.tags,
86
- limit: params.limit ?? 50,
87
- offset: params.offset ?? 0,
88
- });
89
- },
90
- },
91
- {
92
- name: 'register',
93
- description: 'Register a project for this session. Call on every new session to track usage and get context.',
94
- auth: 'write',
95
- schema: z.object({
96
- projectPath: z.string().optional().default('.'),
97
- name: z.string().optional().describe('Project display name (derived from path if omitted)'),
98
- }),
99
- handler: async (params) => {
100
- const { resolve } = await import('node:path');
101
- const projectPath = resolve(params.projectPath ?? '.');
102
- const project = vault.registerProject(projectPath, params.name);
103
- // Also track in project registry for cross-project features
104
- runtime.projectRegistry.register(projectPath, params.name);
105
- const stats = vault.stats();
106
- const isNew = project.sessionCount === 1;
107
- // Expire stale proposals on session start (fire-and-forget)
108
- const policy = governance.getPolicy(projectPath);
109
- const expired = governance.expireStaleProposals(policy.autoCapture.autoExpireDays);
110
- const proposalStats = governance.getProposalStats(projectPath);
111
- const quotaStatus = governance.getQuotaStatus(projectPath);
112
- return {
113
- project,
114
- is_new: isNew,
115
- message: isNew
116
- ? 'Welcome! New project registered.'
117
- : 'Welcome back! Session #' + project.sessionCount + ' for ' + project.name + '.',
118
- vault: { entries: stats.totalEntries, domains: Object.keys(stats.byDomain) },
119
- governance: {
120
- pendingProposals: proposalStats.pending,
121
- quotaPercent: quotaStatus.maxTotal > 0
122
- ? Math.round((quotaStatus.total / quotaStatus.maxTotal) * 100)
123
- : 0,
124
- isQuotaWarning: quotaStatus.isWarning,
125
- expiredThisSession: expired,
126
- },
127
- };
128
- },
129
- },
130
- // ─── Memory ──────────────────────────────────────────────────
131
- {
132
- name: 'memory_search',
133
- description: 'Search memories using full-text search.',
134
- auth: 'read',
135
- schema: z.object({
136
- query: z.string(),
137
- type: z.enum(['session', 'lesson', 'preference']).optional(),
138
- projectPath: z.string().optional(),
139
- limit: z.number().optional(),
140
- }),
141
- handler: async (params) => {
142
- return vault.searchMemories(params.query, {
143
- type: params.type,
144
- projectPath: params.projectPath,
145
- limit: params.limit ?? 10,
146
- });
147
- },
148
- },
149
- {
150
- name: 'memory_capture',
151
- description: 'Capture a memory — session summary, lesson learned, or preference.',
152
- auth: 'write',
153
- schema: z.object({
154
- projectPath: z.string(),
155
- type: z.enum(['session', 'lesson', 'preference']),
156
- context: z.string(),
157
- summary: z.string(),
158
- topics: z.array(z.string()).optional().default([]),
159
- filesModified: z.array(z.string()).optional().default([]),
160
- toolsUsed: z.array(z.string()).optional().default([]),
161
- }),
162
- handler: async (params) => {
163
- const memory = vault.captureMemory({
164
- projectPath: params.projectPath,
165
- type: params.type,
166
- context: params.context,
167
- summary: params.summary,
168
- topics: params.topics ?? [],
169
- filesModified: params.filesModified ?? [],
170
- toolsUsed: params.toolsUsed ?? [],
171
- });
172
- return { captured: true, memory };
173
- },
174
- },
175
- {
176
- name: 'memory_list',
177
- description: 'List memories with optional filters.',
178
- auth: 'read',
179
- schema: z.object({
180
- type: z.enum(['session', 'lesson', 'preference']).optional(),
181
- projectPath: z.string().optional(),
182
- limit: z.number().optional(),
183
- offset: z.number().optional(),
184
- }),
185
- handler: async (params) => {
186
- const memories = vault.listMemories({
187
- type: params.type,
188
- projectPath: params.projectPath,
189
- limit: params.limit ?? 50,
190
- offset: params.offset ?? 0,
191
- });
192
- const stats = vault.memoryStats();
193
- return { memories, stats };
194
- },
195
- },
196
- {
197
- name: 'session_capture',
198
- description: 'Capture a session summary before context compaction. Called automatically by PreCompact hook.',
199
- auth: 'write',
200
- schema: z.object({
201
- projectPath: z.string().optional().default('.'),
202
- summary: z.string().describe('Brief summary of what was accomplished in this session'),
203
- topics: z.array(z.string()).optional().default([]),
204
- filesModified: z.array(z.string()).optional().default([]),
205
- toolsUsed: z.array(z.string()).optional().default([]),
206
- }),
207
- handler: async (params) => {
208
- const { resolve } = await import('node:path');
209
- const projectPath = resolve(params.projectPath ?? '.');
210
- const memory = vault.captureMemory({
211
- projectPath,
212
- type: 'session',
213
- context: 'Auto-captured before context compaction',
214
- summary: params.summary,
215
- topics: params.topics ?? [],
216
- filesModified: params.filesModified ?? [],
217
- toolsUsed: params.toolsUsed ?? [],
218
- });
219
- return { captured: true, memory, message: 'Session summary saved to memory.' };
220
- },
221
- },
222
- // ─── Export ───────────────────────────────────────────────────
223
- {
224
- name: 'export',
225
- description: 'Export vault entries as JSON intelligence bundles — one per domain. Enables version control and sharing.',
226
- auth: 'read',
227
- schema: z.object({
228
- domain: z.string().optional().describe('Export only this domain. Omit to export all.'),
229
- }),
230
- handler: async (params) => {
231
- const stats = vault.stats();
232
- const domains = params.domain ? [params.domain] : Object.keys(stats.byDomain);
233
- const bundles = [];
234
- for (const d of domains) {
235
- const entries = vault.list({ domain: d, limit: 10000 });
236
- bundles.push({ domain: d, version: '1.0.0', entries });
237
- }
238
- return {
239
- exported: true,
240
- bundles,
241
- totalEntries: bundles.reduce((sum, b) => sum + b.entries.length, 0),
242
- domains: bundles.map((b) => b.domain),
243
- };
244
- },
245
- },
246
- // ─── Planning ────────────────────────────────────────────────
247
- {
248
- name: 'create_plan',
249
- description: 'Create a new plan in draft status. Plans track multi-step tasks with decisions and sub-tasks.',
250
- auth: 'write',
251
- schema: z.object({
252
- objective: z.string().describe('What the plan aims to achieve'),
253
- scope: z.string().describe('Which parts of the codebase are affected'),
254
- decisions: z.array(z.string()).optional().default([]),
255
- tasks: z
256
- .array(z.object({ title: z.string(), description: z.string() }))
257
- .optional()
258
- .default([]),
259
- }),
260
- handler: async (params) => {
261
- const plan = planner.create({
262
- objective: params.objective,
263
- scope: params.scope,
264
- decisions: params.decisions ?? [],
265
- tasks: params.tasks ?? [],
266
- });
267
- return { created: true, plan };
268
- },
269
- },
270
- {
271
- name: 'get_plan',
272
- description: 'Get a plan by ID, or list all active plans if no ID provided.',
273
- auth: 'read',
274
- schema: z.object({
275
- planId: z.string().optional().describe('Plan ID. Omit to list all active plans.'),
276
- }),
277
- handler: async (params) => {
278
- if (params.planId) {
279
- const plan = planner.get(params.planId);
280
- if (!plan)
281
- return { error: 'Plan not found: ' + params.planId };
282
- return plan;
283
- }
284
- return { active: planner.getActive(), executing: planner.getExecuting() };
285
- },
286
- },
287
- {
288
- name: 'approve_plan',
289
- description: 'Approve a draft plan and optionally start execution.',
290
- auth: 'write',
291
- schema: z.object({
292
- planId: z.string(),
293
- startExecution: z
294
- .boolean()
295
- .optional()
296
- .default(false)
297
- .describe('If true, immediately start execution after approval'),
298
- }),
299
- handler: async (params) => {
300
- let plan = planner.approve(params.planId);
301
- if (params.startExecution) {
302
- plan = planner.startExecution(plan.id);
303
- }
304
- return { approved: true, executing: plan.status === 'executing', plan };
305
- },
306
- },
307
- {
308
- name: 'update_task',
309
- description: 'Update a task status within an executing plan.',
310
- auth: 'write',
311
- schema: z.object({
312
- planId: z.string(),
313
- taskId: z.string(),
314
- status: z.enum(['pending', 'in_progress', 'completed', 'skipped', 'failed']),
315
- }),
316
- handler: async (params) => {
317
- const plan = planner.updateTask(params.planId, params.taskId, params.status);
318
- const task = plan.tasks.find((t) => t.id === params.taskId);
319
- return { updated: true, task, plan: { id: plan.id, status: plan.status } };
320
- },
321
- },
322
- {
323
- name: 'complete_plan',
324
- description: 'Mark an executing plan as completed.',
325
- auth: 'write',
326
- schema: z.object({
327
- planId: z.string(),
328
- }),
329
- handler: async (params) => {
330
- const plan = planner.complete(params.planId);
331
- const taskSummary = {
332
- completed: plan.tasks.filter((t) => t.status === 'completed').length,
333
- skipped: plan.tasks.filter((t) => t.status === 'skipped').length,
334
- failed: plan.tasks.filter((t) => t.status === 'failed').length,
335
- total: plan.tasks.length,
336
- };
337
- return { completed: true, plan, taskSummary };
338
- },
339
- },
340
- // ─── Brain ───────────────────────────────────────────────────
341
- {
342
- name: 'record_feedback',
343
- description: 'Record feedback on a search result — accepted or dismissed. Used for adaptive weight tuning.',
344
- auth: 'write',
345
- schema: z.object({
346
- query: z.string().describe('The original search query'),
347
- entryId: z.string().describe('The entry ID that was accepted or dismissed'),
348
- action: z.enum(['accepted', 'dismissed']),
349
- }),
350
- handler: async (params) => {
351
- brain.recordFeedback(params.query, params.entryId, params.action);
352
- return {
353
- recorded: true,
354
- query: params.query,
355
- entryId: params.entryId,
356
- action: params.action,
357
- };
358
- },
359
- },
360
- {
361
- name: 'brain_feedback',
362
- description: 'Enhanced feedback with typed actions (accepted/dismissed/modified/failed), source tracking, confidence, duration, and reason.',
363
- auth: 'write',
364
- schema: z.object({
365
- query: z.string().describe('The original search query'),
366
- entryId: z.string().describe('The entry ID'),
367
- action: z.enum(['accepted', 'dismissed', 'modified', 'failed']),
368
- source: z
369
- .enum(['search', 'recommendation', 'tool-execution', 'explicit'])
370
- .optional()
371
- .describe("Feedback source. Default 'search'."),
372
- confidence: z.number().optional().describe('Confidence 0-1. Default 0.6.'),
373
- duration: z.number().optional().describe('Duration in ms.'),
374
- context: z.string().optional().describe("JSON context string. Default '{}'."),
375
- reason: z.string().optional().describe('Human-readable reason.'),
376
- }),
377
- handler: async (params) => {
378
- const entry = brain.recordFeedback({
379
- query: params.query,
380
- entryId: params.entryId,
381
- action: params.action,
382
- source: params.source,
383
- confidence: params.confidence,
384
- duration: params.duration,
385
- context: params.context,
386
- reason: params.reason,
387
- });
388
- return entry;
389
- },
390
- },
391
- {
392
- name: 'brain_feedback_stats',
393
- description: 'Feedback statistics — counts by action and source, acceptance rate, average confidence.',
394
- auth: 'read',
395
- handler: async () => {
396
- return brain.getFeedbackStats();
397
- },
398
- },
399
- {
400
- name: 'rebuild_vocabulary',
401
- description: 'Force rebuild the TF-IDF vocabulary from all vault entries.',
402
- auth: 'write',
403
- handler: async () => {
404
- brain.rebuildVocabulary();
405
- return { rebuilt: true, vocabularySize: brain.getVocabularySize() };
406
- },
407
- },
408
- {
409
- name: 'brain_stats',
410
- description: 'Get brain intelligence stats — vocabulary size, feedback count, current scoring weights, intelligence pipeline stats.',
411
- auth: 'read',
412
- handler: async () => {
413
- const base = brain.getStats();
414
- const intelligence = brainIntelligence.getStats();
415
- return { ...base, intelligence };
416
- },
417
- },
418
- {
419
- name: 'brain_decay_report',
420
- description: 'Show temporal decay scores for entries matching a query — reveals which entries are expiring, active, or expired.',
421
- auth: 'read',
422
- schema: z.object({
423
- query: z.string().describe('Search query to find entries'),
424
- limit: z.number().optional().describe('Max results (default 10)'),
425
- }),
426
- handler: async (params) => {
427
- const results = await brain.getDecayReport(params.query, params.limit ?? 10);
428
- return { results, count: results.length };
429
- },
430
- },
431
- {
432
- name: 'llm_status',
433
- description: 'LLM client status — provider availability, key pool status, model routing config.',
434
- auth: 'read',
435
- handler: async () => {
436
- const available = llmClient.isAvailable();
437
- return {
438
- providers: {
439
- openai: {
440
- available: available.openai,
441
- keyPool: keyPool.openai.hasKeys ? keyPool.openai.getStatus() : null,
442
- },
443
- anthropic: {
444
- available: available.anthropic,
445
- keyPool: keyPool.anthropic.hasKeys ? keyPool.anthropic.getStatus() : null,
446
- },
447
- },
448
- routes: llmClient.getRoutes(),
449
- };
450
- },
451
- },
452
- // ─── Brain Intelligence ───────────────────────────────────────
453
- {
454
- name: 'brain_session_context',
455
- description: 'Get recent session context — sessions, tool usage frequency, file change frequency.',
456
- auth: 'read',
457
- schema: z.object({
458
- limit: z.number().optional().describe('Number of recent sessions. Default 10.'),
459
- }),
460
- handler: async (params) => {
461
- return brainIntelligence.getSessionContext(params.limit ?? 10);
462
- },
463
- },
464
- {
465
- name: 'brain_strengths',
466
- description: 'Get pattern strength scores. 4-signal scoring: usage (0-25) + spread (0-25) + success (0-25) + recency (0-25).',
467
- auth: 'read',
468
- schema: z.object({
469
- domain: z.string().optional(),
470
- minStrength: z.number().optional().describe('Minimum strength score (0-100).'),
471
- limit: z.number().optional(),
472
- }),
473
- handler: async (params) => {
474
- return brainIntelligence.getStrengths({
475
- domain: params.domain,
476
- minStrength: params.minStrength,
477
- limit: params.limit ?? 50,
478
- });
479
- },
480
- },
481
- {
482
- name: 'brain_global_patterns',
483
- description: 'Get cross-domain pattern registry — patterns that appear across multiple domains.',
484
- auth: 'read',
485
- schema: z.object({
486
- limit: z.number().optional(),
487
- }),
488
- handler: async (params) => {
489
- return brainIntelligence.getGlobalPatterns(params.limit ?? 20);
490
- },
491
- },
492
- {
493
- name: 'brain_recommend',
494
- description: 'Get pattern recommendations for a task context. Matches domain, task terms, and source-specific acceptance rates against known strengths.',
495
- auth: 'read',
496
- schema: z.object({
497
- domain: z.string().optional(),
498
- task: z.string().optional().describe('Task description for contextual matching.'),
499
- source: z
500
- .string()
501
- .optional()
502
- .describe('Feedback source to boost by (search, recommendation, tool-execution, explicit).'),
503
- limit: z.number().optional(),
504
- }),
505
- handler: async (params) => {
506
- return brainIntelligence.recommend({
507
- domain: params.domain,
508
- task: params.task,
509
- source: params.source,
510
- limit: params.limit ?? 5,
511
- });
512
- },
513
- },
514
- {
515
- name: 'brain_build_intelligence',
516
- description: 'Run the full intelligence pipeline: compute strengths → build global registry → build domain profiles.',
517
- auth: 'write',
518
- handler: async () => {
519
- return brainIntelligence.buildIntelligence();
520
- },
521
- },
522
- {
523
- name: 'brain_export',
524
- description: 'Export all brain intelligence data — strengths, sessions, proposals, global patterns, domain profiles.',
525
- auth: 'read',
526
- handler: async () => {
527
- return brainIntelligence.exportData();
528
- },
529
- },
530
- {
531
- name: 'brain_import',
532
- description: 'Import brain intelligence data from a previous export.',
533
- auth: 'write',
534
- schema: z.object({
535
- data: z.any().describe('BrainExportData object from brain_export.'),
536
- }),
537
- handler: async (params) => {
538
- return brainIntelligence.importData(params.data);
539
- },
540
- },
541
- {
542
- name: 'brain_extract_knowledge',
543
- description: 'Extract knowledge proposals from a session using 6 heuristic rules (repeated tools, multi-file edits, long sessions, plan outcomes, feedback ratios).',
544
- auth: 'write',
545
- schema: z.object({
546
- sessionId: z.string().describe('Session ID to extract knowledge from.'),
547
- }),
548
- handler: async (params) => {
549
- return brainIntelligence.extractKnowledge(params.sessionId);
550
- },
551
- },
552
- {
553
- name: 'brain_archive_sessions',
554
- description: 'Archive (delete) completed sessions older than N days.',
555
- auth: 'write',
556
- schema: z.object({
557
- olderThanDays: z.number().optional().describe('Days threshold. Default 30.'),
558
- }),
559
- handler: async (params) => {
560
- return brainIntelligence.archiveSessions(params.olderThanDays ?? 30);
561
- },
562
- },
563
- {
564
- name: 'brain_promote_proposals',
565
- description: 'Promote knowledge proposals to vault entries. Creates intelligence entries from auto-extracted patterns. Gated by governance policies.',
566
- auth: 'write',
567
- schema: z.object({
568
- proposalIds: z.array(z.string()).describe('IDs of proposals to promote.'),
569
- projectPath: z.string().optional().default('.'),
570
- }),
571
- handler: async (params) => {
572
- const pp = params.projectPath ?? '.';
573
- return brainIntelligence.promoteProposals(params.proposalIds, governance, pp);
574
- },
575
- },
576
- {
577
- name: 'brain_lifecycle',
578
- description: 'Start or end a brain session. Sessions track tool usage, file changes, and plan context.',
579
- auth: 'write',
580
- schema: z.object({
581
- action: z.enum(['start', 'end']),
582
- sessionId: z
583
- .string()
584
- .optional()
585
- .describe('Required for end. Auto-generated for start if omitted.'),
586
- domain: z.string().optional(),
587
- context: z.string().optional(),
588
- toolsUsed: z.array(z.string()).optional(),
589
- filesModified: z.array(z.string()).optional(),
590
- planId: z.string().optional(),
591
- planOutcome: z.string().optional(),
592
- }),
593
- handler: async (params) => {
594
- return brainIntelligence.lifecycle({
595
- action: params.action,
596
- sessionId: params.sessionId,
597
- domain: params.domain,
598
- context: params.context,
599
- toolsUsed: params.toolsUsed,
600
- filesModified: params.filesModified,
601
- planId: params.planId,
602
- planOutcome: params.planOutcome,
603
- });
604
- },
605
- },
606
- {
607
- name: 'brain_reset_extracted',
608
- description: 'Reset extraction status on brain sessions, allowing re-extraction. Filter by sessionId, since date, or all.',
609
- auth: 'write',
610
- schema: z.object({
611
- sessionId: z.string().optional().describe('Reset a specific session.'),
612
- since: z.string().optional().describe('Reset sessions extracted since this ISO date.'),
613
- all: z.boolean().optional().describe('Reset all extracted sessions.'),
614
- }),
615
- handler: async (params) => {
616
- return brainIntelligence.resetExtracted({
617
- sessionId: params.sessionId,
618
- since: params.since,
619
- all: params.all,
620
- });
621
- },
622
- },
623
- // ─── Cognee ──────────────────────────────────────────────────
624
- {
625
- name: 'cognee_status',
626
- description: 'Cognee vector search health — availability, URL, latency. Checks the Cognee API endpoint.',
627
- auth: 'read',
628
- handler: async () => {
629
- return cognee.healthCheck();
630
- },
631
- },
632
- {
633
- name: 'cognee_search',
634
- description: 'Vector similarity search via Cognee. Complements TF-IDF vault search with semantic understanding.',
635
- auth: 'read',
636
- schema: z.object({
637
- query: z.string(),
638
- searchType: z
639
- .enum([
640
- 'SUMMARIES',
641
- 'CHUNKS',
642
- 'RAG_COMPLETION',
643
- 'TRIPLET_COMPLETION',
644
- 'GRAPH_COMPLETION',
645
- 'GRAPH_SUMMARY_COMPLETION',
646
- 'NATURAL_LANGUAGE',
647
- 'GRAPH_COMPLETION_COT',
648
- 'FEELING_LUCKY',
649
- 'CHUNKS_LEXICAL',
650
- ])
651
- .optional()
652
- .describe('Cognee search type. Default CHUNKS (pure vector similarity).'),
653
- limit: z.number().optional(),
654
- }),
655
- handler: async (params) => {
656
- return cognee.search(params.query, {
657
- searchType: params.searchType,
658
- limit: params.limit ?? 10,
659
- });
660
- },
661
- },
662
- {
663
- name: 'cognee_add',
664
- description: 'Ingest vault entries into Cognee for vector indexing. Auto-schedules cognify after ingest.',
665
- auth: 'write',
666
- schema: z.object({
667
- entryIds: z.array(z.string()).describe('Vault entry IDs to ingest into Cognee.'),
668
- }),
669
- handler: async (params) => {
670
- const ids = params.entryIds;
671
- const entries = ids
672
- .map((id) => vault.get(id))
673
- .filter((e) => e !== null && e !== undefined);
674
- if (entries.length === 0)
675
- return { added: 0, error: 'No matching vault entries found' };
676
- return cognee.addEntries(entries);
677
- },
678
- },
679
- {
680
- name: 'cognee_cognify',
681
- description: 'Trigger Cognee knowledge graph processing on the vault dataset. Usually auto-scheduled after add.',
682
- auth: 'write',
683
- handler: async () => {
684
- return cognee.cognify();
685
- },
686
- },
687
- {
688
- name: 'cognee_config',
689
- description: 'Get current Cognee client configuration and cached health status.',
690
- auth: 'read',
691
- handler: async () => {
692
- return { config: cognee.getConfig(), cachedStatus: cognee.getStatus() };
693
- },
694
- },
695
- // ─── Cognee Graph (#156) ──────────────────────────────────────
696
- {
697
- name: 'cognee_get_node',
698
- description: 'Get a specific Cognee graph node by UUID with all properties and connections.',
699
- auth: 'read',
700
- schema: z.object({
701
- nodeId: z.string().describe('UUID of the graph node'),
702
- }),
703
- handler: async (params) => {
704
- try {
705
- // Use Cognee search with specific ID query — the graph node API is accessed via search
706
- const results = await cognee.search(params.nodeId, {
707
- searchType: 'GRAPH_COMPLETION',
708
- limit: 1,
709
- });
710
- if (!results || (Array.isArray(results) && results.length === 0)) {
711
- return { found: false, nodeId: params.nodeId };
712
- }
713
- return {
714
- found: true,
715
- nodeId: params.nodeId,
716
- node: Array.isArray(results) ? results[0] : results,
717
- };
718
- }
719
- catch (err) {
720
- return { error: err.message };
721
- }
722
- },
723
- },
724
- {
725
- name: 'cognee_graph_stats',
726
- description: 'Cognee graph statistics — availability, endpoint, latency from last health check.',
727
- auth: 'read',
728
- handler: async () => {
729
- try {
730
- const status = cognee.getStatus();
731
- const health = await cognee.healthCheck();
732
- return {
733
- available: status?.available ?? false,
734
- url: status?.url ?? cognee.getConfig().baseUrl,
735
- latencyMs: status?.latencyMs ?? health.latencyMs ?? null,
736
- error: status?.error ?? health.error ?? null,
737
- };
738
- }
739
- catch (err) {
740
- return { error: err.message };
741
- }
742
- },
743
- },
744
- {
745
- name: 'cognee_export_status',
746
- description: 'Check Cognee dataset and processing status — availability, pending operations.',
747
- auth: 'read',
748
- handler: async () => {
749
- try {
750
- const status = cognee.getStatus();
751
- const config = cognee.getConfig();
752
- return {
753
- available: status?.available ?? false,
754
- dataset: config.dataset ?? 'default',
755
- pendingCognify: false, // CogneeClient tracks internally via flushPendingCognify
756
- url: status?.url ?? config.baseUrl,
757
- };
758
- }
759
- catch (err) {
760
- return { error: err.message };
761
- }
762
- },
763
- },
764
- // ─── Enriched Capture (#154) ─────────────────────────────────
765
- {
766
- name: 'capture_enriched',
767
- description: 'Unified LLM-enriched capture — accepts minimal fields (title, description, type), uses LLM to auto-infer tags, category, and severity.',
768
- auth: 'write',
769
- schema: z.object({
770
- title: z.string().describe('Knowledge title'),
771
- description: z.string().describe('Knowledge description'),
772
- type: z
773
- .enum(['pattern', 'anti-pattern', 'rule', 'playbook'])
774
- .optional()
775
- .describe('Entry type. If omitted, LLM infers from content.'),
776
- domain: z.string().optional().describe('Domain. If omitted, LLM infers.'),
777
- tags: z.array(z.string()).optional().describe('Tags. LLM adds more if needed.'),
778
- }),
779
- handler: async (params) => {
780
- try {
781
- const title = params.title;
782
- const description = params.description;
783
- // Try LLM enrichment for auto-tagging
784
- let inferredTags = params.tags ?? [];
785
- let inferredType = params.type ?? 'pattern';
786
- const inferredDomain = params.domain ?? 'general';
787
- let inferredSeverity = 'suggestion';
788
- const enriched = false;
789
- try {
790
- const captureId = `enriched-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
791
- const enrichResult = brain.enrichAndCapture({
792
- id: captureId,
793
- title,
794
- description,
795
- type: inferredType,
796
- domain: inferredDomain,
797
- severity: inferredSeverity,
798
- tags: inferredTags,
799
- });
800
- if (enrichResult.captured) {
801
- return {
802
- captured: true,
803
- enriched: true,
804
- entryId: enrichResult.id,
805
- autoTags: enrichResult.autoTags,
806
- duplicate: enrichResult.duplicate ?? null,
807
- };
808
- }
809
- }
810
- catch {
811
- // LLM enrichment failed — fall back to basic capture
812
- }
813
- // Fallback: basic capture without LLM enrichment
814
- // Infer type from keywords
815
- const lowerDesc = description.toLowerCase();
816
- if (!params.type) {
817
- if (lowerDesc.includes('avoid') ||
818
- lowerDesc.includes("don't") ||
819
- lowerDesc.includes('anti-pattern'))
820
- inferredType = 'anti-pattern';
821
- else if (lowerDesc.includes('rule') ||
822
- lowerDesc.includes('must') ||
823
- lowerDesc.includes('always'))
824
- inferredType = 'rule';
825
- }
826
- // Infer severity from keywords
827
- if (lowerDesc.includes('critical') ||
828
- lowerDesc.includes('security') ||
829
- lowerDesc.includes('breaking'))
830
- inferredSeverity = 'critical';
831
- else if (lowerDesc.includes('warning') ||
832
- lowerDesc.includes('careful') ||
833
- lowerDesc.includes('avoid'))
834
- inferredSeverity = 'warning';
835
- // Auto-generate tags from title words
836
- if (inferredTags.length === 0) {
837
- inferredTags = title
838
- .toLowerCase()
839
- .split(/\s+/)
840
- .filter((w) => w.length > 3 && !['with', 'from', 'that', 'this', 'have', 'been'].includes(w))
841
- .slice(0, 5);
842
- }
843
- const entry = {
844
- id: `enriched-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
845
- type: inferredType,
846
- domain: inferredDomain,
847
- title,
848
- severity: inferredSeverity,
849
- description,
850
- tags: inferredTags,
851
- };
852
- vault.add(entry);
853
- return {
854
- captured: true,
855
- enriched,
856
- entry,
857
- autoTags: inferredTags,
858
- };
859
- }
860
- catch (err) {
861
- return { error: err.message };
862
- }
863
- },
864
- },
865
- // ─── LLM ─────────────────────────────────────────────────────
866
- {
867
- name: 'llm_rotate',
868
- description: 'Force rotate the active API key for a provider. Useful when rate-limited or key is failing.',
869
- auth: 'write',
870
- schema: z.object({
871
- provider: z.enum(['openai', 'anthropic']),
872
- }),
873
- handler: async (params) => {
874
- const provider = params.provider;
875
- const pool = keyPool[provider];
876
- if (!pool.hasKeys)
877
- return { rotated: false, error: `No ${provider} keys configured` };
878
- const newKey = pool.rotateOnError();
879
- return {
880
- rotated: newKey !== null,
881
- activeKeyIndex: pool.activeKeyIndex,
882
- poolSize: pool.poolSize,
883
- exhausted: pool.exhausted,
884
- };
885
- },
886
- },
887
- {
888
- name: 'llm_call',
889
- description: 'Make an LLM completion call. Uses model routing config and key pool rotation.',
890
- auth: 'write',
891
- schema: z.object({
892
- systemPrompt: z.string().describe('System prompt for the LLM.'),
893
- userPrompt: z.string().describe('User prompt / task input.'),
894
- model: z
895
- .string()
896
- .optional()
897
- .describe('Model name. Routed via model-routing.json if omitted.'),
898
- temperature: z.number().optional().describe('Sampling temperature (0-2). Default 0.3.'),
899
- maxTokens: z.number().optional().describe('Max output tokens. Default 500.'),
900
- caller: z.string().optional().describe('Caller name for routing. Default "core-ops".'),
901
- task: z.string().optional().describe('Task name for routing.'),
902
- }),
903
- handler: async (params) => {
904
- return llmClient.complete({
905
- provider: 'openai',
906
- model: params.model ?? '',
907
- systemPrompt: params.systemPrompt,
908
- userPrompt: params.userPrompt,
909
- temperature: params.temperature,
910
- maxTokens: params.maxTokens,
911
- caller: params.caller ?? 'core-ops',
912
- task: params.task,
913
- });
914
- },
915
- },
916
- // ─── Curator ─────────────────────────────────────────────────
917
- {
918
- name: 'curator_status',
919
- description: 'Curator status — table row counts, last groomed timestamp.',
920
- auth: 'read',
921
- handler: async () => {
922
- return curator.getStatus();
923
- },
924
- },
925
- {
926
- name: 'curator_detect_duplicates',
927
- description: 'Detect duplicate entries using TF-IDF cosine similarity.',
928
- auth: 'read',
929
- schema: z.object({
930
- entryId: z.string().optional().describe('Check a specific entry. Omit to scan all.'),
931
- threshold: z.number().optional().describe('Similarity threshold (0-1). Default 0.45.'),
932
- }),
933
- handler: async (params) => {
934
- return curator.detectDuplicates(params.entryId, params.threshold);
935
- },
936
- },
937
- {
938
- name: 'curator_contradictions',
939
- description: 'List or detect contradictions between patterns and anti-patterns.',
940
- auth: 'read',
941
- schema: z.object({
942
- status: z.enum(['open', 'resolved', 'dismissed']).optional().describe('Filter by status.'),
943
- detect: z.boolean().optional().describe('If true, run detection before listing.'),
944
- }),
945
- handler: async (params) => {
946
- if (params.detect) {
947
- curator.detectContradictions();
948
- }
949
- return curator.getContradictions(params.status);
950
- },
951
- },
952
- {
953
- name: 'curator_resolve_contradiction',
954
- description: 'Resolve or dismiss a contradiction.',
955
- auth: 'write',
956
- schema: z.object({
957
- id: z.number().describe('Contradiction ID.'),
958
- resolution: z.enum(['resolved', 'dismissed']),
959
- }),
960
- handler: async (params) => {
961
- return curator.resolveContradiction(params.id, params.resolution);
962
- },
963
- },
964
- {
965
- name: 'curator_groom',
966
- description: 'Groom a single entry — normalize tags, check staleness.',
967
- auth: 'write',
968
- schema: z.object({
969
- entryId: z.string().describe('Entry ID to groom.'),
970
- }),
971
- handler: async (params) => {
972
- return curator.groomEntry(params.entryId);
973
- },
974
- },
975
- {
976
- name: 'curator_groom_all',
977
- description: 'Groom all vault entries — normalize tags, detect staleness.',
978
- auth: 'write',
979
- handler: async () => {
980
- return curator.groomAll();
981
- },
982
- },
983
- {
984
- name: 'curator_consolidate',
985
- description: 'Consolidate vault — find duplicates, stale entries, contradictions. Dry-run by default.',
986
- auth: 'write',
987
- schema: z.object({
988
- dryRun: z.boolean().optional().describe('Default true. Set false to apply mutations.'),
989
- staleDaysThreshold: z
990
- .number()
991
- .optional()
992
- .describe('Days before entry is stale. Default 90.'),
993
- duplicateThreshold: z
994
- .number()
995
- .optional()
996
- .describe('Cosine similarity threshold. Default 0.45.'),
997
- contradictionThreshold: z
998
- .number()
999
- .optional()
1000
- .describe('Contradiction threshold. Default 0.4.'),
1001
- }),
1002
- handler: async (params) => {
1003
- return curator.consolidate({
1004
- dryRun: params.dryRun,
1005
- staleDaysThreshold: params.staleDaysThreshold,
1006
- duplicateThreshold: params.duplicateThreshold,
1007
- contradictionThreshold: params.contradictionThreshold,
1008
- });
1009
- },
1010
- },
1011
- {
1012
- name: 'curator_health_audit',
1013
- description: 'Audit vault health — score (0-100), coverage, freshness, quality, tag health, recommendations.',
1014
- auth: 'read',
1015
- handler: async () => {
1016
- return curator.healthAudit();
1017
- },
1018
- },
1019
- // ─── Control ──────────────────────────────────────────────────────
1020
- {
1021
- name: 'get_identity',
1022
- description: 'Get current agent identity with guidelines.',
1023
- auth: 'read',
1024
- schema: z.object({
1025
- agentId: z.string().describe('Agent identifier.'),
1026
- }),
1027
- handler: async (params) => {
1028
- const identity = identityManager.getIdentity(params.agentId);
1029
- if (!identity)
1030
- return { found: false, agentId: params.agentId };
1031
- return identity;
1032
- },
1033
- },
1034
- {
1035
- name: 'update_identity',
1036
- description: 'Update identity fields. Auto-versions and snapshots previous state.',
1037
- auth: 'write',
1038
- schema: z.object({
1039
- agentId: z.string(),
1040
- name: z.string().optional(),
1041
- role: z.string().optional(),
1042
- description: z.string().optional(),
1043
- personality: z.array(z.string()).optional(),
1044
- changedBy: z.string().optional(),
1045
- changeReason: z.string().optional(),
1046
- }),
1047
- handler: async (params) => {
1048
- const identity = identityManager.setIdentity(params.agentId, {
1049
- name: params.name,
1050
- role: params.role,
1051
- description: params.description,
1052
- personality: params.personality,
1053
- changedBy: params.changedBy,
1054
- changeReason: params.changeReason,
1055
- });
1056
- return { updated: true, identity };
1057
- },
1058
- },
1059
- {
1060
- name: 'add_guideline',
1061
- description: 'Add a behavioral guideline (behavior/preference/restriction/style).',
1062
- auth: 'write',
1063
- schema: z.object({
1064
- agentId: z.string(),
1065
- category: z.enum(['behavior', 'preference', 'restriction', 'style']),
1066
- text: z.string(),
1067
- priority: z.number().optional(),
1068
- }),
1069
- handler: async (params) => {
1070
- const guideline = identityManager.addGuideline(params.agentId, {
1071
- category: params.category,
1072
- text: params.text,
1073
- priority: params.priority,
1074
- });
1075
- return { added: true, guideline };
1076
- },
1077
- },
1078
- {
1079
- name: 'remove_guideline',
1080
- description: 'Remove a guideline by ID.',
1081
- auth: 'write',
1082
- schema: z.object({
1083
- guidelineId: z.string(),
1084
- }),
1085
- handler: async (params) => {
1086
- const removed = identityManager.removeGuideline(params.guidelineId);
1087
- return { removed };
1088
- },
1089
- },
1090
- {
1091
- name: 'rollback_identity',
1092
- description: 'Restore a previous identity version. Creates a new version with the old data.',
1093
- auth: 'write',
1094
- schema: z.object({
1095
- agentId: z.string(),
1096
- version: z.number().describe('Version number to roll back to.'),
1097
- }),
1098
- handler: async (params) => {
1099
- const identity = identityManager.rollback(params.agentId, params.version);
1100
- return { rolledBack: true, identity };
1101
- },
1102
- },
1103
- {
1104
- name: 'route_intent',
1105
- description: 'Classify a prompt into intent + operational mode via keyword matching.',
1106
- auth: 'read',
1107
- schema: z.object({
1108
- prompt: z.string().describe('The user prompt to classify.'),
1109
- }),
1110
- handler: async (params) => {
1111
- return intentRouter.routeIntent(params.prompt);
1112
- },
1113
- },
1114
- {
1115
- name: 'morph',
1116
- description: 'Switch operational mode manually.',
1117
- auth: 'write',
1118
- schema: z.object({
1119
- mode: z
1120
- .string()
1121
- .describe('The operational mode to switch to (e.g., BUILD-MODE, FIX-MODE).'),
1122
- }),
1123
- handler: async (params) => {
1124
- return intentRouter.morph(params.mode);
1125
- },
1126
- },
1127
- {
1128
- name: 'get_behavior_rules',
1129
- description: 'Get behavior rules for current or specified mode.',
1130
- auth: 'read',
1131
- schema: z.object({
1132
- mode: z.string().optional().describe('Mode to get rules for. Defaults to current mode.'),
1133
- }),
1134
- handler: async (params) => {
1135
- const mode = params.mode;
1136
- const rules = intentRouter.getBehaviorRules(mode);
1137
- const currentMode = intentRouter.getCurrentMode();
1138
- return { mode: mode ?? currentMode, rules };
1139
- },
1140
- },
1141
- // ─── Governance ─────────────────────────────────────────────────
1142
- {
1143
- name: 'governance_policy',
1144
- description: 'Get, set, or apply a preset to vault governance policies (quota, retention, auto-capture).',
1145
- auth: 'write',
1146
- schema: z.object({
1147
- action: z.enum(['get', 'set', 'applyPreset']),
1148
- projectPath: z.string(),
1149
- policyType: z.enum(['quota', 'retention', 'auto-capture']).optional(),
1150
- config: z.record(z.unknown()).optional(),
1151
- preset: z.enum(['strict', 'moderate', 'permissive']).optional(),
1152
- changedBy: z.string().optional(),
1153
- }),
1154
- handler: async (params) => {
1155
- const action = params.action;
1156
- const projectPath = params.projectPath;
1157
- if (action === 'get') {
1158
- return governance.getPolicy(projectPath);
1159
- }
1160
- if (action === 'set') {
1161
- governance.setPolicy(projectPath, params.policyType, params.config, params.changedBy);
1162
- return { updated: true, policy: governance.getPolicy(projectPath) };
1163
- }
1164
- if (action === 'applyPreset') {
1165
- governance.applyPreset(projectPath, params.preset, params.changedBy);
1166
- return {
1167
- applied: true,
1168
- preset: params.preset,
1169
- policy: governance.getPolicy(projectPath),
1170
- };
1171
- }
1172
- return { error: 'Unknown action: ' + action };
1173
- },
1174
- },
1175
- {
1176
- name: 'governance_proposals',
1177
- description: 'Manage knowledge capture proposals — list, approve, reject, modify, get stats, or expire stale.',
1178
- auth: 'write',
1179
- schema: z.object({
1180
- action: z.enum(['list', 'approve', 'reject', 'modify', 'stats', 'expire']),
1181
- projectPath: z.string().optional(),
1182
- proposalId: z.number().optional(),
1183
- decidedBy: z.string().optional(),
1184
- note: z.string().optional(),
1185
- modifications: z.record(z.unknown()).optional(),
1186
- maxAgeDays: z.number().optional(),
1187
- limit: z.number().optional(),
1188
- }),
1189
- handler: async (params) => {
1190
- const action = params.action;
1191
- if (action === 'list') {
1192
- return governance.listPendingProposals(params.projectPath, params.limit);
1193
- }
1194
- if (action === 'approve') {
1195
- return governance.approveProposal(params.proposalId, params.decidedBy);
1196
- }
1197
- if (action === 'reject') {
1198
- return governance.rejectProposal(params.proposalId, params.decidedBy, params.note);
1199
- }
1200
- if (action === 'modify') {
1201
- return governance.modifyProposal(params.proposalId, params.modifications, params.decidedBy);
1202
- }
1203
- if (action === 'stats') {
1204
- return governance.getProposalStats(params.projectPath);
1205
- }
1206
- if (action === 'expire') {
1207
- const expired = governance.expireStaleProposals(params.maxAgeDays);
1208
- return { expired };
1209
- }
1210
- return { error: 'Unknown action: ' + action };
1211
- },
1212
- },
1213
- {
1214
- name: 'governance_stats',
1215
- description: 'Get governance statistics — quota status and proposal stats for a project.',
1216
- auth: 'read',
1217
- schema: z.object({
1218
- projectPath: z.string(),
1219
- }),
1220
- handler: async (params) => {
1221
- const projectPath = params.projectPath;
1222
- return {
1223
- quotaStatus: governance.getQuotaStatus(projectPath),
1224
- proposalStats: governance.getProposalStats(projectPath),
1225
- };
1226
- },
1227
- },
1228
- {
1229
- name: 'governance_expire',
1230
- description: 'Expire stale pending proposals older than a threshold.',
1231
- auth: 'write',
1232
- schema: z.object({
1233
- projectPath: z.string().optional(),
1234
- maxAgeDays: z.number().optional().describe('Days threshold. Default 14.'),
1235
- }),
1236
- handler: async (params) => {
1237
- const expired = governance.expireStaleProposals(params.maxAgeDays);
1238
- return { expired };
1239
- },
1240
- },
1241
- {
1242
- name: 'governance_dashboard',
1243
- description: 'Get governance dashboard — vault size, quota usage, pending proposals, acceptance rate, evaluation trend.',
1244
- auth: 'read',
1245
- schema: z.object({
1246
- projectPath: z.string(),
1247
- }),
1248
- handler: async (params) => {
1249
- return governance.getDashboard(params.projectPath);
1250
- },
1251
- },
1252
- // ─── Playbook ops (from dedicated module) ─────────────────────────
1253
- ...createPlaybookOps(runtime),
1254
- // ─── Extra Ops (from dedicated modules) ─────────────────────────
1255
- ...createPlanningExtraOps(runtime),
1256
- ...createMemoryExtraOps(runtime),
1257
- ...createVaultExtraOps(runtime),
1258
- ...createAdminOps(runtime),
1259
- ...createAdminExtraOps(runtime),
1260
- ...createLoopOps(runtime),
1261
- ...createOrchestrateOps(runtime),
1262
- ...createGradingOps(runtime),
1263
- ...createCaptureOps(runtime),
1264
- ...createCuratorExtraOps(runtime),
1265
- ...createProjectOps(runtime),
1266
- ...createMemoryCrossProjectOps(runtime),
1267
- // ─── Cognee Sync ──────────────────────────────────────────────
1268
- ...createCogneeSyncOps(syncManager),
1269
- // ─── Intake Pipeline ──────────────────────────────────────────
1270
- ...createIntakeOps(intakePipeline),
1271
- // ─── Prompt Templates ─────────────────────────────────────────
1272
- {
1273
- name: 'render_prompt',
1274
- description: 'Render a prompt template with variable substitution. Templates are .prompt files loaded from the templates directory.',
1275
- auth: 'read',
1276
- schema: z.object({
1277
- template: z.string().describe('Template name (without .prompt extension)'),
1278
- variables: z.record(z.string()).optional().default({}),
1279
- strict: z.boolean().optional().default(true),
1280
- }),
1281
- handler: async (params) => {
1282
- const rendered = runtime.templateManager.render(params.template, (params.variables ?? {}), { strict: params.strict });
1283
- return { rendered };
1284
- },
1285
- },
1286
- {
1287
- name: 'list_templates',
1288
- description: 'List all loaded prompt templates.',
1289
- auth: 'read',
1290
- handler: async () => ({
1291
- templates: runtime.templateManager.listTemplates(),
1292
- }),
1293
- },
1294
- ];
1295
- }
1296
- //# sourceMappingURL=core-ops.js.map