@miller-tech/uap 1.0.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 (660) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +888 -0
  3. package/dist/analyzers/index.d.ts +3 -0
  4. package/dist/analyzers/index.d.ts.map +1 -0
  5. package/dist/analyzers/index.js +684 -0
  6. package/dist/analyzers/index.js.map +1 -0
  7. package/dist/benchmarks/agents/naive-agent.d.ts +60 -0
  8. package/dist/benchmarks/agents/naive-agent.d.ts.map +1 -0
  9. package/dist/benchmarks/agents/naive-agent.js +144 -0
  10. package/dist/benchmarks/agents/naive-agent.js.map +1 -0
  11. package/dist/benchmarks/agents/uap-agent.d.ts +167 -0
  12. package/dist/benchmarks/agents/uap-agent.d.ts.map +1 -0
  13. package/dist/benchmarks/agents/uap-agent.js +437 -0
  14. package/dist/benchmarks/agents/uap-agent.js.map +1 -0
  15. package/dist/benchmarks/benchmark.d.ts +328 -0
  16. package/dist/benchmarks/benchmark.d.ts.map +1 -0
  17. package/dist/benchmarks/benchmark.js +112 -0
  18. package/dist/benchmarks/benchmark.js.map +1 -0
  19. package/dist/benchmarks/execution-verifier.d.ts +41 -0
  20. package/dist/benchmarks/execution-verifier.d.ts.map +1 -0
  21. package/dist/benchmarks/execution-verifier.js +340 -0
  22. package/dist/benchmarks/execution-verifier.js.map +1 -0
  23. package/dist/benchmarks/hierarchical-prompting.d.ts +37 -0
  24. package/dist/benchmarks/hierarchical-prompting.d.ts.map +1 -0
  25. package/dist/benchmarks/hierarchical-prompting.js +246 -0
  26. package/dist/benchmarks/hierarchical-prompting.js.map +1 -0
  27. package/dist/benchmarks/improved-benchmark.d.ts +89 -0
  28. package/dist/benchmarks/improved-benchmark.d.ts.map +1 -0
  29. package/dist/benchmarks/improved-benchmark.js +585 -0
  30. package/dist/benchmarks/improved-benchmark.js.map +1 -0
  31. package/dist/benchmarks/index.d.ts +11 -0
  32. package/dist/benchmarks/index.d.ts.map +1 -0
  33. package/dist/benchmarks/index.js +11 -0
  34. package/dist/benchmarks/index.js.map +1 -0
  35. package/dist/benchmarks/model-integration.d.ts +111 -0
  36. package/dist/benchmarks/model-integration.d.ts.map +1 -0
  37. package/dist/benchmarks/model-integration.js +904 -0
  38. package/dist/benchmarks/model-integration.js.map +1 -0
  39. package/dist/benchmarks/multi-turn-agent.d.ts +44 -0
  40. package/dist/benchmarks/multi-turn-agent.d.ts.map +1 -0
  41. package/dist/benchmarks/multi-turn-agent.js +254 -0
  42. package/dist/benchmarks/multi-turn-agent.js.map +1 -0
  43. package/dist/benchmarks/multi-turn-loop.d.ts +57 -0
  44. package/dist/benchmarks/multi-turn-loop.d.ts.map +1 -0
  45. package/dist/benchmarks/multi-turn-loop.js +167 -0
  46. package/dist/benchmarks/multi-turn-loop.js.map +1 -0
  47. package/dist/benchmarks/tasks.d.ts +19 -0
  48. package/dist/benchmarks/tasks.d.ts.map +1 -0
  49. package/dist/benchmarks/tasks.js +435 -0
  50. package/dist/benchmarks/tasks.js.map +1 -0
  51. package/dist/bin/cli.d.ts +3 -0
  52. package/dist/bin/cli.d.ts.map +1 -0
  53. package/dist/bin/cli.js +546 -0
  54. package/dist/bin/cli.js.map +1 -0
  55. package/dist/bin/llama-server-optimize.d.ts +18 -0
  56. package/dist/bin/llama-server-optimize.d.ts.map +1 -0
  57. package/dist/bin/llama-server-optimize.js +708 -0
  58. package/dist/bin/llama-server-optimize.js.map +1 -0
  59. package/dist/bin/policy.d.ts +3 -0
  60. package/dist/bin/policy.d.ts.map +1 -0
  61. package/dist/bin/policy.js +143 -0
  62. package/dist/bin/policy.js.map +1 -0
  63. package/dist/bin/tool-calls.d.ts +3 -0
  64. package/dist/bin/tool-calls.d.ts.map +1 -0
  65. package/dist/bin/tool-calls.js +4 -0
  66. package/dist/bin/tool-calls.js.map +1 -0
  67. package/dist/browser/index.d.ts +2 -0
  68. package/dist/browser/index.d.ts.map +1 -0
  69. package/dist/browser/index.js +2 -0
  70. package/dist/browser/index.js.map +1 -0
  71. package/dist/browser/web-browser.d.ts +30 -0
  72. package/dist/browser/web-browser.d.ts.map +1 -0
  73. package/dist/browser/web-browser.js +93 -0
  74. package/dist/browser/web-browser.js.map +1 -0
  75. package/dist/cli/agent.d.ts +20 -0
  76. package/dist/cli/agent.d.ts.map +1 -0
  77. package/dist/cli/agent.js +474 -0
  78. package/dist/cli/agent.js.map +1 -0
  79. package/dist/cli/analyze.d.ts +7 -0
  80. package/dist/cli/analyze.d.ts.map +1 -0
  81. package/dist/cli/analyze.js +103 -0
  82. package/dist/cli/analyze.js.map +1 -0
  83. package/dist/cli/completion-gates.d.ts +51 -0
  84. package/dist/cli/completion-gates.d.ts.map +1 -0
  85. package/dist/cli/completion-gates.js +201 -0
  86. package/dist/cli/completion-gates.js.map +1 -0
  87. package/dist/cli/compliance.d.ts +8 -0
  88. package/dist/cli/compliance.d.ts.map +1 -0
  89. package/dist/cli/compliance.js +509 -0
  90. package/dist/cli/compliance.js.map +1 -0
  91. package/dist/cli/coord.d.ts +7 -0
  92. package/dist/cli/coord.d.ts.map +1 -0
  93. package/dist/cli/coord.js +138 -0
  94. package/dist/cli/coord.js.map +1 -0
  95. package/dist/cli/dashboard.d.ts +21 -0
  96. package/dist/cli/dashboard.d.ts.map +1 -0
  97. package/dist/cli/dashboard.js +1508 -0
  98. package/dist/cli/dashboard.js.map +1 -0
  99. package/dist/cli/deploy.d.ts +19 -0
  100. package/dist/cli/deploy.d.ts.map +1 -0
  101. package/dist/cli/deploy.js +387 -0
  102. package/dist/cli/deploy.js.map +1 -0
  103. package/dist/cli/droids.d.ts +9 -0
  104. package/dist/cli/droids.d.ts.map +1 -0
  105. package/dist/cli/droids.js +227 -0
  106. package/dist/cli/droids.js.map +1 -0
  107. package/dist/cli/generate.d.ts +17 -0
  108. package/dist/cli/generate.d.ts.map +1 -0
  109. package/dist/cli/generate.js +432 -0
  110. package/dist/cli/generate.js.map +1 -0
  111. package/dist/cli/hooks.d.ts +9 -0
  112. package/dist/cli/hooks.d.ts.map +1 -0
  113. package/dist/cli/hooks.js +464 -0
  114. package/dist/cli/hooks.js.map +1 -0
  115. package/dist/cli/init.d.ts +12 -0
  116. package/dist/cli/init.d.ts.map +1 -0
  117. package/dist/cli/init.js +364 -0
  118. package/dist/cli/init.js.map +1 -0
  119. package/dist/cli/mcp-router.d.ts +16 -0
  120. package/dist/cli/mcp-router.d.ts.map +1 -0
  121. package/dist/cli/mcp-router.js +143 -0
  122. package/dist/cli/mcp-router.js.map +1 -0
  123. package/dist/cli/memory.d.ts +24 -0
  124. package/dist/cli/memory.d.ts.map +1 -0
  125. package/dist/cli/memory.js +885 -0
  126. package/dist/cli/memory.js.map +1 -0
  127. package/dist/cli/model.d.ts +15 -0
  128. package/dist/cli/model.d.ts.map +1 -0
  129. package/dist/cli/model.js +290 -0
  130. package/dist/cli/model.js.map +1 -0
  131. package/dist/cli/patterns.d.ts +26 -0
  132. package/dist/cli/patterns.d.ts.map +1 -0
  133. package/dist/cli/patterns.js +862 -0
  134. package/dist/cli/patterns.js.map +1 -0
  135. package/dist/cli/rtk-validation.d.ts +9 -0
  136. package/dist/cli/rtk-validation.d.ts.map +1 -0
  137. package/dist/cli/rtk-validation.js +9 -0
  138. package/dist/cli/rtk-validation.js.map +1 -0
  139. package/dist/cli/rtk.d.ts +34 -0
  140. package/dist/cli/rtk.d.ts.map +1 -0
  141. package/dist/cli/rtk.js +401 -0
  142. package/dist/cli/rtk.js.map +1 -0
  143. package/dist/cli/schema-diff.d.ts +7 -0
  144. package/dist/cli/schema-diff.d.ts.map +1 -0
  145. package/dist/cli/schema-diff.js +11 -0
  146. package/dist/cli/schema-diff.js.map +1 -0
  147. package/dist/cli/setup-mcp-router.d.ts +8 -0
  148. package/dist/cli/setup-mcp-router.d.ts.map +1 -0
  149. package/dist/cli/setup-mcp-router.js +163 -0
  150. package/dist/cli/setup-mcp-router.js.map +1 -0
  151. package/dist/cli/setup-wizard.d.ts +2 -0
  152. package/dist/cli/setup-wizard.d.ts.map +1 -0
  153. package/dist/cli/setup-wizard.js +806 -0
  154. package/dist/cli/setup-wizard.js.map +1 -0
  155. package/dist/cli/setup.d.ts +15 -0
  156. package/dist/cli/setup.d.ts.map +1 -0
  157. package/dist/cli/setup.js +154 -0
  158. package/dist/cli/setup.js.map +1 -0
  159. package/dist/cli/sync.d.ts +8 -0
  160. package/dist/cli/sync.d.ts.map +1 -0
  161. package/dist/cli/sync.js +395 -0
  162. package/dist/cli/sync.js.map +1 -0
  163. package/dist/cli/task.d.ts +33 -0
  164. package/dist/cli/task.d.ts.map +1 -0
  165. package/dist/cli/task.js +672 -0
  166. package/dist/cli/task.js.map +1 -0
  167. package/dist/cli/tool-calls.d.ts +20 -0
  168. package/dist/cli/tool-calls.d.ts.map +1 -0
  169. package/dist/cli/tool-calls.js +605 -0
  170. package/dist/cli/tool-calls.js.map +1 -0
  171. package/dist/cli/uap.d.ts +10 -0
  172. package/dist/cli/uap.d.ts.map +1 -0
  173. package/dist/cli/uap.js +398 -0
  174. package/dist/cli/uap.js.map +1 -0
  175. package/dist/cli/update.d.ts +10 -0
  176. package/dist/cli/update.d.ts.map +1 -0
  177. package/dist/cli/update.js +300 -0
  178. package/dist/cli/update.js.map +1 -0
  179. package/dist/cli/visualize.d.ts +77 -0
  180. package/dist/cli/visualize.d.ts.map +1 -0
  181. package/dist/cli/visualize.js +287 -0
  182. package/dist/cli/visualize.js.map +1 -0
  183. package/dist/cli/worktree.d.ts +9 -0
  184. package/dist/cli/worktree.d.ts.map +1 -0
  185. package/dist/cli/worktree.js +213 -0
  186. package/dist/cli/worktree.js.map +1 -0
  187. package/dist/coordination/adaptive-patterns.d.ts +65 -0
  188. package/dist/coordination/adaptive-patterns.d.ts.map +1 -0
  189. package/dist/coordination/adaptive-patterns.js +108 -0
  190. package/dist/coordination/adaptive-patterns.js.map +1 -0
  191. package/dist/coordination/auto-agent.d.ts +82 -0
  192. package/dist/coordination/auto-agent.d.ts.map +1 -0
  193. package/dist/coordination/auto-agent.js +145 -0
  194. package/dist/coordination/auto-agent.js.map +1 -0
  195. package/dist/coordination/capability-router.d.ts +79 -0
  196. package/dist/coordination/capability-router.d.ts.map +1 -0
  197. package/dist/coordination/capability-router.js +334 -0
  198. package/dist/coordination/capability-router.js.map +1 -0
  199. package/dist/coordination/database.d.ts +13 -0
  200. package/dist/coordination/database.d.ts.map +1 -0
  201. package/dist/coordination/database.js +136 -0
  202. package/dist/coordination/database.js.map +1 -0
  203. package/dist/coordination/deploy-batcher.d.ts +122 -0
  204. package/dist/coordination/deploy-batcher.d.ts.map +1 -0
  205. package/dist/coordination/deploy-batcher.js +718 -0
  206. package/dist/coordination/deploy-batcher.js.map +1 -0
  207. package/dist/coordination/droid-validator.d.ts +59 -0
  208. package/dist/coordination/droid-validator.d.ts.map +1 -0
  209. package/dist/coordination/droid-validator.js +142 -0
  210. package/dist/coordination/droid-validator.js.map +1 -0
  211. package/dist/coordination/index.d.ts +10 -0
  212. package/dist/coordination/index.d.ts.map +1 -0
  213. package/dist/coordination/index.js +10 -0
  214. package/dist/coordination/index.js.map +1 -0
  215. package/dist/coordination/pattern-router.d.ts +50 -0
  216. package/dist/coordination/pattern-router.d.ts.map +1 -0
  217. package/dist/coordination/pattern-router.js +118 -0
  218. package/dist/coordination/pattern-router.js.map +1 -0
  219. package/dist/coordination/service.d.ts +81 -0
  220. package/dist/coordination/service.d.ts.map +1 -0
  221. package/dist/coordination/service.js +619 -0
  222. package/dist/coordination/service.js.map +1 -0
  223. package/dist/coordination/worktree-enforcer.d.ts +22 -0
  224. package/dist/coordination/worktree-enforcer.d.ts.map +1 -0
  225. package/dist/coordination/worktree-enforcer.js +71 -0
  226. package/dist/coordination/worktree-enforcer.js.map +1 -0
  227. package/dist/generators/claude-md.d.ts +3 -0
  228. package/dist/generators/claude-md.d.ts.map +1 -0
  229. package/dist/generators/claude-md.js +1020 -0
  230. package/dist/generators/claude-md.js.map +1 -0
  231. package/dist/generators/template-loader.d.ts +105 -0
  232. package/dist/generators/template-loader.d.ts.map +1 -0
  233. package/dist/generators/template-loader.js +291 -0
  234. package/dist/generators/template-loader.js.map +1 -0
  235. package/dist/index.d.ts +49 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +63 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/mcp-router/config/parser.d.ts +9 -0
  240. package/dist/mcp-router/config/parser.d.ts.map +1 -0
  241. package/dist/mcp-router/config/parser.js +174 -0
  242. package/dist/mcp-router/config/parser.js.map +1 -0
  243. package/dist/mcp-router/executor/client.d.ts +31 -0
  244. package/dist/mcp-router/executor/client.d.ts.map +1 -0
  245. package/dist/mcp-router/executor/client.js +189 -0
  246. package/dist/mcp-router/executor/client.js.map +1 -0
  247. package/dist/mcp-router/index.d.ts +22 -0
  248. package/dist/mcp-router/index.d.ts.map +1 -0
  249. package/dist/mcp-router/index.js +18 -0
  250. package/dist/mcp-router/index.js.map +1 -0
  251. package/dist/mcp-router/output-compressor.d.ts +26 -0
  252. package/dist/mcp-router/output-compressor.d.ts.map +1 -0
  253. package/dist/mcp-router/output-compressor.js +236 -0
  254. package/dist/mcp-router/output-compressor.js.map +1 -0
  255. package/dist/mcp-router/search/fuzzy.d.ts +26 -0
  256. package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
  257. package/dist/mcp-router/search/fuzzy.js +94 -0
  258. package/dist/mcp-router/search/fuzzy.js.map +1 -0
  259. package/dist/mcp-router/server.d.ts +50 -0
  260. package/dist/mcp-router/server.d.ts.map +1 -0
  261. package/dist/mcp-router/server.js +229 -0
  262. package/dist/mcp-router/server.js.map +1 -0
  263. package/dist/mcp-router/session-stats.d.ts +37 -0
  264. package/dist/mcp-router/session-stats.d.ts.map +1 -0
  265. package/dist/mcp-router/session-stats.js +56 -0
  266. package/dist/mcp-router/session-stats.js.map +1 -0
  267. package/dist/mcp-router/tools/discover.d.ts +37 -0
  268. package/dist/mcp-router/tools/discover.d.ts.map +1 -0
  269. package/dist/mcp-router/tools/discover.js +65 -0
  270. package/dist/mcp-router/tools/discover.js.map +1 -0
  271. package/dist/mcp-router/tools/execute.d.ts +43 -0
  272. package/dist/mcp-router/tools/execute.d.ts.map +1 -0
  273. package/dist/mcp-router/tools/execute.js +144 -0
  274. package/dist/mcp-router/tools/execute.js.map +1 -0
  275. package/dist/mcp-router/types.d.ts +62 -0
  276. package/dist/mcp-router/types.d.ts.map +1 -0
  277. package/dist/mcp-router/types.js +6 -0
  278. package/dist/mcp-router/types.js.map +1 -0
  279. package/dist/memory/adaptive-context.d.ts +149 -0
  280. package/dist/memory/adaptive-context.d.ts.map +1 -0
  281. package/dist/memory/adaptive-context.js +1095 -0
  282. package/dist/memory/adaptive-context.js.map +1 -0
  283. package/dist/memory/agent-scoped-memory.d.ts +67 -0
  284. package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
  285. package/dist/memory/agent-scoped-memory.js +126 -0
  286. package/dist/memory/agent-scoped-memory.js.map +1 -0
  287. package/dist/memory/ambiguity-detector.d.ts +54 -0
  288. package/dist/memory/ambiguity-detector.d.ts.map +1 -0
  289. package/dist/memory/ambiguity-detector.js +401 -0
  290. package/dist/memory/ambiguity-detector.js.map +1 -0
  291. package/dist/memory/backends/base.d.ts +18 -0
  292. package/dist/memory/backends/base.d.ts.map +1 -0
  293. package/dist/memory/backends/base.js +2 -0
  294. package/dist/memory/backends/base.js.map +1 -0
  295. package/dist/memory/backends/factory.d.ts +4 -0
  296. package/dist/memory/backends/factory.d.ts.map +1 -0
  297. package/dist/memory/backends/factory.js +53 -0
  298. package/dist/memory/backends/factory.js.map +1 -0
  299. package/dist/memory/backends/github.d.ts +27 -0
  300. package/dist/memory/backends/github.d.ts.map +1 -0
  301. package/dist/memory/backends/github.js +134 -0
  302. package/dist/memory/backends/github.js.map +1 -0
  303. package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
  304. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
  305. package/dist/memory/backends/qdrant-cloud.js +167 -0
  306. package/dist/memory/backends/qdrant-cloud.js.map +1 -0
  307. package/dist/memory/context-compressor.d.ts +116 -0
  308. package/dist/memory/context-compressor.d.ts.map +1 -0
  309. package/dist/memory/context-compressor.js +430 -0
  310. package/dist/memory/context-compressor.js.map +1 -0
  311. package/dist/memory/context-pruner.d.ts +55 -0
  312. package/dist/memory/context-pruner.d.ts.map +1 -0
  313. package/dist/memory/context-pruner.js +85 -0
  314. package/dist/memory/context-pruner.js.map +1 -0
  315. package/dist/memory/correction-propagator.d.ts +44 -0
  316. package/dist/memory/correction-propagator.d.ts.map +1 -0
  317. package/dist/memory/correction-propagator.js +156 -0
  318. package/dist/memory/correction-propagator.js.map +1 -0
  319. package/dist/memory/daily-log.d.ts +67 -0
  320. package/dist/memory/daily-log.d.ts.map +1 -0
  321. package/dist/memory/daily-log.js +143 -0
  322. package/dist/memory/daily-log.js.map +1 -0
  323. package/dist/memory/dynamic-retrieval.d.ts +112 -0
  324. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  325. package/dist/memory/dynamic-retrieval.js +908 -0
  326. package/dist/memory/dynamic-retrieval.js.map +1 -0
  327. package/dist/memory/embeddings.d.ts +172 -0
  328. package/dist/memory/embeddings.d.ts.map +1 -0
  329. package/dist/memory/embeddings.js +780 -0
  330. package/dist/memory/embeddings.js.map +1 -0
  331. package/dist/memory/generic-uap-patterns.d.ts +7 -0
  332. package/dist/memory/generic-uap-patterns.d.ts.map +1 -0
  333. package/dist/memory/generic-uap-patterns.js +43 -0
  334. package/dist/memory/generic-uap-patterns.js.map +1 -0
  335. package/dist/memory/hierarchical-memory.d.ts +141 -0
  336. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  337. package/dist/memory/hierarchical-memory.js +485 -0
  338. package/dist/memory/hierarchical-memory.js.map +1 -0
  339. package/dist/memory/knowledge-graph.d.ts +98 -0
  340. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  341. package/dist/memory/knowledge-graph.js +275 -0
  342. package/dist/memory/knowledge-graph.js.map +1 -0
  343. package/dist/memory/memory-consolidator.d.ts +124 -0
  344. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  345. package/dist/memory/memory-consolidator.js +514 -0
  346. package/dist/memory/memory-consolidator.js.map +1 -0
  347. package/dist/memory/memory-maintenance.d.ts +39 -0
  348. package/dist/memory/memory-maintenance.d.ts.map +1 -0
  349. package/dist/memory/memory-maintenance.js +336 -0
  350. package/dist/memory/memory-maintenance.js.map +1 -0
  351. package/dist/memory/model-router.d.ts +105 -0
  352. package/dist/memory/model-router.d.ts.map +1 -0
  353. package/dist/memory/model-router.js +474 -0
  354. package/dist/memory/model-router.js.map +1 -0
  355. package/dist/memory/multi-view-memory.d.ts +134 -0
  356. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  357. package/dist/memory/multi-view-memory.js +430 -0
  358. package/dist/memory/multi-view-memory.js.map +1 -0
  359. package/dist/memory/predictive-memory.d.ts +79 -0
  360. package/dist/memory/predictive-memory.d.ts.map +1 -0
  361. package/dist/memory/predictive-memory.js +294 -0
  362. package/dist/memory/predictive-memory.js.map +1 -0
  363. package/dist/memory/prepopulate.d.ts +76 -0
  364. package/dist/memory/prepopulate.d.ts.map +1 -0
  365. package/dist/memory/prepopulate.js +832 -0
  366. package/dist/memory/prepopulate.js.map +1 -0
  367. package/dist/memory/semantic-compression.d.ts +77 -0
  368. package/dist/memory/semantic-compression.d.ts.map +1 -0
  369. package/dist/memory/semantic-compression.js +359 -0
  370. package/dist/memory/semantic-compression.js.map +1 -0
  371. package/dist/memory/serverless-qdrant.d.ts +102 -0
  372. package/dist/memory/serverless-qdrant.d.ts.map +1 -0
  373. package/dist/memory/serverless-qdrant.js +369 -0
  374. package/dist/memory/serverless-qdrant.js.map +1 -0
  375. package/dist/memory/short-term/factory.d.ts +26 -0
  376. package/dist/memory/short-term/factory.d.ts.map +1 -0
  377. package/dist/memory/short-term/factory.js +28 -0
  378. package/dist/memory/short-term/factory.js.map +1 -0
  379. package/dist/memory/short-term/indexeddb.d.ts +25 -0
  380. package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
  381. package/dist/memory/short-term/indexeddb.js +64 -0
  382. package/dist/memory/short-term/indexeddb.js.map +1 -0
  383. package/dist/memory/short-term/schema.d.ts +6 -0
  384. package/dist/memory/short-term/schema.d.ts.map +1 -0
  385. package/dist/memory/short-term/schema.js +141 -0
  386. package/dist/memory/short-term/schema.js.map +1 -0
  387. package/dist/memory/short-term/sqlite.d.ts +64 -0
  388. package/dist/memory/short-term/sqlite.d.ts.map +1 -0
  389. package/dist/memory/short-term/sqlite.js +274 -0
  390. package/dist/memory/short-term/sqlite.js.map +1 -0
  391. package/dist/memory/speculative-cache.d.ts +111 -0
  392. package/dist/memory/speculative-cache.d.ts.map +1 -0
  393. package/dist/memory/speculative-cache.js +457 -0
  394. package/dist/memory/speculative-cache.js.map +1 -0
  395. package/dist/memory/task-classifier.d.ts +40 -0
  396. package/dist/memory/task-classifier.d.ts.map +1 -0
  397. package/dist/memory/task-classifier.js +342 -0
  398. package/dist/memory/task-classifier.js.map +1 -0
  399. package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
  400. package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
  401. package/dist/memory/terminal-bench-knowledge.js +622 -0
  402. package/dist/memory/terminal-bench-knowledge.js.map +1 -0
  403. package/dist/memory/write-gate.d.ts +39 -0
  404. package/dist/memory/write-gate.d.ts.map +1 -0
  405. package/dist/memory/write-gate.js +190 -0
  406. package/dist/memory/write-gate.js.map +1 -0
  407. package/dist/models/api-client.d.ts +46 -0
  408. package/dist/models/api-client.d.ts.map +1 -0
  409. package/dist/models/api-client.js +182 -0
  410. package/dist/models/api-client.js.map +1 -0
  411. package/dist/models/execution-profiles.d.ts +64 -0
  412. package/dist/models/execution-profiles.d.ts.map +1 -0
  413. package/dist/models/execution-profiles.js +403 -0
  414. package/dist/models/execution-profiles.js.map +1 -0
  415. package/dist/models/executor.d.ts +130 -0
  416. package/dist/models/executor.d.ts.map +1 -0
  417. package/dist/models/executor.js +382 -0
  418. package/dist/models/executor.js.map +1 -0
  419. package/dist/models/index.d.ts +19 -0
  420. package/dist/models/index.d.ts.map +1 -0
  421. package/dist/models/index.js +23 -0
  422. package/dist/models/index.js.map +1 -0
  423. package/dist/models/plan-validator.d.ts +37 -0
  424. package/dist/models/plan-validator.d.ts.map +1 -0
  425. package/dist/models/plan-validator.js +179 -0
  426. package/dist/models/plan-validator.js.map +1 -0
  427. package/dist/models/planner.d.ts +73 -0
  428. package/dist/models/planner.d.ts.map +1 -0
  429. package/dist/models/planner.js +375 -0
  430. package/dist/models/planner.js.map +1 -0
  431. package/dist/models/router.d.ts +96 -0
  432. package/dist/models/router.d.ts.map +1 -0
  433. package/dist/models/router.js +523 -0
  434. package/dist/models/router.js.map +1 -0
  435. package/dist/models/types.d.ts +370 -0
  436. package/dist/models/types.d.ts.map +1 -0
  437. package/dist/models/types.js +232 -0
  438. package/dist/models/types.js.map +1 -0
  439. package/dist/models/unified-router.d.ts +152 -0
  440. package/dist/models/unified-router.d.ts.map +1 -0
  441. package/dist/models/unified-router.js +313 -0
  442. package/dist/models/unified-router.js.map +1 -0
  443. package/dist/policies/convert-policy-to-claude.d.ts +3 -0
  444. package/dist/policies/convert-policy-to-claude.d.ts.map +1 -0
  445. package/dist/policies/convert-policy-to-claude.js +87 -0
  446. package/dist/policies/convert-policy-to-claude.js.map +1 -0
  447. package/dist/policies/database-manager.d.ts +27 -0
  448. package/dist/policies/database-manager.d.ts.map +1 -0
  449. package/dist/policies/database-manager.js +198 -0
  450. package/dist/policies/database-manager.js.map +1 -0
  451. package/dist/policies/enforced-tool-router.d.ts +53 -0
  452. package/dist/policies/enforced-tool-router.d.ts.map +1 -0
  453. package/dist/policies/enforced-tool-router.js +80 -0
  454. package/dist/policies/enforced-tool-router.js.map +1 -0
  455. package/dist/policies/index.d.ts +10 -0
  456. package/dist/policies/index.d.ts.map +1 -0
  457. package/dist/policies/index.js +8 -0
  458. package/dist/policies/index.js.map +1 -0
  459. package/dist/policies/policy-gate.d.ts +59 -0
  460. package/dist/policies/policy-gate.d.ts.map +1 -0
  461. package/dist/policies/policy-gate.js +171 -0
  462. package/dist/policies/policy-gate.js.map +1 -0
  463. package/dist/policies/policy-memory.d.ts +18 -0
  464. package/dist/policies/policy-memory.d.ts.map +1 -0
  465. package/dist/policies/policy-memory.js +126 -0
  466. package/dist/policies/policy-memory.js.map +1 -0
  467. package/dist/policies/policy-tools.d.ts +11 -0
  468. package/dist/policies/policy-tools.d.ts.map +1 -0
  469. package/dist/policies/policy-tools.js +66 -0
  470. package/dist/policies/policy-tools.js.map +1 -0
  471. package/dist/policies/schemas/policy.d.ts +69 -0
  472. package/dist/policies/schemas/policy.d.ts.map +1 -0
  473. package/dist/policies/schemas/policy.js +31 -0
  474. package/dist/policies/schemas/policy.js.map +1 -0
  475. package/dist/tasks/coordination.d.ts +83 -0
  476. package/dist/tasks/coordination.d.ts.map +1 -0
  477. package/dist/tasks/coordination.js +291 -0
  478. package/dist/tasks/coordination.js.map +1 -0
  479. package/dist/tasks/database.d.ts +19 -0
  480. package/dist/tasks/database.d.ts.map +1 -0
  481. package/dist/tasks/database.js +149 -0
  482. package/dist/tasks/database.js.map +1 -0
  483. package/dist/tasks/decoder-gate.d.ts +64 -0
  484. package/dist/tasks/decoder-gate.d.ts.map +1 -0
  485. package/dist/tasks/decoder-gate.js +268 -0
  486. package/dist/tasks/decoder-gate.js.map +1 -0
  487. package/dist/tasks/index.d.ts +6 -0
  488. package/dist/tasks/index.d.ts.map +1 -0
  489. package/dist/tasks/index.js +6 -0
  490. package/dist/tasks/index.js.map +1 -0
  491. package/dist/tasks/service.d.ts +40 -0
  492. package/dist/tasks/service.d.ts.map +1 -0
  493. package/dist/tasks/service.js +671 -0
  494. package/dist/tasks/service.js.map +1 -0
  495. package/dist/tasks/types.d.ts +238 -0
  496. package/dist/tasks/types.d.ts.map +1 -0
  497. package/dist/tasks/types.js +74 -0
  498. package/dist/tasks/types.js.map +1 -0
  499. package/dist/telemetry/index.d.ts +2 -0
  500. package/dist/telemetry/index.d.ts.map +1 -0
  501. package/dist/telemetry/index.js +2 -0
  502. package/dist/telemetry/index.js.map +1 -0
  503. package/dist/telemetry/session-telemetry.d.ts +56 -0
  504. package/dist/telemetry/session-telemetry.d.ts.map +1 -0
  505. package/dist/telemetry/session-telemetry.js +807 -0
  506. package/dist/telemetry/session-telemetry.js.map +1 -0
  507. package/dist/types/analysis.d.ts +82 -0
  508. package/dist/types/analysis.d.ts.map +1 -0
  509. package/dist/types/analysis.js +2 -0
  510. package/dist/types/analysis.js.map +1 -0
  511. package/dist/types/config.d.ts +3324 -0
  512. package/dist/types/config.d.ts.map +1 -0
  513. package/dist/types/config.js +418 -0
  514. package/dist/types/config.js.map +1 -0
  515. package/dist/types/coordination.d.ts +240 -0
  516. package/dist/types/coordination.d.ts.map +1 -0
  517. package/dist/types/coordination.js +43 -0
  518. package/dist/types/coordination.js.map +1 -0
  519. package/dist/types/index.d.ts +4 -0
  520. package/dist/types/index.d.ts.map +1 -0
  521. package/dist/types/index.js +4 -0
  522. package/dist/types/index.js.map +1 -0
  523. package/dist/uap-droids-strict.d.ts +59 -0
  524. package/dist/uap-droids-strict.d.ts.map +1 -0
  525. package/dist/uap-droids-strict.js +200 -0
  526. package/dist/uap-droids-strict.js.map +1 -0
  527. package/dist/utils/config-manager.d.ts +30 -0
  528. package/dist/utils/config-manager.d.ts.map +1 -0
  529. package/dist/utils/config-manager.js +41 -0
  530. package/dist/utils/config-manager.js.map +1 -0
  531. package/dist/utils/fetch-with-retry.d.ts +5 -0
  532. package/dist/utils/fetch-with-retry.d.ts.map +1 -0
  533. package/dist/utils/fetch-with-retry.js +61 -0
  534. package/dist/utils/fetch-with-retry.js.map +1 -0
  535. package/dist/utils/merge-claude-md.d.ts +28 -0
  536. package/dist/utils/merge-claude-md.d.ts.map +1 -0
  537. package/dist/utils/merge-claude-md.js +342 -0
  538. package/dist/utils/merge-claude-md.js.map +1 -0
  539. package/dist/utils/rate-limiter.d.ts +58 -0
  540. package/dist/utils/rate-limiter.d.ts.map +1 -0
  541. package/dist/utils/rate-limiter.js +100 -0
  542. package/dist/utils/rate-limiter.js.map +1 -0
  543. package/dist/utils/string-similarity.d.ts +37 -0
  544. package/dist/utils/string-similarity.d.ts.map +1 -0
  545. package/dist/utils/string-similarity.js +114 -0
  546. package/dist/utils/string-similarity.js.map +1 -0
  547. package/dist/utils/validate-json.d.ts +51 -0
  548. package/dist/utils/validate-json.d.ts.map +1 -0
  549. package/dist/utils/validate-json.js +94 -0
  550. package/dist/utils/validate-json.js.map +1 -0
  551. package/docs/INDEX.md +66 -0
  552. package/docs/architecture/MULTI_MODEL.md +224 -0
  553. package/docs/architecture/SYSTEM_ANALYSIS.md +1117 -0
  554. package/docs/architecture/UAP_COMPLIANCE.md +217 -0
  555. package/docs/architecture/UAP_PROTOCOL.md +339 -0
  556. package/docs/architecture/UAP_STRICT_DROIDS.md +172 -0
  557. package/docs/archive/BALLS_MODE_SELF_ANALYSIS.md +260 -0
  558. package/docs/archive/FAILING_TASKS_SOLUTION_PLAN.md +668 -0
  559. package/docs/archive/JINJA2-SYSTEM-MESSAGE-FIX.md +209 -0
  560. package/docs/archive/NPM-PUBLISH-V0.9.1.md +240 -0
  561. package/docs/archive/OPTIMIZATION_OPTIONS.md +334 -0
  562. package/docs/archive/SETUP_IMPROVEMENTS.md +213 -0
  563. package/docs/archive/UAP_GENERIC_OPTIMIZATION_PLAN.md +270 -0
  564. package/docs/archive/UAP_V103_PATTERN_DESIGN.md +315 -0
  565. package/docs/archive/UAP_V104_COMPLIANCE_DESIGN.md +223 -0
  566. package/docs/archive/changelog/2026-03-10_uap-100-compliance.md +77 -0
  567. package/docs/archive/changelog/2026-03-10_uap-full-system-verification.md +109 -0
  568. package/docs/benchmarks/ACCURACY_ANALYSIS.md +471 -0
  569. package/docs/benchmarks/TOKEN_OPTIMIZATION.md +572 -0
  570. package/docs/benchmarks/VALIDATION_PLAN.md +568 -0
  571. package/docs/benchmarks/VALIDATION_RESULTS.md +161 -0
  572. package/docs/deployment/DEPLOYMENT.md +895 -0
  573. package/docs/deployment/DEPLOYMENT_STRATEGIES.md +518 -0
  574. package/docs/deployment/DEPLOY_BATCHER_ANALYSIS.md +856 -0
  575. package/docs/deployment/DEPLOY_BATCHING.md +273 -0
  576. package/docs/deployment/DEPLOY_BUCKETING_ANALYSIS.md +420 -0
  577. package/docs/deployment/QWEN35_LLAMA_CPP.md +265 -0
  578. package/docs/getting-started/INTEGRATION.md +449 -0
  579. package/docs/getting-started/OVERVIEW.md +344 -0
  580. package/docs/getting-started/SETUP.md +203 -0
  581. package/docs/integrations/MCP_ROUTER_SETUP.md +445 -0
  582. package/docs/integrations/RTK_INTEGRATION.md +468 -0
  583. package/docs/operations/TROUBLESHOOTING.md +660 -0
  584. package/docs/reference/API_REFERENCE.md +903 -0
  585. package/docs/reference/FEATURES.md +472 -0
  586. package/docs/reference/HARNESS-MATRIX.md +318 -0
  587. package/docs/reference/UAP_CLI_REFERENCE.md +600 -0
  588. package/docs/research/BEHAVIORAL_PATTERNS.md +228 -0
  589. package/docs/research/DOMAIN_STRATEGIES.md +316 -0
  590. package/docs/research/MEMORY_SYSTEMS_COMPARISON.md +812 -0
  591. package/docs/research/PATTERN_ANALYSIS_2026-01-18.md +436 -0
  592. package/docs/research/PERFORMANCE_ANALYSIS_2026-01-18.md +209 -0
  593. package/docs/research/PERFORMANCE_TEST_PLAN.md +383 -0
  594. package/docs/research/TERMINAL_BENCH_LEARNINGS.md +217 -0
  595. package/package.json +113 -0
  596. package/scripts/README.md +161 -0
  597. package/templates/CLAUDE.template.md +10 -0
  598. package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
  599. package/templates/CLAUDE_CODING.template.md +127 -0
  600. package/templates/CLAUDE_DROIDS.template.md +109 -0
  601. package/templates/CLAUDE_MEMORY.template.md +131 -0
  602. package/templates/CLAUDE_WORKFLOWS.template.md +139 -0
  603. package/templates/PROJECT.template.md +209 -0
  604. package/templates/SCHEMA.md +57 -0
  605. package/templates/archive/CLAUDE.template.root-v6.md +534 -0
  606. package/templates/archive/CLAUDE.template.v6.md +534 -0
  607. package/templates/hooks/forgecode/pre-compact.sh +68 -0
  608. package/templates/hooks/forgecode/session-start.sh +169 -0
  609. package/templates/hooks/forgecode.plugin.sh +128 -0
  610. package/templates/hooks/pre-compact.sh +74 -0
  611. package/templates/hooks/session-start.sh +366 -0
  612. package/tools/agents/README.md +224 -0
  613. package/tools/agents/UAP/README.md +386 -0
  614. package/tools/agents/UAP/__init__.py +9 -0
  615. package/tools/agents/UAP/cli.py +901 -0
  616. package/tools/agents/UAP/compliance_verify.sh +108 -0
  617. package/tools/agents/UAP/full_verification.sh +126 -0
  618. package/tools/agents/UAP/version.py +32 -0
  619. package/tools/agents/benchmarks/benchmark_memory_systems.py +730 -0
  620. package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
  621. package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
  622. package/tools/agents/config/chat_template.jinja +77 -0
  623. package/tools/agents/config/tool-call-schema.json +19 -0
  624. package/tools/agents/config/tool-call.gbnf +58 -0
  625. package/tools/agents/docker/Dockerfile.python +52 -0
  626. package/tools/agents/docker/Dockerfile.ubuntu +55 -0
  627. package/tools/agents/docker-compose.qdrant.yml +24 -0
  628. package/tools/agents/install-opencode-local.sh.j2 +135 -0
  629. package/tools/agents/migrations/apply.py +256 -0
  630. package/tools/agents/opencode_uap_agent.py +1505 -0
  631. package/tools/agents/plugin/README.md +91 -0
  632. package/tools/agents/plugin/index.ts +46 -0
  633. package/tools/agents/plugin/pre-compact.sh +68 -0
  634. package/tools/agents/plugin/session-start.sh +175 -0
  635. package/tools/agents/plugin/uap-commands.ts +45 -0
  636. package/tools/agents/plugin/uap-droids.ts +54 -0
  637. package/tools/agents/plugin/uap-patterns.ts +54 -0
  638. package/tools/agents/plugin/uap-skills.ts +52 -0
  639. package/tools/agents/plugins/uap-enforce.ts +314 -0
  640. package/tools/agents/scripts/__pycache__/tool_call_wrapper.cpython-313.pyc +0 -0
  641. package/tools/agents/scripts/chat_template_verifier.py +343 -0
  642. package/tools/agents/scripts/fix-qwen-template.js +38 -0
  643. package/tools/agents/scripts/fix_qwen_chat_template.py +316 -0
  644. package/tools/agents/scripts/generate_lora_training_data.py +412 -0
  645. package/tools/agents/scripts/init_qdrant.py +151 -0
  646. package/tools/agents/scripts/memory_migration.py +560 -0
  647. package/tools/agents/scripts/migrate_memory_to_qdrant.py +110 -0
  648. package/tools/agents/scripts/prepare_lora.sh +512 -0
  649. package/tools/agents/scripts/query_memory.py +200 -0
  650. package/tools/agents/scripts/qwen-tool-call-test.js +38 -0
  651. package/tools/agents/scripts/qwen-tool-call-wrapper.js +38 -0
  652. package/tools/agents/scripts/qwen_tool_call_test.py +464 -0
  653. package/tools/agents/scripts/qwen_tool_call_wrapper.py +686 -0
  654. package/tools/agents/scripts/start-services.sh +96 -0
  655. package/tools/agents/scripts/tool-choice-proxy.cjs +296 -0
  656. package/tools/agents/scripts/tool_call_test.py +656 -0
  657. package/tools/agents/scripts/tool_call_wrapper.py +799 -0
  658. package/tools/agents/tests/test_uap_compliance.py +257 -0
  659. package/tools/agents/uap_agent.py +122 -0
  660. package/tools/agents/uap_agent_install.sh +12 -0
@@ -0,0 +1,780 @@
1
+ /**
2
+ * Embedding Service for UAP Memory System
3
+ *
4
+ * Provides text embedding generation for semantic memory retrieval.
5
+ * Supports multiple backends: Ollama (local), OpenAI, local transformers, or simple TF-IDF fallback.
6
+ *
7
+ * Priority order:
8
+ * 1. Ollama (if running with nomic-embed-text or similar)
9
+ * 2. OpenAI (if API key available)
10
+ * 3. Local sentence-transformers (if installed)
11
+ * 4. TF-IDF fallback (always available)
12
+ */
13
+ import { execFileSync } from 'child_process';
14
+ import { createHash } from 'crypto';
15
+ /**
16
+ * llama.cpp Embeddings Provider (LOCAL - NO API COSTS)
17
+ *
18
+ * Uses llama-server with --embeddings flag to serve embedding models.
19
+ * Recommended model: nomic-embed-text-v2-moe (GGUF)
20
+ * - 475M total params, 305M active (MoE: 8 experts, top-2 routing)
21
+ * - 768 dimensions (Matryoshka: can truncate to 256)
22
+ * - SoTA multilingual (100+ languages, MIRACL 65.8, BEIR 52.86)
23
+ * - Q4_K_M quant: ~328MB VRAM — fits alongside Qwen3.5 35B A3B
24
+ *
25
+ * To run alongside Qwen3.5 35B A3B, launch TWO llama-server instances:
26
+ *
27
+ * # Instance 1: Main LLM (Qwen3.5 35B A3B) on port 8080
28
+ * llama-server \
29
+ * --model /path/to/Qwen3.5-35B-A3B-UD-IQ4_XS.gguf \
30
+ * --chat-template-file chat_template.jinja \
31
+ * --port 8080 --host 0.0.0.0 \
32
+ * --ctx-size 131072 --gpu-layers 99 \
33
+ * --cache-type-k q8_0 --cache-type-v q4_0 \
34
+ * -fa on --threads 8 --batch-size 512
35
+ *
36
+ * # Instance 2: Embedding model on port 8081
37
+ * llama-server \
38
+ * --model /path/to/nomic-embed-text-v2-moe.Q4_K_M.gguf \
39
+ * --port 8081 --host 0.0.0.0 \
40
+ * --embeddings --pooling mean \
41
+ * --ctx-size 512 --gpu-layers 99 \
42
+ * --batch-size 2048 --ubatch-size 512 \
43
+ * --threads 4
44
+ *
45
+ * VRAM budget (24GB GPU):
46
+ * Qwen3.5 IQ4_XS: ~17GB model + ~3GB KV cache = ~20GB
47
+ * nomic-embed Q4_K_M: ~328MB model + ~50MB KV = ~380MB
48
+ * Total: ~20.4GB — fits in 24GB with headroom
49
+ *
50
+ * For CPU-only embedding (saves all GPU for LLM):
51
+ * llama-server \
52
+ * --model /path/to/nomic-embed-text-v2-moe.Q4_K_M.gguf \
53
+ * --port 8081 --host 0.0.0.0 \
54
+ * --embeddings --pooling mean \
55
+ * --ctx-size 512 --gpu-layers 0 \
56
+ * --batch-size 2048 --threads 8
57
+ */
58
+ export class LlamaCppEmbeddingProvider {
59
+ name = 'llama-cpp';
60
+ dimensions = 768; // nomic-embed-text-v2-moe default
61
+ endpoint;
62
+ available = null;
63
+ taskPrefix;
64
+ constructor(endpoint = 'http://localhost:8081', options = {}) {
65
+ // Support env var override
66
+ this.endpoint = process.env.UAP_EMBEDDING_ENDPOINT || endpoint;
67
+ // nomic-embed-text-v2 requires task prefixes for best results
68
+ this.taskPrefix = options.taskPrefix || 'search_document: ';
69
+ }
70
+ async isAvailable() {
71
+ if (this.available !== null)
72
+ return this.available;
73
+ try {
74
+ // llama-server health check
75
+ const response = await fetch(`${this.endpoint}/health`, {
76
+ method: 'GET',
77
+ signal: AbortSignal.timeout(2000),
78
+ });
79
+ if (!response.ok) {
80
+ this.available = false;
81
+ return false;
82
+ }
83
+ // Verify it supports embeddings by checking /v1/embeddings
84
+ const testResponse = await fetch(`${this.endpoint}/v1/embeddings`, {
85
+ method: 'POST',
86
+ headers: { 'Content-Type': 'application/json' },
87
+ body: JSON.stringify({ input: 'test' }),
88
+ signal: AbortSignal.timeout(5000),
89
+ });
90
+ this.available = testResponse.ok;
91
+ if (testResponse.ok) {
92
+ // Detect actual dimensions from response
93
+ const data = (await testResponse.json());
94
+ if (data.data?.[0]?.embedding) {
95
+ this.dimensions = data.data[0].embedding.length;
96
+ }
97
+ }
98
+ return this.available;
99
+ }
100
+ catch {
101
+ this.available = false;
102
+ return false;
103
+ }
104
+ }
105
+ async embed(text) {
106
+ const results = await this.embedBatch([text]);
107
+ return results[0];
108
+ }
109
+ async embedBatch(texts) {
110
+ // Add task prefix for nomic-embed-text-v2 compatibility
111
+ const prefixedTexts = texts.map((t) => t.startsWith('search_query: ') || t.startsWith('search_document: ') ? t : this.taskPrefix + t);
112
+ const response = await fetch(`${this.endpoint}/v1/embeddings`, {
113
+ method: 'POST',
114
+ headers: { 'Content-Type': 'application/json' },
115
+ body: JSON.stringify({ input: prefixedTexts }),
116
+ signal: AbortSignal.timeout(30000),
117
+ });
118
+ if (!response.ok) {
119
+ throw new Error(`llama.cpp embedding API error: ${response.status} ${response.statusText}`);
120
+ }
121
+ const data = (await response.json());
122
+ // Sort by index to maintain order
123
+ const sorted = data.data.sort((a, b) => a.index - b.index);
124
+ const embeddings = sorted.map((d) => d.embedding);
125
+ // Update dimensions from actual response
126
+ if (embeddings[0]) {
127
+ this.dimensions = embeddings[0].length;
128
+ }
129
+ return embeddings;
130
+ }
131
+ }
132
+ /**
133
+ * Ollama Embeddings Provider (LOCAL - NO API COSTS)
134
+ * Uses nomic-embed-text (768 dimensions) or other embedding models
135
+ */
136
+ export class OllamaEmbeddingProvider {
137
+ name = 'ollama';
138
+ dimensions = 768; // nomic-embed-text default
139
+ endpoint;
140
+ model;
141
+ available = null;
142
+ constructor(endpoint = 'http://localhost:11434', model = 'nomic-embed-text') {
143
+ this.endpoint = endpoint;
144
+ this.model = model;
145
+ }
146
+ async isAvailable() {
147
+ if (this.available !== null)
148
+ return this.available;
149
+ try {
150
+ const response = await fetch(`${this.endpoint}/api/tags`, {
151
+ method: 'GET',
152
+ signal: AbortSignal.timeout(2000),
153
+ });
154
+ if (!response.ok) {
155
+ this.available = false;
156
+ return false;
157
+ }
158
+ const data = (await response.json());
159
+ const hasEmbedModel = data.models?.some((m) => m.name.includes('embed') ||
160
+ m.name.includes('nomic') ||
161
+ m.name === this.model ||
162
+ m.name.startsWith(this.model));
163
+ this.available = hasEmbedModel;
164
+ return hasEmbedModel;
165
+ }
166
+ catch {
167
+ this.available = false;
168
+ return false;
169
+ }
170
+ }
171
+ async embed(text) {
172
+ const response = await fetch(`${this.endpoint}/api/embeddings`, {
173
+ method: 'POST',
174
+ headers: { 'Content-Type': 'application/json' },
175
+ body: JSON.stringify({
176
+ model: this.model,
177
+ prompt: text,
178
+ }),
179
+ });
180
+ if (!response.ok) {
181
+ throw new Error(`Ollama API error: ${response.status} ${response.statusText}`);
182
+ }
183
+ const data = (await response.json());
184
+ this.dimensions = data.embedding.length; // Update dimensions from actual response
185
+ return data.embedding;
186
+ }
187
+ async embedBatch(texts) {
188
+ // Ollama doesn't have native batch, but we can parallelize
189
+ const results = await Promise.all(texts.map((t) => this.embed(t)));
190
+ return results;
191
+ }
192
+ }
193
+ /**
194
+ * OpenAI Embeddings Provider
195
+ * Uses text-embedding-3-small (1536 dimensions) or text-embedding-ada-002
196
+ */
197
+ export class OpenAIEmbeddingProvider {
198
+ name = 'openai';
199
+ dimensions = 1536;
200
+ apiKey;
201
+ model;
202
+ constructor(apiKey, model = 'text-embedding-3-small') {
203
+ this.apiKey = apiKey || process.env.OPENAI_API_KEY || '';
204
+ this.model = model;
205
+ }
206
+ async isAvailable() {
207
+ return !!this.apiKey;
208
+ }
209
+ async embed(text) {
210
+ const results = await this.embedBatch([text]);
211
+ return results[0];
212
+ }
213
+ async embedBatch(texts) {
214
+ if (!this.apiKey) {
215
+ throw new Error('OpenAI API key not configured');
216
+ }
217
+ const response = await fetch('https://api.openai.com/v1/embeddings', {
218
+ method: 'POST',
219
+ headers: {
220
+ Authorization: `Bearer ${this.apiKey}`,
221
+ 'Content-Type': 'application/json',
222
+ },
223
+ body: JSON.stringify({
224
+ model: this.model,
225
+ input: texts,
226
+ }),
227
+ });
228
+ if (!response.ok) {
229
+ throw new Error(`OpenAI API error: ${response.status} ${response.statusText}`);
230
+ }
231
+ const data = (await response.json());
232
+ return data.data.map((d) => d.embedding);
233
+ }
234
+ }
235
+ /**
236
+ * Local Sentence Transformers Provider
237
+ * Uses Python sentence-transformers library for local embedding generation
238
+ */
239
+ export class LocalEmbeddingProvider {
240
+ name = 'local';
241
+ dimensions = 384;
242
+ model;
243
+ pythonPath;
244
+ constructor(model = 'all-MiniLM-L6-v2', pythonPath = 'python3') {
245
+ this.model = model;
246
+ this.pythonPath = pythonPath;
247
+ }
248
+ async isAvailable() {
249
+ try {
250
+ execFileSync(this.pythonPath, ['-c', 'from sentence_transformers import SentenceTransformer'], {
251
+ stdio: 'pipe',
252
+ timeout: 10000,
253
+ });
254
+ return true;
255
+ }
256
+ catch {
257
+ return false;
258
+ }
259
+ }
260
+ async embed(text) {
261
+ const results = await this.embedBatch([text]);
262
+ return results[0];
263
+ }
264
+ async embedBatch(texts) {
265
+ // Pass texts via stdin to avoid shell injection and Python code injection.
266
+ // The model name is validated to contain only safe characters.
267
+ const safeModel = this.model.replace(/[^a-zA-Z0-9_\-./]/g, '');
268
+ const script = `
269
+ import json
270
+ import sys
271
+ from sentence_transformers import SentenceTransformer
272
+
273
+ model = SentenceTransformer(sys.argv[1], device="cpu")
274
+ texts = json.loads(sys.stdin.read())
275
+ embeddings = model.encode(texts, convert_to_numpy=True)
276
+ print(json.dumps(embeddings.tolist()))
277
+ `;
278
+ try {
279
+ const result = execFileSync(this.pythonPath, ['-c', script, safeModel], {
280
+ encoding: 'utf-8',
281
+ timeout: 60000,
282
+ maxBuffer: 50 * 1024 * 1024,
283
+ input: JSON.stringify(texts),
284
+ });
285
+ return JSON.parse(result.trim());
286
+ }
287
+ catch (error) {
288
+ throw new Error(`Local embedding generation failed: ${error}`);
289
+ }
290
+ }
291
+ }
292
+ /**
293
+ * Enhanced TF-IDF Fallback Provider with Word Vectors
294
+ * Improved keyword-based embeddings with semantic awareness
295
+ */
296
+ export class TFIDFEmbeddingProvider {
297
+ name = 'tfidf-enhanced';
298
+ dimensions = 384;
299
+ vocabulary = new Map();
300
+ idfScores = new Map();
301
+ documents = [];
302
+ wordVectors = new Map();
303
+ constructor() {
304
+ // Initialize semantic word clusters for better similarity
305
+ this.initializeSemanticClusters();
306
+ }
307
+ async isAvailable() {
308
+ return true; // Always available as fallback
309
+ }
310
+ async embed(text) {
311
+ const tokens = this.tokenize(text);
312
+ const vector = new Array(this.dimensions).fill(0);
313
+ // Combine TF-IDF with semantic clustering
314
+ for (const token of tokens) {
315
+ const idx = this.getTokenIndex(token);
316
+ const tf = tokens.filter((t) => t === token).length / tokens.length;
317
+ const idf = this.idfScores.get(token) || Math.log(this.documents.length + 2);
318
+ // Base TF-IDF contribution
319
+ vector[idx % this.dimensions] += tf * idf;
320
+ // Add semantic cluster contribution
321
+ const wordVec = this.wordVectors.get(token);
322
+ if (wordVec) {
323
+ for (let i = 0; i < wordVec.length; i++) {
324
+ vector[i] += wordVec[i] * tf * 0.3; // Weighted semantic contribution
325
+ }
326
+ }
327
+ }
328
+ // Add n-gram features for better phrase matching
329
+ const bigrams = this.getBigrams(tokens);
330
+ for (const bigram of bigrams) {
331
+ const idx = this.hashString(bigram) % this.dimensions;
332
+ vector[idx] += 0.5;
333
+ }
334
+ return this.normalize(vector);
335
+ }
336
+ async embedBatch(texts) {
337
+ // Update IDF scores with new documents
338
+ this.updateIDF(texts);
339
+ return Promise.all(texts.map((t) => this.embed(t)));
340
+ }
341
+ addDocument(text) {
342
+ this.documents.push(text);
343
+ this.updateIDF([text]);
344
+ }
345
+ tokenize(text) {
346
+ // Enhanced tokenization that handles code better
347
+ return text
348
+ .toLowerCase()
349
+ .replace(/([a-z])([A-Z])/g, '$1 $2') // Split camelCase
350
+ .replace(/_/g, ' ') // Split snake_case
351
+ .replace(/[^\w\s-]/g, ' ')
352
+ .split(/\s+/)
353
+ .filter((t) => t.length > 1 && !this.isStopWord(t));
354
+ }
355
+ isStopWord(token) {
356
+ const stopWords = new Set([
357
+ 'the',
358
+ 'a',
359
+ 'an',
360
+ 'is',
361
+ 'are',
362
+ 'was',
363
+ 'were',
364
+ 'be',
365
+ 'been',
366
+ 'being',
367
+ 'have',
368
+ 'has',
369
+ 'had',
370
+ 'do',
371
+ 'does',
372
+ 'did',
373
+ 'will',
374
+ 'would',
375
+ 'could',
376
+ 'should',
377
+ 'may',
378
+ 'might',
379
+ 'must',
380
+ 'shall',
381
+ 'can',
382
+ 'need',
383
+ 'dare',
384
+ 'ought',
385
+ 'used',
386
+ 'to',
387
+ 'of',
388
+ 'in',
389
+ 'for',
390
+ 'on',
391
+ 'with',
392
+ 'at',
393
+ 'by',
394
+ 'from',
395
+ 'as',
396
+ 'into',
397
+ 'through',
398
+ 'during',
399
+ 'before',
400
+ 'after',
401
+ 'above',
402
+ 'below',
403
+ 'between',
404
+ 'under',
405
+ 'again',
406
+ 'further',
407
+ 'then',
408
+ 'once',
409
+ 'here',
410
+ 'there',
411
+ 'when',
412
+ 'where',
413
+ 'why',
414
+ 'how',
415
+ 'all',
416
+ 'each',
417
+ 'few',
418
+ 'more',
419
+ 'most',
420
+ 'other',
421
+ 'some',
422
+ 'such',
423
+ 'no',
424
+ 'nor',
425
+ 'not',
426
+ 'only',
427
+ 'own',
428
+ 'same',
429
+ 'so',
430
+ 'than',
431
+ 'too',
432
+ 'very',
433
+ 'just',
434
+ 'and',
435
+ 'but',
436
+ 'if',
437
+ 'or',
438
+ 'because',
439
+ 'until',
440
+ 'while',
441
+ 'this',
442
+ 'that',
443
+ 'these',
444
+ 'those',
445
+ 'it',
446
+ ]);
447
+ return stopWords.has(token);
448
+ }
449
+ getBigrams(tokens) {
450
+ const bigrams = [];
451
+ for (let i = 0; i < tokens.length - 1; i++) {
452
+ bigrams.push(`${tokens[i]}_${tokens[i + 1]}`);
453
+ }
454
+ return bigrams;
455
+ }
456
+ hashString(str) {
457
+ let hash = 0;
458
+ for (let i = 0; i < str.length; i++) {
459
+ const char = str.charCodeAt(i);
460
+ hash = (hash << 5) - hash + char;
461
+ hash = hash & hash;
462
+ }
463
+ return Math.abs(hash);
464
+ }
465
+ getTokenIndex(token) {
466
+ if (!this.vocabulary.has(token)) {
467
+ this.vocabulary.set(token, this.vocabulary.size);
468
+ }
469
+ return this.vocabulary.get(token);
470
+ }
471
+ updateIDF(_newDocs) {
472
+ const tokenDocs = new Map();
473
+ for (let i = 0; i < this.documents.length; i++) {
474
+ const tokens = new Set(this.tokenize(this.documents[i]));
475
+ for (const token of tokens) {
476
+ if (!tokenDocs.has(token)) {
477
+ tokenDocs.set(token, new Set());
478
+ }
479
+ tokenDocs.get(token).add(i);
480
+ }
481
+ }
482
+ for (const [token, docs] of tokenDocs) {
483
+ this.idfScores.set(token, Math.log((this.documents.length + 1) / (docs.size + 1)) + 1);
484
+ }
485
+ }
486
+ normalize(vector) {
487
+ const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
488
+ if (magnitude === 0)
489
+ return vector;
490
+ return vector.map((v) => v / magnitude);
491
+ }
492
+ /**
493
+ * Initialize semantic word clusters for domain-specific terms
494
+ * Words in the same cluster get similar vector contributions
495
+ */
496
+ initializeSemanticClusters() {
497
+ const clusters = {
498
+ // Programming concepts
499
+ programming: [
500
+ 'code',
501
+ 'function',
502
+ 'class',
503
+ 'method',
504
+ 'variable',
505
+ 'const',
506
+ 'let',
507
+ 'var',
508
+ 'import',
509
+ 'export',
510
+ 'async',
511
+ 'await',
512
+ 'promise',
513
+ 'callback',
514
+ ],
515
+ types: [
516
+ 'type',
517
+ 'interface',
518
+ 'enum',
519
+ 'string',
520
+ 'number',
521
+ 'boolean',
522
+ 'array',
523
+ 'object',
524
+ 'null',
525
+ 'undefined',
526
+ ],
527
+ errors: [
528
+ 'error',
529
+ 'exception',
530
+ 'throw',
531
+ 'catch',
532
+ 'try',
533
+ 'finally',
534
+ 'bug',
535
+ 'fix',
536
+ 'debug',
537
+ 'trace',
538
+ 'stack',
539
+ ],
540
+ testing: [
541
+ 'test',
542
+ 'spec',
543
+ 'describe',
544
+ 'it',
545
+ 'expect',
546
+ 'assert',
547
+ 'mock',
548
+ 'stub',
549
+ 'spy',
550
+ 'coverage',
551
+ ],
552
+ git: [
553
+ 'git',
554
+ 'commit',
555
+ 'push',
556
+ 'pull',
557
+ 'merge',
558
+ 'branch',
559
+ 'checkout',
560
+ 'rebase',
561
+ 'stash',
562
+ 'diff',
563
+ ],
564
+ memory: [
565
+ 'memory',
566
+ 'cache',
567
+ 'store',
568
+ 'retrieve',
569
+ 'query',
570
+ 'embed',
571
+ 'vector',
572
+ 'semantic',
573
+ 'context',
574
+ ],
575
+ security: [
576
+ 'security',
577
+ 'auth',
578
+ 'token',
579
+ 'secret',
580
+ 'password',
581
+ 'encrypt',
582
+ 'decrypt',
583
+ 'hash',
584
+ 'salt',
585
+ ],
586
+ performance: [
587
+ 'performance',
588
+ 'optimize',
589
+ 'fast',
590
+ 'slow',
591
+ 'latency',
592
+ 'throughput',
593
+ 'cache',
594
+ 'batch',
595
+ ],
596
+ database: [
597
+ 'database',
598
+ 'sql',
599
+ 'query',
600
+ 'table',
601
+ 'index',
602
+ 'schema',
603
+ 'migration',
604
+ 'insert',
605
+ 'update',
606
+ 'delete',
607
+ ],
608
+ network: [
609
+ 'network',
610
+ 'http',
611
+ 'api',
612
+ 'request',
613
+ 'response',
614
+ 'endpoint',
615
+ 'url',
616
+ 'fetch',
617
+ 'axios',
618
+ ],
619
+ };
620
+ // Generate pseudo-random but consistent vectors for each cluster
621
+ for (const [clusterName, words] of Object.entries(clusters)) {
622
+ const clusterVector = this.generateClusterVector(clusterName);
623
+ for (const word of words) {
624
+ // Add slight variation for each word
625
+ const wordVector = clusterVector.map((v, i) => v + ((this.hashString(word + i.toString()) % 100) - 50) / 500);
626
+ this.wordVectors.set(word, wordVector);
627
+ }
628
+ }
629
+ }
630
+ generateClusterVector(seed) {
631
+ const vector = new Array(this.dimensions).fill(0);
632
+ const hash = this.hashString(seed);
633
+ // Create sparse activation pattern for this cluster
634
+ for (let i = 0; i < 20; i++) {
635
+ const idx = (hash + i * 17) % this.dimensions;
636
+ vector[idx] = ((hash + i) % 100) / 100;
637
+ }
638
+ return vector;
639
+ }
640
+ }
641
+ /**
642
+ * Embedding Service - Main interface for UAP memory system
643
+ * Automatically selects best available provider
644
+ *
645
+ * Priority: Ollama (local, free) > OpenAI > Local transformers > TF-IDF fallback
646
+ */
647
+ export class EmbeddingService {
648
+ provider = null;
649
+ providers;
650
+ cache = new Map();
651
+ cacheMaxSize = 10000;
652
+ constructor(ollamaEndpoint, ollamaModel, llamaCppEndpoint) {
653
+ this.providers = [
654
+ new LlamaCppEmbeddingProvider(llamaCppEndpoint), // First priority - llama.cpp local server
655
+ new OllamaEmbeddingProvider(ollamaEndpoint, ollamaModel), // Second priority - Ollama local
656
+ new OpenAIEmbeddingProvider(),
657
+ new LocalEmbeddingProvider(),
658
+ new TFIDFEmbeddingProvider(),
659
+ ];
660
+ }
661
+ async initialize() {
662
+ for (const provider of this.providers) {
663
+ if (await provider.isAvailable()) {
664
+ this.provider = provider;
665
+ console.log(`[EmbeddingService] Using provider: ${provider.name} (${provider.dimensions} dims)`);
666
+ return;
667
+ }
668
+ }
669
+ // Fallback to TF-IDF which is always available
670
+ this.provider = this.providers[this.providers.length - 1];
671
+ console.log(`[EmbeddingService] Fallback to TF-IDF provider`);
672
+ }
673
+ async embed(text) {
674
+ if (!this.provider) {
675
+ await this.initialize();
676
+ }
677
+ // Check cache (LRU: re-insert on hit to move to end of Map iteration order)
678
+ const cacheKey = this.getCacheKey(text);
679
+ if (this.cache.has(cacheKey)) {
680
+ const cached = this.cache.get(cacheKey);
681
+ // Move to end (most recently used) by re-inserting
682
+ this.cache.delete(cacheKey);
683
+ this.cache.set(cacheKey, cached);
684
+ return cached;
685
+ }
686
+ const embedding = await this.provider.embed(text);
687
+ // Update cache (LRU eviction: remove least recently used entry)
688
+ if (this.cache.size >= this.cacheMaxSize) {
689
+ // Remove LRU entry (first in Map iteration order)
690
+ const firstKey = this.cache.keys().next().value;
691
+ if (firstKey !== undefined) {
692
+ this.cache.delete(firstKey);
693
+ }
694
+ }
695
+ this.cache.set(cacheKey, embedding);
696
+ return embedding;
697
+ }
698
+ async embedBatch(texts) {
699
+ if (!this.provider) {
700
+ await this.initialize();
701
+ }
702
+ const results = [];
703
+ const uncachedTexts = [];
704
+ const uncachedIndices = [];
705
+ // Check cache for each text (LRU: re-insert on hit to mark as recently used)
706
+ for (let i = 0; i < texts.length; i++) {
707
+ const cacheKey = this.getCacheKey(texts[i]);
708
+ if (this.cache.has(cacheKey)) {
709
+ const cached = this.cache.get(cacheKey);
710
+ // Move to end (most recently used) by re-inserting
711
+ this.cache.delete(cacheKey);
712
+ this.cache.set(cacheKey, cached);
713
+ results[i] = cached;
714
+ }
715
+ else {
716
+ uncachedTexts.push(texts[i]);
717
+ uncachedIndices.push(i);
718
+ }
719
+ }
720
+ // Generate embeddings for uncached texts
721
+ if (uncachedTexts.length > 0) {
722
+ const newEmbeddings = await this.provider.embedBatch(uncachedTexts);
723
+ for (let i = 0; i < uncachedTexts.length; i++) {
724
+ const idx = uncachedIndices[i];
725
+ results[idx] = newEmbeddings[i];
726
+ // Update cache
727
+ const cacheKey = this.getCacheKey(uncachedTexts[i]);
728
+ if (this.cache.size < this.cacheMaxSize) {
729
+ this.cache.set(cacheKey, newEmbeddings[i]);
730
+ }
731
+ }
732
+ }
733
+ return results;
734
+ }
735
+ cosineSimilarity(a, b) {
736
+ if (a.length !== b.length) {
737
+ throw new Error('Vectors must have same dimensions');
738
+ }
739
+ let dotProduct = 0;
740
+ let normA = 0;
741
+ let normB = 0;
742
+ for (let i = 0; i < a.length; i++) {
743
+ dotProduct += a[i] * b[i];
744
+ normA += a[i] * a[i];
745
+ normB += b[i] * b[i];
746
+ }
747
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
748
+ if (denominator === 0)
749
+ return 0;
750
+ return dotProduct / denominator;
751
+ }
752
+ getDimensions() {
753
+ return this.provider?.dimensions || 384;
754
+ }
755
+ getProviderName() {
756
+ return this.provider?.name || 'uninitialized';
757
+ }
758
+ getCacheKey(text) {
759
+ // Use SHA-256 hash to avoid collisions from truncation
760
+ return createHash('sha256').update(text.toLowerCase().trim()).digest('hex');
761
+ }
762
+ }
763
+ // Singleton instance
764
+ let embeddingServiceInstance = null;
765
+ export function getEmbeddingService() {
766
+ if (!embeddingServiceInstance) {
767
+ const llamaCppEndpoint = process.env.UAP_EMBEDDING_ENDPOINT || undefined;
768
+ embeddingServiceInstance = new EmbeddingService(undefined, undefined, llamaCppEndpoint);
769
+ }
770
+ return embeddingServiceInstance;
771
+ }
772
+ export async function generateEmbedding(text) {
773
+ const service = getEmbeddingService();
774
+ return service.embed(text);
775
+ }
776
+ export async function generateEmbeddings(texts) {
777
+ const service = getEmbeddingService();
778
+ return service.embedBatch(texts);
779
+ }
780
+ //# sourceMappingURL=embeddings.js.map