@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,377 @@
1
+ /**
2
+ * Operator Profile — persistence layer for operator personality learning.
3
+ *
4
+ * Follows the BrainIntelligence pattern: separate class, own SQLite tables,
5
+ * takes Vault as constructor dep.
6
+ */
7
+ import { randomUUID } from 'node:crypto';
8
+ // ─── Constants ──────────────────────────────────────────────────────
9
+ const DEFAULT_AGENT_ID = 'default';
10
+ const SYNTHESIS_SIGNAL_THRESHOLD = 50;
11
+ const SYNTHESIS_SESSION_THRESHOLD = 5;
12
+ const SECTION_SIGNAL_THRESHOLD = 8;
13
+ /** Maps signal types to the profile sections they influence. */
14
+ const SIGNAL_SECTION_MAP = {
15
+ command_style: ['communication'],
16
+ work_rhythm: ['cognition'],
17
+ tool_preference: ['technicalContext'],
18
+ session_depth: ['cognition'],
19
+ domain_expertise: ['technicalContext', 'identity'],
20
+ correction: ['workingRules', 'trustModel'],
21
+ frustration: ['trustModel', 'communication'],
22
+ personal_share: ['identity', 'tasteProfile'],
23
+ communication_pref: ['communication'],
24
+ reaction_to_output: ['trustModel', 'growthEdges'],
25
+ };
26
+ // ─── Defaults ───────────────────────────────────────────────────────
27
+ function defaultProfile(id, agentId) {
28
+ const now = new Date().toISOString();
29
+ return {
30
+ id,
31
+ operatorId: agentId,
32
+ version: 1,
33
+ identity: { background: '', role: '', philosophy: '', evidence: [] },
34
+ cognition: { patterns: [], derivations: [], evidence: [] },
35
+ communication: {
36
+ style: 'mixed',
37
+ signalWords: [],
38
+ formality: 0.5,
39
+ patience: 0.5,
40
+ adaptationRules: [],
41
+ },
42
+ workingRules: { rules: [] },
43
+ trustModel: { level: 'new', builders: [], breakers: [], currentLevel: 0.5 },
44
+ tasteProfile: { entries: [] },
45
+ growthEdges: { observed: [], selfReported: [] },
46
+ technicalContext: { domains: [], tools: [], blindSpots: [] },
47
+ sessionCount: 0,
48
+ lastSynthesis: null,
49
+ createdAt: now,
50
+ updatedAt: now,
51
+ };
52
+ }
53
+ // ─── Section column mapping ─────────────────────────────────────────
54
+ const SECTION_COLUMNS = {
55
+ identity: 'identity',
56
+ cognition: 'cognition',
57
+ communication: 'communication',
58
+ workingRules: 'working_rules',
59
+ trustModel: 'trust_model',
60
+ tasteProfile: 'taste_profile',
61
+ growthEdges: 'growth_edges',
62
+ technicalContext: 'technical_context',
63
+ };
64
+ // ─── Class ──────────────────────────────────────────────────────────
65
+ export class OperatorProfileStore {
66
+ provider;
67
+ constructor(vault) {
68
+ this.provider = vault.getProvider();
69
+ this.initTables();
70
+ }
71
+ // ─── Table Initialization ─────────────────────────────────────────
72
+ initTables() {
73
+ this.provider.execSql(`
74
+ CREATE TABLE IF NOT EXISTS operator_profiles (
75
+ id TEXT PRIMARY KEY,
76
+ agent_id TEXT NOT NULL DEFAULT '${DEFAULT_AGENT_ID}',
77
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
78
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
79
+ identity TEXT NOT NULL DEFAULT '{}',
80
+ cognition TEXT NOT NULL DEFAULT '{}',
81
+ communication TEXT NOT NULL DEFAULT '{}',
82
+ working_rules TEXT NOT NULL DEFAULT '{}',
83
+ trust_model TEXT NOT NULL DEFAULT '{}',
84
+ taste_profile TEXT NOT NULL DEFAULT '{}',
85
+ growth_edges TEXT NOT NULL DEFAULT '{}',
86
+ technical_context TEXT NOT NULL DEFAULT '{}',
87
+ session_count INTEGER NOT NULL DEFAULT 0,
88
+ signal_count INTEGER NOT NULL DEFAULT 0,
89
+ last_synthesis TEXT,
90
+ synthesis_version INTEGER NOT NULL DEFAULT 0
91
+ );
92
+
93
+ CREATE TABLE IF NOT EXISTS operator_signals (
94
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
95
+ profile_id TEXT NOT NULL,
96
+ signal_type TEXT NOT NULL,
97
+ signal_data TEXT NOT NULL DEFAULT '{}',
98
+ source TEXT,
99
+ confidence REAL NOT NULL DEFAULT 0.5,
100
+ processed INTEGER NOT NULL DEFAULT 0,
101
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
102
+ FOREIGN KEY (profile_id) REFERENCES operator_profiles(id)
103
+ );
104
+
105
+ CREATE INDEX IF NOT EXISTS idx_operator_signals_type_processed
106
+ ON operator_signals(signal_type, processed);
107
+
108
+ CREATE INDEX IF NOT EXISTS idx_operator_signals_profile_created
109
+ ON operator_signals(profile_id, created_at);
110
+
111
+ CREATE TABLE IF NOT EXISTS operator_profile_history (
112
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
113
+ profile_id TEXT NOT NULL,
114
+ version INTEGER NOT NULL,
115
+ snapshot TEXT NOT NULL DEFAULT '{}',
116
+ changes TEXT,
117
+ trigger TEXT NOT NULL DEFAULT 'manual',
118
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
119
+ );
120
+ `);
121
+ }
122
+ // ─── CRUD ─────────────────────────────────────────────────────────
123
+ getProfile(profileId) {
124
+ const sql = profileId
125
+ ? 'SELECT * FROM operator_profiles WHERE id = ?'
126
+ : 'SELECT * FROM operator_profiles LIMIT 1';
127
+ const params = profileId ? [profileId] : [];
128
+ const row = this.provider.get(sql, params);
129
+ if (!row)
130
+ return null;
131
+ return this.rowToProfile(row);
132
+ }
133
+ getSection(section, profileId) {
134
+ const col = SECTION_COLUMNS[section];
135
+ const sql = profileId
136
+ ? `SELECT ${col} FROM operator_profiles WHERE id = ?`
137
+ : `SELECT ${col} FROM operator_profiles LIMIT 1`;
138
+ const params = profileId ? [profileId] : [];
139
+ const row = this.provider.get(sql, params);
140
+ if (!row)
141
+ return null;
142
+ return JSON.parse(row[col] || '{}');
143
+ }
144
+ updateSection(section, data, profileId) {
145
+ const id = profileId ?? this.ensureProfile();
146
+ const col = SECTION_COLUMNS[section];
147
+ const result = this.provider.run(`UPDATE operator_profiles SET ${col} = ?, updated_at = datetime('now') WHERE id = ?`, [JSON.stringify(data), id]);
148
+ return result.changes > 0;
149
+ }
150
+ correctSection(section, data, profileId) {
151
+ const id = profileId ?? this.ensureProfile();
152
+ this.snapshot('correction', id);
153
+ return this.updateSection(section, data, id);
154
+ }
155
+ deleteProfile(profileId) {
156
+ const id = profileId ?? this.getDefaultProfileId();
157
+ if (!id)
158
+ return false;
159
+ const profile = this.getProfile(id);
160
+ if (!profile)
161
+ return false;
162
+ this.snapshot('deletion', id);
163
+ this.provider.run('DELETE FROM operator_signals WHERE profile_id = ?', [id]);
164
+ const result = this.provider.run('DELETE FROM operator_profiles WHERE id = ?', [id]);
165
+ return result.changes > 0;
166
+ }
167
+ // ─── Signal Methods ───────────────────────────────────────────────
168
+ accumulateSignals(signals, profileId) {
169
+ const id = profileId ?? this.ensureProfile();
170
+ let inserted = 0;
171
+ this.provider.transaction(() => {
172
+ for (const signal of signals) {
173
+ this.provider.run(`INSERT INTO operator_signals (profile_id, signal_type, signal_data, source, confidence, created_at)
174
+ VALUES (?, ?, ?, ?, ?, ?)`, [id, signal.signalType, JSON.stringify(signal.data), signal.source ?? null, signal.confidence, signal.timestamp]);
175
+ inserted++;
176
+ }
177
+ this.provider.run(`UPDATE operator_profiles SET signal_count = signal_count + ?, updated_at = datetime('now') WHERE id = ?`, [inserted, id]);
178
+ });
179
+ return inserted;
180
+ }
181
+ listSignals(filter = {}, profileId) {
182
+ const id = profileId ?? this.getDefaultProfileId();
183
+ if (!id)
184
+ return [];
185
+ const conditions = ['profile_id = ?'];
186
+ const params = [id];
187
+ if (filter.types && filter.types.length > 0) {
188
+ conditions.push(`signal_type IN (${filter.types.map(() => '?').join(',')})`);
189
+ params.push(...filter.types);
190
+ }
191
+ if (filter.processed !== undefined) {
192
+ conditions.push('processed = ?');
193
+ params.push(filter.processed ? 1 : 0);
194
+ }
195
+ const limit = filter.limit ?? 100;
196
+ const sql = `SELECT * FROM operator_signals WHERE ${conditions.join(' AND ')} ORDER BY created_at DESC LIMIT ?`;
197
+ params.push(limit);
198
+ const rows = this.provider.all(sql, params);
199
+ return rows.map((r) => ({
200
+ id: r.id,
201
+ signalType: r.signal_type,
202
+ signalData: JSON.parse(r.signal_data || '{}'),
203
+ source: r.source ?? null,
204
+ confidence: r.confidence,
205
+ processed: r.processed === 1,
206
+ createdAt: r.created_at,
207
+ }));
208
+ }
209
+ signalStats(profileId) {
210
+ const id = profileId ?? this.getDefaultProfileId();
211
+ if (!id)
212
+ return { byType: {}, totalUnprocessed: 0, lastSynthesis: null };
213
+ const rows = this.provider.all('SELECT signal_type, COUNT(*) as cnt FROM operator_signals WHERE profile_id = ? GROUP BY signal_type', [id]);
214
+ const byType = {};
215
+ for (const r of rows)
216
+ byType[r.signal_type] = r.cnt;
217
+ const unprocessed = this.provider.get('SELECT COUNT(*) as cnt FROM operator_signals WHERE profile_id = ? AND processed = 0', [id]);
218
+ const profile = this.provider.get('SELECT last_synthesis FROM operator_profiles WHERE id = ?', [id]);
219
+ return {
220
+ byType,
221
+ totalUnprocessed: unprocessed?.cnt ?? 0,
222
+ lastSynthesis: profile?.last_synthesis ?? null,
223
+ };
224
+ }
225
+ // ─── Synthesis Check ──────────────────────────────────────────────
226
+ synthesisCheck(profileId) {
227
+ const id = profileId ?? this.getDefaultProfileId();
228
+ if (!id) {
229
+ return {
230
+ due: false,
231
+ reason: 'No profile exists',
232
+ sectionsToUpdate: allSectionsFalse(),
233
+ pendingSignalCount: 0,
234
+ lastSynthesisAt: null,
235
+ };
236
+ }
237
+ const stats = this.signalStats(id);
238
+ const profile = this.provider.get('SELECT session_count, last_synthesis, synthesis_version FROM operator_profiles WHERE id = ?', [id]);
239
+ if (!profile) {
240
+ return {
241
+ due: false,
242
+ reason: 'Profile not found',
243
+ sectionsToUpdate: allSectionsFalse(),
244
+ pendingSignalCount: 0,
245
+ lastSynthesisAt: null,
246
+ };
247
+ }
248
+ const pending = stats.totalUnprocessed;
249
+ const sessionsSinceSynthesis = profile.synthesis_version === 0
250
+ ? profile.session_count
251
+ : profile.session_count; // tracked by incrementing session_count
252
+ const signalThresholdMet = pending >= SYNTHESIS_SIGNAL_THRESHOLD;
253
+ const sessionThresholdMet = sessionsSinceSynthesis >= SYNTHESIS_SESSION_THRESHOLD && profile.synthesis_version > 0
254
+ ? false // sessions threshold only meaningful after first synthesis
255
+ : sessionsSinceSynthesis >= SYNTHESIS_SESSION_THRESHOLD;
256
+ const due = signalThresholdMet || sessionThresholdMet;
257
+ // Per-section analysis
258
+ const sectionCounts = this.sectionSignalCounts(id);
259
+ const sectionsToUpdate = allSectionsFalse();
260
+ for (const [section, count] of Object.entries(sectionCounts)) {
261
+ if (count >= SECTION_SIGNAL_THRESHOLD) {
262
+ sectionsToUpdate[section] = true;
263
+ }
264
+ }
265
+ const reasons = [];
266
+ if (signalThresholdMet)
267
+ reasons.push(`${pending} unprocessed signals (threshold: ${SYNTHESIS_SIGNAL_THRESHOLD})`);
268
+ if (sessionThresholdMet)
269
+ reasons.push(`${sessionsSinceSynthesis} sessions since last synthesis (threshold: ${SYNTHESIS_SESSION_THRESHOLD})`);
270
+ if (!due)
271
+ reasons.push('Below all thresholds');
272
+ return {
273
+ due,
274
+ reason: reasons.join('; '),
275
+ sectionsToUpdate,
276
+ pendingSignalCount: pending,
277
+ lastSynthesisAt: profile.last_synthesis,
278
+ };
279
+ }
280
+ // ─── Snapshot / Versioning ────────────────────────────────────────
281
+ snapshot(trigger, profileId) {
282
+ const id = profileId ?? this.getDefaultProfileId();
283
+ if (!id)
284
+ return false;
285
+ const profile = this.getProfile(id);
286
+ if (!profile)
287
+ return false;
288
+ const version = this.provider.get('SELECT synthesis_version FROM operator_profiles WHERE id = ?', [id]);
289
+ const nextVersion = (version?.synthesis_version ?? 0) + 1;
290
+ this.provider.run(`INSERT INTO operator_profile_history (profile_id, version, snapshot, changes, trigger)
291
+ VALUES (?, ?, ?, ?, ?)`, [id, nextVersion, JSON.stringify(profile), null, trigger]);
292
+ this.provider.run(`UPDATE operator_profiles SET synthesis_version = ?, last_synthesis = datetime('now'), updated_at = datetime('now') WHERE id = ?`, [nextVersion, id]);
293
+ return true;
294
+ }
295
+ // ─── Helpers ──────────────────────────────────────────────────────
296
+ ensureProfile(agentId = DEFAULT_AGENT_ID) {
297
+ const existing = this.provider.get('SELECT id FROM operator_profiles WHERE agent_id = ? LIMIT 1', [agentId]);
298
+ if (existing)
299
+ return existing.id;
300
+ const id = randomUUID();
301
+ const profile = defaultProfile(id, agentId);
302
+ this.provider.run(`INSERT INTO operator_profiles (id, agent_id, identity, cognition, communication, working_rules, trust_model, taste_profile, growth_edges, technical_context)
303
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
304
+ id, agentId,
305
+ JSON.stringify(profile.identity),
306
+ JSON.stringify(profile.cognition),
307
+ JSON.stringify(profile.communication),
308
+ JSON.stringify(profile.workingRules),
309
+ JSON.stringify(profile.trustModel),
310
+ JSON.stringify(profile.tasteProfile),
311
+ JSON.stringify(profile.growthEdges),
312
+ JSON.stringify(profile.technicalContext),
313
+ ]);
314
+ return id;
315
+ }
316
+ getDefaultProfileId() {
317
+ const row = this.provider.get('SELECT id FROM operator_profiles LIMIT 1');
318
+ return row?.id ?? null;
319
+ }
320
+ rowToProfile(row) {
321
+ return {
322
+ id: row.id,
323
+ operatorId: row.agent_id,
324
+ version: row.synthesis_version ?? 1,
325
+ identity: JSON.parse(row.identity || '{}'),
326
+ cognition: JSON.parse(row.cognition || '{}'),
327
+ communication: JSON.parse(row.communication || '{}'),
328
+ workingRules: JSON.parse(row.working_rules || '{}'),
329
+ trustModel: JSON.parse(row.trust_model || '{}'),
330
+ tasteProfile: JSON.parse(row.taste_profile || '{}'),
331
+ growthEdges: JSON.parse(row.growth_edges || '{}'),
332
+ technicalContext: JSON.parse(row.technical_context || '{}'),
333
+ sessionCount: row.session_count ?? 0,
334
+ lastSynthesis: row.last_synthesis ?? null,
335
+ createdAt: row.created_at,
336
+ updatedAt: row.updated_at,
337
+ };
338
+ }
339
+ sectionSignalCounts(profileId) {
340
+ const counts = allSectionsZero();
341
+ const rows = this.provider.all('SELECT signal_type, COUNT(*) as cnt FROM operator_signals WHERE profile_id = ? AND processed = 0 GROUP BY signal_type', [profileId]);
342
+ for (const row of rows) {
343
+ const sections = SIGNAL_SECTION_MAP[row.signal_type];
344
+ if (sections) {
345
+ for (const s of sections)
346
+ counts[s] += row.cnt;
347
+ }
348
+ }
349
+ return counts;
350
+ }
351
+ }
352
+ // ─── Utility ──────────────────────────────────────────────────────────
353
+ function allSectionsFalse() {
354
+ return {
355
+ identity: false,
356
+ cognition: false,
357
+ communication: false,
358
+ workingRules: false,
359
+ trustModel: false,
360
+ tasteProfile: false,
361
+ growthEdges: false,
362
+ technicalContext: false,
363
+ };
364
+ }
365
+ function allSectionsZero() {
366
+ return {
367
+ identity: 0,
368
+ cognition: 0,
369
+ communication: 0,
370
+ workingRules: 0,
371
+ trustModel: 0,
372
+ tasteProfile: 0,
373
+ growthEdges: 0,
374
+ technicalContext: 0,
375
+ };
376
+ }
377
+ //# sourceMappingURL=operator-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-profile.js","sourceRoot":"","sources":["../../src/operator/operator-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
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
+ import { type OperatorSignal } from './operator-types.js';
9
+ import type { RadarCandidate } from '../brain/learning-radar.js';
10
+ import type { PatternStrength } from '../brain/types.js';
11
+ /** Minimal session capture data needed for signal extraction. */
12
+ export interface SessionCaptureData {
13
+ sessionId: string;
14
+ intent: string | null;
15
+ capturedAt: string;
16
+ toolsUsed: string[] | null;
17
+ filesModified: string[] | null;
18
+ decisions: string[] | null;
19
+ summary: string | null;
20
+ }
21
+ /**
22
+ * Extract personality-relevant signals from a session capture.
23
+ *
24
+ * Produces:
25
+ * - command_style — from intent word count
26
+ * - work_rhythm — from capturedAt timestamp
27
+ * - tool_preference — from toolsUsed frequencies
28
+ * - session_depth — from filesModified + decisions count
29
+ */
30
+ export declare function extractFromSession(session: SessionCaptureData): OperatorSignal[];
31
+ /**
32
+ * Extract operator signals from a radar candidate.
33
+ *
34
+ * - correction signal_type → correction OperatorSignal
35
+ * - repeated_question → frustration OperatorSignal
36
+ * - Other signal types are not personality-relevant → empty array.
37
+ */
38
+ export declare function extractFromRadar(candidate: RadarCandidate): OperatorSignal[];
39
+ /**
40
+ * Extract domain expertise signals from brain pattern strengths.
41
+ *
42
+ * Filters strengths with score > 0.6 and maps them to domain_expertise signals.
43
+ */
44
+ export declare function extractFromBrainStrengths(strengths: PatternStrength[]): OperatorSignal[];
45
+ //# sourceMappingURL=operator-signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-signals.d.ts","sourceRoot":"","sources":["../../src/operator/operator-signals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,EAAE,CA2HhF;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,EAAE,CAoC5E;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,cAAc,EAAE,CAkBxF"}
@@ -0,0 +1,228 @@
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
+ import { randomUUID } from 'node:crypto';
9
+ import { SignalType } from './operator-types.js';
10
+ // =============================================================================
11
+ // HELPERS
12
+ // =============================================================================
13
+ const DEFAULT_CONFIDENCE = 0.5;
14
+ function makeSignalId() {
15
+ return `sig-${randomUUID()}`;
16
+ }
17
+ function nowISO() {
18
+ return new Date().toISOString();
19
+ }
20
+ function wordCount(text) {
21
+ return text.trim().split(/\s+/).filter(Boolean).length;
22
+ }
23
+ // =============================================================================
24
+ // extractFromSession
25
+ // =============================================================================
26
+ /**
27
+ * Extract personality-relevant signals from a session capture.
28
+ *
29
+ * Produces:
30
+ * - command_style — from intent word count
31
+ * - work_rhythm — from capturedAt timestamp
32
+ * - tool_preference — from toolsUsed frequencies
33
+ * - session_depth — from filesModified + decisions count
34
+ */
35
+ export function extractFromSession(session) {
36
+ const signals = [];
37
+ const ts = nowISO();
38
+ const sid = session.sessionId;
39
+ // ─── command_style ──────────────────────────────────────────────
40
+ if (session.intent && typeof session.intent === 'string') {
41
+ const wc = wordCount(session.intent);
42
+ let style;
43
+ if (wc < 5) {
44
+ style = 'terse';
45
+ }
46
+ else if (wc > 20) {
47
+ style = 'verbose';
48
+ }
49
+ else {
50
+ style = 'conversational';
51
+ }
52
+ signals.push({
53
+ id: makeSignalId(),
54
+ timestamp: ts,
55
+ sessionId: sid,
56
+ confidence: DEFAULT_CONFIDENCE,
57
+ signalType: SignalType.CommandStyle,
58
+ source: 'session_capture',
59
+ data: {
60
+ style,
61
+ snippet: session.intent,
62
+ },
63
+ });
64
+ }
65
+ // ─── work_rhythm ────────────────────────────────────────────────
66
+ if (session.capturedAt) {
67
+ const date = new Date(session.capturedAt);
68
+ const _hour = date.getUTCHours();
69
+ const decisions = session.decisions ?? [];
70
+ const files = session.filesModified ?? [];
71
+ // Infer pattern from hour + activity level
72
+ const activityScore = files.length + decisions.length;
73
+ let pattern;
74
+ if (activityScore >= 6) {
75
+ pattern = 'deep-focus';
76
+ }
77
+ else if (activityScore >= 3) {
78
+ pattern = 'steady';
79
+ }
80
+ else if (activityScore >= 1) {
81
+ pattern = 'exploratory';
82
+ }
83
+ else {
84
+ pattern = 'burst';
85
+ }
86
+ signals.push({
87
+ id: makeSignalId(),
88
+ timestamp: ts,
89
+ sessionId: sid,
90
+ confidence: DEFAULT_CONFIDENCE,
91
+ signalType: SignalType.WorkRhythm,
92
+ source: 'session_capture',
93
+ data: {
94
+ pattern,
95
+ durationMinutes: 0, // Not available from capture data
96
+ taskCount: activityScore,
97
+ },
98
+ });
99
+ }
100
+ // ─── tool_preference ────────────────────────────────────────────
101
+ if (session.toolsUsed && Array.isArray(session.toolsUsed)) {
102
+ const freq = new Map();
103
+ for (const tool of session.toolsUsed) {
104
+ freq.set(tool, (freq.get(tool) ?? 0) + 1);
105
+ }
106
+ for (const [toolName, count] of freq) {
107
+ signals.push({
108
+ id: makeSignalId(),
109
+ timestamp: ts,
110
+ sessionId: sid,
111
+ confidence: DEFAULT_CONFIDENCE,
112
+ signalType: SignalType.ToolPreference,
113
+ source: 'session_capture',
114
+ data: {
115
+ toolName,
116
+ action: 'used',
117
+ frequency: count,
118
+ },
119
+ });
120
+ }
121
+ }
122
+ // ─── session_depth ──────────────────────────────────────────────
123
+ {
124
+ const files = session.filesModified ?? [];
125
+ const decisions = session.decisions ?? [];
126
+ const total = files.length + decisions.length;
127
+ let depth;
128
+ if (total >= 8) {
129
+ depth = 'marathon';
130
+ }
131
+ else if (total >= 5) {
132
+ depth = 'deep';
133
+ }
134
+ else if (total >= 2) {
135
+ depth = 'moderate';
136
+ }
137
+ else {
138
+ depth = 'shallow';
139
+ }
140
+ signals.push({
141
+ id: makeSignalId(),
142
+ timestamp: ts,
143
+ sessionId: sid,
144
+ confidence: DEFAULT_CONFIDENCE,
145
+ signalType: SignalType.SessionDepth,
146
+ source: 'session_capture',
147
+ data: {
148
+ depth,
149
+ messageCount: 0, // Not available from capture data
150
+ durationMinutes: 0,
151
+ },
152
+ });
153
+ }
154
+ return signals;
155
+ }
156
+ // =============================================================================
157
+ // extractFromRadar
158
+ // =============================================================================
159
+ /**
160
+ * Extract operator signals from a radar candidate.
161
+ *
162
+ * - correction signal_type → correction OperatorSignal
163
+ * - repeated_question → frustration OperatorSignal
164
+ * - Other signal types are not personality-relevant → empty array.
165
+ */
166
+ export function extractFromRadar(candidate) {
167
+ const signals = [];
168
+ const ts = nowISO();
169
+ const sid = `radar-${candidate.id}`;
170
+ if (candidate.signalType === 'correction') {
171
+ signals.push({
172
+ id: makeSignalId(),
173
+ timestamp: ts,
174
+ sessionId: sid,
175
+ confidence: candidate.confidence,
176
+ signalType: SignalType.Correction,
177
+ source: 'learning_radar',
178
+ data: {
179
+ original: candidate.description,
180
+ corrected: candidate.title,
181
+ category: 'approach',
182
+ },
183
+ });
184
+ }
185
+ else if (candidate.signalType === 'repeated_question') {
186
+ signals.push({
187
+ id: makeSignalId(),
188
+ timestamp: ts,
189
+ sessionId: sid,
190
+ confidence: candidate.confidence,
191
+ signalType: SignalType.Frustration,
192
+ source: 'learning_radar',
193
+ data: {
194
+ level: candidate.confidence >= 0.7 ? 'high' : candidate.confidence >= 0.5 ? 'moderate' : 'mild',
195
+ trigger: candidate.sourceQuery ?? candidate.title,
196
+ context: candidate.context ?? candidate.description,
197
+ },
198
+ });
199
+ }
200
+ return signals;
201
+ }
202
+ // =============================================================================
203
+ // extractFromBrainStrengths
204
+ // =============================================================================
205
+ /**
206
+ * Extract domain expertise signals from brain pattern strengths.
207
+ *
208
+ * Filters strengths with score > 0.6 and maps them to domain_expertise signals.
209
+ */
210
+ export function extractFromBrainStrengths(strengths) {
211
+ const ts = nowISO();
212
+ return strengths
213
+ .filter((s) => s.strength > 0.6)
214
+ .map((s) => ({
215
+ id: makeSignalId(),
216
+ timestamp: ts,
217
+ sessionId: 'brain-strengths',
218
+ confidence: s.strength,
219
+ signalType: SignalType.DomainExpertise,
220
+ source: 'brain_intelligence',
221
+ data: {
222
+ domain: s.domain,
223
+ level: (s.strength >= 0.8 ? 'expert' : 'advanced'),
224
+ evidence: `Pattern "${s.pattern}" in ${s.domain} with strength ${s.strength}`,
225
+ },
226
+ }));
227
+ }
228
+ //# sourceMappingURL=operator-signals.js.map