fivocell 1.0.0 → 1.0.2

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 (568) hide show
  1. package/LICENSE +202 -98
  2. package/README.md +418 -180
  3. package/dist/cli.js +698 -80
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/__tests__/ab-test-framework.test.d.ts +2 -0
  6. package/dist/core/__tests__/ab-test-framework.test.d.ts.map +1 -0
  7. package/dist/core/__tests__/ab-test-framework.test.js +43 -0
  8. package/dist/core/__tests__/ab-test-framework.test.js.map +1 -0
  9. package/dist/core/__tests__/ai-memory.test.d.ts +2 -0
  10. package/dist/core/__tests__/ai-memory.test.d.ts.map +1 -0
  11. package/dist/core/__tests__/ai-memory.test.js +143 -0
  12. package/dist/core/__tests__/ai-memory.test.js.map +1 -0
  13. package/dist/core/__tests__/ast-extractor.test.d.ts +2 -0
  14. package/dist/core/__tests__/ast-extractor.test.d.ts.map +1 -0
  15. package/dist/core/__tests__/ast-extractor.test.js +30 -0
  16. package/dist/core/__tests__/ast-extractor.test.js.map +1 -0
  17. package/dist/core/__tests__/build-failure-predictor.test.d.ts +2 -0
  18. package/dist/core/__tests__/build-failure-predictor.test.d.ts.map +1 -0
  19. package/dist/core/__tests__/build-failure-predictor.test.js +76 -0
  20. package/dist/core/__tests__/build-failure-predictor.test.js.map +1 -0
  21. package/dist/core/__tests__/chapter3-verify.test.d.ts +2 -0
  22. package/dist/core/__tests__/chapter3-verify.test.d.ts.map +1 -0
  23. package/dist/core/__tests__/chapter3-verify.test.js +315 -0
  24. package/dist/core/__tests__/chapter3-verify.test.js.map +1 -0
  25. package/dist/core/__tests__/chapter4-hostile.test.d.ts +11 -0
  26. package/dist/core/__tests__/chapter4-hostile.test.d.ts.map +1 -0
  27. package/dist/core/__tests__/chapter4-hostile.test.js +269 -0
  28. package/dist/core/__tests__/chapter4-hostile.test.js.map +1 -0
  29. package/dist/core/__tests__/chapter4-verify.test.d.ts +2 -0
  30. package/dist/core/__tests__/chapter4-verify.test.d.ts.map +1 -0
  31. package/dist/core/__tests__/chapter4-verify.test.js +349 -0
  32. package/dist/core/__tests__/chapter4-verify.test.js.map +1 -0
  33. package/dist/core/__tests__/chapter8-hostile.test.d.ts +2 -0
  34. package/dist/core/__tests__/chapter8-hostile.test.d.ts.map +1 -0
  35. package/dist/core/__tests__/chapter8-hostile.test.js +445 -0
  36. package/dist/core/__tests__/chapter8-hostile.test.js.map +1 -0
  37. package/dist/core/__tests__/chapter9-hostile.test.d.ts +2 -0
  38. package/dist/core/__tests__/chapter9-hostile.test.d.ts.map +1 -0
  39. package/dist/core/__tests__/chapter9-hostile.test.js +783 -0
  40. package/dist/core/__tests__/chapter9-hostile.test.js.map +1 -0
  41. package/dist/core/__tests__/circular-dependency-detector.test.d.ts +2 -0
  42. package/dist/core/__tests__/circular-dependency-detector.test.d.ts.map +1 -0
  43. package/dist/core/__tests__/circular-dependency-detector.test.js +55 -0
  44. package/dist/core/__tests__/circular-dependency-detector.test.js.map +1 -0
  45. package/dist/core/__tests__/community-full.test.d.ts +2 -0
  46. package/dist/core/__tests__/community-full.test.d.ts.map +1 -0
  47. package/dist/core/__tests__/community-full.test.js +70 -0
  48. package/dist/core/__tests__/community-full.test.js.map +1 -0
  49. package/dist/core/__tests__/community-live.test.d.ts +2 -0
  50. package/dist/core/__tests__/community-live.test.d.ts.map +1 -0
  51. package/dist/core/__tests__/community-live.test.js +67 -0
  52. package/dist/core/__tests__/community-live.test.js.map +1 -0
  53. package/dist/core/__tests__/complexity-analyzer.test.d.ts +2 -0
  54. package/dist/core/__tests__/complexity-analyzer.test.d.ts.map +1 -0
  55. package/dist/core/__tests__/complexity-analyzer.test.js +54 -0
  56. package/dist/core/__tests__/complexity-analyzer.test.js.map +1 -0
  57. package/dist/core/__tests__/config-attribution.test.d.ts +2 -0
  58. package/dist/core/__tests__/config-attribution.test.d.ts.map +1 -0
  59. package/dist/core/__tests__/config-attribution.test.js +45 -0
  60. package/dist/core/__tests__/config-attribution.test.js.map +1 -0
  61. package/dist/core/__tests__/conflict-detector.test.d.ts +2 -0
  62. package/dist/core/__tests__/conflict-detector.test.d.ts.map +1 -0
  63. package/dist/core/__tests__/conflict-detector.test.js +120 -0
  64. package/dist/core/__tests__/conflict-detector.test.js.map +1 -0
  65. package/dist/core/__tests__/context-restore.test.d.ts +2 -0
  66. package/dist/core/__tests__/context-restore.test.d.ts.map +1 -0
  67. package/dist/core/__tests__/context-restore.test.js +75 -0
  68. package/dist/core/__tests__/context-restore.test.js.map +1 -0
  69. package/dist/core/__tests__/convention-detector.test.d.ts +2 -0
  70. package/dist/core/__tests__/convention-detector.test.d.ts.map +1 -0
  71. package/dist/core/__tests__/convention-detector.test.js +97 -0
  72. package/dist/core/__tests__/convention-detector.test.js.map +1 -0
  73. package/dist/core/__tests__/cost-optimizer.test.d.ts +1 -0
  74. package/dist/core/__tests__/cost-optimizer.test.d.ts.map +1 -0
  75. package/dist/core/__tests__/cost-optimizer.test.js +92 -0
  76. package/dist/core/__tests__/cost-optimizer.test.js.map +1 -0
  77. package/dist/core/__tests__/cross-domain-projections.test.d.ts +2 -0
  78. package/dist/core/__tests__/cross-domain-projections.test.d.ts.map +1 -0
  79. package/dist/core/__tests__/cross-domain-projections.test.js +36 -0
  80. package/dist/core/__tests__/cross-domain-projections.test.js.map +1 -0
  81. package/dist/core/__tests__/cross-project-sync.test.d.ts +2 -0
  82. package/dist/core/__tests__/cross-project-sync.test.d.ts.map +1 -0
  83. package/dist/core/__tests__/cross-project-sync.test.js +67 -0
  84. package/dist/core/__tests__/cross-project-sync.test.js.map +1 -0
  85. package/dist/core/__tests__/dead-code-detector.test.d.ts +2 -0
  86. package/dist/core/__tests__/dead-code-detector.test.d.ts.map +1 -0
  87. package/dist/core/__tests__/dead-code-detector.test.js +41 -0
  88. package/dist/core/__tests__/dead-code-detector.test.js.map +1 -0
  89. package/dist/core/__tests__/dependency-health-checker.test.d.ts +2 -0
  90. package/dist/core/__tests__/dependency-health-checker.test.d.ts.map +1 -0
  91. package/dist/core/__tests__/dependency-health-checker.test.js +50 -0
  92. package/dist/core/__tests__/dependency-health-checker.test.js.map +1 -0
  93. package/dist/core/__tests__/duplication-detector.test.d.ts +2 -0
  94. package/dist/core/__tests__/duplication-detector.test.d.ts.map +1 -0
  95. package/dist/core/__tests__/duplication-detector.test.js +46 -0
  96. package/dist/core/__tests__/duplication-detector.test.js.map +1 -0
  97. package/dist/core/__tests__/error-predictor.test.d.ts +2 -0
  98. package/dist/core/__tests__/error-predictor.test.d.ts.map +1 -0
  99. package/dist/core/__tests__/error-predictor.test.js +65 -0
  100. package/dist/core/__tests__/error-predictor.test.js.map +1 -0
  101. package/dist/core/__tests__/explainability.test.d.ts +2 -0
  102. package/dist/core/__tests__/explainability.test.d.ts.map +1 -0
  103. package/dist/core/__tests__/explainability.test.js +112 -0
  104. package/dist/core/__tests__/explainability.test.js.map +1 -0
  105. package/dist/core/__tests__/failure-memory.test.d.ts +2 -0
  106. package/dist/core/__tests__/failure-memory.test.d.ts.map +1 -0
  107. package/dist/core/__tests__/failure-memory.test.js +124 -0
  108. package/dist/core/__tests__/failure-memory.test.js.map +1 -0
  109. package/dist/core/__tests__/git-branch-pregenerator.test.d.ts +2 -0
  110. package/dist/core/__tests__/git-branch-pregenerator.test.d.ts.map +1 -0
  111. package/dist/core/__tests__/git-branch-pregenerator.test.js +44 -0
  112. package/dist/core/__tests__/git-branch-pregenerator.test.js.map +1 -0
  113. package/dist/core/__tests__/handoff-detector.test.d.ts +2 -0
  114. package/dist/core/__tests__/handoff-detector.test.d.ts.map +1 -0
  115. package/dist/core/__tests__/handoff-detector.test.js +71 -0
  116. package/dist/core/__tests__/handoff-detector.test.js.map +1 -0
  117. package/dist/core/__tests__/interruption-recovery.test.d.ts +2 -0
  118. package/dist/core/__tests__/interruption-recovery.test.d.ts.map +1 -0
  119. package/dist/core/__tests__/interruption-recovery.test.js +66 -0
  120. package/dist/core/__tests__/interruption-recovery.test.js.map +1 -0
  121. package/dist/core/__tests__/knowledge-graph.test.d.ts +1 -0
  122. package/dist/core/__tests__/knowledge-graph.test.d.ts.map +1 -0
  123. package/dist/core/__tests__/knowledge-graph.test.js +124 -0
  124. package/dist/core/__tests__/knowledge-graph.test.js.map +1 -0
  125. package/dist/core/__tests__/knowledge-silo-detector.test.d.ts +2 -0
  126. package/dist/core/__tests__/knowledge-silo-detector.test.d.ts.map +1 -0
  127. package/dist/core/__tests__/knowledge-silo-detector.test.js +77 -0
  128. package/dist/core/__tests__/knowledge-silo-detector.test.js.map +1 -0
  129. package/dist/core/__tests__/language-switch-assistant.test.d.ts +2 -0
  130. package/dist/core/__tests__/language-switch-assistant.test.d.ts.map +1 -0
  131. package/dist/core/__tests__/language-switch-assistant.test.js +34 -0
  132. package/dist/core/__tests__/language-switch-assistant.test.js.map +1 -0
  133. package/dist/core/__tests__/marketplace.test.d.ts +2 -0
  134. package/dist/core/__tests__/marketplace.test.d.ts.map +1 -0
  135. package/dist/core/__tests__/marketplace.test.js +96 -0
  136. package/dist/core/__tests__/marketplace.test.js.map +1 -0
  137. package/dist/core/__tests__/merge-conflict-predictor.test.d.ts +2 -0
  138. package/dist/core/__tests__/merge-conflict-predictor.test.d.ts.map +1 -0
  139. package/dist/core/__tests__/merge-conflict-predictor.test.js +36 -0
  140. package/dist/core/__tests__/merge-conflict-predictor.test.js.map +1 -0
  141. package/dist/core/__tests__/next-action-predictor.test.d.ts +2 -0
  142. package/dist/core/__tests__/next-action-predictor.test.d.ts.map +1 -0
  143. package/dist/core/__tests__/next-action-predictor.test.js +57 -0
  144. package/dist/core/__tests__/next-action-predictor.test.js.map +1 -0
  145. package/dist/core/__tests__/offline-queue.test.d.ts +2 -0
  146. package/dist/core/__tests__/offline-queue.test.d.ts.map +1 -0
  147. package/dist/core/__tests__/offline-queue.test.js +84 -0
  148. package/dist/core/__tests__/offline-queue.test.js.map +1 -0
  149. package/dist/core/__tests__/organization-memory.test.d.ts +2 -0
  150. package/dist/core/__tests__/organization-memory.test.d.ts.map +1 -0
  151. package/dist/core/__tests__/organization-memory.test.js +89 -0
  152. package/dist/core/__tests__/organization-memory.test.js.map +1 -0
  153. package/dist/core/__tests__/pattern-utils.test.d.ts +2 -0
  154. package/dist/core/__tests__/pattern-utils.test.d.ts.map +1 -0
  155. package/dist/core/__tests__/pattern-utils.test.js +52 -0
  156. package/dist/core/__tests__/pattern-utils.test.js.map +1 -0
  157. package/dist/core/__tests__/performance-predictor.test.d.ts +2 -0
  158. package/dist/core/__tests__/performance-predictor.test.d.ts.map +1 -0
  159. package/dist/core/__tests__/performance-predictor.test.js +60 -0
  160. package/dist/core/__tests__/performance-predictor.test.js.map +1 -0
  161. package/dist/core/__tests__/playbook-generator.test.d.ts +2 -0
  162. package/dist/core/__tests__/playbook-generator.test.d.ts.map +1 -0
  163. package/dist/core/__tests__/playbook-generator.test.js +94 -0
  164. package/dist/core/__tests__/playbook-generator.test.js.map +1 -0
  165. package/dist/core/__tests__/pr-review-assistant.test.d.ts +2 -0
  166. package/dist/core/__tests__/pr-review-assistant.test.d.ts.map +1 -0
  167. package/dist/core/__tests__/pr-review-assistant.test.js +35 -0
  168. package/dist/core/__tests__/pr-review-assistant.test.js.map +1 -0
  169. package/dist/core/__tests__/privacy-manager.test.d.ts +2 -0
  170. package/dist/core/__tests__/privacy-manager.test.d.ts.map +1 -0
  171. package/dist/core/__tests__/privacy-manager.test.js +97 -0
  172. package/dist/core/__tests__/privacy-manager.test.js.map +1 -0
  173. package/dist/core/__tests__/project-dna.test.d.ts +2 -0
  174. package/dist/core/__tests__/project-dna.test.d.ts.map +1 -0
  175. package/dist/core/__tests__/project-dna.test.js +135 -0
  176. package/dist/core/__tests__/project-dna.test.js.map +1 -0
  177. package/dist/core/__tests__/regex-extractor.test.d.ts +2 -0
  178. package/dist/core/__tests__/regex-extractor.test.d.ts.map +1 -0
  179. package/dist/core/__tests__/regex-extractor.test.js +49 -0
  180. package/dist/core/__tests__/regex-extractor.test.js.map +1 -0
  181. package/dist/core/__tests__/reputation.test.d.ts +2 -0
  182. package/dist/core/__tests__/reputation.test.d.ts.map +1 -0
  183. package/dist/core/__tests__/reputation.test.js +100 -0
  184. package/dist/core/__tests__/reputation.test.js.map +1 -0
  185. package/dist/core/__tests__/security-predictor.test.d.ts +2 -0
  186. package/dist/core/__tests__/security-predictor.test.d.ts.map +1 -0
  187. package/dist/core/__tests__/security-predictor.test.js +60 -0
  188. package/dist/core/__tests__/security-predictor.test.js.map +1 -0
  189. package/dist/core/__tests__/signal-capture.test.d.ts +2 -0
  190. package/dist/core/__tests__/signal-capture.test.d.ts.map +1 -0
  191. package/dist/core/__tests__/signal-capture.test.js +98 -0
  192. package/dist/core/__tests__/signal-capture.test.js.map +1 -0
  193. package/dist/core/__tests__/solution-index.test.d.ts +2 -0
  194. package/dist/core/__tests__/solution-index.test.d.ts.map +1 -0
  195. package/dist/core/__tests__/solution-index.test.js +78 -0
  196. package/dist/core/__tests__/solution-index.test.js.map +1 -0
  197. package/dist/core/__tests__/standup-generator.test.d.ts +2 -0
  198. package/dist/core/__tests__/standup-generator.test.d.ts.map +1 -0
  199. package/dist/core/__tests__/standup-generator.test.js +46 -0
  200. package/dist/core/__tests__/standup-generator.test.js.map +1 -0
  201. package/dist/core/__tests__/team-composer.test.d.ts +2 -0
  202. package/dist/core/__tests__/team-composer.test.d.ts.map +1 -0
  203. package/dist/core/__tests__/team-composer.test.js +113 -0
  204. package/dist/core/__tests__/team-composer.test.js.map +1 -0
  205. package/dist/core/__tests__/test-anticipator.test.d.ts +2 -0
  206. package/dist/core/__tests__/test-anticipator.test.d.ts.map +1 -0
  207. package/dist/core/__tests__/test-anticipator.test.js +41 -0
  208. package/dist/core/__tests__/test-anticipator.test.js.map +1 -0
  209. package/dist/core/__tests__/time-saved.test.d.ts +1 -0
  210. package/dist/core/__tests__/time-saved.test.d.ts.map +1 -0
  211. package/dist/core/__tests__/time-saved.test.js +93 -0
  212. package/dist/core/__tests__/time-saved.test.js.map +1 -0
  213. package/dist/core/__tests__/validation-run.test.d.ts +7 -0
  214. package/dist/core/__tests__/validation-run.test.d.ts.map +1 -0
  215. package/dist/core/__tests__/validation-run.test.js +510 -0
  216. package/dist/core/__tests__/validation-run.test.js.map +1 -0
  217. package/dist/core/__tests__/workflow-outcome-graph.test.d.ts +2 -0
  218. package/dist/core/__tests__/workflow-outcome-graph.test.d.ts.map +1 -0
  219. package/dist/core/__tests__/workflow-outcome-graph.test.js +89 -0
  220. package/dist/core/__tests__/workflow-outcome-graph.test.js.map +1 -0
  221. package/dist/core/ai-memory.d.ts +84 -0
  222. package/dist/core/ai-memory.d.ts.map +1 -0
  223. package/dist/core/ai-memory.js +238 -0
  224. package/dist/core/ai-memory.js.map +1 -0
  225. package/dist/core/architecture-engine.d.ts +104 -0
  226. package/dist/core/architecture-engine.d.ts.map +1 -0
  227. package/dist/core/architecture-engine.js +216 -0
  228. package/dist/core/architecture-engine.js.map +1 -0
  229. package/dist/core/ast-differ.d.ts +15 -0
  230. package/dist/core/ast-differ.d.ts.map +1 -0
  231. package/dist/core/ast-differ.js +528 -0
  232. package/dist/core/ast-differ.js.map +1 -0
  233. package/dist/core/ast-extractor.d.ts +1 -1
  234. package/dist/core/ast-extractor.d.ts.map +1 -1
  235. package/dist/core/ast-extractor.js +7 -5
  236. package/dist/core/ast-extractor.js.map +1 -1
  237. package/dist/core/backend-engine.d.ts +40 -0
  238. package/dist/core/backend-engine.d.ts.map +1 -0
  239. package/dist/core/backend-engine.js +131 -0
  240. package/dist/core/backend-engine.js.map +1 -0
  241. package/dist/core/blind-spot-engine.d.ts +29 -0
  242. package/dist/core/blind-spot-engine.d.ts.map +1 -0
  243. package/dist/core/blind-spot-engine.js +579 -0
  244. package/dist/core/blind-spot-engine.js.map +1 -0
  245. package/dist/core/build-failure-predictor.d.ts +4 -0
  246. package/dist/core/build-failure-predictor.d.ts.map +1 -1
  247. package/dist/core/build-failure-predictor.js +111 -58
  248. package/dist/core/build-failure-predictor.js.map +1 -1
  249. package/dist/core/cell-store.d.ts +72 -0
  250. package/dist/core/cell-store.d.ts.map +1 -0
  251. package/dist/core/cell-store.js +171 -0
  252. package/dist/core/cell-store.js.map +1 -0
  253. package/dist/core/community-advanced-engine.d.ts +30 -0
  254. package/dist/core/community-advanced-engine.d.ts.map +1 -0
  255. package/dist/core/community-advanced-engine.js +103 -0
  256. package/dist/core/community-advanced-engine.js.map +1 -0
  257. package/dist/core/community-engine.d.ts +62 -0
  258. package/dist/core/community-engine.d.ts.map +1 -0
  259. package/dist/core/community-engine.js +194 -0
  260. package/dist/core/community-engine.js.map +1 -0
  261. package/dist/core/community-full.d.ts +2 -3
  262. package/dist/core/community-full.d.ts.map +1 -1
  263. package/dist/core/community-full.js +2 -5
  264. package/dist/core/community-full.js.map +1 -1
  265. package/dist/core/community-intelligence.d.ts +169 -0
  266. package/dist/core/community-intelligence.d.ts.map +1 -0
  267. package/dist/core/community-intelligence.js +527 -0
  268. package/dist/core/community-intelligence.js.map +1 -0
  269. package/dist/core/community-live.d.ts +1 -0
  270. package/dist/core/community-live.d.ts.map +1 -1
  271. package/dist/core/community-live.js +9 -6
  272. package/dist/core/community-live.js.map +1 -1
  273. package/dist/core/community-prior.d.ts +1 -0
  274. package/dist/core/community-prior.d.ts.map +1 -1
  275. package/dist/core/community-prior.js +18 -10
  276. package/dist/core/community-prior.js.map +1 -1
  277. package/dist/core/confidence-engine.d.ts +2 -3
  278. package/dist/core/confidence-engine.d.ts.map +1 -1
  279. package/dist/core/confidence-engine.js +29 -32
  280. package/dist/core/confidence-engine.js.map +1 -1
  281. package/dist/core/conflict-detector.js +1 -1
  282. package/dist/core/conflict-detector.js.map +1 -1
  283. package/dist/core/convention-detector.d.ts +37 -0
  284. package/dist/core/convention-detector.d.ts.map +1 -0
  285. package/dist/core/convention-detector.js +189 -0
  286. package/dist/core/convention-detector.js.map +1 -0
  287. package/dist/core/cost-optimizer.d.ts +78 -0
  288. package/dist/core/cost-optimizer.d.ts.map +1 -0
  289. package/dist/core/cost-optimizer.js +257 -0
  290. package/dist/core/cost-optimizer.js.map +1 -0
  291. package/dist/core/cross-domain-projections.js +2 -2
  292. package/dist/core/cross-layer-intelligence.d.ts +375 -0
  293. package/dist/core/cross-layer-intelligence.d.ts.map +1 -0
  294. package/dist/core/cross-layer-intelligence.js +690 -0
  295. package/dist/core/cross-layer-intelligence.js.map +1 -0
  296. package/dist/core/developer-profile.d.ts +6 -0
  297. package/dist/core/developer-profile.d.ts.map +1 -0
  298. package/dist/core/developer-profile.js +78 -0
  299. package/dist/core/developer-profile.js.map +1 -0
  300. package/dist/core/error-predictor.d.ts +5 -2
  301. package/dist/core/error-predictor.d.ts.map +1 -1
  302. package/dist/core/error-predictor.js +124 -40
  303. package/dist/core/error-predictor.js.map +1 -1
  304. package/dist/core/explainability.d.ts +33 -0
  305. package/dist/core/explainability.d.ts.map +1 -0
  306. package/dist/core/explainability.js +131 -0
  307. package/dist/core/explainability.js.map +1 -0
  308. package/dist/core/extraction-cascade.d.ts +19 -5
  309. package/dist/core/extraction-cascade.d.ts.map +1 -1
  310. package/dist/core/extraction-cascade.js +86 -15
  311. package/dist/core/extraction-cascade.js.map +1 -1
  312. package/dist/core/failure-memory.d.ts +38 -0
  313. package/dist/core/failure-memory.d.ts.map +1 -0
  314. package/dist/core/failure-memory.js +113 -0
  315. package/dist/core/failure-memory.js.map +1 -0
  316. package/dist/core/frontend-engine.d.ts +40 -0
  317. package/dist/core/frontend-engine.d.ts.map +1 -0
  318. package/dist/core/frontend-engine.js +129 -0
  319. package/dist/core/frontend-engine.js.map +1 -0
  320. package/dist/core/go-extractor.d.ts +5 -0
  321. package/dist/core/go-extractor.d.ts.map +1 -0
  322. package/dist/core/go-extractor.js +68 -0
  323. package/dist/core/go-extractor.js.map +1 -0
  324. package/dist/core/identity-resolver.d.ts.map +1 -1
  325. package/dist/core/identity-resolver.js +16 -31
  326. package/dist/core/identity-resolver.js.map +1 -1
  327. package/dist/core/knowledge-graph-engine.d.ts +62 -0
  328. package/dist/core/knowledge-graph-engine.d.ts.map +1 -0
  329. package/dist/core/knowledge-graph-engine.js +176 -0
  330. package/dist/core/knowledge-graph-engine.js.map +1 -0
  331. package/dist/core/knowledge-graph.d.ts +229 -0
  332. package/dist/core/knowledge-graph.d.ts.map +1 -0
  333. package/dist/core/knowledge-graph.js +713 -0
  334. package/dist/core/knowledge-graph.js.map +1 -0
  335. package/dist/core/language-switch-assistant.d.ts.map +1 -1
  336. package/dist/core/language-switch-assistant.js +4 -1
  337. package/dist/core/language-switch-assistant.js.map +1 -1
  338. package/dist/core/learning-layer.d.ts +11 -0
  339. package/dist/core/learning-layer.d.ts.map +1 -0
  340. package/dist/core/learning-layer.js +25 -0
  341. package/dist/core/learning-layer.js.map +1 -0
  342. package/dist/core/marketplace.d.ts +43 -0
  343. package/dist/core/marketplace.d.ts.map +1 -0
  344. package/dist/core/marketplace.js +133 -0
  345. package/dist/core/marketplace.js.map +1 -0
  346. package/dist/core/memory-store.d.ts +59 -0
  347. package/dist/core/memory-store.d.ts.map +1 -0
  348. package/dist/core/memory-store.js +151 -0
  349. package/dist/core/memory-store.js.map +1 -0
  350. package/dist/core/naming-engine.d.ts +43 -0
  351. package/dist/core/naming-engine.d.ts.map +1 -0
  352. package/dist/core/naming-engine.js +120 -0
  353. package/dist/core/naming-engine.js.map +1 -0
  354. package/dist/core/org-intelligence.d.ts +151 -0
  355. package/dist/core/org-intelligence.d.ts.map +1 -0
  356. package/dist/core/org-intelligence.js +490 -0
  357. package/dist/core/org-intelligence.js.map +1 -0
  358. package/dist/core/organization-memory.d.ts +34 -0
  359. package/dist/core/organization-memory.d.ts.map +1 -0
  360. package/dist/core/organization-memory.js +148 -0
  361. package/dist/core/organization-memory.js.map +1 -0
  362. package/dist/core/outcome-engine.d.ts +21 -0
  363. package/dist/core/outcome-engine.d.ts.map +1 -0
  364. package/dist/core/outcome-engine.js +220 -0
  365. package/dist/core/outcome-engine.js.map +1 -0
  366. package/dist/core/outcome-recorder.d.ts +34 -0
  367. package/dist/core/outcome-recorder.d.ts.map +1 -0
  368. package/dist/core/outcome-recorder.js +109 -0
  369. package/dist/core/outcome-recorder.js.map +1 -0
  370. package/dist/core/outcome-store.d.ts +21 -0
  371. package/dist/core/outcome-store.d.ts.map +1 -0
  372. package/dist/core/outcome-store.js +120 -0
  373. package/dist/core/outcome-store.js.map +1 -0
  374. package/dist/core/outcome-types.d.ts +64 -0
  375. package/dist/core/outcome-types.d.ts.map +1 -0
  376. package/dist/core/outcome-types.js +20 -0
  377. package/dist/core/outcome-types.js.map +1 -0
  378. package/dist/core/pattern-classifier.d.ts +11 -0
  379. package/dist/core/pattern-classifier.d.ts.map +1 -0
  380. package/dist/core/pattern-classifier.js +82 -0
  381. package/dist/core/pattern-classifier.js.map +1 -0
  382. package/dist/core/pattern-lifecycle.d.ts +8 -0
  383. package/dist/core/pattern-lifecycle.d.ts.map +1 -0
  384. package/dist/core/pattern-lifecycle.js +25 -0
  385. package/dist/core/pattern-lifecycle.js.map +1 -0
  386. package/dist/core/pattern-quality.d.ts +6 -0
  387. package/dist/core/pattern-quality.d.ts.map +1 -0
  388. package/dist/core/pattern-quality.js +45 -0
  389. package/dist/core/pattern-quality.js.map +1 -0
  390. package/dist/core/pattern-ranking.d.ts +8 -0
  391. package/dist/core/pattern-ranking.d.ts.map +1 -0
  392. package/dist/core/pattern-ranking.js +40 -0
  393. package/dist/core/pattern-ranking.js.map +1 -0
  394. package/dist/core/pattern-relationships.d.ts +16 -0
  395. package/dist/core/pattern-relationships.d.ts.map +1 -0
  396. package/dist/core/pattern-relationships.js +66 -0
  397. package/dist/core/pattern-relationships.js.map +1 -0
  398. package/dist/core/pattern-search.d.ts +25 -0
  399. package/dist/core/pattern-search.d.ts.map +1 -0
  400. package/dist/core/pattern-search.js +82 -0
  401. package/dist/core/pattern-search.js.map +1 -0
  402. package/dist/core/pattern-store.d.ts +18 -3
  403. package/dist/core/pattern-store.d.ts.map +1 -1
  404. package/dist/core/pattern-store.js +155 -54
  405. package/dist/core/pattern-store.js.map +1 -1
  406. package/dist/core/{enterprise-features.d.ts → pattern-utils.d.ts} +2 -4
  407. package/dist/core/pattern-utils.d.ts.map +1 -0
  408. package/dist/core/{enterprise-features.js → pattern-utils.js} +4 -24
  409. package/dist/core/pattern-utils.js.map +1 -0
  410. package/dist/core/pattern-validator.d.ts +14 -0
  411. package/dist/core/pattern-validator.d.ts.map +1 -0
  412. package/dist/core/pattern-validator.js +47 -0
  413. package/dist/core/pattern-validator.js.map +1 -0
  414. package/dist/core/performance-predictor.d.ts +4 -0
  415. package/dist/core/performance-predictor.d.ts.map +1 -1
  416. package/dist/core/performance-predictor.js +143 -38
  417. package/dist/core/performance-predictor.js.map +1 -1
  418. package/dist/core/platt-calibration.d.ts.map +1 -1
  419. package/dist/core/platt-calibration.js +5 -3
  420. package/dist/core/platt-calibration.js.map +1 -1
  421. package/dist/core/playbook-generator.d.ts +21 -0
  422. package/dist/core/playbook-generator.d.ts.map +1 -0
  423. package/dist/core/playbook-generator.js +161 -0
  424. package/dist/core/playbook-generator.js.map +1 -0
  425. package/dist/core/privacy-manager.d.ts +43 -0
  426. package/dist/core/privacy-manager.d.ts.map +1 -0
  427. package/dist/core/privacy-manager.js +131 -0
  428. package/dist/core/privacy-manager.js.map +1 -0
  429. package/dist/core/productivity-engine.d.ts +57 -0
  430. package/dist/core/productivity-engine.d.ts.map +1 -0
  431. package/dist/core/productivity-engine.js +138 -0
  432. package/dist/core/productivity-engine.js.map +1 -0
  433. package/dist/core/project-dna-types.d.ts +150 -0
  434. package/dist/core/project-dna-types.d.ts.map +1 -0
  435. package/dist/core/project-dna-types.js +3 -0
  436. package/dist/core/project-dna-types.js.map +1 -0
  437. package/dist/core/project-dna.d.ts +122 -0
  438. package/dist/core/project-dna.d.ts.map +1 -0
  439. package/dist/core/project-dna.js +922 -0
  440. package/dist/core/project-dna.js.map +1 -0
  441. package/dist/core/python-extractor.d.ts +5 -0
  442. package/dist/core/python-extractor.d.ts.map +1 -0
  443. package/dist/core/python-extractor.js +68 -0
  444. package/dist/core/python-extractor.js.map +1 -0
  445. package/dist/core/realtime-guardian.d.ts.map +1 -1
  446. package/dist/core/realtime-guardian.js +1 -3
  447. package/dist/core/realtime-guardian.js.map +1 -1
  448. package/dist/core/recommendation-engine.d.ts +9 -0
  449. package/dist/core/recommendation-engine.d.ts.map +1 -0
  450. package/dist/core/recommendation-engine.js +152 -0
  451. package/dist/core/recommendation-engine.js.map +1 -0
  452. package/dist/core/recommendation-store.d.ts +21 -0
  453. package/dist/core/recommendation-store.d.ts.map +1 -0
  454. package/dist/core/recommendation-store.js +125 -0
  455. package/dist/core/recommendation-store.js.map +1 -0
  456. package/dist/core/recommendation-types.d.ts +54 -0
  457. package/dist/core/recommendation-types.d.ts.map +1 -0
  458. package/dist/core/recommendation-types.js +3 -0
  459. package/dist/core/recommendation-types.js.map +1 -0
  460. package/dist/core/regex-extractor.js +1 -1
  461. package/dist/core/regex-extractor.js.map +1 -1
  462. package/dist/core/reputation.d.ts +42 -0
  463. package/dist/core/reputation.d.ts.map +1 -0
  464. package/dist/core/reputation.js +173 -0
  465. package/dist/core/reputation.js.map +1 -0
  466. package/dist/core/scale-tester.d.ts +2 -2
  467. package/dist/core/scale-tester.d.ts.map +1 -1
  468. package/dist/core/scale-tester.js +12 -1
  469. package/dist/core/scale-tester.js.map +1 -1
  470. package/dist/core/search-engine.d.ts +37 -0
  471. package/dist/core/search-engine.d.ts.map +1 -0
  472. package/dist/core/search-engine.js +223 -0
  473. package/dist/core/search-engine.js.map +1 -0
  474. package/dist/core/security-predictor.d.ts +2 -1
  475. package/dist/core/security-predictor.d.ts.map +1 -1
  476. package/dist/core/security-predictor.js +80 -30
  477. package/dist/core/security-predictor.js.map +1 -1
  478. package/dist/core/session-recovery.js +8 -8
  479. package/dist/core/session-recovery.js.map +1 -1
  480. package/dist/core/similarity-engine.d.ts +8 -0
  481. package/dist/core/similarity-engine.d.ts.map +1 -0
  482. package/dist/core/similarity-engine.js +74 -0
  483. package/dist/core/similarity-engine.js.map +1 -0
  484. package/dist/core/structure-engine.d.ts +34 -0
  485. package/dist/core/structure-engine.d.ts.map +1 -0
  486. package/dist/core/structure-engine.js +114 -0
  487. package/dist/core/structure-engine.js.map +1 -0
  488. package/dist/core/syntax-engine.d.ts +101 -0
  489. package/dist/core/syntax-engine.d.ts.map +1 -0
  490. package/dist/core/syntax-engine.js +342 -0
  491. package/dist/core/syntax-engine.js.map +1 -0
  492. package/dist/core/team-advanced-engine.d.ts +19 -0
  493. package/dist/core/team-advanced-engine.d.ts.map +1 -0
  494. package/dist/core/team-advanced-engine.js +91 -0
  495. package/dist/core/team-advanced-engine.js.map +1 -0
  496. package/dist/core/team-engine.d.ts +59 -0
  497. package/dist/core/team-engine.d.ts.map +1 -0
  498. package/dist/core/team-engine.js +141 -0
  499. package/dist/core/team-engine.js.map +1 -0
  500. package/dist/core/time-saved.d.ts +51 -0
  501. package/dist/core/time-saved.d.ts.map +1 -0
  502. package/dist/core/time-saved.js +97 -0
  503. package/dist/core/time-saved.js.map +1 -0
  504. package/dist/core/workflow-outcome-graph.d.ts +46 -0
  505. package/dist/core/workflow-outcome-graph.d.ts.map +1 -0
  506. package/dist/core/workflow-outcome-graph.js +168 -0
  507. package/dist/core/workflow-outcome-graph.js.map +1 -0
  508. package/dist/core/workflow-tracker.d.ts +36 -0
  509. package/dist/core/workflow-tracker.d.ts.map +1 -0
  510. package/dist/core/workflow-tracker.js +99 -0
  511. package/dist/core/workflow-tracker.js.map +1 -0
  512. package/dist/core/ws-client.d.ts +24 -0
  513. package/dist/core/ws-client.d.ts.map +1 -0
  514. package/dist/core/ws-client.js +203 -0
  515. package/dist/core/ws-client.js.map +1 -0
  516. package/dist/daemon/lifecycle.d.ts.map +1 -1
  517. package/dist/daemon/lifecycle.js +9 -10
  518. package/dist/daemon/lifecycle.js.map +1 -1
  519. package/dist/daemon/server.d.ts +4 -2
  520. package/dist/daemon/server.d.ts.map +1 -1
  521. package/dist/daemon/server.js +886 -73
  522. package/dist/daemon/server.js.map +1 -1
  523. package/dist/daemon/watchdog.js +2 -1
  524. package/dist/daemon/watchdog.js.map +1 -1
  525. package/dist/index.d.ts +21 -2
  526. package/dist/index.d.ts.map +1 -1
  527. package/dist/index.js +37 -4
  528. package/dist/index.js.map +1 -1
  529. package/dist/store.d.ts +4 -0
  530. package/dist/store.d.ts.map +1 -0
  531. package/dist/store.js +47 -0
  532. package/dist/store.js.map +1 -0
  533. package/dist/types.d.ts +60 -1
  534. package/dist/types.d.ts.map +1 -1
  535. package/dist/types.js +13 -2
  536. package/dist/types.js.map +1 -1
  537. package/dist/validation/quick-run.d.ts +7 -0
  538. package/dist/validation/quick-run.d.ts.map +1 -0
  539. package/dist/validation/quick-run.js +404 -0
  540. package/dist/validation/quick-run.js.map +1 -0
  541. package/package.json +87 -53
  542. package/CHANGELOG.md +0 -32
  543. package/CONTRIBUTING.md +0 -60
  544. package/dist/core/cell-pro.d.ts +0 -28
  545. package/dist/core/cell-pro.d.ts.map +0 -1
  546. package/dist/core/cell-pro.js +0 -70
  547. package/dist/core/cell-pro.js.map +0 -1
  548. package/dist/core/enterprise-features.d.ts.map +0 -1
  549. package/dist/core/enterprise-features.js.map +0 -1
  550. package/dist/core/enterprise.d.ts +0 -27
  551. package/dist/core/enterprise.d.ts.map +0 -1
  552. package/dist/core/enterprise.js +0 -41
  553. package/dist/core/enterprise.js.map +0 -1
  554. package/extensions/jetbrains/plugin.json +0 -9
  555. package/extensions/shell/copilot-sync.js +0 -59
  556. package/extensions/shell/install.sh +0 -38
  557. package/extensions/shell/watcher.js +0 -113
  558. package/extensions/vscode/.vscodeignore +0 -5
  559. package/extensions/vscode/dist/daemon-client.js +0 -94
  560. package/extensions/vscode/dist/diff-tracker.js +0 -94
  561. package/extensions/vscode/dist/extension.js +0 -100
  562. package/extensions/vscode/dist/status-bar.js +0 -70
  563. package/extensions/vscode/package-lock.json +0 -40
  564. package/extensions/vscode/package.json +0 -27
  565. package/packages/mcp-server/dist/server.d.ts +0 -2
  566. package/packages/mcp-server/dist/server.js +0 -213
  567. package/packages/mcp-server/package-lock.json +0 -970
  568. package/packages/mcp-server/package.json +0 -19
@@ -45,6 +45,7 @@ const os = __importStar(require("os"));
45
45
  const fs = __importStar(require("fs"));
46
46
  const signal_capture_1 = require("../core/signal-capture");
47
47
  const pattern_store_1 = require("../core/pattern-store");
48
+ const learning_layer_1 = require("../core/learning-layer");
48
49
  const confidence_engine_1 = require("../core/confidence-engine");
49
50
  const extraction_cascade_1 = require("../core/extraction-cascade");
50
51
  const decay_engine_1 = require("../core/decay-engine");
@@ -80,13 +81,38 @@ const ab_test_framework_1 = require("../core/ab-test-framework");
80
81
  const platt_calibration_1 = require("../core/platt-calibration");
81
82
  const offline_queue_1 = require("../core/offline-queue");
82
83
  const cross_domain_projections_1 = require("../core/cross-domain-projections");
83
- const enterprise_features_1 = require("../core/enterprise-features");
84
+ const pattern_utils_1 = require("../core/pattern-utils");
84
85
  const cross_language_mappings_1 = require("../core/cross-language-mappings");
85
86
  const model_intelligence_1 = require("../core/model-intelligence");
86
87
  const realtime_guardian_1 = require("../core/realtime-guardian");
87
88
  const session_recovery_1 = require("../core/session-recovery");
88
89
  const identity_resolver_1 = require("../core/identity-resolver");
89
90
  const cloud_client_1 = require("../core/cloud-client");
91
+ const privacy_manager_1 = require("../core/privacy-manager");
92
+ const ws_client_1 = require("../core/ws-client");
93
+ const workflow_tracker_1 = require("../core/workflow-tracker");
94
+ const outcome_recorder_1 = require("../core/outcome-recorder");
95
+ const failure_memory_1 = require("../core/failure-memory");
96
+ const time_saved_1 = require("../core/time-saved");
97
+ const explainability_1 = require("../core/explainability");
98
+ const ai_memory_1 = require("../core/ai-memory");
99
+ const project_dna_1 = require("../core/project-dna");
100
+ const knowledge_graph_1 = require("../core/knowledge-graph");
101
+ const convention_detector_1 = require("../core/convention-detector");
102
+ const cost_optimizer_1 = require("../core/cost-optimizer");
103
+ const reputation_1 = require("../core/reputation");
104
+ const playbook_generator_1 = require("../core/playbook-generator");
105
+ const marketplace_1 = require("../core/marketplace");
106
+ const organization_memory_1 = require("../core/organization-memory");
107
+ const workflow_outcome_graph_1 = require("../core/workflow-outcome-graph");
108
+ const outcome_engine_1 = require("../core/outcome-engine");
109
+ const outcome_store_1 = require("../core/outcome-store");
110
+ const developer_profile_1 = require("../core/developer-profile");
111
+ const recommendation_engine_1 = require("../core/recommendation-engine");
112
+ const recommendation_store_1 = require("../core/recommendation-store");
113
+ const community_intelligence_1 = require("../core/community-intelligence");
114
+ const org_intelligence_1 = require("../core/org-intelligence");
115
+ const cross_layer_intelligence_1 = require("../core/cross-layer-intelligence");
90
116
  const CELL_DIR = path.join(os.homedir(), '.fivo', 'cell');
91
117
  const META_PATH = path.join(CELL_DIR, 'cell-meta.json');
92
118
  const PORT = 9876;
@@ -104,6 +130,7 @@ exports.app = app;
104
130
  const engines = {
105
131
  signalCapture: new signal_capture_1.SignalCapture(),
106
132
  patternStore: new pattern_store_1.PatternStore(CELL_DIR),
133
+ learningLayer: null,
107
134
  confidenceEngine: new confidence_engine_1.ConfidenceEngine(),
108
135
  extractionCascade: new extraction_cascade_1.ExtractionCascade(),
109
136
  decayEngine: new decay_engine_1.DecayEngine(),
@@ -139,10 +166,24 @@ const engines = {
139
166
  plattCalibration: new platt_calibration_1.PlattCalibration(),
140
167
  offlineQueue: new offline_queue_1.OfflineQueue(CELL_DIR),
141
168
  crossDomainProjections: new cross_domain_projections_1.CrossDomainProjections(),
142
- enterpriseFeatures: new enterprise_features_1.EnterpriseFeatures(),
169
+ patternUtils: new pattern_utils_1.PatternUtils(),
143
170
  };
144
171
  exports.engines = engines;
172
+ engines.learningLayer = new learning_layer_1.LearningLayer(engines.patternStore);
173
+ const privacyManager = new privacy_manager_1.PrivacyManager();
145
174
  (0, session_recovery_1.initRecovery)(CELL_DIR);
175
+ const cloudConfig = getCloudConfig();
176
+ if (cloudConfig.cloudSyncEnabled) {
177
+ const identity = (0, identity_resolver_1.createIdentityPayload)('daemon');
178
+ (0, ws_client_1.configureWsClient)({
179
+ deviceId: identity.fingerprint,
180
+ enabled: true,
181
+ });
182
+ (0, ws_client_1.startStreaming)();
183
+ const patterns = engines.patternStore.getAllPatterns();
184
+ if (patterns.length > 0)
185
+ (0, ws_client_1.streamPatterns)(patterns);
186
+ }
146
187
  app.use((0, cors_1.default)({ origin: true }));
147
188
  app.use(express_1.default.json({ limit: '1mb' }));
148
189
  app.use((0, morgan_1.default)('short'));
@@ -154,6 +195,7 @@ app.get('/health', (_req, res) => {
154
195
  patterns: engines.patternStore.getAllPatterns().length,
155
196
  signals: engines.signalCapture.getAllSignals().length,
156
197
  memory: process.memoryUsage().rss,
198
+ streaming: { connected: (0, ws_client_1.isStreamingConnected)(), pendingBatch: 0 },
157
199
  });
158
200
  });
159
201
  app.post('/signal', (req, res) => {
@@ -169,10 +211,7 @@ app.post('/signal', (req, res) => {
169
211
  signal = engines.signalCapture.captureEditDiff(originalCode || '', editedCode || '', context);
170
212
  try {
171
213
  const result = engines.extractionCascade.extract(originalCode || '', editedCode || '');
172
- for (const pattern of result.patterns) {
173
- engines.patternStore.addOrUpdatePattern(pattern.category, pattern.description, pattern.from, pattern.to, true);
174
- }
175
- patternsExtracted = result.patterns.length;
214
+ patternsExtracted = engines.learningLayer.process(result, true);
176
215
  if (patternsExtracted > 0)
177
216
  engines.patternStore.save();
178
217
  }
@@ -181,15 +220,43 @@ app.post('/signal', (req, res) => {
181
220
  }
182
221
  break;
183
222
  }
184
- case 'accept':
223
+ case 'accept': {
185
224
  signal = engines.signalCapture.captureAccept(originalCode || '', context);
225
+ const dummy = engines.patternStore.getAllPatterns().slice(0, 1);
226
+ for (const p of dummy) {
227
+ const step = (0, workflow_tracker_1.recordStep)(p, 'accept');
228
+ (0, outcome_recorder_1.recordOutcome)(p, 'accept', step.sessionId, true, 0);
229
+ (0, failure_memory_1.recordFailure)(p, false, context?.language || 'unknown');
230
+ (0, time_saved_1.recordTimeSaved)({
231
+ patternId: p.patternId,
232
+ category: p.category,
233
+ description: p.description,
234
+ from: p.from,
235
+ to: p.to,
236
+ language: context?.language || 'unknown',
237
+ });
238
+ }
186
239
  break;
187
- case 'reject':
240
+ }
241
+ case 'reject': {
188
242
  signal = engines.signalCapture.captureReject(originalCode || '', context);
243
+ const dummyR = engines.patternStore.getAllPatterns().slice(0, 1);
244
+ for (const p of dummyR) {
245
+ const step = (0, workflow_tracker_1.recordStep)(p, 'reject');
246
+ (0, outcome_recorder_1.recordOutcome)(p, 'reject', step.sessionId, false, 0);
247
+ (0, failure_memory_1.recordFailure)(p, true, context?.language || 'unknown');
248
+ }
189
249
  break;
190
- case 'retry':
250
+ }
251
+ case 'retry': {
191
252
  signal = engines.signalCapture.captureRetry(originalCode || '', context);
253
+ const dummyRt = engines.patternStore.getAllPatterns().slice(0, 1);
254
+ for (const p of dummyRt) {
255
+ const step = (0, workflow_tracker_1.recordStep)(p, 'retry');
256
+ (0, outcome_recorder_1.recordOutcome)(p, 'retry', step.sessionId, false, 0);
257
+ }
192
258
  break;
259
+ }
193
260
  default:
194
261
  res.status(400).json({ error: `unknown type: ${type}` });
195
262
  return;
@@ -208,9 +275,17 @@ app.get('/taste/profile', (_req, res) => {
208
275
  totalSignals: engines.signalCapture.getAllSignals().length,
209
276
  });
210
277
  });
278
+ let daemonToken;
279
+ if (process.env.CELL_DAEMON_TOKEN) {
280
+ daemonToken = process.env.CELL_DAEMON_TOKEN;
281
+ }
282
+ else {
283
+ daemonToken = require('crypto').randomBytes(16).toString('hex');
284
+ console.log(`Daemon token: ${daemonToken} (set CELL_DAEMON_TOKEN to override)`);
285
+ }
211
286
  app.delete('/taste/profile', (req, res) => {
212
287
  const token = req.headers['x-daemon-token'];
213
- if (process.env.CELL_DAEMON_TOKEN && token !== process.env.CELL_DAEMON_TOKEN) {
288
+ if (!token || token !== daemonToken) {
214
289
  res.status(401).json({ error: 'unauthorized' });
215
290
  return;
216
291
  }
@@ -283,8 +358,7 @@ app.get('/impact/weekly', (_req, res) => {
283
358
  });
284
359
  // ─── CONFIG INFERENCE (Onboarding) ────────────────────
285
360
  app.post('/onboarding/scan', (req, res) => {
286
- const { projectPath } = req.body;
287
- const dir = projectPath || process.cwd();
361
+ const dir = process.cwd();
288
362
  const insights = [];
289
363
  try {
290
364
  const tsconfigPath = path.join(dir, 'tsconfig.json');
@@ -343,29 +417,29 @@ app.get('/dashboard', (_req, res) => {
343
417
  const moderate = patterns.filter((p) => engines.confidenceEngine.getTier(p.confidence) === 'moderate');
344
418
  const signals = engines.signalCapture.getAllSignals().length;
345
419
  const rows = patterns.slice(0, 50).map((p) => `<tr><td>${escapeHtml(p.description)}</td><td>${escapeHtml(p.from)} → ${escapeHtml(p.to)}</td><td>${p.confidence?.mean?.toFixed(2) || '0'}</td><td>${engines.confidenceEngine.getTier(p.confidence)}</td><td>${p.signals?.total || 0}</td></tr>`).join('');
346
- res.send(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Cell — Dashboard</title>
347
- <style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#F7F4F0;color:#2E3138;padding:24px;min-height:100vh;display:flex;flex-direction:column}
348
- h1{font-size:24px;margin-bottom:8px}h1 span{color:#FF5A4E}.stats{display:flex;gap:16px;margin:20px 0}
349
- .stat{background:#fff;border:1px solid #e8e5e0;border-radius:8px;padding:16px;flex:1;text-align:center;box-shadow:0 2px 8px rgba(255,90,78,0.06)}
350
- .stat .num{font-size:28px;font-weight:700;color:#FF5A4E}.stat .label{font-size:12px;color:#8b8b8b;margin-top:4px}
351
- table{width:100%;border-collapse:collapse;margin-top:20px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.04)}
352
- th,td{padding:10px 12px;text-align:left;border-bottom:1px solid #f0ede8}th{background:#faf8f5;font-weight:600;font-size:13px;color:#2E3138}
353
- tr:hover{background:#fff5f3}.tier{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600}
354
- .tier-strong{background:#FF5A4E18;color:#FF5A4E}.tier-moderate{background:#FFB3A730;color:#d4770a}.tier-weak{background:#f0ede8;color:#8b8b8b}
355
- .footer{margin-top:auto;padding:16px 0;text-align:center;font-size:12px;color:#8b8b8b;border-top:1px solid #f0ede8}
356
- .footer a{color:#FF5A4E;text-decoration:none}.footer a:hover{text-decoration:underline}
357
- .glow{position:fixed;top:-100px;right:-100px;width:300px;height:300px;background:radial-gradient(circle,#FFB3A720,#FFD7D010,transparent 70%);pointer-events:none;z-index:0}
358
- </style></head><body>
359
- <div class="glow"></div>
360
- <h1>🧠 <span>Cell</span> — Dashboard</h1>
361
- <div class="stats">
362
- <div class="stat"><div class="num">${patterns.length}</div><div class="label">Total Patterns</div></div>
363
- <div class="stat"><div class="num">${strong.length}</div><div class="label">Strong (>0.80)</div></div>
364
- <div class="stat"><div class="num">${moderate.length}</div><div class="label">Moderate</div></div>
365
- <div class="stat"><div class="num">${signals}</div><div class="label">Signals</div></div>
366
- </div>
367
- <table><thead><tr><th>Pattern</th><th>Change</th><th>Confidence</th><th>Tier</th><th>Signals</th></tr></thead><tbody>${rows}</tbody></table>
368
- <div class="footer">Powered by <a href="https://fivo.live" target="_blank">FIVO</a> — Enterprise AI Platform &nbsp;|&nbsp; <a href="https://fivo.live" target="_blank">🏢 25x cheaper AI for teams</a></div>
420
+ res.send(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Cell — Dashboard</title>
421
+ <style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#F7F4F0;color:#2E3138;padding:24px;min-height:100vh;display:flex;flex-direction:column}
422
+ h1{font-size:24px;margin-bottom:8px}h1 span{color:#FF5A4E}.stats{display:flex;gap:16px;margin:20px 0}
423
+ .stat{background:#fff;border:1px solid #e8e5e0;border-radius:8px;padding:16px;flex:1;text-align:center;box-shadow:0 2px 8px rgba(255,90,78,0.06)}
424
+ .stat .num{font-size:28px;font-weight:700;color:#FF5A4E}.stat .label{font-size:12px;color:#8b8b8b;margin-top:4px}
425
+ table{width:100%;border-collapse:collapse;margin-top:20px;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.04)}
426
+ th,td{padding:10px 12px;text-align:left;border-bottom:1px solid #f0ede8}th{background:#faf8f5;font-weight:600;font-size:13px;color:#2E3138}
427
+ tr:hover{background:#fff5f3}.tier{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600}
428
+ .tier-strong{background:#FF5A4E18;color:#FF5A4E}.tier-moderate{background:#FFB3A730;color:#d4770a}.tier-weak{background:#f0ede8;color:#8b8b8b}
429
+ .footer{margin-top:auto;padding:16px 0;text-align:center;font-size:12px;color:#8b8b8b;border-top:1px solid #f0ede8}
430
+ .footer a{color:#FF5A4E;text-decoration:none}.footer a:hover{text-decoration:underline}
431
+ .glow{position:fixed;top:-100px;right:-100px;width:300px;height:300px;background:radial-gradient(circle,#FFB3A720,#FFD7D010,transparent 70%);pointer-events:none;z-index:0}
432
+ </style></head><body>
433
+ <div class="glow"></div>
434
+ <h1>🧠 <span>Cell</span> — Dashboard</h1>
435
+ <div class="stats">
436
+ <div class="stat"><div class="num">${patterns.length}</div><div class="label">Total Patterns</div></div>
437
+ <div class="stat"><div class="num">${strong.length}</div><div class="label">Strong (>0.80)</div></div>
438
+ <div class="stat"><div class="num">${moderate.length}</div><div class="label">Moderate</div></div>
439
+ <div class="stat"><div class="num">${signals}</div><div class="label">Signals</div></div>
440
+ </div>
441
+ <table><thead><tr><th>Pattern</th><th>Change</th><th>Confidence</th><th>Tier</th><th>Signals</th></tr></thead><tbody>${rows}</tbody></table>
442
+ <div class="footer"><a href="https://github.com/thevinsoni/cell" target="_blank">FIVO Cell</a> — Open source. Local-first. Free forever.</div>
369
443
  </body></html>`);
370
444
  });
371
445
  // ─── CROSS-LANGUAGE MAPPINGS ──────────────────────────
@@ -379,22 +453,327 @@ app.get('/cross-language/transfer', (req, res) => {
379
453
  res.json({ source, target, concepts: (0, cross_language_mappings_1.getTransferableConcepts)(source, target) });
380
454
  });
381
455
  app.get('/cross-language/languages', (_req, res) => { res.json({ languages: (0, cross_language_mappings_1.getSupportedLanguages)() }); });
456
+ // ─── WORKFLOW SUCCESS PREDICTION ──────────────────────
457
+ app.get('/workflow/active', (_req, res) => {
458
+ res.json({ workflows: (0, workflow_tracker_1.getActiveWorkflows)() });
459
+ });
460
+ app.get('/workflow/completed', (req, res) => {
461
+ const limit = req.query.limit ? parseInt(req.query.limit) : 20;
462
+ res.json({ workflows: (0, workflow_tracker_1.getCompletedWorkflows)(limit) });
463
+ });
464
+ app.get('/workflow/stats', (_req, res) => {
465
+ res.json((0, workflow_tracker_1.getWorkflowStats)());
466
+ });
467
+ app.post('/workflow/complete', (req, res) => {
468
+ const { sessionId, success } = req.body;
469
+ if (!sessionId) {
470
+ res.status(400).json({ error: 'sessionId required' });
471
+ return;
472
+ }
473
+ const session = (0, workflow_tracker_1.completeWorkflow)(sessionId, success !== false);
474
+ res.json({ completed: !!session, session });
475
+ });
476
+ app.get('/workflow/outcome-stats', (_req, res) => {
477
+ res.json({ stats: (0, outcome_recorder_1.getAllPatternOutcomeStats)() });
478
+ });
479
+ app.get('/workflow/outcome-stats/:patternId', (req, res) => {
480
+ const stats = (0, outcome_recorder_1.getPatternOutcomeStats)(req.params.patternId);
481
+ if (!stats) {
482
+ res.status(404).json({ error: 'pattern not found in outcomes' });
483
+ return;
484
+ }
485
+ res.json(stats);
486
+ });
487
+ app.get('/workflow/path-distribution', (_req, res) => {
488
+ res.json({ distribution: (0, outcome_recorder_1.getPathSuccessDistribution)() });
489
+ });
490
+ app.get('/workflow/history', (req, res) => {
491
+ const limit = req.query.limit ? parseInt(req.query.limit) : 50;
492
+ res.json({ outcomes: (0, outcome_recorder_1.getOutcomeHistory)(limit) });
493
+ });
494
+ // ─── FAILURE MEMORY ───────────────────────────────────
495
+ app.get('/failure/suggestions', (req, res) => {
496
+ const minRate = req.query.minRate ? parseFloat(req.query.minRate) : 0.5;
497
+ res.json({ suggestions: (0, failure_memory_1.getAvoidSuggestions)(minRate) });
498
+ });
499
+ app.get('/failure/stats', (_req, res) => {
500
+ res.json((0, failure_memory_1.getFailureStats)());
501
+ });
502
+ app.get('/failure/records', (_req, res) => {
503
+ res.json({ records: (0, failure_memory_1.getAllFailureRecords)() });
504
+ });
505
+ app.get('/failure/records/:patternId', (req, res) => {
506
+ const record = (0, failure_memory_1.getFailureRecord)(req.params.patternId);
507
+ if (!record) {
508
+ res.status(404).json({ error: 'not found' });
509
+ return;
510
+ }
511
+ res.json(record);
512
+ });
513
+ // ─── TIME SAVED DASHBOARD ────────────────────────────────
514
+ app.get('/time-saved/stats', (_req, res) => {
515
+ res.json((0, time_saved_1.getTimeSavedStats)());
516
+ });
517
+ app.get('/time-saved/pattern/:patternId', (req, res) => {
518
+ res.json((0, time_saved_1.getTimeSavedByPattern)(req.params.patternId));
519
+ });
520
+ // ─── EXPLAINABILITY ─────────────────────────────────────
521
+ app.get('/explain/pattern/:patternId', (req, res) => {
522
+ const patterns = engines.patternStore.getAllPatterns();
523
+ const pattern = patterns.find((p) => p.patternId === req.params.patternId);
524
+ if (!pattern) {
525
+ res.status(404).json({ error: 'pattern not found' });
526
+ return;
527
+ }
528
+ res.json((0, explainability_1.explainPattern)(pattern));
529
+ });
530
+ app.post('/explain/patterns', (req, res) => {
531
+ const { patternIds } = req.body;
532
+ if (!Array.isArray(patternIds)) {
533
+ res.status(400).json({ error: 'patternIds array required' });
534
+ return;
535
+ }
536
+ const allPatterns = engines.patternStore.getAllPatterns();
537
+ const matched = allPatterns.filter((p) => patternIds.includes(p.patternId));
538
+ res.json({ explanations: (0, explainability_1.explainPatternList)(matched) });
539
+ });
540
+ // ─── AI MEMORY ──────────────────────────────────────────
541
+ app.get('/memory/stats', (_req, res) => {
542
+ res.json((0, ai_memory_1.getMemoryStats)());
543
+ });
544
+ app.get('/memory/outcomes', (req, res) => {
545
+ const limit = req.query.limit ? parseInt(req.query.limit) : 100;
546
+ const patternId = req.query.patternId;
547
+ res.json({ outcomes: (0, ai_memory_1.queryOutcomes)(limit, patternId), counts: (0, ai_memory_1.getOutcomeCounts)() });
548
+ });
549
+ app.get('/memory/failures', (_req, res) => {
550
+ res.json({ failures: (0, ai_memory_1.getPersistedFailures)() });
551
+ });
552
+ app.get('/memory/workflows', (_req, res) => {
553
+ res.json({ workflows: (0, ai_memory_1.getPersistedWorkflows)() });
554
+ });
555
+ app.get('/memory/time-saved', (_req, res) => {
556
+ res.json({ records: (0, ai_memory_1.getPersistedTimeSaved)() });
557
+ });
558
+ app.delete('/memory/clear', (_req, res) => {
559
+ (0, ai_memory_1.clearAllMemory)();
560
+ res.json({ cleared: true });
561
+ });
562
+ // ─── PROJECT DNA ────────────────────────────────────────
563
+ app.post('/project/build', (req, res) => {
564
+ const { projectId, name } = req.body;
565
+ if (!projectId) {
566
+ res.status(400).json({ error: 'projectId required' });
567
+ return;
568
+ }
569
+ const patterns = engines.patternStore.getAllPatterns();
570
+ const profile = (0, project_dna_1.buildProjectProfile)(projectId, name || projectId, patterns);
571
+ res.json(profile);
572
+ });
573
+ app.get('/project/profile/:projectId', (req, res) => {
574
+ const profile = (0, project_dna_1.getProjectProfile)(req.params.projectId);
575
+ if (!profile) {
576
+ res.status(404).json({ error: 'project not found' });
577
+ return;
578
+ }
579
+ res.json(profile);
580
+ });
581
+ app.get('/project/list', (_req, res) => {
582
+ res.json({ projects: (0, project_dna_1.listProjectProfiles)() });
583
+ });
584
+ app.get('/project/compare', (req, res) => {
585
+ const { a, b } = req.query;
586
+ if (!a || !b) {
587
+ res.status(400).json({ error: 'a and b query params required' });
588
+ return;
589
+ }
590
+ res.json((0, project_dna_1.compareProjects)(a, b));
591
+ });
592
+ app.delete('/project/:projectId', (req, res) => {
593
+ res.json({ deleted: (0, project_dna_1.deleteProjectProfile)(req.params.projectId) });
594
+ });
595
+ app.post('/project/dna-build', (req, res) => {
596
+ const { projectId, projectPath } = req.body;
597
+ if (!projectPath) {
598
+ res.status(400).json({ error: 'projectPath required' });
599
+ return;
600
+ }
601
+ if (!fs.existsSync(projectPath)) {
602
+ res.status(400).json({ error: `path does not exist: ${projectPath}` });
603
+ return;
604
+ }
605
+ const id = projectId || path.basename(projectPath);
606
+ const dna = (0, project_dna_1.buildProjectDNA)(id, projectPath);
607
+ res.json(dna);
608
+ });
609
+ app.get('/project/dna/:projectId', (req, res) => {
610
+ const dna = (0, project_dna_1.getDNA)(req.params.projectId);
611
+ if (!dna) {
612
+ res.status(404).json({ error: 'DNA not found' });
613
+ return;
614
+ }
615
+ res.json(dna);
616
+ });
617
+ app.get('/project/dna-list', (_req, res) => {
618
+ res.json({ projects: (0, project_dna_1.listDNA)() });
619
+ });
620
+ app.get('/project/dna-compare', (req, res) => {
621
+ const { a, b } = req.query;
622
+ if (!a || !b) {
623
+ res.status(400).json({ error: 'a and b query params required' });
624
+ return;
625
+ }
626
+ res.json((0, project_dna_1.compareDNA)(a, b));
627
+ });
628
+ app.delete('/project/dna/:projectId', (req, res) => {
629
+ res.json({ deleted: (0, project_dna_1.deleteDNA)(req.params.projectId) });
630
+ });
631
+ // ─── KNOWLEDGE GRAPH ────────────────────────────────────
632
+ app.post('/graph/rebuild', (_req, res) => {
633
+ const patterns = engines.patternStore.getAllPatterns();
634
+ const g = (0, knowledge_graph_1.buildKnowledgeGraph)(patterns.map((p) => ({
635
+ patternId: p.patternId,
636
+ category: p.category,
637
+ description: p.description,
638
+ from: p.from,
639
+ to: p.to,
640
+ language: p.conditions.find((c) => c.type === 'language')?.value,
641
+ framework: p.conditions.find((c) => c.type === 'framework')?.value,
642
+ conditions: p.conditions,
643
+ })));
644
+ res.json({ nodes: g.nodes.length, edges: g.edges.length, builtAt: g.builtAt });
645
+ });
646
+ app.get('/graph/stats', (_req, res) => {
647
+ res.json((0, knowledge_graph_1.getGraphStats)());
648
+ });
649
+ app.get('/graph/node/:nodeId', (req, res) => {
650
+ const neighbors = (0, knowledge_graph_1.getNodeNeighbors)(req.params.nodeId);
651
+ if (!neighbors) {
652
+ res.status(404).json({ error: 'node not found' });
653
+ return;
654
+ }
655
+ res.json(neighbors);
656
+ });
657
+ app.get('/graph/related/:patternId', (req, res) => {
658
+ const limit = req.query.limit ? parseInt(req.query.limit) : 10;
659
+ res.json({ related: (0, knowledge_graph_1.findRelatedPatterns)(req.params.patternId, limit) });
660
+ });
661
+ app.get('/graph/full', (_req, res) => {
662
+ res.json((0, knowledge_graph_1.getKnowledgeGraph)());
663
+ });
664
+ // ─── CONVENTION DETECTOR ────────────────────────────────
665
+ app.post('/conventions/detect', (req, res) => {
666
+ const { projectId } = req.body;
667
+ const patterns = engines.patternStore.getAllPatterns();
668
+ const report = (0, convention_detector_1.detectConventions)(projectId || 'default', patterns);
669
+ res.json(report);
670
+ });
671
+ // ─── AI COST OPTIMIZATION ──────────────────────────────
672
+ app.get('/cost/models', (_req, res) => {
673
+ res.json({ models: (0, cost_optimizer_1.getAvailableModels)() });
674
+ });
675
+ app.post('/cost/models', (req, res) => {
676
+ const { modelId, name, provider, costPerToken, contextWindow, suitableFor, avgLatencyMs, qualityScore } = req.body;
677
+ if (!modelId || !name) {
678
+ res.status(400).json({ error: 'modelId and name required' });
679
+ return;
680
+ }
681
+ (0, cost_optimizer_1.registerCustomModel)({ modelId, name, provider: provider || 'custom', costPerToken: costPerToken || 0, contextWindow: contextWindow || 32000, suitableFor: suitableFor || [], avgLatencyMs: avgLatencyMs || 1000, qualityScore: qualityScore || 0.5 });
682
+ res.json({ registered: true });
683
+ });
684
+ app.post('/cost/route', (req, res) => {
685
+ const { taskType, complexity, estimatedTokens, language, budget } = req.body;
686
+ if (!taskType) {
687
+ res.status(400).json({ error: 'taskType required' });
688
+ return;
689
+ }
690
+ const decision = (0, cost_optimizer_1.routeTask)({ taskType, complexity: complexity || 'medium', estimatedTokens: estimatedTokens || 1000, language }, budget);
691
+ res.json(decision);
692
+ });
693
+ app.post('/cost/log', (req, res) => {
694
+ const { modelId, tokens, taskType } = req.body;
695
+ if (!modelId || !tokens) {
696
+ res.status(400).json({ error: 'modelId and tokens required' });
697
+ return;
698
+ }
699
+ (0, cost_optimizer_1.logModelCall)(modelId, tokens, taskType || 'unknown');
700
+ res.json({ logged: true });
701
+ });
702
+ app.get('/cost/stats', (_req, res) => {
703
+ res.json((0, cost_optimizer_1.getCostStats)());
704
+ });
705
+ app.delete('/cost/clear', (_req, res) => {
706
+ (0, cost_optimizer_1.clearCostLog)();
707
+ res.json({ cleared: true });
708
+ });
709
+ // ─── REPUTATION ─────────────────────────────────────────
710
+ app.post('/reputation/init', (req, res) => {
711
+ const { deviceId, displayName } = req.body;
712
+ if (!deviceId) {
713
+ res.status(400).json({ error: 'deviceId required' });
714
+ return;
715
+ }
716
+ const profile = (0, reputation_1.getOrCreateProfile)(deviceId, displayName);
717
+ res.json(profile);
718
+ });
719
+ app.post('/reputation/contribute', (req, res) => {
720
+ const { deviceId, category, accepted, language } = req.body;
721
+ if (!deviceId) {
722
+ res.status(400).json({ error: 'deviceId required' });
723
+ return;
724
+ }
725
+ const profile = (0, reputation_1.recordContribution)(deviceId, { category, accepted: accepted !== false, language });
726
+ res.json(profile);
727
+ });
728
+ app.get('/reputation/profile/:deviceId', (req, res) => {
729
+ const profile = (0, reputation_1.getProfile)(req.params.deviceId);
730
+ if (!profile) {
731
+ res.status(404).json({ error: 'not found' });
732
+ return;
733
+ }
734
+ res.json(profile);
735
+ });
736
+ app.get('/reputation/leaderboard', (req, res) => {
737
+ const limit = req.query.limit ? parseInt(req.query.limit) : 20;
738
+ res.json({ leaderboard: (0, reputation_1.getLeaderboard)(limit) });
739
+ });
740
+ app.get('/reputation/badges', (_req, res) => {
741
+ res.json({ badges: (0, reputation_1.getAllBadges)() });
742
+ });
743
+ // ─── PLAYBOOK GENERATOR ──────────────────────────────────
744
+ app.post('/playbook/generate', (req, res) => {
745
+ const { projectId } = req.body;
746
+ if (!projectId) {
747
+ res.status(400).json({ error: 'projectId required' });
748
+ return;
749
+ }
750
+ const profile = require('../core/project-dna').getProjectProfile(projectId);
751
+ if (!profile) {
752
+ res.status(404).json({ error: 'project profile not found. Build project DNA first via POST /project/build' });
753
+ return;
754
+ }
755
+ const playbook = (0, playbook_generator_1.generatePlaybook)(projectId, profile);
756
+ res.json(playbook);
757
+ });
758
+ app.get('/playbook/:projectId', (req, res) => {
759
+ const playbook = (0, playbook_generator_1.getPlaybook)(req.params.projectId);
760
+ if (!playbook) {
761
+ res.status(404).json({ error: 'playbook not found' });
762
+ return;
763
+ }
764
+ res.json(playbook);
765
+ });
766
+ app.get('/playbook/list', (_req, res) => {
767
+ res.json({ playbooks: (0, playbook_generator_1.listPlaybooks)() });
768
+ });
382
769
  // ─── PHASE 8: ONBOARDING + PROMOTION ──────────────────
383
770
  app.get('/onboarding/banner', (_req, res) => {
384
771
  const signals = engines.signalCapture.getAllSignals().length;
385
772
  const patterns = engines.patternStore.getAllPatterns();
386
- const showBanner = signals >= 50;
387
773
  res.json({
388
- showBanner,
774
+ showBanner: signals >= 50,
389
775
  signalCount: signals,
390
776
  patternCount: patterns.length,
391
- banner: showBanner ? {
392
- title: '🧠 Cell is learning your taste!',
393
- subtitle: '✨ Want 25x cheaper AI?',
394
- fivoFeatures: ['1 API → All AIs', '25x Cost Reduction (GPT-4o: $250→$10/mo)', 'Team + Sync', 'Enterprise Ready'],
395
- actions: { yes: 'Connect FIVO', no: 'Skip' },
396
- dismissable: true,
397
- } : null,
398
777
  });
399
778
  });
400
779
  app.get('/impact/weekly-card', (_req, res) => {
@@ -407,49 +786,67 @@ app.get('/impact/weekly-card', (_req, res) => {
407
786
  newPatterns: patterns.length,
408
787
  strongPatterns: strong.length,
409
788
  topPatterns: patterns.slice(0, 3).map((p) => ({ description: p.description, confidence: p.confidence?.mean?.toFixed(2) })),
410
- fivoPromo: {
411
- message: '🏢 FIVO Enterprise — 25x cheaper AI for teams',
412
- link: 'https://fivo.live',
413
- dismissable: true,
414
- },
415
789
  });
416
790
  });
791
+ // ─── GLOBAL PATTERN INTELLIGENCE NETWORK (STREAMING) ──
792
+ app.get('/streaming/status', (_req, res) => {
793
+ res.json({
794
+ connected: (0, ws_client_1.isStreamingConnected)(),
795
+ pendingBatch: 0,
796
+ enabled: true,
797
+ });
798
+ });
799
+ app.post('/streaming/start', (_req, res) => {
800
+ (0, ws_client_1.startStreaming)();
801
+ const patterns = engines.patternStore.getAllPatterns();
802
+ if (patterns.length > 0)
803
+ (0, ws_client_1.streamPatterns)(patterns);
804
+ res.json({ status: 'started' });
805
+ });
806
+ app.post('/streaming/stop', (_req, res) => {
807
+ (0, ws_client_1.stopStreaming)();
808
+ res.json({ status: 'stopped' });
809
+ });
417
810
  // ─── CLOUD SYNC ────────────────────────────────────────
418
811
  app.get('/sync/cloud-url', (_req, res) => { res.json({ cloudUrl: (0, cloud_client_1.getCloudUrl)() }); });
419
812
  app.get('/sync/status', async (_req, res) => {
420
- const status = await (0, cloud_client_1.checkSyncStatus)();
421
- res.json({ cloudUrl: (0, cloud_client_1.getCloudUrl)(), ...(status || { synced: false, error: 'cloud unreachable' }) });
813
+ try {
814
+ const status = await (0, cloud_client_1.checkSyncStatus)();
815
+ res.json({ cloudUrl: (0, cloud_client_1.getCloudUrl)(), ...(status || { synced: false, error: 'cloud unreachable' }) });
816
+ }
817
+ catch (e) {
818
+ res.status(502).json({ error: 'sync check failed' });
819
+ }
422
820
  });
423
821
  app.post('/sync/push', async (req, res) => {
424
- const config = getCloudConfig();
425
- if (!config.cloudSyncEnabled) {
426
- res.json({ pushed: false, reason: 'cloud disabled', hint: 'Run: cell cloud on' });
427
- return;
822
+ try {
823
+ const { patterns } = req.body;
824
+ if (!Array.isArray(patterns)) {
825
+ res.status(400).json({ error: 'patterns array required' });
826
+ return;
827
+ }
828
+ const ok = await (0, cloud_client_1.pushPatterns)(patterns, patterns.length, 'unknown', 'unknown');
829
+ if (!ok) {
830
+ res.status(502).json({ error: 'push failed' });
831
+ return;
832
+ }
833
+ res.json({ synced: true, count: patterns.length });
428
834
  }
429
- const { language, framework } = req.body || {};
430
- const patterns = engines.patternStore.getAllPatterns().map((p) => ({
431
- patternId: p.patternId || p.description,
432
- category: p.category || 'unknown',
433
- description: p.description,
434
- from: p.from,
435
- to: p.to,
436
- signals: { positive: p.signals?.positive || 0, negative: p.signals?.negative || 0 },
437
- }));
438
- const signalCount = engines.signalCapture.getAllSignals().length;
439
- const ok = await (0, cloud_client_1.pushPatterns)(patterns, signalCount, language || 'typescript', framework || 'unknown');
440
- if (!ok) {
441
- engines.offlineQueue.enqueue('push', { patterns, signalCount, language: language || 'typescript', framework: framework || 'unknown' });
442
- res.json({ pushed: false, queued: true, queueSize: engines.offlineQueue.getQueueSize() });
443
- return;
835
+ catch (e) {
836
+ res.status(502).json({ error: 'push failed' });
444
837
  }
445
- res.json({ pushed: true, patternCount: patterns.length, signalCount });
446
838
  });
447
839
  app.get('/sync/queue-status', (_req, res) => {
448
840
  res.json({ pending: engines.offlineQueue.getPendingCount?.() || 0, lastFlush: engines.offlineQueue.getLastFlush?.() || null });
449
841
  });
450
842
  app.post('/sync/pull', async (_req, res) => {
451
- const prior = await (0, cloud_client_1.pullCommunityPrior)();
452
- res.json({ pulled: prior !== null, communityPrior: prior || [] });
843
+ try {
844
+ const prior = await (0, cloud_client_1.pullCommunityPrior)();
845
+ res.json({ synced: true, communityPatterns: prior?.length || 0 });
846
+ }
847
+ catch (e) {
848
+ res.status(502).json({ error: 'pull failed' });
849
+ }
453
850
  });
454
851
  // ─── PHASE 9 ENDPOINTS ──────────────────────────────
455
852
  app.get('/models/insights', (req, res) => {
@@ -492,11 +889,427 @@ app.get('/identity/status', (_req, res) => {
492
889
  const identity = (0, identity_resolver_1.createIdentityPayload)('daemon');
493
890
  res.json({ fingerprint: identity.fingerprint, tool: identity.tool });
494
891
  });
892
+ // ─── MARKETPLACE ─────────────────────────────────────
893
+ app.get('/marketplace/packages', (_req, res) => { res.json({ packages: (0, marketplace_1.getAllPackages)() }); });
894
+ app.get('/marketplace/search', (req, res) => { res.json({ results: (0, marketplace_1.searchPackages)(String(req.query.q || '')) }); });
895
+ app.get('/marketplace/package/:id', (req, res) => { const p = (0, marketplace_1.getPackage)(req.params.id); if (!p) {
896
+ res.status(404).json({ error: 'not found' });
897
+ return;
898
+ } res.json(p); });
899
+ app.post('/marketplace/package', (req, res) => { const p = (0, marketplace_1.createPackage)(req.body); res.json(p); });
900
+ app.post('/marketplace/package/:id/download', (req, res) => { const p = (0, marketplace_1.downloadPackage)(req.params.id); if (!p) {
901
+ res.status(404).json({ error: 'not found' });
902
+ return;
903
+ } res.json(p); });
904
+ app.post('/marketplace/package/:id/rate', (req, res) => { const { author, rating, comment } = req.body; const p = (0, marketplace_1.ratePackage)(req.params.id, author, rating, comment); if (!p) {
905
+ res.status(400).json({ error: 'invalid rating or not found' });
906
+ return;
907
+ } res.json(p); });
908
+ app.get('/marketplace/package/:id/reviews', (req, res) => { res.json({ reviews: (0, marketplace_1.getReviews)(req.params.id) }); });
909
+ app.get('/marketplace/stats', (_req, res) => { res.json((0, marketplace_1.getMarketplaceStats)()); });
910
+ // ─── ORGANIZATION MEMORY ─────────────────────────────
911
+ app.post('/org/create', (req, res) => { const { name, creatorDeviceId } = req.body; res.json((0, organization_memory_1.createOrganization)(name, creatorDeviceId)); });
912
+ app.get('/org/:id', (req, res) => { const o = (0, organization_memory_1.getOrganization)(req.params.id); if (!o) {
913
+ res.status(404).json({ error: 'not found' });
914
+ return;
915
+ } res.json(o); });
916
+ app.post('/org/:id/member/add', (req, res) => { const { deviceId, role, actorDeviceId } = req.body; const o = (0, organization_memory_1.addMember)(req.params.id, deviceId, role, actorDeviceId); if (!o) {
917
+ res.status(400).json({ error: 'failed' });
918
+ return;
919
+ } res.json(o); });
920
+ app.post('/org/:id/member/remove', (req, res) => { const { deviceId, actorDeviceId } = req.body; const o = (0, organization_memory_1.removeMember)(req.params.id, deviceId, actorDeviceId); if (!o) {
921
+ res.status(400).json({ error: 'failed' });
922
+ return;
923
+ } res.json(o); });
924
+ app.post('/org/:id/team/create', (req, res) => { const { name, description, actorDeviceId } = req.body; const o = (0, organization_memory_1.createTeam)(req.params.id, name, description, actorDeviceId); if (!o) {
925
+ res.status(400).json({ error: 'failed' });
926
+ return;
927
+ } res.json(o); });
928
+ app.post('/org/:id/team/:teamId/add', (req, res) => { const { deviceId, actorDeviceId } = req.body; const o = (0, organization_memory_1.addToTeam)(req.params.id, req.params.teamId, deviceId, actorDeviceId); if (!o) {
929
+ res.status(400).json({ error: 'failed' });
930
+ return;
931
+ } res.json(o); });
932
+ app.get('/org/:id/audit', (req, res) => { res.json({ log: (0, organization_memory_1.getAuditLog)(Number(req.query.limit) || 50) }); });
933
+ app.get('/orgs/list', (_req, res) => { res.json({ organizations: (0, organization_memory_1.listOrganizations)() }); });
934
+ // ─── WORKFLOW OUTCOME GRAPH ─────────────────────────
935
+ app.post('/outcome-graph/record', (req, res) => { (0, workflow_outcome_graph_1.recordOutcome)(req.body); res.json({ success: true }); });
936
+ app.post('/outcome-graph/sequence', (req, res) => { (0, workflow_outcome_graph_1.recordStepSequence)(req.body); res.json({ success: true }); });
937
+ app.get('/outcome-graph/nodes', (_req, res) => { res.json({ nodes: (0, workflow_outcome_graph_1.getNodes)() }); });
938
+ app.get('/outcome-graph/edges', (_req, res) => { res.json({ edges: (0, workflow_outcome_graph_1.getEdges)() }); });
939
+ app.get('/outcome-graph/paths', (req, res) => { const { from, to } = req.query; res.json({ paths: (0, workflow_outcome_graph_1.getPathProbabilities)(String(from), String(to)) }); });
940
+ app.get('/outcome-graph/stats', (_req, res) => { res.json((0, workflow_outcome_graph_1.getGraphStats)()); });
941
+ // ─── AI MEMORY UPGRADE ───────────────────────────────
942
+ app.post('/memory/search/index', (_req, res) => { (0, ai_memory_1.indexMemoryForSearch)(); res.json({ success: true }); });
943
+ app.get('/memory/search', (req, res) => { res.json({ results: (0, ai_memory_1.searchMemory)(String(req.query.q || ''), Number(req.query.limit) || 5) }); });
944
+ app.post('/memory/context/add', (req, res) => {
945
+ const { role, content } = req.body;
946
+ if (!role || !content) {
947
+ res.status(400).json({ error: 'role and content required' });
948
+ return;
949
+ }
950
+ res.json({ entries: (0, ai_memory_1.addWindowEntry)(role, content) });
951
+ });
952
+ app.get('/memory/context', (_req, res) => { res.json({ window: (0, ai_memory_1.getWindow)() }); });
953
+ app.post('/memory/ai/query', async (req, res) => { try {
954
+ const result = await (0, ai_memory_1.aiQuery)(String(req.body.prompt), req.body.model);
955
+ res.json({ result });
956
+ }
957
+ catch (e) {
958
+ res.status(500).json({ error: String(e) });
959
+ } });
960
+ app.post('/memory/ai/cost-estimate', (req, res) => { res.json({ estimatedCost: (0, ai_memory_1.estimateQueryCost)(String(req.body.prompt), req.body.model) }); });
961
+ // ─── KNOWLEDGE GRAPH UPGRADE ─────────────────────────
962
+ app.post('/graph/extract-entities', (req, res) => { res.json({ entities: (0, knowledge_graph_1.extractEntities)(req.body.patterns || []) }); });
963
+ app.post('/graph/infer-relationships', (req, res) => { res.json({ relationships: (0, knowledge_graph_1.inferRelationships)(req.body.patterns || []) }); });
964
+ app.get('/graph/paths', (req, res) => { const { from, to, maxDepth } = req.query; res.json({ paths: (0, knowledge_graph_1.findPaths)(String(from), String(to), Number(maxDepth) || 4) }); });
965
+ // ─── COST OPTIMIZER UPGRADE ──────────────────────────
966
+ app.post('/cost/benchmark', (req, res) => { (0, cost_optimizer_1.recordBenchmark)(req.body); res.json({ success: true }); });
967
+ app.get('/cost/benchmark/best', (req, res) => { const { taskType, prioritize } = req.query; const b = (0, cost_optimizer_1.getBestModelForTask)(String(taskType), prioritize); if (!b) {
968
+ res.json({ message: 'insufficient data' });
969
+ return;
970
+ } res.json(b); });
971
+ app.get('/cost/benchmark/stats', (_req, res) => { res.json((0, cost_optimizer_1.getBenchmarkStats)()); });
972
+ app.post('/cost/route/smart', (req, res) => { res.json((0, cost_optimizer_1.smartRouteTask)(req.body)); });
973
+ // ─── PROJECT DNA UPGRADE ─────────────────────────────
974
+ app.post('/project/architecture', (req, res) => { res.json((0, project_dna_1.inferArchitecture)(req.body.patterns || [])); });
975
+ app.post('/project/testing-style', (req, res) => { res.json((0, project_dna_1.detectTestingStyle)(req.body.patterns || [])); });
976
+ app.post('/project/conventions', (req, res) => { res.json({ suggestions: (0, project_dna_1.generateConventions)(req.body.profile) }); });
977
+ // ─── PRIVACY ENDPOINTS ────────────────────────────────
978
+ app.get('/privacy/mode', (_req, res) => { res.json({ mode: privacyManager.getMode() }); });
979
+ app.post('/privacy/mode', (req, res) => { const { mode } = req.body; if (!mode || !['private', 'community', 'organization'].includes(mode)) {
980
+ res.status(400).json({ error: 'invalid mode' });
981
+ return;
982
+ } res.json({ mode: privacyManager.setMode(mode) }); });
983
+ app.get('/privacy/preview', (_req, res) => { res.json({ preview: privacyManager.getSharingPreview() }); });
984
+ app.post('/privacy/validate', (req, res) => { res.json(privacyManager.validatePayload(req.body || {})); });
985
+ app.get('/privacy/forbidden-fields', (_req, res) => { res.json({ fields: privacyManager.getForbiddenFields() }); });
986
+ // ─── OUTCOME ENGINE (Ch3) ──────────────────────────────
987
+ const outcomeStore = new outcome_store_1.OutcomeStore(CELL_DIR);
988
+ const outcomeEngine = new outcome_engine_1.OutcomeEngine(outcomeStore);
989
+ app.post('/outcomes/record', (req, res) => {
990
+ const event = req.body;
991
+ if (!event.patternId || !event.type) {
992
+ res.status(400).json({ error: 'patternId and type required' });
993
+ return;
994
+ }
995
+ const result = outcomeEngine.recordEvent(event);
996
+ res.json(result);
997
+ });
998
+ app.get('/outcomes/summary/:patternId', (req, res) => {
999
+ const summary = outcomeEngine.getSummary(req.params.patternId);
1000
+ if (!summary) {
1001
+ res.status(404).json({ error: 'not found' });
1002
+ return;
1003
+ }
1004
+ res.json(summary);
1005
+ });
1006
+ app.get('/outcomes/leaderboard', (_req, res) => {
1007
+ res.json({ leaderboard: outcomeEngine.generateLeaderboard() });
1008
+ });
1009
+ app.get('/outcomes/trends', (req, res) => {
1010
+ const patternIds = req.query.patternIds ? req.query.patternIds.split(',') : [];
1011
+ if (patternIds.length === 0) {
1012
+ res.status(400).json({ error: 'patternIds required (comma-separated)' });
1013
+ return;
1014
+ }
1015
+ const trends = patternIds.map((id) => {
1016
+ const summary = outcomeEngine.getSummary(id);
1017
+ return { patternId: id, trend: summary?.trend || 'dead' };
1018
+ });
1019
+ res.json({ trends });
1020
+ });
1021
+ // ─── DEVELOPER PROFILE (Ch2) ──────────────────────────
1022
+ app.post('/developer/profile', (req, res) => {
1023
+ const { developerId, patterns, outcomesMap } = req.body;
1024
+ if (!developerId || !patterns) {
1025
+ res.status(400).json({ error: 'developerId and patterns required' });
1026
+ return;
1027
+ }
1028
+ const oMap = new Map(outcomesMap ? Object.entries(outcomesMap) : []);
1029
+ const profile = (0, developer_profile_1.buildProfile)(developerId, patterns, oMap);
1030
+ res.json(profile);
1031
+ });
1032
+ // ─── RECOMMENDATION ENGINE (Ch4) ──────────────────────
1033
+ app.post('/recommendations', (req, res) => {
1034
+ const { developerId, patterns, outcomesMap, allProfiles } = req.body;
1035
+ if (!developerId || !patterns) {
1036
+ res.status(400).json({ error: 'developerId and patterns required' });
1037
+ return;
1038
+ }
1039
+ const oMap = new Map(outcomesMap ? Object.entries(outcomesMap) : []);
1040
+ const pMap = new Map(allProfiles ? Object.entries(allProfiles) : []);
1041
+ const result = (0, recommendation_engine_1.recommendPatterns)(developerId, patterns, oMap, pMap);
1042
+ res.json(result);
1043
+ });
1044
+ app.post('/recommendations/explain', (req, res) => {
1045
+ const { pattern, outcome, profile, similarDevs, devLangMatch } = req.body;
1046
+ if (!pattern) {
1047
+ res.status(400).json({ error: 'pattern required' });
1048
+ return;
1049
+ }
1050
+ res.json({ explanation: (0, recommendation_engine_1.explainRecommendation)(pattern, outcome, profile, similarDevs || [], devLangMatch || false) });
1051
+ });
1052
+ app.post('/recommendations/feedback', (req, res) => {
1053
+ const { developerId, patternId, action } = req.body;
1054
+ if (!developerId || !patternId || !action) {
1055
+ res.status(400).json({ error: 'developerId, patternId, action required' });
1056
+ return;
1057
+ }
1058
+ const store = new recommendation_store_1.RecommendationStore('feedback');
1059
+ (0, recommendation_engine_1.recordFeedback)(store, developerId, patternId, action);
1060
+ res.json({ recorded: true });
1061
+ });
1062
+ // ─── COMMUNITY INTELLIGENCE V2 (Ch7) ──────────────────
1063
+ app.get('/community/v2/stats', (_req, res) => {
1064
+ res.json((0, community_intelligence_1.getCommunityStats)());
1065
+ });
1066
+ app.get('/community/v2/patterns', (req, res) => {
1067
+ const filters = req.query.category ? { category: req.query.category } : undefined;
1068
+ const patterns = (0, community_intelligence_1.getCommunityPatterns)(filters);
1069
+ res.json({ patterns, total: patterns.length });
1070
+ });
1071
+ app.post('/community/v2/patterns/register', (req, res) => {
1072
+ const { patternId, category, language, description } = req.body;
1073
+ if (!patternId || !category || !language) {
1074
+ res.status(400).json({ error: 'patternId, category, language required' });
1075
+ return;
1076
+ }
1077
+ const result = (0, community_intelligence_1.registerCommunityPattern)(patternId, category, language, description || '', 0, 0);
1078
+ res.json(result);
1079
+ });
1080
+ app.post('/community/v2/outcomes/ingest', (req, res) => {
1081
+ const { outcomes } = req.body;
1082
+ if (!Array.isArray(outcomes)) {
1083
+ res.status(400).json({ error: 'outcomes array required' });
1084
+ return;
1085
+ }
1086
+ const result = (0, community_intelligence_1.ingestCommunityOutcomes)(outcomes);
1087
+ res.json(result);
1088
+ });
1089
+ app.get('/community/v2/rankings', (req, res) => {
1090
+ const limit = parseInt(req.query.limit) || 10;
1091
+ res.json({ rankings: (0, community_intelligence_1.getCommunityRankings)(limit) });
1092
+ });
1093
+ app.get('/community/v2/trends', (req, res) => {
1094
+ const limit = parseInt(req.query.limit) || 20;
1095
+ res.json({ trends: (0, community_intelligence_1.getCommunityTrends)(limit) });
1096
+ });
1097
+ app.get('/community/v2/insights', (_req, res) => {
1098
+ res.json({ insights: (0, community_intelligence_1.getCommunityInsights)() });
1099
+ });
1100
+ app.post('/community/v2/playbooks', (req, res) => {
1101
+ const { developerProfiles } = req.body;
1102
+ if (!developerProfiles) {
1103
+ res.status(400).json({ error: 'developerProfiles required' });
1104
+ return;
1105
+ }
1106
+ res.json({ playbooks: (0, community_intelligence_1.getCommunityPlaybooks)(developerProfiles) });
1107
+ });
1108
+ app.post('/community/v2/benchmarks', (req, res) => {
1109
+ const { developerStats } = req.body;
1110
+ if (!developerStats) {
1111
+ res.status(400).json({ error: 'developerStats required' });
1112
+ return;
1113
+ }
1114
+ res.json({ benchmarks: (0, community_intelligence_1.getCommunityBenchmarks)(developerStats) });
1115
+ });
1116
+ app.get('/community/v2/reputation', (req, res) => {
1117
+ const limit = parseInt(req.query.limit) || 20;
1118
+ res.json({ reputation: (0, community_intelligence_1.getTopReputation)(limit) });
1119
+ });
1120
+ app.post('/community/v2/reset', (_req, res) => {
1121
+ (0, community_intelligence_1.resetCommunity)();
1122
+ res.json({ reset: true });
1123
+ });
1124
+ // ─── ORGANIZATION INTELLIGENCE V2 (Ch8) ───────────────
1125
+ app.post('/org/v2/ensure', (req, res) => {
1126
+ const { orgId } = req.body;
1127
+ if (!orgId) {
1128
+ res.status(400).json({ error: 'orgId required' });
1129
+ return;
1130
+ }
1131
+ (0, org_intelligence_1.ensureOrganization)(orgId);
1132
+ res.json({ ensured: true });
1133
+ });
1134
+ app.post('/org/v2/team/register', (req, res) => {
1135
+ const { orgId, teamId, name } = req.body;
1136
+ if (!orgId || !teamId) {
1137
+ res.status(400).json({ error: 'orgId and teamId required' });
1138
+ return;
1139
+ }
1140
+ (0, org_intelligence_1.registerTeam)(orgId, teamId, name || teamId);
1141
+ res.json({ registered: true });
1142
+ });
1143
+ app.post('/org/v2/outcomes/ingest', (req, res) => {
1144
+ const { orgId, teamId, memberId, outcomes } = req.body;
1145
+ if (!orgId || !teamId || !outcomes) {
1146
+ res.status(400).json({ error: 'orgId, teamId, outcomes required' });
1147
+ return;
1148
+ }
1149
+ const count = (0, org_intelligence_1.ingestTeamOutcomes)(orgId, teamId, memberId || 'anonymous', outcomes);
1150
+ res.json({ ingested: count });
1151
+ });
1152
+ app.get('/org/v2/:orgId/rankings', (req, res) => {
1153
+ const result = (0, org_intelligence_1.getTeamRankings)(req.params.orgId);
1154
+ if (!result) {
1155
+ res.status(404).json({ error: 'org not found' });
1156
+ return;
1157
+ }
1158
+ res.json(result);
1159
+ });
1160
+ app.get('/org/v2/:orgId/team/:teamId/dna', (req, res) => {
1161
+ const dna = (0, org_intelligence_1.computeTeamDNA)(req.params.orgId, req.params.teamId);
1162
+ if (!dna) {
1163
+ res.status(404).json({ error: 'team not found' });
1164
+ return;
1165
+ }
1166
+ res.json(dna);
1167
+ });
1168
+ app.get('/org/v2/:orgId/teams/dna', (req, res) => {
1169
+ res.json({ teams: (0, org_intelligence_1.getAllTeamDNA)(req.params.orgId) });
1170
+ });
1171
+ app.post('/org/v2/:orgId/benchmarks', (req, res) => {
1172
+ const benchmarks = (0, org_intelligence_1.computeBenchmarks)(req.params.orgId);
1173
+ res.json({ benchmarks });
1174
+ });
1175
+ app.post('/org/v2/:orgId/workflows', (req, res) => {
1176
+ const { teamHistories } = req.body;
1177
+ if (!teamHistories) {
1178
+ res.status(400).json({ error: 'teamHistories required' });
1179
+ return;
1180
+ }
1181
+ res.json({ workflows: (0, org_intelligence_1.detectWorkflows)(teamHistories) });
1182
+ });
1183
+ app.get('/org/v2/:orgId/silos', (req, res) => {
1184
+ res.json({ silos: (0, org_intelligence_1.detectKnowledgeSilos)(req.params.orgId) });
1185
+ });
1186
+ app.get('/org/v2/:orgId/bus-factor', (req, res) => {
1187
+ res.json((0, org_intelligence_1.computeBusFactor)(req.params.orgId));
1188
+ });
1189
+ app.get('/org/v2/:orgId/risks', (req, res) => {
1190
+ res.json({ risks: (0, org_intelligence_1.computeTeamRisk)(req.params.orgId) });
1191
+ });
1192
+ app.get('/org/v2/:orgId/playbooks', (req, res) => {
1193
+ res.json({ playbooks: (0, org_intelligence_1.generateOrgPlaybooks)(req.params.orgId) });
1194
+ });
1195
+ app.get('/org/v2/:orgId/insights', (req, res) => {
1196
+ res.json({ insights: (0, org_intelligence_1.generateExecutiveInsights)(req.params.orgId) });
1197
+ });
1198
+ app.post('/org/v2/:orgId/snapshot', (req, res) => {
1199
+ (0, org_intelligence_1.takeSnapshot)(req.params.orgId);
1200
+ res.json({ snapped: true });
1201
+ });
1202
+ app.post('/org/v2/:orgId/reset', (req, res) => {
1203
+ (0, org_intelligence_1.resetOrg)(req.params.orgId);
1204
+ res.json({ reset: true });
1205
+ });
1206
+ // ─── CROSS-LAYER INTELLIGENCE (Ch9) ───────────────────
1207
+ app.post('/intelligence/context', (req, res) => {
1208
+ if (!req.body) {
1209
+ res.status(400).json({ error: 'body required' });
1210
+ return;
1211
+ }
1212
+ const ctx = (0, cross_layer_intelligence_1.buildUnifiedContext)(req.body);
1213
+ res.json(ctx);
1214
+ });
1215
+ app.get('/intelligence/context/:developerId', (req, res) => {
1216
+ const ctx = (0, cross_layer_intelligence_1.getCachedContext)(req.params.developerId);
1217
+ if (!ctx) {
1218
+ res.status(404).json({ error: 'context not found' });
1219
+ return;
1220
+ }
1221
+ res.json(ctx);
1222
+ });
1223
+ app.post('/intelligence/score', (req, res) => {
1224
+ if (!req.body) {
1225
+ res.status(400).json({ error: 'body required' });
1226
+ return;
1227
+ }
1228
+ res.json((0, cross_layer_intelligence_1.computeIntelligenceScore)(req.body));
1229
+ });
1230
+ app.post('/intelligence/evidence', (req, res) => {
1231
+ if (!req.body) {
1232
+ res.status(400).json({ error: 'body required' });
1233
+ return;
1234
+ }
1235
+ res.json((0, cross_layer_intelligence_1.generateEvidence)(req.body));
1236
+ });
1237
+ app.post('/intelligence/gaps', (req, res) => {
1238
+ if (!req.body) {
1239
+ res.status(400).json({ error: 'body required' });
1240
+ return;
1241
+ }
1242
+ res.json({ gaps: (0, cross_layer_intelligence_1.detectKnowledgeGaps)(req.body) });
1243
+ });
1244
+ app.post('/intelligence/opportunities', (req, res) => {
1245
+ if (!req.body) {
1246
+ res.status(400).json({ error: 'body required' });
1247
+ return;
1248
+ }
1249
+ res.json({ opportunities: (0, cross_layer_intelligence_1.findOpportunities)(req.body) });
1250
+ });
1251
+ app.post('/intelligence/risks', (req, res) => {
1252
+ if (!req.body) {
1253
+ res.status(400).json({ error: 'body required' });
1254
+ return;
1255
+ }
1256
+ res.json({ risks: (0, cross_layer_intelligence_1.analyzeRisks)(req.body) });
1257
+ });
1258
+ app.post('/intelligence/lifecycle', (req, res) => {
1259
+ if (!req.body) {
1260
+ res.status(400).json({ error: 'body required' });
1261
+ return;
1262
+ }
1263
+ res.json({ lifecycles: (0, cross_layer_intelligence_1.classifyLifecycle)(req.body) });
1264
+ });
1265
+ app.post('/intelligence/decisions', (req, res) => {
1266
+ if (!req.body) {
1267
+ res.status(400).json({ error: 'body required' });
1268
+ return;
1269
+ }
1270
+ res.json({ decisions: (0, cross_layer_intelligence_1.generateDecisions)(req.body) });
1271
+ });
1272
+ app.post('/intelligence/benchmarks', (req, res) => {
1273
+ if (!req.body) {
1274
+ res.status(400).json({ error: 'body required' });
1275
+ return;
1276
+ }
1277
+ res.json({ benchmarks: (0, cross_layer_intelligence_1.computeMultiLevelBenchmarks)(req.body) });
1278
+ });
1279
+ app.post('/intelligence/report', (req, res) => {
1280
+ if (!req.body) {
1281
+ res.status(400).json({ error: 'body required' });
1282
+ return;
1283
+ }
1284
+ const report = (0, cross_layer_intelligence_1.generateIntelligenceReport)(req.body);
1285
+ res.json(report);
1286
+ });
1287
+ app.get('/intelligence/report/:reportId', (req, res) => {
1288
+ const report = (0, cross_layer_intelligence_1.getReport)(req.params.reportId);
1289
+ if (!report) {
1290
+ res.status(404).json({ error: 'report not found' });
1291
+ return;
1292
+ }
1293
+ res.json(report);
1294
+ });
1295
+ app.get('/intelligence/reports', (_req, res) => {
1296
+ res.json({ reports: (0, cross_layer_intelligence_1.listReports)() });
1297
+ });
1298
+ app.post('/intelligence/reset', (_req, res) => {
1299
+ (0, cross_layer_intelligence_1.resetCrossLayer)();
1300
+ res.json({ reset: true });
1301
+ });
495
1302
  app.use((_req, res) => { res.status(404).json({ error: 'not found' }); });
496
1303
  app.use((err, _req, res, _next) => {
497
1304
  console.error('Daemon error:', err.message);
498
1305
  res.status(500).json({ error: 'internal server error' });
499
1306
  });
1307
+ try {
1308
+ (0, ai_memory_1.initializeMemory)();
1309
+ }
1310
+ catch (e) {
1311
+ console.error('AI memory init failed:', e);
1312
+ }
500
1313
  app.listen(PORT, () => {
501
1314
  console.log(`Cell Daemon running on http://localhost:${PORT}`);
502
1315
  console.log(`Modules loaded: ${Object.keys(engines).length}`);