@soleri/core 9.0.3 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/dist/brain/intelligence.d.ts +27 -0
  2. package/dist/brain/intelligence.d.ts.map +1 -1
  3. package/dist/brain/intelligence.js +160 -14
  4. package/dist/brain/intelligence.js.map +1 -1
  5. package/dist/brain/learning-radar.d.ts +4 -0
  6. package/dist/brain/learning-radar.d.ts.map +1 -1
  7. package/dist/brain/learning-radar.js +20 -1
  8. package/dist/brain/learning-radar.js.map +1 -1
  9. package/dist/brain/strength-scorer.d.ts +31 -0
  10. package/dist/brain/strength-scorer.d.ts.map +1 -0
  11. package/dist/brain/strength-scorer.js +264 -0
  12. package/dist/brain/strength-scorer.js.map +1 -0
  13. package/dist/chat/agent-loop.d.ts.map +1 -1
  14. package/dist/chat/agent-loop.js +2 -0
  15. package/dist/chat/agent-loop.js.map +1 -1
  16. package/dist/chat/notifications.d.ts.map +1 -1
  17. package/dist/chat/notifications.js +2 -0
  18. package/dist/chat/notifications.js.map +1 -1
  19. package/dist/claudemd/compose.js +1 -1
  20. package/dist/claudemd/compose.js.map +1 -1
  21. package/dist/control/intent-router.d.ts.map +1 -1
  22. package/dist/control/intent-router.js +12 -4
  23. package/dist/control/intent-router.js.map +1 -1
  24. package/dist/curator/contradiction-detector.d.ts +27 -0
  25. package/dist/curator/contradiction-detector.d.ts.map +1 -0
  26. package/dist/curator/contradiction-detector.js +62 -0
  27. package/dist/curator/contradiction-detector.js.map +1 -0
  28. package/dist/curator/curator.d.ts +3 -4
  29. package/dist/curator/curator.d.ts.map +1 -1
  30. package/dist/curator/curator.js +90 -525
  31. package/dist/curator/curator.js.map +1 -1
  32. package/dist/curator/duplicate-detector.d.ts +14 -0
  33. package/dist/curator/duplicate-detector.d.ts.map +1 -0
  34. package/dist/curator/duplicate-detector.js +77 -0
  35. package/dist/curator/duplicate-detector.js.map +1 -0
  36. package/dist/curator/health-audit.d.ts +15 -0
  37. package/dist/curator/health-audit.d.ts.map +1 -0
  38. package/dist/curator/health-audit.js +97 -0
  39. package/dist/curator/health-audit.js.map +1 -0
  40. package/dist/curator/metadata-enricher.d.ts +17 -0
  41. package/dist/curator/metadata-enricher.d.ts.map +1 -0
  42. package/dist/curator/metadata-enricher.js +60 -0
  43. package/dist/curator/metadata-enricher.js.map +1 -0
  44. package/dist/curator/schema.d.ts +7 -0
  45. package/dist/curator/schema.d.ts.map +1 -0
  46. package/dist/curator/schema.js +62 -0
  47. package/dist/curator/schema.js.map +1 -0
  48. package/dist/curator/tag-manager.d.ts +36 -0
  49. package/dist/curator/tag-manager.d.ts.map +1 -0
  50. package/dist/curator/tag-manager.js +78 -0
  51. package/dist/curator/tag-manager.js.map +1 -0
  52. package/dist/engine/bin/soleri-engine.js +55 -3
  53. package/dist/engine/bin/soleri-engine.js.map +1 -1
  54. package/dist/engine/core-ops.d.ts.map +1 -1
  55. package/dist/engine/core-ops.js +33 -10
  56. package/dist/engine/core-ops.js.map +1 -1
  57. package/dist/engine/module-manifest.d.ts.map +1 -1
  58. package/dist/engine/module-manifest.js +22 -2
  59. package/dist/engine/module-manifest.js.map +1 -1
  60. package/dist/engine/register-engine.d.ts.map +1 -1
  61. package/dist/engine/register-engine.js +26 -2
  62. package/dist/engine/register-engine.js.map +1 -1
  63. package/dist/errors/retry.d.ts.map +1 -1
  64. package/dist/errors/retry.js +2 -0
  65. package/dist/errors/retry.js.map +1 -1
  66. package/dist/facades/types.d.ts +1 -1
  67. package/dist/flows/chain-types.d.ts +18 -18
  68. package/dist/flows/gate-evaluator.d.ts.map +1 -1
  69. package/dist/flows/gate-evaluator.js +22 -0
  70. package/dist/flows/gate-evaluator.js.map +1 -1
  71. package/dist/flows/types.d.ts +157 -28
  72. package/dist/flows/types.d.ts.map +1 -1
  73. package/dist/flows/types.js +4 -0
  74. package/dist/flows/types.js.map +1 -1
  75. package/dist/index.d.ts +10 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +9 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  80. package/dist/intake/intake-pipeline.js +1 -0
  81. package/dist/intake/intake-pipeline.js.map +1 -1
  82. package/dist/intake/text-ingester.d.ts.map +1 -1
  83. package/dist/intake/text-ingester.js +2 -0
  84. package/dist/intake/text-ingester.js.map +1 -1
  85. package/dist/llm/key-pool.d.ts +1 -1
  86. package/dist/llm/key-pool.d.ts.map +1 -1
  87. package/dist/llm/key-pool.js +3 -4
  88. package/dist/llm/key-pool.js.map +1 -1
  89. package/dist/llm/utils.d.ts.map +1 -1
  90. package/dist/llm/utils.js +2 -0
  91. package/dist/llm/utils.js.map +1 -1
  92. package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
  93. package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
  94. package/dist/migrations/migration-runner.test-helpers.js +47 -0
  95. package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
  96. package/dist/operator/operator-profile.d.ts +44 -0
  97. package/dist/operator/operator-profile.d.ts.map +1 -0
  98. package/dist/operator/operator-profile.js +377 -0
  99. package/dist/operator/operator-profile.js.map +1 -0
  100. package/dist/operator/operator-signals.d.ts +45 -0
  101. package/dist/operator/operator-signals.d.ts.map +1 -0
  102. package/dist/operator/operator-signals.js +228 -0
  103. package/dist/operator/operator-signals.js.map +1 -0
  104. package/dist/operator/operator-types.d.ts +360 -0
  105. package/dist/operator/operator-types.d.ts.map +1 -0
  106. package/dist/operator/operator-types.js +24 -0
  107. package/dist/operator/operator-types.js.map +1 -0
  108. package/dist/packs/types.d.ts +27 -27
  109. package/dist/paths.d.ts +40 -0
  110. package/dist/paths.d.ts.map +1 -0
  111. package/dist/paths.js +98 -0
  112. package/dist/paths.js.map +1 -0
  113. package/dist/persistence/index.d.ts +1 -1
  114. package/dist/persistence/index.d.ts.map +1 -1
  115. package/dist/persistence/index.js +1 -1
  116. package/dist/persistence/index.js.map +1 -1
  117. package/dist/persistence/sqlite-provider.d.ts +2 -0
  118. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  119. package/dist/persistence/sqlite-provider.js +8 -5
  120. package/dist/persistence/sqlite-provider.js.map +1 -1
  121. package/dist/planning/evidence-collector.d.ts +13 -1
  122. package/dist/planning/evidence-collector.d.ts.map +1 -1
  123. package/dist/planning/evidence-collector.js +33 -0
  124. package/dist/planning/evidence-collector.js.map +1 -1
  125. package/dist/planning/gap-analysis.d.ts +5 -4
  126. package/dist/planning/gap-analysis.d.ts.map +1 -1
  127. package/dist/planning/gap-analysis.js +7 -341
  128. package/dist/planning/gap-analysis.js.map +1 -1
  129. package/dist/planning/gap-passes.d.ts +19 -0
  130. package/dist/planning/gap-passes.d.ts.map +1 -0
  131. package/dist/planning/gap-passes.js +157 -0
  132. package/dist/planning/gap-passes.js.map +1 -0
  133. package/dist/planning/gap-patterns.d.ts +29 -0
  134. package/dist/planning/gap-patterns.d.ts.map +1 -0
  135. package/dist/planning/gap-patterns.js +129 -0
  136. package/dist/planning/gap-patterns.js.map +1 -0
  137. package/dist/planning/gap-types.d.ts +1 -1
  138. package/dist/planning/gap-types.d.ts.map +1 -1
  139. package/dist/planning/gap-types.js +1 -0
  140. package/dist/planning/gap-types.js.map +1 -1
  141. package/dist/planning/github-projection.d.ts +122 -0
  142. package/dist/planning/github-projection.d.ts.map +1 -0
  143. package/dist/planning/github-projection.js +294 -0
  144. package/dist/planning/github-projection.js.map +1 -0
  145. package/dist/planning/impact-analyzer.d.ts +26 -0
  146. package/dist/planning/impact-analyzer.d.ts.map +1 -0
  147. package/dist/planning/impact-analyzer.js +199 -0
  148. package/dist/planning/impact-analyzer.js.map +1 -0
  149. package/dist/planning/plan-lifecycle.d.ts +136 -0
  150. package/dist/planning/plan-lifecycle.d.ts.map +1 -0
  151. package/dist/planning/plan-lifecycle.js +296 -0
  152. package/dist/planning/plan-lifecycle.js.map +1 -0
  153. package/dist/planning/planner-types.d.ts +202 -0
  154. package/dist/planning/planner-types.d.ts.map +1 -0
  155. package/dist/planning/planner-types.js +6 -0
  156. package/dist/planning/planner-types.js.map +1 -0
  157. package/dist/planning/planner.d.ts +31 -383
  158. package/dist/planning/planner.d.ts.map +1 -1
  159. package/dist/planning/planner.js +154 -878
  160. package/dist/planning/planner.js.map +1 -1
  161. package/dist/planning/rationalization-detector.d.ts +32 -0
  162. package/dist/planning/rationalization-detector.d.ts.map +1 -0
  163. package/dist/planning/rationalization-detector.js +89 -0
  164. package/dist/planning/rationalization-detector.js.map +1 -0
  165. package/dist/planning/reconciliation-engine.d.ts +47 -0
  166. package/dist/planning/reconciliation-engine.d.ts.map +1 -0
  167. package/dist/planning/reconciliation-engine.js +128 -0
  168. package/dist/planning/reconciliation-engine.js.map +1 -0
  169. package/dist/planning/task-verifier.d.ts +85 -0
  170. package/dist/planning/task-verifier.d.ts.map +1 -0
  171. package/dist/planning/task-verifier.js +227 -0
  172. package/dist/planning/task-verifier.js.map +1 -0
  173. package/dist/plugins/types.d.ts +4 -4
  174. package/dist/runtime/admin-ops.d.ts +2 -2
  175. package/dist/runtime/admin-ops.d.ts.map +1 -1
  176. package/dist/runtime/admin-ops.js +44 -17
  177. package/dist/runtime/admin-ops.js.map +1 -1
  178. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  179. package/dist/runtime/admin-setup-ops.js +21 -46
  180. package/dist/runtime/admin-setup-ops.js.map +1 -1
  181. package/dist/runtime/archive-ops.d.ts +10 -0
  182. package/dist/runtime/archive-ops.d.ts.map +1 -0
  183. package/dist/runtime/archive-ops.js +310 -0
  184. package/dist/runtime/archive-ops.js.map +1 -0
  185. package/dist/runtime/capture-ops.d.ts.map +1 -1
  186. package/dist/runtime/capture-ops.js +42 -7
  187. package/dist/runtime/capture-ops.js.map +1 -1
  188. package/dist/runtime/claude-md-helpers.js +1 -1
  189. package/dist/runtime/claude-md-helpers.js.map +1 -1
  190. package/dist/runtime/context-health.d.ts +31 -0
  191. package/dist/runtime/context-health.d.ts.map +1 -0
  192. package/dist/runtime/context-health.js +57 -0
  193. package/dist/runtime/context-health.js.map +1 -0
  194. package/dist/runtime/facades/archive-facade.d.ts +10 -0
  195. package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
  196. package/dist/runtime/facades/archive-facade.js +11 -0
  197. package/dist/runtime/facades/archive-facade.js.map +1 -0
  198. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  199. package/dist/runtime/facades/brain-facade.js +2 -0
  200. package/dist/runtime/facades/brain-facade.js.map +1 -1
  201. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  202. package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
  203. package/dist/runtime/facades/chat-facade.js +15 -800
  204. package/dist/runtime/facades/chat-facade.js.map +1 -1
  205. package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
  206. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
  207. package/dist/runtime/facades/chat-service-ops.js +330 -0
  208. package/dist/runtime/facades/chat-service-ops.js.map +1 -0
  209. package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
  210. package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
  211. package/dist/runtime/facades/chat-session-ops.js +136 -0
  212. package/dist/runtime/facades/chat-session-ops.js.map +1 -0
  213. package/dist/runtime/facades/chat-state.d.ts +31 -0
  214. package/dist/runtime/facades/chat-state.d.ts.map +1 -0
  215. package/dist/runtime/facades/chat-state.js +32 -0
  216. package/dist/runtime/facades/chat-state.js.map +1 -0
  217. package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
  218. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
  219. package/dist/runtime/facades/chat-transport-ops.js +337 -0
  220. package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
  221. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  222. package/dist/runtime/facades/control-facade.js +4 -1
  223. package/dist/runtime/facades/control-facade.js.map +1 -1
  224. package/dist/runtime/facades/index.d.ts.map +1 -1
  225. package/dist/runtime/facades/index.js +6 -0
  226. package/dist/runtime/facades/index.js.map +1 -1
  227. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  228. package/dist/runtime/facades/memory-facade.js +75 -6
  229. package/dist/runtime/facades/memory-facade.js.map +1 -1
  230. package/dist/runtime/facades/operator-facade.d.ts +8 -0
  231. package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
  232. package/dist/runtime/facades/operator-facade.js +220 -0
  233. package/dist/runtime/facades/operator-facade.js.map +1 -0
  234. package/dist/runtime/facades/orchestrate-facade.js +3 -3
  235. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  236. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  237. package/dist/runtime/facades/plan-facade.js +39 -6
  238. package/dist/runtime/facades/plan-facade.js.map +1 -1
  239. package/dist/runtime/facades/review-facade.d.ts +7 -0
  240. package/dist/runtime/facades/review-facade.d.ts.map +1 -0
  241. package/dist/runtime/facades/review-facade.js +8 -0
  242. package/dist/runtime/facades/review-facade.js.map +1 -0
  243. package/dist/runtime/facades/sync-facade.d.ts +7 -0
  244. package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
  245. package/dist/runtime/facades/sync-facade.js +8 -0
  246. package/dist/runtime/facades/sync-facade.js.map +1 -0
  247. package/dist/runtime/facades/vault-facade.d.ts +4 -1
  248. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/vault-facade.js +13 -66
  250. package/dist/runtime/facades/vault-facade.js.map +1 -1
  251. package/dist/runtime/github-integration.d.ts +49 -0
  252. package/dist/runtime/github-integration.d.ts.map +1 -0
  253. package/dist/runtime/github-integration.js +113 -0
  254. package/dist/runtime/github-integration.js.map +1 -0
  255. package/dist/runtime/grading-ops.js +1 -1
  256. package/dist/runtime/grading-ops.js.map +1 -1
  257. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  258. package/dist/runtime/memory-extra-ops.js +6 -2
  259. package/dist/runtime/memory-extra-ops.js.map +1 -1
  260. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  261. package/dist/runtime/orchestrate-ops.js +367 -40
  262. package/dist/runtime/orchestrate-ops.js.map +1 -1
  263. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  264. package/dist/runtime/planning-extra-ops.js +69 -4
  265. package/dist/runtime/planning-extra-ops.js.map +1 -1
  266. package/dist/runtime/review-ops.d.ts +10 -0
  267. package/dist/runtime/review-ops.d.ts.map +1 -0
  268. package/dist/runtime/review-ops.js +97 -0
  269. package/dist/runtime/review-ops.js.map +1 -0
  270. package/dist/runtime/runtime.d.ts.map +1 -1
  271. package/dist/runtime/runtime.js +27 -12
  272. package/dist/runtime/runtime.js.map +1 -1
  273. package/dist/runtime/session-briefing.d.ts +3 -0
  274. package/dist/runtime/session-briefing.d.ts.map +1 -1
  275. package/dist/runtime/session-briefing.js +68 -1
  276. package/dist/runtime/session-briefing.js.map +1 -1
  277. package/dist/runtime/sync-ops.d.ts +12 -0
  278. package/dist/runtime/sync-ops.d.ts.map +1 -0
  279. package/dist/runtime/sync-ops.js +288 -0
  280. package/dist/runtime/sync-ops.js.map +1 -0
  281. package/dist/runtime/types.d.ts +10 -4
  282. package/dist/runtime/types.d.ts.map +1 -1
  283. package/dist/runtime/vault-extra-ops.d.ts +5 -4
  284. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  285. package/dist/runtime/vault-extra-ops.js +5 -300
  286. package/dist/runtime/vault-extra-ops.js.map +1 -1
  287. package/dist/runtime/vault-sharing-ops.d.ts +4 -4
  288. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
  289. package/dist/runtime/vault-sharing-ops.js +5 -300
  290. package/dist/runtime/vault-sharing-ops.js.map +1 -1
  291. package/dist/skills/sync-skills.d.ts +27 -0
  292. package/dist/skills/sync-skills.d.ts.map +1 -0
  293. package/dist/skills/sync-skills.js +81 -0
  294. package/dist/skills/sync-skills.js.map +1 -0
  295. package/dist/update-check.d.ts +14 -0
  296. package/dist/update-check.d.ts.map +1 -0
  297. package/dist/update-check.js +96 -0
  298. package/dist/update-check.js.map +1 -0
  299. package/dist/vault/linking.d.ts +10 -12
  300. package/dist/vault/linking.d.ts.map +1 -1
  301. package/dist/vault/linking.js +104 -161
  302. package/dist/vault/linking.js.map +1 -1
  303. package/dist/vault/vault-entries.d.ts +69 -0
  304. package/dist/vault/vault-entries.d.ts.map +1 -0
  305. package/dist/vault/vault-entries.js +257 -0
  306. package/dist/vault/vault-entries.js.map +1 -0
  307. package/dist/vault/vault-interfaces.d.ts +153 -0
  308. package/dist/vault/vault-interfaces.d.ts.map +1 -0
  309. package/dist/vault/vault-interfaces.js +2 -0
  310. package/dist/vault/vault-interfaces.js.map +1 -0
  311. package/dist/vault/vault-maintenance.d.ts +40 -0
  312. package/dist/vault/vault-maintenance.d.ts.map +1 -0
  313. package/dist/vault/vault-maintenance.js +142 -0
  314. package/dist/vault/vault-maintenance.js.map +1 -0
  315. package/dist/vault/vault-markdown-sync.d.ts +22 -0
  316. package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
  317. package/dist/vault/vault-markdown-sync.js +143 -0
  318. package/dist/vault/vault-markdown-sync.js.map +1 -0
  319. package/dist/vault/vault-memories.d.ts +61 -0
  320. package/dist/vault/vault-memories.d.ts.map +1 -0
  321. package/dist/vault/vault-memories.js +240 -0
  322. package/dist/vault/vault-memories.js.map +1 -0
  323. package/dist/vault/vault-schema.d.ts +9 -0
  324. package/dist/vault/vault-schema.d.ts.map +1 -0
  325. package/dist/vault/vault-schema.js +179 -0
  326. package/dist/vault/vault-schema.js.map +1 -0
  327. package/dist/vault/vault.d.ts +29 -81
  328. package/dist/vault/vault.d.ts.map +1 -1
  329. package/dist/vault/vault.js +78 -931
  330. package/dist/vault/vault.js.map +1 -1
  331. package/package.json +1 -1
  332. package/src/agency/agency-manager.test.ts +600 -0
  333. package/src/agency/default-rules.test.ts +228 -0
  334. package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
  335. package/src/{__tests__ → brain}/brain.test.ts +1 -1
  336. package/src/brain/intelligence.ts +196 -15
  337. package/src/brain/learning-radar.ts +22 -1
  338. package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
  339. package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
  340. package/src/brain/strength-scorer.ts +404 -0
  341. package/src/capabilities/chain-mapping.test.ts +66 -0
  342. package/src/capabilities/registry.test.ts +369 -0
  343. package/src/chat/agent-loop.test.ts +394 -0
  344. package/src/chat/agent-loop.ts +2 -0
  345. package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
  346. package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
  347. package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
  348. package/src/chat/mcp-bridge.test.ts +173 -0
  349. package/src/chat/notifications.ts +2 -0
  350. package/src/chat/output-compressor.test.ts +164 -0
  351. package/src/claudemd/compose.test.ts +178 -0
  352. package/src/claudemd/compose.ts +1 -1
  353. package/src/claudemd/inject.test.ts +211 -0
  354. package/src/context/context-engine.test.ts +461 -0
  355. package/src/control/identity-manager.test.ts +305 -0
  356. package/src/control/intent-router.test.ts +360 -0
  357. package/src/control/intent-router.ts +13 -4
  358. package/src/curator/classifier.test.ts +104 -0
  359. package/src/curator/contradiction-detector.test.ts +180 -0
  360. package/src/curator/contradiction-detector.ts +87 -0
  361. package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
  362. package/src/{__tests__ → curator}/curator.test.ts +77 -1
  363. package/src/curator/curator.ts +115 -777
  364. package/src/curator/duplicate-detector.test.ts +183 -0
  365. package/src/curator/duplicate-detector.ts +103 -0
  366. package/src/curator/health-audit.ts +126 -0
  367. package/src/curator/metadata-enricher.ts +84 -0
  368. package/src/curator/quality-gate.test.ts +135 -0
  369. package/src/curator/schema.ts +65 -0
  370. package/src/curator/tag-manager.test.ts +165 -0
  371. package/src/curator/tag-manager.ts +109 -0
  372. package/src/domain-packs/inject-rules.test.ts +117 -0
  373. package/src/domain-packs/knowledge-installer.test.ts +171 -0
  374. package/src/domain-packs/loader.test.ts +86 -0
  375. package/src/domain-packs/pack-runtime.test.ts +140 -0
  376. package/src/domain-packs/skills-installer.test.ts +135 -0
  377. package/src/domain-packs/token-resolver.test.ts +150 -0
  378. package/src/domain-packs/types.test.ts +130 -0
  379. package/src/enforcement/adapters/claude-code.test.ts +216 -0
  380. package/src/enforcement/registry.test.ts +264 -0
  381. package/src/engine/bin/soleri-engine.ts +59 -3
  382. package/src/engine/core-ops.test.ts +254 -0
  383. package/src/engine/core-ops.ts +35 -10
  384. package/src/engine/module-manifest.test.ts +124 -0
  385. package/src/engine/module-manifest.ts +22 -2
  386. package/src/engine/register-engine.test.ts +230 -0
  387. package/src/engine/register-engine.ts +26 -2
  388. package/src/errors/classify.test.ts +199 -0
  389. package/src/errors/retry.test.ts +156 -0
  390. package/src/errors/retry.ts +2 -0
  391. package/src/errors/types.test.ts +108 -0
  392. package/src/events/event-bus.test.ts +149 -0
  393. package/src/extensions/middleware.test.ts +234 -0
  394. package/src/facades/facade-factory.test.ts +424 -0
  395. package/src/flows/chain-runner.test.ts +273 -0
  396. package/src/flows/context-router.test.ts +52 -0
  397. package/src/flows/dispatch-registry.test.ts +128 -0
  398. package/src/flows/epilogue.test.ts +107 -0
  399. package/src/flows/executor.test.ts +263 -0
  400. package/src/flows/gate-evaluator.test.ts +194 -0
  401. package/src/flows/gate-evaluator.ts +25 -0
  402. package/src/flows/types.ts +4 -0
  403. package/src/governance/governance.test.ts +726 -0
  404. package/src/health/health-registry.test.ts +186 -0
  405. package/src/health/vault-integrity.test.ts +110 -0
  406. package/src/index.ts +92 -0
  407. package/src/intake/content-classifier.test.ts +209 -0
  408. package/src/intake/dedup-gate.test.ts +131 -0
  409. package/src/intake/intake-pipeline.test.ts +506 -0
  410. package/src/intake/intake-pipeline.ts +1 -0
  411. package/src/intake/text-ingester.test.ts +194 -0
  412. package/src/intake/text-ingester.ts +2 -0
  413. package/src/llm/key-pool.test.ts +236 -0
  414. package/src/llm/key-pool.ts +3 -4
  415. package/src/llm/llm-client.test.ts +345 -0
  416. package/src/llm/oauth-discovery.test.ts +180 -0
  417. package/src/llm/utils.test.ts +327 -0
  418. package/src/llm/utils.ts +2 -0
  419. package/src/{__tests__ → logging}/logger.test.ts +41 -62
  420. package/src/loop/loop-manager.test.ts +519 -0
  421. package/src/migrations/migration-runner.edge-cases.test.ts +319 -0
  422. package/src/migrations/migration-runner.test-helpers.ts +64 -0
  423. package/src/migrations/migration-runner.test.ts +385 -0
  424. package/src/operator/auto-signal-pipeline.test.ts +207 -0
  425. package/src/operator/operator-profile-extended.test.ts +320 -0
  426. package/src/operator/operator-profile.test.ts +314 -0
  427. package/src/operator/operator-profile.ts +469 -0
  428. package/src/operator/operator-signals-extended.test.ts +245 -0
  429. package/src/operator/operator-signals.test.ts +281 -0
  430. package/src/operator/operator-signals.ts +261 -0
  431. package/src/operator/operator-types.ts +444 -0
  432. package/src/operator/prompts/hook-precompact-operator-dispatch.md +94 -0
  433. package/src/operator/prompts/subagent-soft-signal-extractor.md +125 -0
  434. package/src/operator/prompts/subagent-synthesis-cognition.md +181 -0
  435. package/src/operator/prompts/subagent-synthesis-communication.md +140 -0
  436. package/src/operator/prompts/subagent-synthesis-technical.md +160 -0
  437. package/src/operator/prompts/subagent-synthesis-trust.md +143 -0
  438. package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
  439. package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
  440. package/src/paths.ts +115 -0
  441. package/src/persistence/index.ts +1 -1
  442. package/src/persistence/sqlite-provider.test.ts +540 -0
  443. package/src/persistence/sqlite-provider.ts +8 -5
  444. package/src/persona/defaults.test.ts +59 -0
  445. package/src/persona/loader.test.ts +67 -0
  446. package/src/persona/prompt-generator.test.ts +127 -0
  447. package/src/planning/evidence-collector.test.ts +406 -0
  448. package/src/planning/evidence-collector.ts +50 -0
  449. package/src/planning/gap-analysis-alternatives.test.ts +169 -0
  450. package/src/planning/gap-analysis.ts +21 -636
  451. package/src/planning/gap-passes.test.ts +372 -0
  452. package/src/planning/gap-passes.ts +298 -0
  453. package/src/planning/gap-patterns.test.ts +320 -0
  454. package/src/planning/gap-patterns.ts +234 -0
  455. package/src/planning/gap-types.ts +4 -1
  456. package/src/planning/github-projection.test.ts +177 -0
  457. package/src/planning/github-projection.ts +425 -0
  458. package/src/planning/impact-analyzer.test.ts +180 -0
  459. package/src/planning/impact-analyzer.ts +264 -0
  460. package/src/planning/plan-lifecycle.test.ts +312 -0
  461. package/src/planning/plan-lifecycle.ts +346 -0
  462. package/src/planning/planner-types.ts +215 -0
  463. package/src/{__tests__ → planning}/planner.test.ts +169 -15
  464. package/src/planning/planner.ts +197 -1228
  465. package/src/planning/rationalization-detector.test.ts +171 -0
  466. package/src/planning/rationalization-detector.ts +138 -0
  467. package/src/planning/reconciliation-engine.test.ts +141 -0
  468. package/src/planning/reconciliation-engine.ts +162 -0
  469. package/src/planning/task-verifier.test.ts +235 -0
  470. package/src/planning/task-verifier.ts +303 -0
  471. package/src/planning/verification-protocol.test.ts +201 -0
  472. package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
  473. package/src/playbooks/index.test.ts +77 -0
  474. package/src/playbooks/playbook-executor.test.ts +255 -0
  475. package/src/playbooks/playbook-registry.test.ts +232 -0
  476. package/src/playbooks/playbook-seeder.test.ts +153 -0
  477. package/src/plugins/plugin-loader.test.ts +212 -0
  478. package/src/plugins/plugin-registry.test.ts +272 -0
  479. package/src/project/project-registry.test.ts +428 -0
  480. package/src/prompts/parser.test.ts +100 -0
  481. package/src/prompts/template-manager.test.ts +109 -0
  482. package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
  483. package/src/queue/job-queue.test.ts +331 -0
  484. package/src/queue/pipeline-runner.test.ts +209 -0
  485. package/src/runtime/admin-extra-ops.test.ts +527 -0
  486. package/src/runtime/admin-ops.test.ts +257 -0
  487. package/src/runtime/admin-ops.ts +45 -17
  488. package/src/runtime/admin-setup-ops.test.ts +328 -0
  489. package/src/runtime/admin-setup-ops.ts +20 -43
  490. package/src/runtime/archive-ops.test.ts +269 -0
  491. package/src/runtime/archive-ops.ts +347 -0
  492. package/src/runtime/capture-ops.test.ts +433 -0
  493. package/src/runtime/capture-ops.ts +50 -8
  494. package/src/runtime/chain-ops.test.ts +149 -0
  495. package/src/runtime/claude-md-helpers.test.ts +191 -0
  496. package/src/runtime/claude-md-helpers.ts +1 -1
  497. package/src/runtime/context-health.test.ts +78 -0
  498. package/src/runtime/context-health.ts +85 -0
  499. package/src/runtime/curator-extra-ops.test.ts +202 -0
  500. package/src/runtime/deprecation.test.ts +98 -0
  501. package/src/runtime/domain-ops.test.ts +268 -0
  502. package/src/runtime/facades/admin-facade.test.ts +333 -0
  503. package/src/runtime/facades/agency-facade.test.ts +278 -0
  504. package/src/runtime/facades/archive-facade.test.ts +294 -0
  505. package/src/runtime/facades/archive-facade.ts +14 -0
  506. package/src/runtime/facades/brain-facade.test.ts +714 -0
  507. package/src/runtime/facades/brain-facade.ts +2 -0
  508. package/src/runtime/facades/chat-facade.test.ts +166 -0
  509. package/src/runtime/facades/chat-facade.ts +15 -906
  510. package/src/runtime/facades/chat-service-ops.test.ts +276 -0
  511. package/src/runtime/facades/chat-service-ops.ts +374 -0
  512. package/src/runtime/facades/chat-session-ops.test.ts +197 -0
  513. package/src/runtime/facades/chat-session-ops.ts +146 -0
  514. package/src/runtime/facades/chat-state.ts +60 -0
  515. package/src/runtime/facades/chat-transport-ops.test.ts +269 -0
  516. package/src/runtime/facades/chat-transport-ops.ts +380 -0
  517. package/src/runtime/facades/context-facade.test.ts +108 -0
  518. package/src/runtime/facades/control-facade.test.ts +436 -0
  519. package/src/runtime/facades/control-facade.ts +6 -1
  520. package/src/runtime/facades/curator-facade.test.ts +303 -0
  521. package/src/runtime/facades/index.ts +6 -0
  522. package/src/runtime/facades/loop-facade.test.ts +245 -0
  523. package/src/runtime/facades/memory-facade.test.ts +269 -0
  524. package/src/runtime/facades/memory-facade.ts +78 -6
  525. package/src/runtime/facades/operator-facade.test.ts +208 -0
  526. package/src/runtime/facades/operator-facade.ts +236 -0
  527. package/src/runtime/facades/orchestrate-facade.test.ts +185 -0
  528. package/src/runtime/facades/orchestrate-facade.ts +3 -3
  529. package/src/runtime/facades/plan-facade.test.ts +266 -0
  530. package/src/runtime/facades/plan-facade.ts +42 -6
  531. package/src/runtime/facades/review-facade.test.ts +82 -0
  532. package/src/runtime/facades/review-facade.ts +11 -0
  533. package/src/runtime/facades/sync-facade.test.ts +113 -0
  534. package/src/runtime/facades/sync-facade.ts +11 -0
  535. package/src/runtime/facades/vault-facade.test.ts +631 -0
  536. package/src/runtime/facades/vault-facade.ts +15 -70
  537. package/src/runtime/feature-flags.test.ts +140 -0
  538. package/src/runtime/github-integration.test.ts +89 -0
  539. package/src/runtime/github-integration.ts +159 -0
  540. package/src/runtime/grading-ops.test.ts +141 -0
  541. package/src/runtime/grading-ops.ts +1 -1
  542. package/src/runtime/intake-ops.test.ts +208 -0
  543. package/src/runtime/loop-ops.test.ts +238 -0
  544. package/src/runtime/memory-cross-project-ops.test.ts +177 -0
  545. package/src/runtime/memory-extra-ops.test.ts +453 -0
  546. package/src/runtime/memory-extra-ops.ts +6 -2
  547. package/src/runtime/orchestrate-ops.test.ts +302 -0
  548. package/src/runtime/orchestrate-ops.ts +435 -46
  549. package/src/runtime/pack-ops.test.ts +158 -0
  550. package/src/runtime/planning-extra-ops.test.ts +583 -0
  551. package/src/runtime/planning-extra-ops.ts +72 -4
  552. package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
  553. package/src/runtime/playbook-ops.test.ts +262 -0
  554. package/src/runtime/plugin-ops.test.ts +201 -0
  555. package/src/runtime/project-ops.test.ts +235 -0
  556. package/src/runtime/review-ops.test.ts +142 -0
  557. package/src/runtime/review-ops.ts +99 -0
  558. package/src/runtime/runtime.test.ts +363 -0
  559. package/src/runtime/runtime.ts +39 -12
  560. package/src/runtime/session-briefing.test.ts +302 -0
  561. package/src/runtime/session-briefing.ts +80 -1
  562. package/src/runtime/sync-ops.test.ts +221 -0
  563. package/src/runtime/sync-ops.ts +325 -0
  564. package/src/runtime/telemetry-ops.test.ts +132 -0
  565. package/src/runtime/types.ts +10 -4
  566. package/src/runtime/vault-extra-ops.test.ts +246 -0
  567. package/src/runtime/vault-extra-ops.ts +5 -332
  568. package/src/runtime/vault-linking-ops.test.ts +237 -0
  569. package/src/runtime/vault-sharing-ops.test.ts +130 -0
  570. package/src/runtime/vault-sharing-ops.ts +5 -329
  571. package/src/skills/sync-skills.ts +108 -0
  572. package/src/streams/normalize.test.ts +95 -0
  573. package/src/streams/replayable-stream.test.ts +166 -0
  574. package/src/telemetry/telemetry.test.ts +143 -0
  575. package/src/transport/http-server.test.ts +394 -0
  576. package/src/transport/lsp-server.test.ts +458 -0
  577. package/src/transport/rate-limiter.test.ts +126 -0
  578. package/src/transport/session-manager.test.ts +133 -0
  579. package/src/transport/token-auth.test.ts +136 -0
  580. package/src/transport/ws-server.test.ts +294 -0
  581. package/src/update-check.ts +111 -0
  582. package/src/vault/__tests__/vault-characterization.test.ts +168 -0
  583. package/src/vault/content-hash.test.ts +78 -0
  584. package/src/vault/git-vault-sync.test.ts +234 -0
  585. package/src/vault/knowledge-review.test.ts +269 -0
  586. package/src/vault/linking.test.ts +358 -0
  587. package/src/vault/linking.ts +149 -183
  588. package/src/vault/obsidian-sync.test.ts +342 -0
  589. package/src/vault/playbook.test.ts +152 -0
  590. package/src/vault/scope-detector.test.ts +187 -0
  591. package/src/vault/vault-branching.test.ts +250 -0
  592. package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
  593. package/src/vault/vault-entries.ts +282 -0
  594. package/src/vault/vault-interfaces.ts +56 -0
  595. package/src/vault/vault-maintenance.ts +205 -0
  596. package/src/vault/vault-manager.test.ts +206 -0
  597. package/src/vault/vault-markdown-sync.test.ts +203 -0
  598. package/src/vault/vault-markdown-sync.ts +160 -0
  599. package/src/vault/vault-memories.ts +339 -0
  600. package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
  601. package/src/vault/vault-schema.ts +181 -0
  602. package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
  603. package/src/{__tests__ → vault}/vault.test.ts +2 -2
  604. package/src/vault/vault.ts +89 -1171
  605. package/dist/cognee/client.d.ts +0 -43
  606. package/dist/cognee/client.d.ts.map +0 -1
  607. package/dist/cognee/client.js +0 -375
  608. package/dist/cognee/client.js.map +0 -1
  609. package/dist/cognee/sync-manager.d.ts +0 -153
  610. package/dist/cognee/sync-manager.d.ts.map +0 -1
  611. package/dist/cognee/sync-manager.js +0 -390
  612. package/dist/cognee/sync-manager.js.map +0 -1
  613. package/dist/cognee/types.d.ts +0 -62
  614. package/dist/cognee/types.d.ts.map +0 -1
  615. package/dist/cognee/types.js +0 -3
  616. package/dist/cognee/types.js.map +0 -1
  617. package/dist/governance/index.d.ts +0 -3
  618. package/dist/governance/index.d.ts.map +0 -1
  619. package/dist/governance/index.js +0 -2
  620. package/dist/governance/index.js.map +0 -1
  621. package/dist/health/doctor-checks.d.ts +0 -15
  622. package/dist/health/doctor-checks.d.ts.map +0 -1
  623. package/dist/health/doctor-checks.js +0 -98
  624. package/dist/health/doctor-checks.js.map +0 -1
  625. package/dist/persistence/postgres-provider.d.ts +0 -81
  626. package/dist/persistence/postgres-provider.d.ts.map +0 -1
  627. package/dist/persistence/postgres-provider.js +0 -256
  628. package/dist/persistence/postgres-provider.js.map +0 -1
  629. package/dist/runtime/cognee-sync-ops.d.ts +0 -12
  630. package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
  631. package/dist/runtime/cognee-sync-ops.js +0 -93
  632. package/dist/runtime/cognee-sync-ops.js.map +0 -1
  633. package/dist/runtime/core-ops.d.ts +0 -23
  634. package/dist/runtime/core-ops.d.ts.map +0 -1
  635. package/dist/runtime/core-ops.js +0 -1296
  636. package/dist/runtime/core-ops.js.map +0 -1
  637. package/dist/runtime/facades/cognee-facade.d.ts +0 -8
  638. package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
  639. package/dist/runtime/facades/cognee-facade.js +0 -156
  640. package/dist/runtime/facades/cognee-facade.js.map +0 -1
  641. package/src/__tests__/admin-extra-ops.test.ts +0 -484
  642. package/src/__tests__/admin-ops.test.ts +0 -268
  643. package/src/__tests__/admin-setup-ops.test.ts +0 -355
  644. package/src/__tests__/agency-manager.test.ts +0 -374
  645. package/src/__tests__/agent-loop.test.ts +0 -256
  646. package/src/__tests__/capture-ops.test.ts +0 -784
  647. package/src/__tests__/claudemd.test.ts +0 -282
  648. package/src/__tests__/content-hash.test.ts +0 -60
  649. package/src/__tests__/context-engine.test.ts +0 -251
  650. package/src/__tests__/core-ops.test.ts +0 -550
  651. package/src/__tests__/curator-extra-ops.test.ts +0 -383
  652. package/src/__tests__/deprecation.test.ts +0 -78
  653. package/src/__tests__/domain-ops.test.ts +0 -226
  654. package/src/__tests__/domain-packs.test.ts +0 -421
  655. package/src/__tests__/enforcement.test.ts +0 -153
  656. package/src/__tests__/errors.test.ts +0 -388
  657. package/src/__tests__/extensions.test.ts +0 -233
  658. package/src/__tests__/facade-factory.test.ts +0 -271
  659. package/src/__tests__/feature-flags.test.ts +0 -137
  660. package/src/__tests__/flows.test.ts +0 -604
  661. package/src/__tests__/git-vault-sync.test.ts +0 -230
  662. package/src/__tests__/governance.test.ts +0 -522
  663. package/src/__tests__/grading-ops.test.ts +0 -361
  664. package/src/__tests__/health-registry.test.ts +0 -173
  665. package/src/__tests__/identity-manager.test.ts +0 -243
  666. package/src/__tests__/intake-pipeline.test.ts +0 -162
  667. package/src/__tests__/intent-router.test.ts +0 -222
  668. package/src/__tests__/knowledge-review.test.ts +0 -104
  669. package/src/__tests__/llm-client.test.ts +0 -69
  670. package/src/__tests__/llm.test.ts +0 -556
  671. package/src/__tests__/loader.test.ts +0 -176
  672. package/src/__tests__/loop-ops.test.ts +0 -469
  673. package/src/__tests__/lsp-transport.test.ts +0 -442
  674. package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
  675. package/src/__tests__/memory-extra-ops.test.ts +0 -352
  676. package/src/__tests__/migration-runner.test.ts +0 -170
  677. package/src/__tests__/module-manifest-drift.test.ts +0 -59
  678. package/src/__tests__/normalize.test.ts +0 -85
  679. package/src/__tests__/obsidian-sync.test.ts +0 -354
  680. package/src/__tests__/orchestrate-ops.test.ts +0 -289
  681. package/src/__tests__/pack-ops.test.ts +0 -146
  682. package/src/__tests__/persistence.test.ts +0 -291
  683. package/src/__tests__/planning-extra-ops.test.ts +0 -706
  684. package/src/__tests__/playbook-executor.test.ts +0 -249
  685. package/src/__tests__/playbook-registry.test.ts +0 -326
  686. package/src/__tests__/playbook-seeder.test.ts +0 -163
  687. package/src/__tests__/playbook.test.ts +0 -389
  688. package/src/__tests__/plugin-ops.test.ts +0 -411
  689. package/src/__tests__/plugin-system.test.ts +0 -509
  690. package/src/__tests__/project-ops.test.ts +0 -381
  691. package/src/__tests__/replayable-stream.test.ts +0 -177
  692. package/src/__tests__/runtime.test.ts +0 -95
  693. package/src/__tests__/scope-detector.test.ts +0 -121
  694. package/src/__tests__/template-manager.test.ts +0 -222
  695. package/src/__tests__/token-resolver.test.ts +0 -79
  696. package/src/__tests__/transport.test.ts +0 -758
  697. package/src/__tests__/vault-branching.test.ts +0 -274
  698. package/src/__tests__/vault-extra-ops.test.ts +0 -482
  699. package/src/__tests__/vault-integrity.test.ts +0 -71
  700. package/src/__tests__/vault-manager.test.ts +0 -238
  701. package/src/__tests__/ws-transport.test.ts +0 -479
@@ -0,0 +1,261 @@
1
+ /**
2
+ * operator-signals — pure functions that extract personality-relevant signals
3
+ * from existing engine events.
4
+ *
5
+ * Zero LLM, zero side effects, zero DB imports.
6
+ * Each function takes structured data and returns OperatorSignal[].
7
+ */
8
+
9
+ import { randomUUID } from 'node:crypto';
10
+ import { SignalType, type OperatorSignal } from './operator-types.js';
11
+ import type { RadarCandidate } from '../brain/learning-radar.js';
12
+ import type { PatternStrength } from '../brain/types.js';
13
+
14
+ // =============================================================================
15
+ // INPUT TYPES
16
+ // =============================================================================
17
+
18
+ /** Minimal session capture data needed for signal extraction. */
19
+ export interface SessionCaptureData {
20
+ sessionId: string;
21
+ intent: string | null;
22
+ capturedAt: string; // ISO 8601
23
+ toolsUsed: string[] | null;
24
+ filesModified: string[] | null;
25
+ decisions: string[] | null;
26
+ summary: string | null;
27
+ }
28
+
29
+ // =============================================================================
30
+ // HELPERS
31
+ // =============================================================================
32
+
33
+ const DEFAULT_CONFIDENCE = 0.5;
34
+
35
+ function makeSignalId(): string {
36
+ return `sig-${randomUUID()}`;
37
+ }
38
+
39
+ function nowISO(): string {
40
+ return new Date().toISOString();
41
+ }
42
+
43
+ function wordCount(text: string): number {
44
+ return text.trim().split(/\s+/).filter(Boolean).length;
45
+ }
46
+
47
+ // =============================================================================
48
+ // extractFromSession
49
+ // =============================================================================
50
+
51
+ /**
52
+ * Extract personality-relevant signals from a session capture.
53
+ *
54
+ * Produces:
55
+ * - command_style — from intent word count
56
+ * - work_rhythm — from capturedAt timestamp
57
+ * - tool_preference — from toolsUsed frequencies
58
+ * - session_depth — from filesModified + decisions count
59
+ */
60
+ export function extractFromSession(session: SessionCaptureData): OperatorSignal[] {
61
+ const signals: OperatorSignal[] = [];
62
+ const ts = nowISO();
63
+ const sid = session.sessionId;
64
+
65
+ // ─── command_style ──────────────────────────────────────────────
66
+ if (session.intent && typeof session.intent === 'string') {
67
+ const wc = wordCount(session.intent);
68
+ let style: 'terse' | 'verbose' | 'conversational' | 'directive';
69
+ if (wc < 5) {
70
+ style = 'terse';
71
+ } else if (wc > 20) {
72
+ style = 'verbose';
73
+ } else {
74
+ style = 'conversational';
75
+ }
76
+
77
+ signals.push({
78
+ id: makeSignalId(),
79
+ timestamp: ts,
80
+ sessionId: sid,
81
+ confidence: DEFAULT_CONFIDENCE,
82
+ signalType: SignalType.CommandStyle,
83
+ source: 'session_capture',
84
+ data: {
85
+ style,
86
+ snippet: session.intent,
87
+ },
88
+ });
89
+ }
90
+
91
+ // ─── work_rhythm ────────────────────────────────────────────────
92
+ if (session.capturedAt) {
93
+ const date = new Date(session.capturedAt);
94
+ const _hour = date.getUTCHours();
95
+ const decisions = session.decisions ?? [];
96
+ const files = session.filesModified ?? [];
97
+
98
+ // Infer pattern from hour + activity level
99
+ const activityScore = files.length + decisions.length;
100
+ let pattern: 'burst' | 'steady' | 'exploratory' | 'deep-focus';
101
+ if (activityScore >= 6) {
102
+ pattern = 'deep-focus';
103
+ } else if (activityScore >= 3) {
104
+ pattern = 'steady';
105
+ } else if (activityScore >= 1) {
106
+ pattern = 'exploratory';
107
+ } else {
108
+ pattern = 'burst';
109
+ }
110
+
111
+ signals.push({
112
+ id: makeSignalId(),
113
+ timestamp: ts,
114
+ sessionId: sid,
115
+ confidence: DEFAULT_CONFIDENCE,
116
+ signalType: SignalType.WorkRhythm,
117
+ source: 'session_capture',
118
+ data: {
119
+ pattern,
120
+ durationMinutes: 0, // Not available from capture data
121
+ taskCount: activityScore,
122
+ },
123
+ });
124
+ }
125
+
126
+ // ─── tool_preference ────────────────────────────────────────────
127
+ if (session.toolsUsed && Array.isArray(session.toolsUsed)) {
128
+ const freq = new Map<string, number>();
129
+ for (const tool of session.toolsUsed) {
130
+ freq.set(tool, (freq.get(tool) ?? 0) + 1);
131
+ }
132
+
133
+ for (const [toolName, count] of freq) {
134
+ signals.push({
135
+ id: makeSignalId(),
136
+ timestamp: ts,
137
+ sessionId: sid,
138
+ confidence: DEFAULT_CONFIDENCE,
139
+ signalType: SignalType.ToolPreference,
140
+ source: 'session_capture',
141
+ data: {
142
+ toolName,
143
+ action: 'used',
144
+ frequency: count,
145
+ },
146
+ });
147
+ }
148
+ }
149
+
150
+ // ─── session_depth ──────────────────────────────────────────────
151
+ {
152
+ const files = session.filesModified ?? [];
153
+ const decisions = session.decisions ?? [];
154
+ const total = files.length + decisions.length;
155
+
156
+ let depth: 'shallow' | 'moderate' | 'deep' | 'marathon';
157
+ if (total >= 8) {
158
+ depth = 'marathon';
159
+ } else if (total >= 5) {
160
+ depth = 'deep';
161
+ } else if (total >= 2) {
162
+ depth = 'moderate';
163
+ } else {
164
+ depth = 'shallow';
165
+ }
166
+
167
+ signals.push({
168
+ id: makeSignalId(),
169
+ timestamp: ts,
170
+ sessionId: sid,
171
+ confidence: DEFAULT_CONFIDENCE,
172
+ signalType: SignalType.SessionDepth,
173
+ source: 'session_capture',
174
+ data: {
175
+ depth,
176
+ messageCount: 0, // Not available from capture data
177
+ durationMinutes: 0,
178
+ },
179
+ });
180
+ }
181
+
182
+ return signals;
183
+ }
184
+
185
+ // =============================================================================
186
+ // extractFromRadar
187
+ // =============================================================================
188
+
189
+ /**
190
+ * Extract operator signals from a radar candidate.
191
+ *
192
+ * - correction signal_type → correction OperatorSignal
193
+ * - repeated_question → frustration OperatorSignal
194
+ * - Other signal types are not personality-relevant → empty array.
195
+ */
196
+ export function extractFromRadar(candidate: RadarCandidate): OperatorSignal[] {
197
+ const signals: OperatorSignal[] = [];
198
+ const ts = nowISO();
199
+ const sid = `radar-${candidate.id}`;
200
+
201
+ if (candidate.signalType === 'correction') {
202
+ signals.push({
203
+ id: makeSignalId(),
204
+ timestamp: ts,
205
+ sessionId: sid,
206
+ confidence: candidate.confidence,
207
+ signalType: SignalType.Correction,
208
+ source: 'learning_radar',
209
+ data: {
210
+ original: candidate.description,
211
+ corrected: candidate.title,
212
+ category: 'approach',
213
+ },
214
+ });
215
+ } else if (candidate.signalType === 'repeated_question') {
216
+ signals.push({
217
+ id: makeSignalId(),
218
+ timestamp: ts,
219
+ sessionId: sid,
220
+ confidence: candidate.confidence,
221
+ signalType: SignalType.Frustration,
222
+ source: 'learning_radar',
223
+ data: {
224
+ level: candidate.confidence >= 0.7 ? 'high' : candidate.confidence >= 0.5 ? 'moderate' : 'mild',
225
+ trigger: candidate.sourceQuery ?? candidate.title,
226
+ context: candidate.context ?? candidate.description,
227
+ },
228
+ });
229
+ }
230
+
231
+ return signals;
232
+ }
233
+
234
+ // =============================================================================
235
+ // extractFromBrainStrengths
236
+ // =============================================================================
237
+
238
+ /**
239
+ * Extract domain expertise signals from brain pattern strengths.
240
+ *
241
+ * Filters strengths with score > 0.6 and maps them to domain_expertise signals.
242
+ */
243
+ export function extractFromBrainStrengths(strengths: PatternStrength[]): OperatorSignal[] {
244
+ const ts = nowISO();
245
+
246
+ return strengths
247
+ .filter((s) => s.strength > 0.6)
248
+ .map((s) => ({
249
+ id: makeSignalId(),
250
+ timestamp: ts,
251
+ sessionId: 'brain-strengths',
252
+ confidence: s.strength,
253
+ signalType: SignalType.DomainExpertise,
254
+ source: 'brain_intelligence',
255
+ data: {
256
+ domain: s.domain,
257
+ level: (s.strength >= 0.8 ? 'expert' : 'advanced') as 'expert' | 'advanced',
258
+ evidence: `Pattern "${s.pattern}" in ${s.domain} with strength ${s.strength}`,
259
+ },
260
+ }));
261
+ }
@@ -0,0 +1,444 @@
1
+ /**
2
+ * Operator Profile Types — type foundation for the Operator Profile module.
3
+ *
4
+ * Defines signals, profile sections, synthesis checks, and history
5
+ * for personality learning and adaptation.
6
+ */
7
+
8
+ // =============================================================================
9
+ // SIGNAL TYPES
10
+ // =============================================================================
11
+
12
+ /** All recognized signal types emitted during operator interaction. */
13
+ export enum SignalType {
14
+ CommandStyle = 'command_style',
15
+ WorkRhythm = 'work_rhythm',
16
+ ToolPreference = 'tool_preference',
17
+ SessionDepth = 'session_depth',
18
+ DomainExpertise = 'domain_expertise',
19
+ Correction = 'correction',
20
+ Frustration = 'frustration',
21
+ PersonalShare = 'personal_share',
22
+ CommunicationPref = 'communication_pref',
23
+ ReactionToOutput = 'reaction_to_output',
24
+ }
25
+
26
+ // =============================================================================
27
+ // SIGNAL DATA (discriminated union per SignalType)
28
+ // =============================================================================
29
+
30
+ /** Data for CommandStyle signals — how the operator phrases requests. */
31
+ export interface CommandStyleData {
32
+ style: 'terse' | 'verbose' | 'conversational' | 'directive';
33
+ /** Raw input snippet that evidences this style. */
34
+ snippet: string;
35
+ }
36
+
37
+ /** Data for WorkRhythm signals — cadence and session patterns. */
38
+ export interface WorkRhythmData {
39
+ pattern: 'burst' | 'steady' | 'exploratory' | 'deep-focus';
40
+ /** Duration in minutes of the observed rhythm. */
41
+ durationMinutes: number;
42
+ /** Number of tasks completed in the observed window. */
43
+ taskCount: number;
44
+ }
45
+
46
+ /** Data for ToolPreference signals — which tools the operator favors. */
47
+ export interface ToolPreferenceData {
48
+ toolName: string;
49
+ action: 'used' | 'avoided' | 'requested' | 'dismissed';
50
+ /** How many times this preference was observed. */
51
+ frequency: number;
52
+ }
53
+
54
+ /** Data for SessionDepth signals — how deep sessions tend to go. */
55
+ export interface SessionDepthData {
56
+ depth: 'shallow' | 'moderate' | 'deep' | 'marathon';
57
+ /** Number of messages in the session. */
58
+ messageCount: number;
59
+ /** Duration in minutes. */
60
+ durationMinutes: number;
61
+ }
62
+
63
+ /** Data for DomainExpertise signals — areas of operator expertise. */
64
+ export interface DomainExpertiseData {
65
+ domain: string;
66
+ level: 'novice' | 'intermediate' | 'advanced' | 'expert';
67
+ /** Evidence that led to this assessment. */
68
+ evidence: string;
69
+ }
70
+
71
+ /** Data for Correction signals — when the operator corrects agent output. */
72
+ export interface CorrectionData {
73
+ /** What the agent produced. */
74
+ original: string;
75
+ /** What the operator wanted instead. */
76
+ corrected: string;
77
+ /** Category of the correction. */
78
+ category: 'factual' | 'style' | 'approach' | 'scope' | 'tone';
79
+ }
80
+
81
+ /** Data for Frustration signals — detected operator frustration. */
82
+ export interface FrustrationData {
83
+ level: 'mild' | 'moderate' | 'high';
84
+ /** Trigger phrase or context. */
85
+ trigger: string;
86
+ /** What the agent was doing when frustration was detected. */
87
+ context: string;
88
+ }
89
+
90
+ /** Data for PersonalShare signals — operator shares personal info. */
91
+ export interface PersonalShareData {
92
+ category: 'background' | 'preference' | 'philosophy' | 'anecdote';
93
+ content: string;
94
+ /** Whether the operator explicitly shared or it was inferred. */
95
+ explicit: boolean;
96
+ }
97
+
98
+ /** Data for CommunicationPref signals — how the operator prefers responses. */
99
+ export interface CommunicationPrefData {
100
+ preference: 'concise' | 'detailed' | 'structured' | 'casual' | 'formal';
101
+ /** Specific aspect: response length, formatting, tone, etc. */
102
+ aspect: 'length' | 'format' | 'tone' | 'detail-level';
103
+ }
104
+
105
+ /** Data for ReactionToOutput signals — how the operator responds to agent output. */
106
+ export interface ReactionToOutputData {
107
+ reaction: 'positive' | 'negative' | 'neutral' | 'mixed';
108
+ /** What aspect of the output prompted the reaction. */
109
+ aspect: 'accuracy' | 'style' | 'completeness' | 'speed' | 'approach';
110
+ /** Optional feedback snippet. */
111
+ feedback?: string;
112
+ }
113
+
114
+ /** Maps each SignalType to its typed data payload. */
115
+ export interface SignalDataMap {
116
+ [SignalType.CommandStyle]: CommandStyleData;
117
+ [SignalType.WorkRhythm]: WorkRhythmData;
118
+ [SignalType.ToolPreference]: ToolPreferenceData;
119
+ [SignalType.SessionDepth]: SessionDepthData;
120
+ [SignalType.DomainExpertise]: DomainExpertiseData;
121
+ [SignalType.Correction]: CorrectionData;
122
+ [SignalType.Frustration]: FrustrationData;
123
+ [SignalType.PersonalShare]: PersonalShareData;
124
+ [SignalType.CommunicationPref]: CommunicationPrefData;
125
+ [SignalType.ReactionToOutput]: ReactionToOutputData;
126
+ }
127
+
128
+ // =============================================================================
129
+ // OPERATOR SIGNAL (discriminated union)
130
+ // =============================================================================
131
+
132
+ /** Base fields shared by all operator signals. */
133
+ interface OperatorSignalBase {
134
+ /** Unique signal ID. */
135
+ id: string;
136
+ /** ISO 8601 timestamp when the signal was captured. */
137
+ timestamp: string;
138
+ /** Session ID where the signal was observed. */
139
+ sessionId: string;
140
+ /** Confidence in the signal detection (0.0 - 1.0). */
141
+ confidence: number;
142
+ /** Optional source context (e.g., message index, tool call). */
143
+ source?: string;
144
+ }
145
+
146
+ /** Type-safe operator signal — discriminated on `signalType`. */
147
+ export type OperatorSignal = {
148
+ [K in SignalType]: OperatorSignalBase & {
149
+ signalType: K;
150
+ data: SignalDataMap[K];
151
+ };
152
+ }[SignalType];
153
+
154
+ // =============================================================================
155
+ // PROFILE SECTIONS
156
+ // =============================================================================
157
+
158
+ /** Evidence record attached to profile section entries. */
159
+ export interface ProfileEvidence {
160
+ /** Signal ID that contributed to this evidence. */
161
+ signalId: string;
162
+ /** When the evidence was recorded. */
163
+ timestamp: string;
164
+ /** Confidence of the originating signal. */
165
+ confidence: number;
166
+ /** Short description of what was observed. */
167
+ summary: string;
168
+ }
169
+
170
+ /** Identity section — who the operator is. */
171
+ export interface IdentitySection {
172
+ /** Operator's professional background. */
173
+ background: string;
174
+ /** Current role or title. */
175
+ role: string;
176
+ /** Guiding philosophy or values. */
177
+ philosophy: string;
178
+ /** Evidence trail for identity inferences. */
179
+ evidence: ProfileEvidence[];
180
+ }
181
+
182
+ /** A single cognitive pattern observed in the operator. */
183
+ export interface CognitivePattern {
184
+ /** Name of the pattern (e.g., "visual-first-thinker"). */
185
+ name: string;
186
+ /** Description of the observed behavior. */
187
+ description: string;
188
+ /** How strongly this pattern is established (0.0 - 1.0). */
189
+ strength: number;
190
+ }
191
+
192
+ /** A derivation — something inferred from observed patterns. */
193
+ export interface CognitiveDerivation {
194
+ /** What was derived. */
195
+ insight: string;
196
+ /** Which patterns led to this derivation. */
197
+ sourcePatterns: string[];
198
+ /** Confidence in the derivation (0.0 - 1.0). */
199
+ confidence: number;
200
+ }
201
+
202
+ /** Cognition section — how the operator thinks. */
203
+ export interface CognitionSection {
204
+ /** Observed cognitive patterns. */
205
+ patterns: CognitivePattern[];
206
+ /** Inferences derived from pattern combinations. */
207
+ derivations: CognitiveDerivation[];
208
+ /** Evidence trail. */
209
+ evidence: ProfileEvidence[];
210
+ }
211
+
212
+ /** Adaptation rule for communication. */
213
+ export interface CommunicationAdaptationRule {
214
+ /** Condition that triggers the adaptation. */
215
+ when: string;
216
+ /** How the agent should adapt. */
217
+ then: string;
218
+ /** Source: observed from signals or reported by operator. */
219
+ source: 'observed' | 'reported';
220
+ }
221
+
222
+ /** Communication section — how the operator prefers to communicate. */
223
+ export interface CommunicationSection {
224
+ /** Overall communication style. */
225
+ style: 'concise' | 'detailed' | 'structured' | 'casual' | 'formal' | 'mixed';
226
+ /** Words or phrases the operator frequently uses. */
227
+ signalWords: string[];
228
+ /** Formality level (0.0 casual - 1.0 formal). */
229
+ formality: number;
230
+ /** Patience level (0.0 impatient - 1.0 patient). */
231
+ patience: number;
232
+ /** Rules for adapting agent communication. */
233
+ adaptationRules: CommunicationAdaptationRule[];
234
+ }
235
+
236
+ /** A working rule the agent should follow for this operator. */
237
+ export interface WorkingRule {
238
+ /** The rule statement. */
239
+ rule: string;
240
+ /** Where the rule came from. */
241
+ source: 'observed' | 'reported';
242
+ /** How many times this rule has been reinforced. */
243
+ reinforcements: number;
244
+ /** When the rule was first established. */
245
+ firstSeen: string;
246
+ /** When the rule was last reinforced. */
247
+ lastSeen: string;
248
+ }
249
+
250
+ /** Working rules section — operator-specific behavioral rules. */
251
+ export interface WorkingRulesSection {
252
+ rules: WorkingRule[];
253
+ }
254
+
255
+ /** Trust builder or breaker event. */
256
+ export interface TrustEvent {
257
+ /** Description of the event. */
258
+ event: string;
259
+ /** Impact on trust (-1.0 to 1.0). */
260
+ impact: number;
261
+ /** When it happened. */
262
+ timestamp: string;
263
+ }
264
+
265
+ /** Trust model section — the operator's trust relationship with the agent. */
266
+ export interface TrustModelSection {
267
+ /** Overall trust level label. */
268
+ level: 'new' | 'developing' | 'established' | 'deep';
269
+ /** Events that built trust. */
270
+ builders: TrustEvent[];
271
+ /** Events that eroded trust. */
272
+ breakers: TrustEvent[];
273
+ /** Numeric trust level (0.0 - 1.0). */
274
+ currentLevel: number;
275
+ }
276
+
277
+ /** A single taste profile entry. */
278
+ export interface TasteEntry {
279
+ /** Category of taste (e.g., "code-style", "design", "tooling"). */
280
+ category: string;
281
+ /** The specific taste or preference. */
282
+ content: string;
283
+ /** How this taste affects work output. */
284
+ workImplication: string;
285
+ /** Evidence trail. */
286
+ evidence: ProfileEvidence[];
287
+ }
288
+
289
+ /** Taste profile section — operator's aesthetic and stylistic preferences. */
290
+ export interface TasteProfileSection {
291
+ entries: TasteEntry[];
292
+ }
293
+
294
+ /** A growth edge — area where the operator is developing. */
295
+ export interface GrowthEdge {
296
+ /** The area of growth. */
297
+ area: string;
298
+ /** Description of the growth edge. */
299
+ description: string;
300
+ /** Current progress assessment. */
301
+ progress: 'emerging' | 'developing' | 'maturing';
302
+ }
303
+
304
+ /** Growth edges section — areas the operator is developing in. */
305
+ export interface GrowthEdgesSection {
306
+ /** Growth edges observed by the agent. */
307
+ observed: GrowthEdge[];
308
+ /** Growth edges the operator has mentioned themselves. */
309
+ selfReported: GrowthEdge[];
310
+ }
311
+
312
+ /** A known tool in the operator's technical context. */
313
+ export interface TechnicalTool {
314
+ /** Tool name. */
315
+ name: string;
316
+ /** Proficiency level. */
317
+ proficiency: 'beginner' | 'intermediate' | 'advanced' | 'expert';
318
+ /** How frequently the operator uses this tool. */
319
+ frequency: 'rare' | 'occasional' | 'regular' | 'daily';
320
+ }
321
+
322
+ /** A blind spot in the operator's technical knowledge. */
323
+ export interface TechnicalBlindSpot {
324
+ /** Area of the blind spot. */
325
+ area: string;
326
+ /** Description. */
327
+ description: string;
328
+ /** How the agent should handle this blind spot. */
329
+ mitigation: string;
330
+ }
331
+
332
+ /** Technical context section — operator's technical environment. */
333
+ export interface TechnicalContextSection {
334
+ /** Domains the operator works in. */
335
+ domains: string[];
336
+ /** Tools the operator uses. */
337
+ tools: TechnicalTool[];
338
+ /** Known technical blind spots. */
339
+ blindSpots: TechnicalBlindSpot[];
340
+ }
341
+
342
+ /** Union of all profile section types. */
343
+ export type ProfileSection =
344
+ | IdentitySection
345
+ | CognitionSection
346
+ | CommunicationSection
347
+ | WorkingRulesSection
348
+ | TrustModelSection
349
+ | TasteProfileSection
350
+ | GrowthEdgesSection
351
+ | TechnicalContextSection;
352
+
353
+ /** Profile section keys. */
354
+ export type ProfileSectionKey =
355
+ | 'identity'
356
+ | 'cognition'
357
+ | 'communication'
358
+ | 'workingRules'
359
+ | 'trustModel'
360
+ | 'tasteProfile'
361
+ | 'growthEdges'
362
+ | 'technicalContext';
363
+
364
+ // =============================================================================
365
+ // OPERATOR PROFILE
366
+ // =============================================================================
367
+
368
+ /** Complete operator profile — composed of all sections plus metadata. */
369
+ export interface OperatorProfile {
370
+ /** Unique profile ID. */
371
+ id: string;
372
+ /** Operator identifier (e.g., username, session owner). */
373
+ operatorId: string;
374
+ /** Profile format version for migration support. */
375
+ version: number;
376
+
377
+ // ─── Sections ────────────────────────────────────────────────────
378
+ identity: IdentitySection;
379
+ cognition: CognitionSection;
380
+ communication: CommunicationSection;
381
+ workingRules: WorkingRulesSection;
382
+ trustModel: TrustModelSection;
383
+ tasteProfile: TasteProfileSection;
384
+ growthEdges: GrowthEdgesSection;
385
+ technicalContext: TechnicalContextSection;
386
+
387
+ // ─── Metadata ────────────────────────────────────────────────────
388
+ /** Total number of sessions that contributed to this profile. */
389
+ sessionCount: number;
390
+ /** ISO 8601 timestamp of the last synthesis pass. */
391
+ lastSynthesis: string | null;
392
+ /** ISO 8601 timestamp when the profile was created. */
393
+ createdAt: string;
394
+ /** ISO 8601 timestamp of the last update. */
395
+ updatedAt: string;
396
+ }
397
+
398
+ // =============================================================================
399
+ // SYNTHESIS CHECK
400
+ // =============================================================================
401
+
402
+ /** Result of checking whether a synthesis pass is needed. */
403
+ export interface SynthesisCheckResult {
404
+ /** Whether synthesis is due. */
405
+ due: boolean;
406
+ /** Human-readable reason for the decision. */
407
+ reason: string;
408
+ /** Per-section breakdown of what needs updating. */
409
+ sectionsToUpdate: Record<ProfileSectionKey, boolean>;
410
+ /** Number of unprocessed signals since last synthesis. */
411
+ pendingSignalCount: number;
412
+ /** ISO 8601 timestamp of the last synthesis (null if never run). */
413
+ lastSynthesisAt: string | null;
414
+ }
415
+
416
+ // =============================================================================
417
+ // PROFILE HISTORY
418
+ // =============================================================================
419
+
420
+ /** A snapshot of the profile at a point in time. */
421
+ export interface ProfileSnapshot {
422
+ /** Snapshot ID. */
423
+ id: string;
424
+ /** ISO 8601 timestamp when the snapshot was taken. */
425
+ timestamp: string;
426
+ /** The profile state at this point. */
427
+ profile: OperatorProfile;
428
+ /** What triggered this snapshot (e.g., "synthesis", "manual"). */
429
+ trigger: string;
430
+ /** Summary of changes from the previous snapshot. */
431
+ changeSummary: string;
432
+ }
433
+
434
+ /** History of an operator profile — tracks evolution over time. */
435
+ export interface OperatorProfileHistory {
436
+ /** Profile ID this history belongs to. */
437
+ profileId: string;
438
+ /** Ordered list of snapshots (newest first). */
439
+ snapshots: ProfileSnapshot[];
440
+ /** Total number of synthesis passes performed. */
441
+ synthesisCount: number;
442
+ /** Total number of signals processed across all time. */
443
+ totalSignalsProcessed: number;
444
+ }