@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
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Playbook Operations — 5 ops for playbook management.
3
+ *
4
+ * Existing ops (moved from core-ops.ts):
5
+ * playbook_list, playbook_get, playbook_create
6
+ *
7
+ * New ops:
8
+ * playbook_match — match playbooks by intent + text
9
+ * playbook_seed — seed built-in playbooks into vault
10
+ */
11
+
12
+ import { z } from 'zod';
13
+ import type { OpDefinition } from '../facades/types.js';
14
+ import type { AgentRuntime } from './types.js';
15
+ import { parsePlaybookFromEntry, validatePlaybook } from '../vault/playbook.js';
16
+ import {
17
+ matchPlaybooks,
18
+ seedDefaultPlaybooks,
19
+ entryToPlaybookDefinition,
20
+ } from '../playbooks/index.js';
21
+ import type { PlaybookIntent } from '../playbooks/index.js';
22
+
23
+ export function createPlaybookOps(runtime: AgentRuntime): OpDefinition[] {
24
+ const { vault } = runtime;
25
+
26
+ return [
27
+ // ─── playbook_list ──────────────────────────────────────────────
28
+ {
29
+ name: 'playbook_list',
30
+ description: 'List playbooks stored in the vault, optionally filtered by domain.',
31
+ auth: 'read',
32
+ schema: z.object({
33
+ domain: z.string().optional(),
34
+ limit: z.number().optional(),
35
+ }),
36
+ handler: async (params) => {
37
+ const entries = vault.list({
38
+ type: 'playbook',
39
+ domain: params.domain as string | undefined,
40
+ limit: (params.limit as number) ?? 50,
41
+ });
42
+ const playbooks = entries.map((e) => parsePlaybookFromEntry(e)).filter((p) => p !== null);
43
+ return { playbooks, count: playbooks.length };
44
+ },
45
+ },
46
+
47
+ // ─── playbook_get ───────────────────────────────────────────────
48
+ {
49
+ name: 'playbook_get',
50
+ description: 'Get a single playbook by ID, parsed into structured steps.',
51
+ auth: 'read',
52
+ schema: z.object({ id: z.string() }),
53
+ handler: async (params) => {
54
+ const entry = vault.get(params.id as string);
55
+ if (!entry) return { error: 'Playbook not found: ' + params.id };
56
+ if (entry.type !== 'playbook') return { error: 'Entry is not a playbook: ' + params.id };
57
+ const playbook = parsePlaybookFromEntry(entry);
58
+ if (!playbook) return { error: 'Failed to parse playbook context: ' + params.id };
59
+ return playbook;
60
+ },
61
+ },
62
+
63
+ // ─── playbook_create ────────────────────────────────────────────
64
+ {
65
+ name: 'playbook_create',
66
+ description:
67
+ 'Create a playbook with structured steps. Validates step ordering and builds vault entry automatically.',
68
+ auth: 'write',
69
+ schema: z.object({
70
+ id: z.string().optional(),
71
+ title: z.string(),
72
+ domain: z.string(),
73
+ description: z.string(),
74
+ steps: z.array(
75
+ z.object({
76
+ title: z.string(),
77
+ description: z.string(),
78
+ validation: z.string().optional(),
79
+ }),
80
+ ),
81
+ tags: z.array(z.string()).optional().default([]),
82
+ severity: z.enum(['critical', 'warning', 'suggestion']).optional().default('suggestion'),
83
+ }),
84
+ handler: async (params) => {
85
+ const title = params.title as string;
86
+ const domain = params.domain as string;
87
+ const rawSteps = params.steps as Array<{
88
+ title: string;
89
+ description: string;
90
+ validation?: string;
91
+ }>;
92
+
93
+ const steps = rawSteps.map((s, i) => ({ ...s, order: i + 1 }));
94
+ const id =
95
+ (params.id as string | undefined) ??
96
+ `playbook-${domain}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
97
+
98
+ const playbook = {
99
+ id,
100
+ title,
101
+ domain,
102
+ description: params.description as string,
103
+ steps,
104
+ tags: params.tags as string[],
105
+ createdAt: Date.now(),
106
+ updatedAt: Date.now(),
107
+ };
108
+
109
+ const validation = validatePlaybook(playbook);
110
+ if (!validation.valid) {
111
+ return { created: false, id, errors: validation.errors };
112
+ }
113
+
114
+ vault.add({
115
+ id,
116
+ type: 'playbook',
117
+ domain,
118
+ title,
119
+ severity:
120
+ (params.severity as 'critical' | 'warning' | 'suggestion' | undefined) ?? 'suggestion',
121
+ description: params.description as string,
122
+ context: JSON.stringify({ steps }),
123
+ tags: params.tags as string[],
124
+ });
125
+
126
+ return { created: true, id, steps: steps.length };
127
+ },
128
+ },
129
+
130
+ // ─── playbook_match (NEW) ───────────────────────────────────────
131
+ {
132
+ name: 'playbook_match',
133
+ description:
134
+ 'Match playbooks by intent and text. Combines vault-stored and built-in playbooks, returns best match with merged gates/tasks/tools.',
135
+ auth: 'read',
136
+ schema: z.object({
137
+ intent: z
138
+ .enum(['BUILD', 'FIX', 'REVIEW', 'PLAN', 'IMPROVE', 'DELIVER'])
139
+ .optional()
140
+ .describe('Plan intent for matching'),
141
+ text: z.string().describe('Plan objective + scope text to match against'),
142
+ }),
143
+ handler: async (params) => {
144
+ const intent = params.intent as PlaybookIntent | undefined;
145
+ const text = params.text as string;
146
+
147
+ // Load vault playbooks and convert to PlaybookDefinition
148
+ const vaultEntries = vault.list({ type: 'playbook', limit: 200 });
149
+ const vaultPlaybooks = vaultEntries
150
+ .map((e) => entryToPlaybookDefinition(e))
151
+ .filter((p): p is NonNullable<typeof p> => p !== null);
152
+
153
+ const result = matchPlaybooks(intent, text, vaultPlaybooks);
154
+ return result;
155
+ },
156
+ },
157
+
158
+ // ─── playbook_seed (NEW) ────────────────────────────────────────
159
+ {
160
+ name: 'playbook_seed',
161
+ description:
162
+ 'Seed built-in playbooks into the vault. Idempotent — skips existing playbooks. Seeds 6 generic playbooks (TDD, brainstorming, code-review, subagent-execution, debugging, verification).',
163
+ auth: 'write',
164
+ handler: async () => {
165
+ return seedDefaultPlaybooks(vault);
166
+ },
167
+ },
168
+ ];
169
+ }
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Project registry operations — 12 ops for managing projects, rules, and links.
3
+ *
4
+ * These ops expose the ProjectRegistry module as facade operations.
5
+ * All state is persisted in the Vault's SQLite database.
6
+ */
7
+
8
+ import { z } from 'zod';
9
+ import type { OpDefinition } from '../facades/types.js';
10
+ import type { AgentRuntime } from './types.js';
11
+
12
+ /**
13
+ * Create the 12 project registry operations for an agent runtime.
14
+ *
15
+ * Groups: projects (3), rules (4), links (4), misc (1).
16
+ */
17
+ export function createProjectOps(runtime: AgentRuntime): OpDefinition[] {
18
+ const { projectRegistry } = runtime;
19
+
20
+ return [
21
+ // ─── Projects ───────────────────────────────────────────────────
22
+ {
23
+ name: 'project_get',
24
+ description: 'Get a registered project by ID.',
25
+ auth: 'read',
26
+ schema: z.object({
27
+ projectId: z.string().describe('Project ID to look up'),
28
+ }),
29
+ handler: async (params) => {
30
+ const project = projectRegistry.get(params.projectId as string);
31
+ if (!project) {
32
+ return { found: false, project: null };
33
+ }
34
+ return { found: true, project };
35
+ },
36
+ },
37
+ {
38
+ name: 'project_list',
39
+ description: 'List all registered projects, ordered by last accessed time.',
40
+ auth: 'read',
41
+ handler: async () => {
42
+ const projects = projectRegistry.list();
43
+ return { count: projects.length, projects };
44
+ },
45
+ },
46
+ {
47
+ name: 'project_unregister',
48
+ description: 'Unregister a project — removes it and all associated rules and links.',
49
+ auth: 'write',
50
+ schema: z.object({
51
+ projectId: z.string().describe('Project ID to unregister'),
52
+ }),
53
+ handler: async (params) => {
54
+ const removed = projectRegistry.unregister(params.projectId as string);
55
+ return { removed, projectId: params.projectId };
56
+ },
57
+ },
58
+
59
+ // ─── Rules ──────────────────────────────────────────────────────
60
+ {
61
+ name: 'project_get_rules',
62
+ description: 'Get all rules for a specific project.',
63
+ auth: 'read',
64
+ schema: z.object({
65
+ projectId: z.string().describe('Project ID'),
66
+ }),
67
+ handler: async (params) => {
68
+ const rules = projectRegistry.getRules(params.projectId as string);
69
+ return { count: rules.length, rules };
70
+ },
71
+ },
72
+ {
73
+ name: 'project_list_rules',
74
+ description: 'List all projects with their associated rules.',
75
+ auth: 'read',
76
+ handler: async () => {
77
+ const result = projectRegistry.listRulesAll();
78
+ return {
79
+ count: result.length,
80
+ projects: result.map((r) => ({
81
+ project: r.project,
82
+ ruleCount: r.rules.length,
83
+ rules: r.rules,
84
+ })),
85
+ };
86
+ },
87
+ },
88
+ {
89
+ name: 'project_add_rule',
90
+ description: 'Add a rule to a project — behavior, preference, restriction, or convention.',
91
+ auth: 'write',
92
+ schema: z.object({
93
+ projectId: z.string().describe('Project ID to add the rule to'),
94
+ category: z
95
+ .enum(['behavior', 'preference', 'restriction', 'convention'])
96
+ .describe('Rule category'),
97
+ text: z.string().describe('Rule text'),
98
+ priority: z.number().default(0).describe('Priority (higher = more important)'),
99
+ }),
100
+ handler: async (params) => {
101
+ const rule = projectRegistry.addRule(params.projectId as string, {
102
+ category: params.category as 'behavior' | 'preference' | 'restriction' | 'convention',
103
+ text: params.text as string,
104
+ priority: (params.priority as number) ?? 0,
105
+ });
106
+ return { added: true, rule };
107
+ },
108
+ },
109
+ {
110
+ name: 'project_remove_rule',
111
+ description: 'Remove a project rule by its ID.',
112
+ auth: 'write',
113
+ schema: z.object({
114
+ ruleId: z.string().describe('Rule ID to remove'),
115
+ }),
116
+ handler: async (params) => {
117
+ const removed = projectRegistry.removeRule(params.ruleId as string);
118
+ return { removed, ruleId: params.ruleId };
119
+ },
120
+ },
121
+
122
+ // ─── Links ──────────────────────────────────────────────────────
123
+ {
124
+ name: 'project_link',
125
+ description: 'Create a link between two projects (related, parent, child, fork).',
126
+ auth: 'write',
127
+ schema: z.object({
128
+ sourceId: z.string().describe('Source project ID'),
129
+ targetId: z.string().describe('Target project ID'),
130
+ linkType: z.enum(['related', 'parent', 'child', 'fork']).describe('Type of link'),
131
+ }),
132
+ handler: async (params) => {
133
+ const link = projectRegistry.link(
134
+ params.sourceId as string,
135
+ params.targetId as string,
136
+ params.linkType as 'related' | 'parent' | 'child' | 'fork',
137
+ );
138
+ return { linked: true, link };
139
+ },
140
+ },
141
+ {
142
+ name: 'project_unlink',
143
+ description: 'Remove links between two projects. Omit linkType to remove all link types.',
144
+ auth: 'write',
145
+ schema: z.object({
146
+ sourceId: z.string().describe('Source project ID'),
147
+ targetId: z.string().describe('Target project ID'),
148
+ linkType: z
149
+ .enum(['related', 'parent', 'child', 'fork'])
150
+ .optional()
151
+ .describe('Specific link type to remove'),
152
+ }),
153
+ handler: async (params) => {
154
+ const count = projectRegistry.unlink(
155
+ params.sourceId as string,
156
+ params.targetId as string,
157
+ params.linkType as 'related' | 'parent' | 'child' | 'fork' | undefined,
158
+ );
159
+ return { removed: count, sourceId: params.sourceId, targetId: params.targetId };
160
+ },
161
+ },
162
+ {
163
+ name: 'project_get_links',
164
+ description: 'Get all links for a project (both incoming and outgoing).',
165
+ auth: 'read',
166
+ schema: z.object({
167
+ projectId: z.string().describe('Project ID'),
168
+ }),
169
+ handler: async (params) => {
170
+ const links = projectRegistry.getLinks(params.projectId as string);
171
+ return { count: links.length, links };
172
+ },
173
+ },
174
+ {
175
+ name: 'project_linked_projects',
176
+ description:
177
+ 'Get linked projects with full details — project info, link type, and direction.',
178
+ auth: 'read',
179
+ schema: z.object({
180
+ projectId: z.string().describe('Project ID'),
181
+ }),
182
+ handler: async (params) => {
183
+ const linked = projectRegistry.getLinkedProjects(params.projectId as string);
184
+ return { count: linked.length, linked };
185
+ },
186
+ },
187
+
188
+ // ─── Misc ───────────────────────────────────────────────────────
189
+ {
190
+ name: 'project_touch',
191
+ description: 'Update the last accessed timestamp for a project.',
192
+ auth: 'write',
193
+ schema: z.object({
194
+ projectId: z.string().describe('Project ID to touch'),
195
+ }),
196
+ handler: async (params) => {
197
+ projectRegistry.touch(params.projectId as string);
198
+ return { touched: true, projectId: params.projectId };
199
+ },
200
+ },
201
+ ];
202
+ }
@@ -14,9 +14,21 @@ import { Brain } from '../brain/brain.js';
14
14
  import { BrainIntelligence } from '../brain/intelligence.js';
15
15
  import { Planner } from '../planning/planner.js';
16
16
  import { Curator } from '../curator/curator.js';
17
+ import { Governance } from '../governance/governance.js';
18
+ import { CogneeClient } from '../cognee/client.js';
19
+ import { LoopManager } from '../loop/loop-manager.js';
20
+ import { IdentityManager } from '../control/identity-manager.js';
21
+ import { IntentRouter } from '../control/intent-router.js';
17
22
  import { KeyPool, loadKeyPoolConfig } from '../llm/key-pool.js';
18
23
  import { loadIntelligenceData } from '../intelligence/loader.js';
19
24
  import { LLMClient } from '../llm/llm-client.js';
25
+ import { CogneeSyncManager } from '../cognee/sync-manager.js';
26
+ import { IntakePipeline } from '../intake/intake-pipeline.js';
27
+ import { Telemetry } from '../telemetry/telemetry.js';
28
+ import { ProjectRegistry } from '../project/project-registry.js';
29
+ import { TemplateManager } from '../prompts/template-manager.js';
30
+ import { existsSync } from 'node:fs';
31
+ import { createLogger } from '../logging/logger.js';
20
32
  import type { AgentRuntimeConfig, AgentRuntime } from './types.js';
21
33
 
22
34
  /**
@@ -33,6 +45,9 @@ export function createAgentRuntime(config: AgentRuntimeConfig): AgentRuntime {
33
45
  const vaultPath = config.vaultPath ?? join(agentHome, 'vault.db');
34
46
  const plansPath = config.plansPath ?? join(agentHome, 'plans.json');
35
47
 
48
+ // Logger — structured output to stderr
49
+ const logger = createLogger({ level: config.logLevel, prefix: `[${agentId}]` });
50
+
36
51
  // Vault — persistent SQLite knowledge store
37
52
  const vault = new Vault(vaultPath);
38
53
 
@@ -47,14 +62,46 @@ export function createAgentRuntime(config: AgentRuntimeConfig): AgentRuntime {
47
62
  // Planner — multi-step task tracking
48
63
  const planner = new Planner(plansPath);
49
64
 
65
+ // Cognee — vector search client (graceful degradation if Cognee is down)
66
+ const cogneePartial: Partial<import('../cognee/types.js').CogneeConfig> = { dataset: agentId };
67
+ if (process.env.COGNEE_BASE_URL) cogneePartial.baseUrl = process.env.COGNEE_BASE_URL;
68
+ if (process.env.COGNEE_API_TOKEN) cogneePartial.apiToken = process.env.COGNEE_API_TOKEN;
69
+ if (process.env.COGNEE_DATASET) cogneePartial.dataset = process.env.COGNEE_DATASET;
70
+ const cognee = new CogneeClient(cogneePartial);
71
+
50
72
  // Brain — intelligence layer (TF-IDF scoring, auto-tagging, dedup)
51
- const brain = new Brain(vault);
73
+ const brain = new Brain(vault, cognee);
52
74
 
53
75
  // Brain Intelligence — pattern strengths, session knowledge, intelligence pipeline
54
76
  const brainIntelligence = new BrainIntelligence(vault, brain);
55
77
 
56
78
  // Curator — vault self-maintenance (dedup, contradictions, grooming, health)
57
- const curator = new Curator(vault);
79
+ const curator = new Curator(vault, cognee);
80
+
81
+ // Governance — policy engine + proposal tracker for gated knowledge capture
82
+ const governance = new Governance(vault);
83
+
84
+ // Loop Manager — iterative validation loop tracking (in-memory, session-scoped)
85
+ const loop = new LoopManager();
86
+
87
+ // Identity Manager — agent persona CRUD with versioning/rollback
88
+ const identityManager = new IdentityManager(vault);
89
+
90
+ // Intent Router — keyword-based intent classification and mode management
91
+ const intentRouter = new IntentRouter(vault);
92
+
93
+ // Telemetry — in-memory facade call tracking
94
+ const telemetry = new Telemetry();
95
+
96
+ // Project Registry — multi-project tracking with rules and links
97
+ const projectRegistry = new ProjectRegistry(vault.getDb());
98
+
99
+ // Template Manager — prompt templates with variable substitution
100
+ const templatesDir = config.templatesDir ?? join(agentHome, 'templates');
101
+ const templateManager = new TemplateManager(templatesDir);
102
+ if (existsSync(templatesDir)) {
103
+ templateManager.load();
104
+ }
58
105
 
59
106
  // LLM key pools and client
60
107
  const keyPoolFiles = loadKeyPoolConfig(agentId);
@@ -62,15 +109,42 @@ export function createAgentRuntime(config: AgentRuntimeConfig): AgentRuntime {
62
109
  const anthropicKeyPool = new KeyPool(keyPoolFiles.anthropic);
63
110
  const llmClient = new LLMClient(openaiKeyPool, anthropicKeyPool, agentId);
64
111
 
112
+ // Cognee Sync Manager — queue-based dirty tracking with offline resilience
113
+ const syncManager = new CogneeSyncManager(
114
+ vault.getProvider(),
115
+ cognee,
116
+ cogneePartial.dataset ?? agentId,
117
+ );
118
+ vault.setSyncManager(syncManager);
119
+
120
+ // Intake Pipeline — PDF/book ingestion with LLM classification
121
+ const intakePipeline = new IntakePipeline(vault.getProvider(), vault, llmClient);
122
+
65
123
  return {
66
124
  config,
125
+ logger,
67
126
  vault,
68
127
  brain,
69
128
  brainIntelligence,
70
129
  planner,
71
130
  curator,
131
+ governance,
132
+ cognee,
133
+ loop,
134
+ identityManager,
135
+ intentRouter,
72
136
  keyPool: { openai: openaiKeyPool, anthropic: anthropicKeyPool },
73
137
  llmClient,
74
- close: () => vault.close(),
138
+ telemetry,
139
+ projectRegistry,
140
+ templateManager,
141
+ syncManager,
142
+ intakePipeline,
143
+ createdAt: Date.now(),
144
+ close: () => {
145
+ syncManager.close();
146
+ cognee.resetPendingCognify();
147
+ vault.close();
148
+ },
75
149
  };
76
150
  }
@@ -3,8 +3,20 @@ import type { Brain } from '../brain/brain.js';
3
3
  import type { BrainIntelligence } from '../brain/intelligence.js';
4
4
  import type { Planner } from '../planning/planner.js';
5
5
  import type { Curator } from '../curator/curator.js';
6
+ import type { Governance } from '../governance/governance.js';
7
+ import type { CogneeClient } from '../cognee/client.js';
6
8
  import type { KeyPool } from '../llm/key-pool.js';
7
9
  import type { LLMClient } from '../llm/llm-client.js';
10
+ import type { IdentityManager } from '../control/identity-manager.js';
11
+ import type { IntentRouter } from '../control/intent-router.js';
12
+ import type { LoopManager } from '../loop/loop-manager.js';
13
+ import type { Telemetry } from '../telemetry/telemetry.js';
14
+ import type { ProjectRegistry } from '../project/project-registry.js';
15
+ import type { TemplateManager } from '../prompts/template-manager.js';
16
+ import type { CogneeSyncManager } from '../cognee/sync-manager.js';
17
+ import type { IntakePipeline } from '../intake/intake-pipeline.js';
18
+ import type { Logger } from '../logging/logger.js';
19
+ import type { LogLevel } from '../logging/types.js';
8
20
 
9
21
  /**
10
22
  * Configuration for creating an agent runtime.
@@ -19,6 +31,10 @@ export interface AgentRuntimeConfig {
19
31
  plansPath?: string;
20
32
  /** Intelligence data directory to seed vault from. Optional. */
21
33
  dataDir?: string;
34
+ /** Path to prompt templates directory. Default: ~/.{agentId}/templates */
35
+ templatesDir?: string;
36
+ /** Minimum log level. Default: 'info' (or SOLERI_LOG_LEVEL env var). */
37
+ logLevel?: LogLevel;
22
38
  }
23
39
 
24
40
  /**
@@ -27,13 +43,26 @@ export interface AgentRuntimeConfig {
27
43
  */
28
44
  export interface AgentRuntime {
29
45
  config: AgentRuntimeConfig;
46
+ logger: Logger;
30
47
  vault: Vault;
31
48
  brain: Brain;
32
49
  brainIntelligence: BrainIntelligence;
33
50
  planner: Planner;
34
51
  curator: Curator;
52
+ governance: Governance;
53
+ cognee: CogneeClient;
54
+ loop: LoopManager;
55
+ identityManager: IdentityManager;
56
+ intentRouter: IntentRouter;
35
57
  keyPool: { openai: KeyPool; anthropic: KeyPool };
36
58
  llmClient: LLMClient;
59
+ telemetry: Telemetry;
60
+ projectRegistry: ProjectRegistry;
61
+ templateManager: TemplateManager;
62
+ syncManager: CogneeSyncManager;
63
+ intakePipeline: IntakePipeline;
64
+ /** Timestamp (ms since epoch) when this runtime was created. */
65
+ createdAt: number;
37
66
  /** Close the vault database connection. Call on shutdown. */
38
67
  close(): void;
39
68
  }