@soleri/core 2.1.0 → 2.5.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 (377) hide show
  1. package/dist/brain/brain.d.ts +10 -1
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +116 -13
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +36 -1
  6. package/dist/brain/intelligence.d.ts.map +1 -1
  7. package/dist/brain/intelligence.js +119 -14
  8. package/dist/brain/intelligence.js.map +1 -1
  9. package/dist/brain/types.d.ts +34 -2
  10. package/dist/brain/types.d.ts.map +1 -1
  11. package/dist/cognee/client.d.ts +3 -0
  12. package/dist/cognee/client.d.ts.map +1 -1
  13. package/dist/cognee/client.js +17 -0
  14. package/dist/cognee/client.js.map +1 -1
  15. package/dist/cognee/sync-manager.d.ts +94 -0
  16. package/dist/cognee/sync-manager.d.ts.map +1 -0
  17. package/dist/cognee/sync-manager.js +293 -0
  18. package/dist/cognee/sync-manager.js.map +1 -0
  19. package/dist/control/identity-manager.d.ts +22 -0
  20. package/dist/control/identity-manager.d.ts.map +1 -0
  21. package/dist/control/identity-manager.js +233 -0
  22. package/dist/control/identity-manager.js.map +1 -0
  23. package/dist/control/intent-router.d.ts +32 -0
  24. package/dist/control/intent-router.d.ts.map +1 -0
  25. package/dist/control/intent-router.js +242 -0
  26. package/dist/control/intent-router.js.map +1 -0
  27. package/dist/control/types.d.ts +68 -0
  28. package/dist/control/types.d.ts.map +1 -0
  29. package/dist/control/types.js +9 -0
  30. package/dist/control/types.js.map +1 -0
  31. package/dist/curator/curator.d.ts +37 -1
  32. package/dist/curator/curator.d.ts.map +1 -1
  33. package/dist/curator/curator.js +199 -1
  34. package/dist/curator/curator.js.map +1 -1
  35. package/dist/errors/classify.d.ts +13 -0
  36. package/dist/errors/classify.d.ts.map +1 -0
  37. package/dist/errors/classify.js +97 -0
  38. package/dist/errors/classify.js.map +1 -0
  39. package/dist/errors/index.d.ts +6 -0
  40. package/dist/errors/index.d.ts.map +1 -0
  41. package/dist/errors/index.js +4 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/errors/retry.d.ts +40 -0
  44. package/dist/errors/retry.d.ts.map +1 -0
  45. package/dist/errors/retry.js +97 -0
  46. package/dist/errors/retry.js.map +1 -0
  47. package/dist/errors/types.d.ts +48 -0
  48. package/dist/errors/types.d.ts.map +1 -0
  49. package/dist/errors/types.js +59 -0
  50. package/dist/errors/types.js.map +1 -0
  51. package/dist/facades/types.d.ts +1 -1
  52. package/dist/governance/governance.d.ts +42 -0
  53. package/dist/governance/governance.d.ts.map +1 -0
  54. package/dist/governance/governance.js +488 -0
  55. package/dist/governance/governance.js.map +1 -0
  56. package/dist/governance/index.d.ts +3 -0
  57. package/dist/governance/index.d.ts.map +1 -0
  58. package/dist/governance/index.js +2 -0
  59. package/dist/governance/index.js.map +1 -0
  60. package/dist/governance/types.d.ts +102 -0
  61. package/dist/governance/types.d.ts.map +1 -0
  62. package/dist/governance/types.js +3 -0
  63. package/dist/governance/types.js.map +1 -0
  64. package/dist/index.d.ts +52 -3
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +47 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/intake/content-classifier.d.ts +14 -0
  69. package/dist/intake/content-classifier.d.ts.map +1 -0
  70. package/dist/intake/content-classifier.js +125 -0
  71. package/dist/intake/content-classifier.js.map +1 -0
  72. package/dist/intake/dedup-gate.d.ts +17 -0
  73. package/dist/intake/dedup-gate.d.ts.map +1 -0
  74. package/dist/intake/dedup-gate.js +66 -0
  75. package/dist/intake/dedup-gate.js.map +1 -0
  76. package/dist/intake/intake-pipeline.d.ts +63 -0
  77. package/dist/intake/intake-pipeline.d.ts.map +1 -0
  78. package/dist/intake/intake-pipeline.js +373 -0
  79. package/dist/intake/intake-pipeline.js.map +1 -0
  80. package/dist/intake/types.d.ts +65 -0
  81. package/dist/intake/types.d.ts.map +1 -0
  82. package/dist/intake/types.js +3 -0
  83. package/dist/intake/types.js.map +1 -0
  84. package/dist/intelligence/loader.js +1 -1
  85. package/dist/intelligence/loader.js.map +1 -1
  86. package/dist/intelligence/types.d.ts +3 -1
  87. package/dist/intelligence/types.d.ts.map +1 -1
  88. package/dist/logging/logger.d.ts +37 -0
  89. package/dist/logging/logger.d.ts.map +1 -0
  90. package/dist/logging/logger.js +145 -0
  91. package/dist/logging/logger.js.map +1 -0
  92. package/dist/logging/types.d.ts +19 -0
  93. package/dist/logging/types.d.ts.map +1 -0
  94. package/dist/logging/types.js +2 -0
  95. package/dist/logging/types.js.map +1 -0
  96. package/dist/loop/loop-manager.d.ts +100 -0
  97. package/dist/loop/loop-manager.d.ts.map +1 -0
  98. package/dist/loop/loop-manager.js +379 -0
  99. package/dist/loop/loop-manager.js.map +1 -0
  100. package/dist/loop/types.d.ts +103 -0
  101. package/dist/loop/types.d.ts.map +1 -0
  102. package/dist/loop/types.js +11 -0
  103. package/dist/loop/types.js.map +1 -0
  104. package/dist/persistence/index.d.ts +3 -0
  105. package/dist/persistence/index.d.ts.map +1 -0
  106. package/dist/persistence/index.js +2 -0
  107. package/dist/persistence/index.js.map +1 -0
  108. package/dist/persistence/sqlite-provider.d.ts +25 -0
  109. package/dist/persistence/sqlite-provider.d.ts.map +1 -0
  110. package/dist/persistence/sqlite-provider.js +59 -0
  111. package/dist/persistence/sqlite-provider.js.map +1 -0
  112. package/dist/persistence/types.d.ts +36 -0
  113. package/dist/persistence/types.d.ts.map +1 -0
  114. package/dist/persistence/types.js +8 -0
  115. package/dist/persistence/types.js.map +1 -0
  116. package/dist/planning/gap-analysis.d.ts +72 -0
  117. package/dist/planning/gap-analysis.d.ts.map +1 -0
  118. package/dist/planning/gap-analysis.js +442 -0
  119. package/dist/planning/gap-analysis.js.map +1 -0
  120. package/dist/planning/gap-types.d.ts +29 -0
  121. package/dist/planning/gap-types.d.ts.map +1 -0
  122. package/dist/planning/gap-types.js +28 -0
  123. package/dist/planning/gap-types.js.map +1 -0
  124. package/dist/planning/planner.d.ts +421 -4
  125. package/dist/planning/planner.d.ts.map +1 -1
  126. package/dist/planning/planner.js +949 -21
  127. package/dist/planning/planner.js.map +1 -1
  128. package/dist/playbooks/generic/brainstorming.d.ts +9 -0
  129. package/dist/playbooks/generic/brainstorming.d.ts.map +1 -0
  130. package/dist/playbooks/generic/brainstorming.js +105 -0
  131. package/dist/playbooks/generic/brainstorming.js.map +1 -0
  132. package/dist/playbooks/generic/code-review.d.ts +11 -0
  133. package/dist/playbooks/generic/code-review.d.ts.map +1 -0
  134. package/dist/playbooks/generic/code-review.js +176 -0
  135. package/dist/playbooks/generic/code-review.js.map +1 -0
  136. package/dist/playbooks/generic/subagent-execution.d.ts +9 -0
  137. package/dist/playbooks/generic/subagent-execution.d.ts.map +1 -0
  138. package/dist/playbooks/generic/subagent-execution.js +68 -0
  139. package/dist/playbooks/generic/subagent-execution.js.map +1 -0
  140. package/dist/playbooks/generic/systematic-debugging.d.ts +9 -0
  141. package/dist/playbooks/generic/systematic-debugging.d.ts.map +1 -0
  142. package/dist/playbooks/generic/systematic-debugging.js +87 -0
  143. package/dist/playbooks/generic/systematic-debugging.js.map +1 -0
  144. package/dist/playbooks/generic/tdd.d.ts +9 -0
  145. package/dist/playbooks/generic/tdd.d.ts.map +1 -0
  146. package/dist/playbooks/generic/tdd.js +70 -0
  147. package/dist/playbooks/generic/tdd.js.map +1 -0
  148. package/dist/playbooks/generic/verification.d.ts +9 -0
  149. package/dist/playbooks/generic/verification.d.ts.map +1 -0
  150. package/dist/playbooks/generic/verification.js +74 -0
  151. package/dist/playbooks/generic/verification.js.map +1 -0
  152. package/dist/playbooks/index.d.ts +4 -0
  153. package/dist/playbooks/index.d.ts.map +1 -0
  154. package/dist/playbooks/index.js +5 -0
  155. package/dist/playbooks/index.js.map +1 -0
  156. package/dist/playbooks/playbook-registry.d.ts +42 -0
  157. package/dist/playbooks/playbook-registry.d.ts.map +1 -0
  158. package/dist/playbooks/playbook-registry.js +227 -0
  159. package/dist/playbooks/playbook-registry.js.map +1 -0
  160. package/dist/playbooks/playbook-seeder.d.ts +47 -0
  161. package/dist/playbooks/playbook-seeder.d.ts.map +1 -0
  162. package/dist/playbooks/playbook-seeder.js +104 -0
  163. package/dist/playbooks/playbook-seeder.js.map +1 -0
  164. package/dist/playbooks/playbook-types.d.ts +132 -0
  165. package/dist/playbooks/playbook-types.d.ts.map +1 -0
  166. package/dist/playbooks/playbook-types.js +12 -0
  167. package/dist/playbooks/playbook-types.js.map +1 -0
  168. package/dist/project/project-registry.d.ts +79 -0
  169. package/dist/project/project-registry.d.ts.map +1 -0
  170. package/dist/project/project-registry.js +274 -0
  171. package/dist/project/project-registry.js.map +1 -0
  172. package/dist/project/types.d.ts +28 -0
  173. package/dist/project/types.d.ts.map +1 -0
  174. package/dist/project/types.js +5 -0
  175. package/dist/project/types.js.map +1 -0
  176. package/dist/prompts/index.d.ts +4 -0
  177. package/dist/prompts/index.d.ts.map +1 -0
  178. package/dist/prompts/index.js +3 -0
  179. package/dist/prompts/index.js.map +1 -0
  180. package/dist/prompts/parser.d.ts +17 -0
  181. package/dist/prompts/parser.d.ts.map +1 -0
  182. package/dist/prompts/parser.js +47 -0
  183. package/dist/prompts/parser.js.map +1 -0
  184. package/dist/prompts/template-manager.d.ts +25 -0
  185. package/dist/prompts/template-manager.d.ts.map +1 -0
  186. package/dist/prompts/template-manager.js +71 -0
  187. package/dist/prompts/template-manager.js.map +1 -0
  188. package/dist/prompts/types.d.ts +26 -0
  189. package/dist/prompts/types.d.ts.map +1 -0
  190. package/dist/prompts/types.js +5 -0
  191. package/dist/prompts/types.js.map +1 -0
  192. package/dist/runtime/admin-extra-ops.d.ts +15 -0
  193. package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
  194. package/dist/runtime/admin-extra-ops.js +595 -0
  195. package/dist/runtime/admin-extra-ops.js.map +1 -0
  196. package/dist/runtime/admin-ops.d.ts +15 -0
  197. package/dist/runtime/admin-ops.d.ts.map +1 -0
  198. package/dist/runtime/admin-ops.js +329 -0
  199. package/dist/runtime/admin-ops.js.map +1 -0
  200. package/dist/runtime/capture-ops.d.ts +15 -0
  201. package/dist/runtime/capture-ops.d.ts.map +1 -0
  202. package/dist/runtime/capture-ops.js +363 -0
  203. package/dist/runtime/capture-ops.js.map +1 -0
  204. package/dist/runtime/cognee-sync-ops.d.ts +12 -0
  205. package/dist/runtime/cognee-sync-ops.d.ts.map +1 -0
  206. package/dist/runtime/cognee-sync-ops.js +55 -0
  207. package/dist/runtime/cognee-sync-ops.js.map +1 -0
  208. package/dist/runtime/core-ops.d.ts +9 -3
  209. package/dist/runtime/core-ops.d.ts.map +1 -1
  210. package/dist/runtime/core-ops.js +693 -10
  211. package/dist/runtime/core-ops.js.map +1 -1
  212. package/dist/runtime/curator-extra-ops.d.ts +9 -0
  213. package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
  214. package/dist/runtime/curator-extra-ops.js +71 -0
  215. package/dist/runtime/curator-extra-ops.js.map +1 -0
  216. package/dist/runtime/domain-ops.d.ts.map +1 -1
  217. package/dist/runtime/domain-ops.js +61 -15
  218. package/dist/runtime/domain-ops.js.map +1 -1
  219. package/dist/runtime/grading-ops.d.ts +14 -0
  220. package/dist/runtime/grading-ops.d.ts.map +1 -0
  221. package/dist/runtime/grading-ops.js +105 -0
  222. package/dist/runtime/grading-ops.js.map +1 -0
  223. package/dist/runtime/intake-ops.d.ts +14 -0
  224. package/dist/runtime/intake-ops.d.ts.map +1 -0
  225. package/dist/runtime/intake-ops.js +110 -0
  226. package/dist/runtime/intake-ops.js.map +1 -0
  227. package/dist/runtime/loop-ops.d.ts +14 -0
  228. package/dist/runtime/loop-ops.d.ts.map +1 -0
  229. package/dist/runtime/loop-ops.js +251 -0
  230. package/dist/runtime/loop-ops.js.map +1 -0
  231. package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
  232. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
  233. package/dist/runtime/memory-cross-project-ops.js +165 -0
  234. package/dist/runtime/memory-cross-project-ops.js.map +1 -0
  235. package/dist/runtime/memory-extra-ops.d.ts +13 -0
  236. package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
  237. package/dist/runtime/memory-extra-ops.js +173 -0
  238. package/dist/runtime/memory-extra-ops.js.map +1 -0
  239. package/dist/runtime/orchestrate-ops.d.ts +17 -0
  240. package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
  241. package/dist/runtime/orchestrate-ops.js +246 -0
  242. package/dist/runtime/orchestrate-ops.js.map +1 -0
  243. package/dist/runtime/planning-extra-ops.d.ts +25 -0
  244. package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
  245. package/dist/runtime/planning-extra-ops.js +663 -0
  246. package/dist/runtime/planning-extra-ops.js.map +1 -0
  247. package/dist/runtime/playbook-ops.d.ts +14 -0
  248. package/dist/runtime/playbook-ops.d.ts.map +1 -0
  249. package/dist/runtime/playbook-ops.js +141 -0
  250. package/dist/runtime/playbook-ops.js.map +1 -0
  251. package/dist/runtime/project-ops.d.ts +15 -0
  252. package/dist/runtime/project-ops.d.ts.map +1 -0
  253. package/dist/runtime/project-ops.js +186 -0
  254. package/dist/runtime/project-ops.js.map +1 -0
  255. package/dist/runtime/runtime.d.ts.map +1 -1
  256. package/dist/runtime/runtime.js +65 -3
  257. package/dist/runtime/runtime.js.map +1 -1
  258. package/dist/runtime/types.d.ts +29 -0
  259. package/dist/runtime/types.d.ts.map +1 -1
  260. package/dist/runtime/vault-extra-ops.d.ts +10 -0
  261. package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
  262. package/dist/runtime/vault-extra-ops.js +536 -0
  263. package/dist/runtime/vault-extra-ops.js.map +1 -0
  264. package/dist/telemetry/telemetry.d.ts +48 -0
  265. package/dist/telemetry/telemetry.d.ts.map +1 -0
  266. package/dist/telemetry/telemetry.js +87 -0
  267. package/dist/telemetry/telemetry.js.map +1 -0
  268. package/dist/vault/playbook.d.ts +34 -0
  269. package/dist/vault/playbook.d.ts.map +1 -0
  270. package/dist/vault/playbook.js +60 -0
  271. package/dist/vault/playbook.js.map +1 -0
  272. package/dist/vault/vault.d.ts +97 -4
  273. package/dist/vault/vault.d.ts.map +1 -1
  274. package/dist/vault/vault.js +424 -65
  275. package/dist/vault/vault.js.map +1 -1
  276. package/package.json +7 -3
  277. package/src/__tests__/admin-extra-ops.test.ts +467 -0
  278. package/src/__tests__/admin-ops.test.ts +271 -0
  279. package/src/__tests__/brain-intelligence.test.ts +205 -0
  280. package/src/__tests__/brain.test.ts +134 -3
  281. package/src/__tests__/capture-ops.test.ts +509 -0
  282. package/src/__tests__/cognee-integration.test.ts +80 -0
  283. package/src/__tests__/cognee-sync-manager.test.ts +103 -0
  284. package/src/__tests__/core-ops.test.ts +292 -2
  285. package/src/__tests__/curator-extra-ops.test.ts +381 -0
  286. package/src/__tests__/domain-ops.test.ts +66 -0
  287. package/src/__tests__/errors.test.ts +388 -0
  288. package/src/__tests__/governance.test.ts +522 -0
  289. package/src/__tests__/grading-ops.test.ts +361 -0
  290. package/src/__tests__/identity-manager.test.ts +243 -0
  291. package/src/__tests__/intake-pipeline.test.ts +162 -0
  292. package/src/__tests__/intent-router.test.ts +222 -0
  293. package/src/__tests__/logger.test.ts +200 -0
  294. package/src/__tests__/loop-ops.test.ts +469 -0
  295. package/src/__tests__/memory-cross-project-ops.test.ts +248 -0
  296. package/src/__tests__/memory-extra-ops.test.ts +352 -0
  297. package/src/__tests__/orchestrate-ops.test.ts +289 -0
  298. package/src/__tests__/persistence.test.ts +225 -0
  299. package/src/__tests__/planner.test.ts +416 -7
  300. package/src/__tests__/planning-extra-ops.test.ts +706 -0
  301. package/src/__tests__/playbook-registry.test.ts +326 -0
  302. package/src/__tests__/playbook-seeder.test.ts +163 -0
  303. package/src/__tests__/playbook.test.ts +389 -0
  304. package/src/__tests__/project-ops.test.ts +381 -0
  305. package/src/__tests__/template-manager.test.ts +222 -0
  306. package/src/__tests__/vault-extra-ops.test.ts +482 -0
  307. package/src/brain/brain.ts +185 -16
  308. package/src/brain/intelligence.ts +179 -10
  309. package/src/brain/types.ts +40 -2
  310. package/src/cognee/client.ts +18 -0
  311. package/src/cognee/sync-manager.ts +389 -0
  312. package/src/control/identity-manager.ts +354 -0
  313. package/src/control/intent-router.ts +326 -0
  314. package/src/control/types.ts +102 -0
  315. package/src/curator/curator.ts +295 -1
  316. package/src/errors/classify.ts +102 -0
  317. package/src/errors/index.ts +5 -0
  318. package/src/errors/retry.ts +132 -0
  319. package/src/errors/types.ts +81 -0
  320. package/src/governance/governance.ts +698 -0
  321. package/src/governance/index.ts +18 -0
  322. package/src/governance/types.ts +111 -0
  323. package/src/index.ts +213 -2
  324. package/src/intake/content-classifier.ts +146 -0
  325. package/src/intake/dedup-gate.ts +92 -0
  326. package/src/intake/intake-pipeline.ts +503 -0
  327. package/src/intake/types.ts +69 -0
  328. package/src/intelligence/loader.ts +1 -1
  329. package/src/intelligence/types.ts +3 -1
  330. package/src/logging/logger.ts +154 -0
  331. package/src/logging/types.ts +21 -0
  332. package/src/loop/loop-manager.ts +448 -0
  333. package/src/loop/types.ts +115 -0
  334. package/src/persistence/index.ts +7 -0
  335. package/src/persistence/sqlite-provider.ts +62 -0
  336. package/src/persistence/types.ts +44 -0
  337. package/src/planning/gap-analysis.ts +775 -0
  338. package/src/planning/gap-types.ts +61 -0
  339. package/src/planning/planner.ts +1273 -24
  340. package/src/playbooks/generic/brainstorming.ts +110 -0
  341. package/src/playbooks/generic/code-review.ts +181 -0
  342. package/src/playbooks/generic/subagent-execution.ts +74 -0
  343. package/src/playbooks/generic/systematic-debugging.ts +92 -0
  344. package/src/playbooks/generic/tdd.ts +75 -0
  345. package/src/playbooks/generic/verification.ts +79 -0
  346. package/src/playbooks/index.ts +27 -0
  347. package/src/playbooks/playbook-registry.ts +284 -0
  348. package/src/playbooks/playbook-seeder.ts +119 -0
  349. package/src/playbooks/playbook-types.ts +162 -0
  350. package/src/project/project-registry.ts +370 -0
  351. package/src/project/types.ts +31 -0
  352. package/src/prompts/index.ts +3 -0
  353. package/src/prompts/parser.ts +59 -0
  354. package/src/prompts/template-manager.ts +77 -0
  355. package/src/prompts/types.ts +28 -0
  356. package/src/runtime/admin-extra-ops.ts +652 -0
  357. package/src/runtime/admin-ops.ts +340 -0
  358. package/src/runtime/capture-ops.ts +404 -0
  359. package/src/runtime/cognee-sync-ops.ts +63 -0
  360. package/src/runtime/core-ops.ts +787 -9
  361. package/src/runtime/curator-extra-ops.ts +85 -0
  362. package/src/runtime/domain-ops.ts +67 -15
  363. package/src/runtime/grading-ops.ts +130 -0
  364. package/src/runtime/intake-ops.ts +126 -0
  365. package/src/runtime/loop-ops.ts +277 -0
  366. package/src/runtime/memory-cross-project-ops.ts +191 -0
  367. package/src/runtime/memory-extra-ops.ts +186 -0
  368. package/src/runtime/orchestrate-ops.ts +278 -0
  369. package/src/runtime/planning-extra-ops.ts +718 -0
  370. package/src/runtime/playbook-ops.ts +169 -0
  371. package/src/runtime/project-ops.ts +202 -0
  372. package/src/runtime/runtime.ts +77 -3
  373. package/src/runtime/types.ts +29 -0
  374. package/src/runtime/vault-extra-ops.ts +606 -0
  375. package/src/telemetry/telemetry.ts +118 -0
  376. package/src/vault/playbook.ts +87 -0
  377. package/src/vault/vault.ts +575 -98
@@ -1,19 +1,40 @@
1
1
  /**
2
- * Generic core operations factory — 37 ops that every agent gets.
2
+ * Generic core operations factory — 158 ops that every agent gets.
3
3
  *
4
4
  * These ops are agent-agnostic (no persona, no activation).
5
5
  * The 5 agent-specific ops (health, identity, activate, inject_claude_md, setup)
6
6
  * stay in generated code because they reference agent-specific modules.
7
7
  */
8
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';
9
24
  /**
10
- * Create the 37 generic core operations for an agent runtime.
25
+ * Create the 203 generic core operations for an agent runtime.
11
26
  *
12
27
  * Groups: search/vault (4), memory (4), export (1), planning (5),
13
- * brain (4), brain intelligence (11), curator (8).
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 (20),
32
+ * admin (8), admin-extra (23), loop (9), orchestrate (5),
33
+ * grading (5), capture (4), curator-extra (5), project (12),
34
+ * cognee-sync (3), intake (4).
14
35
  */
15
36
  export function createCoreOps(runtime) {
16
- const { vault, brain, brainIntelligence, planner, curator, llmClient, keyPool } = runtime;
37
+ const { vault, brain, brainIntelligence, planner, curator, governance, cognee, identityManager, intentRouter, llmClient, keyPool, syncManager, intakePipeline, } = runtime;
17
38
  return [
18
39
  // ─── Search / Vault ──────────────────────────────────────────
19
40
  {
@@ -23,7 +44,7 @@ export function createCoreOps(runtime) {
23
44
  schema: z.object({
24
45
  query: z.string(),
25
46
  domain: z.string().optional(),
26
- type: z.enum(['pattern', 'anti-pattern', 'rule']).optional(),
47
+ type: z.enum(['pattern', 'anti-pattern', 'rule', 'playbook']).optional(),
27
48
  severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
28
49
  tags: z.array(z.string()).optional(),
29
50
  limit: z.number().optional(),
@@ -50,7 +71,7 @@ export function createCoreOps(runtime) {
50
71
  auth: 'read',
51
72
  schema: z.object({
52
73
  domain: z.string().optional(),
53
- type: z.enum(['pattern', 'anti-pattern', 'rule']).optional(),
74
+ type: z.enum(['pattern', 'anti-pattern', 'rule', 'playbook']).optional(),
54
75
  severity: z.enum(['critical', 'warning', 'suggestion']).optional(),
55
76
  tags: z.array(z.string()).optional(),
56
77
  limit: z.number().optional(),
@@ -79,8 +100,15 @@ export function createCoreOps(runtime) {
79
100
  const { resolve } = await import('node:path');
80
101
  const projectPath = resolve(params.projectPath ?? '.');
81
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);
82
105
  const stats = vault.stats();
83
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);
84
112
  return {
85
113
  project,
86
114
  is_new: isNew,
@@ -88,6 +116,14 @@ export function createCoreOps(runtime) {
88
116
  ? 'Welcome! New project registered.'
89
117
  : 'Welcome back! Session #' + project.sessionCount + ' for ' + project.name + '.',
90
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
+ },
91
127
  };
92
128
  },
93
129
  },
@@ -321,6 +357,45 @@ export function createCoreOps(runtime) {
321
357
  };
322
358
  },
323
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
+ },
324
399
  {
325
400
  name: 'rebuild_vocabulary',
326
401
  description: 'Force rebuild the TF-IDF vocabulary from all vault entries.',
@@ -340,6 +415,19 @@ export function createCoreOps(runtime) {
340
415
  return { ...base, intelligence };
341
416
  },
342
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
+ },
343
431
  {
344
432
  name: 'llm_status',
345
433
  description: 'LLM client status — provider availability, key pool status, model routing config.',
@@ -403,17 +491,22 @@ export function createCoreOps(runtime) {
403
491
  },
404
492
  {
405
493
  name: 'brain_recommend',
406
- description: 'Get pattern recommendations for a task context. Matches domain and task terms against known strengths.',
494
+ description: 'Get pattern recommendations for a task context. Matches domain, task terms, and source-specific acceptance rates against known strengths.',
407
495
  auth: 'read',
408
496
  schema: z.object({
409
497
  domain: z.string().optional(),
410
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).'),
411
503
  limit: z.number().optional(),
412
504
  }),
413
505
  handler: async (params) => {
414
506
  return brainIntelligence.recommend({
415
507
  domain: params.domain,
416
508
  task: params.task,
509
+ source: params.source,
417
510
  limit: params.limit ?? 5,
418
511
  });
419
512
  },
@@ -469,13 +562,15 @@ export function createCoreOps(runtime) {
469
562
  },
470
563
  {
471
564
  name: 'brain_promote_proposals',
472
- description: 'Promote knowledge proposals to vault entries. Creates intelligence entries from auto-extracted patterns.',
565
+ description: 'Promote knowledge proposals to vault entries. Creates intelligence entries from auto-extracted patterns. Gated by governance policies.',
473
566
  auth: 'write',
474
567
  schema: z.object({
475
568
  proposalIds: z.array(z.string()).describe('IDs of proposals to promote.'),
569
+ projectPath: z.string().optional().default('.'),
476
570
  }),
477
571
  handler: async (params) => {
478
- return brainIntelligence.promoteProposals(params.proposalIds);
572
+ const pp = params.projectPath ?? '.';
573
+ return brainIntelligence.promoteProposals(params.proposalIds, governance, pp);
479
574
  },
480
575
  },
481
576
  {
@@ -484,7 +579,10 @@ export function createCoreOps(runtime) {
484
579
  auth: 'write',
485
580
  schema: z.object({
486
581
  action: z.enum(['start', 'end']),
487
- sessionId: z.string().optional().describe('Required for end. Auto-generated for start if omitted.'),
582
+ sessionId: z
583
+ .string()
584
+ .optional()
585
+ .describe('Required for end. Auto-generated for start if omitted.'),
488
586
  domain: z.string().optional(),
489
587
  context: z.string().optional(),
490
588
  toolsUsed: z.array(z.string()).optional(),
@@ -505,6 +603,316 @@ export function createCoreOps(runtime) {
505
603
  });
506
604
  },
507
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
+ },
508
916
  // ─── Curator ─────────────────────────────────────────────────
509
917
  {
510
918
  name: 'curator_status',
@@ -608,6 +1016,281 @@ export function createCoreOps(runtime) {
608
1016
  return curator.healthAudit();
609
1017
  },
610
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
+ },
611
1294
  ];
612
1295
  }
613
1296
  //# sourceMappingURL=core-ops.js.map