0agent 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 (443) hide show
  1. package/README.md +164 -0
  2. package/bin/0agent.js +614 -0
  3. package/package.json +59 -0
  4. package/packages/core/dist/bootstrap/BootstrapProtocol.d.ts +37 -0
  5. package/packages/core/dist/bootstrap/BootstrapProtocol.d.ts.map +1 -0
  6. package/packages/core/dist/bootstrap/BootstrapProtocol.js +82 -0
  7. package/packages/core/dist/bootstrap/BootstrapProtocol.js.map +1 -0
  8. package/packages/core/dist/bootstrap/GraphConstructor.d.ts +44 -0
  9. package/packages/core/dist/bootstrap/GraphConstructor.d.ts.map +1 -0
  10. package/packages/core/dist/bootstrap/GraphConstructor.js +160 -0
  11. package/packages/core/dist/bootstrap/GraphConstructor.js.map +1 -0
  12. package/packages/core/dist/bootstrap/HypothesisManager.d.ts +50 -0
  13. package/packages/core/dist/bootstrap/HypothesisManager.d.ts.map +1 -0
  14. package/packages/core/dist/bootstrap/HypothesisManager.js +108 -0
  15. package/packages/core/dist/bootstrap/HypothesisManager.js.map +1 -0
  16. package/packages/core/dist/bootstrap/StagedMutations.d.ts +50 -0
  17. package/packages/core/dist/bootstrap/StagedMutations.d.ts.map +1 -0
  18. package/packages/core/dist/bootstrap/StagedMutations.js +80 -0
  19. package/packages/core/dist/bootstrap/StagedMutations.js.map +1 -0
  20. package/packages/core/dist/concurrency/EdgeWeightUpdater.d.ts +16 -0
  21. package/packages/core/dist/concurrency/EdgeWeightUpdater.d.ts.map +1 -0
  22. package/packages/core/dist/concurrency/EdgeWeightUpdater.js +57 -0
  23. package/packages/core/dist/concurrency/EdgeWeightUpdater.js.map +1 -0
  24. package/packages/core/dist/concurrency/SessionSnapshot.d.ts +63 -0
  25. package/packages/core/dist/concurrency/SessionSnapshot.d.ts.map +1 -0
  26. package/packages/core/dist/concurrency/SessionSnapshot.js +124 -0
  27. package/packages/core/dist/concurrency/SessionSnapshot.js.map +1 -0
  28. package/packages/core/dist/embedding/HNSWIndex.d.ts +37 -0
  29. package/packages/core/dist/embedding/HNSWIndex.d.ts.map +1 -0
  30. package/packages/core/dist/embedding/HNSWIndex.js +86 -0
  31. package/packages/core/dist/embedding/HNSWIndex.js.map +1 -0
  32. package/packages/core/dist/embedding/MultimodalEmbedder.d.ts +24 -0
  33. package/packages/core/dist/embedding/MultimodalEmbedder.d.ts.map +1 -0
  34. package/packages/core/dist/embedding/MultimodalEmbedder.js +75 -0
  35. package/packages/core/dist/embedding/MultimodalEmbedder.js.map +1 -0
  36. package/packages/core/dist/embedding/adapters/NomicAdapter.d.ts +7 -0
  37. package/packages/core/dist/embedding/adapters/NomicAdapter.d.ts.map +1 -0
  38. package/packages/core/dist/embedding/adapters/NomicAdapter.js +11 -0
  39. package/packages/core/dist/embedding/adapters/NomicAdapter.js.map +1 -0
  40. package/packages/core/dist/embedding/adapters/OllamaAdapter.d.ts +19 -0
  41. package/packages/core/dist/embedding/adapters/OllamaAdapter.d.ts.map +1 -0
  42. package/packages/core/dist/embedding/adapters/OllamaAdapter.js +27 -0
  43. package/packages/core/dist/embedding/adapters/OllamaAdapter.js.map +1 -0
  44. package/packages/core/dist/embedding/adapters/OpenAIAdapter.d.ts +14 -0
  45. package/packages/core/dist/embedding/adapters/OpenAIAdapter.d.ts.map +1 -0
  46. package/packages/core/dist/embedding/adapters/OpenAIAdapter.js +48 -0
  47. package/packages/core/dist/embedding/adapters/OpenAIAdapter.js.map +1 -0
  48. package/packages/core/dist/engine/CreditAttribution.d.ts +47 -0
  49. package/packages/core/dist/engine/CreditAttribution.d.ts.map +1 -0
  50. package/packages/core/dist/engine/CreditAttribution.js +196 -0
  51. package/packages/core/dist/engine/CreditAttribution.js.map +1 -0
  52. package/packages/core/dist/engine/DecayScheduler.d.ts +45 -0
  53. package/packages/core/dist/engine/DecayScheduler.d.ts.map +1 -0
  54. package/packages/core/dist/engine/DecayScheduler.js +115 -0
  55. package/packages/core/dist/engine/DecayScheduler.js.map +1 -0
  56. package/packages/core/dist/engine/InferenceEngine.d.ts +95 -0
  57. package/packages/core/dist/engine/InferenceEngine.d.ts.map +1 -0
  58. package/packages/core/dist/engine/InferenceEngine.js +242 -0
  59. package/packages/core/dist/engine/InferenceEngine.js.map +1 -0
  60. package/packages/core/dist/engine/SelectionPolicy.d.ts +29 -0
  61. package/packages/core/dist/engine/SelectionPolicy.d.ts.map +1 -0
  62. package/packages/core/dist/engine/SelectionPolicy.js +58 -0
  63. package/packages/core/dist/engine/SelectionPolicy.js.map +1 -0
  64. package/packages/core/dist/engine/SelfImprovementEngine.d.ts +58 -0
  65. package/packages/core/dist/engine/SelfImprovementEngine.d.ts.map +1 -0
  66. package/packages/core/dist/engine/SelfImprovementEngine.js +265 -0
  67. package/packages/core/dist/engine/SelfImprovementEngine.js.map +1 -0
  68. package/packages/core/dist/engine/SelfImprovementPrompt.d.ts +10 -0
  69. package/packages/core/dist/engine/SelfImprovementPrompt.d.ts.map +1 -0
  70. package/packages/core/dist/engine/SelfImprovementPrompt.js +193 -0
  71. package/packages/core/dist/engine/SelfImprovementPrompt.js.map +1 -0
  72. package/packages/core/dist/engine/WeightPropagation.d.ts +77 -0
  73. package/packages/core/dist/engine/WeightPropagation.d.ts.map +1 -0
  74. package/packages/core/dist/engine/WeightPropagation.js +101 -0
  75. package/packages/core/dist/engine/WeightPropagation.js.map +1 -0
  76. package/packages/core/dist/engine/WorkflowSuggestionEngine.d.ts +26 -0
  77. package/packages/core/dist/engine/WorkflowSuggestionEngine.d.ts.map +1 -0
  78. package/packages/core/dist/engine/WorkflowSuggestionEngine.js +54 -0
  79. package/packages/core/dist/engine/WorkflowSuggestionEngine.js.map +1 -0
  80. package/packages/core/dist/entity/AliasIndex.d.ts +39 -0
  81. package/packages/core/dist/entity/AliasIndex.d.ts.map +1 -0
  82. package/packages/core/dist/entity/AliasIndex.js +81 -0
  83. package/packages/core/dist/entity/AliasIndex.js.map +1 -0
  84. package/packages/core/dist/entity/ContextActivator.d.ts +53 -0
  85. package/packages/core/dist/entity/ContextActivator.d.ts.map +1 -0
  86. package/packages/core/dist/entity/ContextActivator.js +163 -0
  87. package/packages/core/dist/entity/ContextActivator.js.map +1 -0
  88. package/packages/core/dist/entity/EntityHierarchy.d.ts +48 -0
  89. package/packages/core/dist/entity/EntityHierarchy.d.ts.map +1 -0
  90. package/packages/core/dist/entity/EntityHierarchy.js +134 -0
  91. package/packages/core/dist/entity/EntityHierarchy.js.map +1 -0
  92. package/packages/core/dist/entity/EntityResolutionPipeline.d.ts +48 -0
  93. package/packages/core/dist/entity/EntityResolutionPipeline.d.ts.map +1 -0
  94. package/packages/core/dist/entity/EntityResolutionPipeline.js +221 -0
  95. package/packages/core/dist/entity/EntityResolutionPipeline.js.map +1 -0
  96. package/packages/core/dist/entity/MCPEnrichedResolver.d.ts +17 -0
  97. package/packages/core/dist/entity/MCPEnrichedResolver.d.ts.map +1 -0
  98. package/packages/core/dist/entity/MCPEnrichedResolver.js +19 -0
  99. package/packages/core/dist/entity/MCPEnrichedResolver.js.map +1 -0
  100. package/packages/core/dist/entity/NodeResolutionService.d.ts +46 -0
  101. package/packages/core/dist/entity/NodeResolutionService.d.ts.map +1 -0
  102. package/packages/core/dist/entity/NodeResolutionService.js +150 -0
  103. package/packages/core/dist/entity/NodeResolutionService.js.map +1 -0
  104. package/packages/core/dist/entity/PersonalityAccumulator.d.ts +41 -0
  105. package/packages/core/dist/entity/PersonalityAccumulator.d.ts.map +1 -0
  106. package/packages/core/dist/entity/PersonalityAccumulator.js +126 -0
  107. package/packages/core/dist/entity/PersonalityAccumulator.js.map +1 -0
  108. package/packages/core/dist/entity/PersonalityProfile.d.ts +31 -0
  109. package/packages/core/dist/entity/PersonalityProfile.d.ts.map +1 -0
  110. package/packages/core/dist/entity/PersonalityProfile.js +94 -0
  111. package/packages/core/dist/entity/PersonalityProfile.js.map +1 -0
  112. package/packages/core/dist/entity/index.d.ts +4 -0
  113. package/packages/core/dist/entity/index.d.ts.map +1 -0
  114. package/packages/core/dist/entity/index.js +4 -0
  115. package/packages/core/dist/entity/index.js.map +1 -0
  116. package/packages/core/dist/graph/GraphEdge.d.ts +37 -0
  117. package/packages/core/dist/graph/GraphEdge.d.ts.map +1 -0
  118. package/packages/core/dist/graph/GraphEdge.js +29 -0
  119. package/packages/core/dist/graph/GraphEdge.js.map +1 -0
  120. package/packages/core/dist/graph/GraphNode.d.ts +52 -0
  121. package/packages/core/dist/graph/GraphNode.d.ts.map +1 -0
  122. package/packages/core/dist/graph/GraphNode.js +41 -0
  123. package/packages/core/dist/graph/GraphNode.js.map +1 -0
  124. package/packages/core/dist/graph/GraphQuery.d.ts +46 -0
  125. package/packages/core/dist/graph/GraphQuery.d.ts.map +1 -0
  126. package/packages/core/dist/graph/GraphQuery.js +47 -0
  127. package/packages/core/dist/graph/GraphQuery.js.map +1 -0
  128. package/packages/core/dist/graph/KnowledgeGraph.d.ts +38 -0
  129. package/packages/core/dist/graph/KnowledgeGraph.d.ts.map +1 -0
  130. package/packages/core/dist/graph/KnowledgeGraph.js +345 -0
  131. package/packages/core/dist/graph/KnowledgeGraph.js.map +1 -0
  132. package/packages/core/dist/graph/SubGraph.d.ts +36 -0
  133. package/packages/core/dist/graph/SubGraph.d.ts.map +1 -0
  134. package/packages/core/dist/graph/SubGraph.js +86 -0
  135. package/packages/core/dist/graph/SubGraph.js.map +1 -0
  136. package/packages/core/dist/index.d.ts +54 -0
  137. package/packages/core/dist/index.d.ts.map +1 -0
  138. package/packages/core/dist/index.js +62 -0
  139. package/packages/core/dist/index.js.map +1 -0
  140. package/packages/core/dist/maintenance/CompactionOrchestrator.d.ts +22 -0
  141. package/packages/core/dist/maintenance/CompactionOrchestrator.d.ts.map +1 -0
  142. package/packages/core/dist/maintenance/CompactionOrchestrator.js +62 -0
  143. package/packages/core/dist/maintenance/CompactionOrchestrator.js.map +1 -0
  144. package/packages/core/dist/maintenance/EdgePruner.d.ts +20 -0
  145. package/packages/core/dist/maintenance/EdgePruner.d.ts.map +1 -0
  146. package/packages/core/dist/maintenance/EdgePruner.js +65 -0
  147. package/packages/core/dist/maintenance/EdgePruner.js.map +1 -0
  148. package/packages/core/dist/maintenance/GraphCheckpoint.d.ts +51 -0
  149. package/packages/core/dist/maintenance/GraphCheckpoint.d.ts.map +1 -0
  150. package/packages/core/dist/maintenance/GraphCheckpoint.js +81 -0
  151. package/packages/core/dist/maintenance/GraphCheckpoint.js.map +1 -0
  152. package/packages/core/dist/maintenance/GraphRollback.d.ts +36 -0
  153. package/packages/core/dist/maintenance/GraphRollback.d.ts.map +1 -0
  154. package/packages/core/dist/maintenance/GraphRollback.js +154 -0
  155. package/packages/core/dist/maintenance/GraphRollback.js.map +1 -0
  156. package/packages/core/dist/maintenance/NodeDeduplicator.d.ts +26 -0
  157. package/packages/core/dist/maintenance/NodeDeduplicator.d.ts.map +1 -0
  158. package/packages/core/dist/maintenance/NodeDeduplicator.js +171 -0
  159. package/packages/core/dist/maintenance/NodeDeduplicator.js.map +1 -0
  160. package/packages/core/dist/maintenance/SubgraphArchiver.d.ts +18 -0
  161. package/packages/core/dist/maintenance/SubgraphArchiver.d.ts.map +1 -0
  162. package/packages/core/dist/maintenance/SubgraphArchiver.js +180 -0
  163. package/packages/core/dist/maintenance/SubgraphArchiver.js.map +1 -0
  164. package/packages/core/dist/memory/ArchivalMemory.d.ts +28 -0
  165. package/packages/core/dist/memory/ArchivalMemory.d.ts.map +1 -0
  166. package/packages/core/dist/memory/ArchivalMemory.js +26 -0
  167. package/packages/core/dist/memory/ArchivalMemory.js.map +1 -0
  168. package/packages/core/dist/memory/BlinkingMemory.d.ts +34 -0
  169. package/packages/core/dist/memory/BlinkingMemory.d.ts.map +1 -0
  170. package/packages/core/dist/memory/BlinkingMemory.js +44 -0
  171. package/packages/core/dist/memory/BlinkingMemory.js.map +1 -0
  172. package/packages/core/dist/memory/WorkingMemory.d.ts +38 -0
  173. package/packages/core/dist/memory/WorkingMemory.d.ts.map +1 -0
  174. package/packages/core/dist/memory/WorkingMemory.js +70 -0
  175. package/packages/core/dist/memory/WorkingMemory.js.map +1 -0
  176. package/packages/core/dist/storage/ObjectStore.d.ts +24 -0
  177. package/packages/core/dist/storage/ObjectStore.d.ts.map +1 -0
  178. package/packages/core/dist/storage/ObjectStore.js +50 -0
  179. package/packages/core/dist/storage/ObjectStore.js.map +1 -0
  180. package/packages/core/dist/storage/TraceStore.d.ts +16 -0
  181. package/packages/core/dist/storage/TraceStore.d.ts.map +1 -0
  182. package/packages/core/dist/storage/TraceStore.js +19 -0
  183. package/packages/core/dist/storage/TraceStore.js.map +1 -0
  184. package/packages/core/dist/storage/WeightEventLog.d.ts +11 -0
  185. package/packages/core/dist/storage/WeightEventLog.d.ts.map +1 -0
  186. package/packages/core/dist/storage/WeightEventLog.js +16 -0
  187. package/packages/core/dist/storage/WeightEventLog.js.map +1 -0
  188. package/packages/core/dist/storage/adapters/SQLiteAdapter.d.ts +86 -0
  189. package/packages/core/dist/storage/adapters/SQLiteAdapter.d.ts.map +1 -0
  190. package/packages/core/dist/storage/adapters/SQLiteAdapter.js +514 -0
  191. package/packages/core/dist/storage/adapters/SQLiteAdapter.js.map +1 -0
  192. package/packages/core/dist/trace/DeferredTrace.d.ts +43 -0
  193. package/packages/core/dist/trace/DeferredTrace.d.ts.map +1 -0
  194. package/packages/core/dist/trace/DeferredTrace.js +44 -0
  195. package/packages/core/dist/trace/DeferredTrace.js.map +1 -0
  196. package/packages/core/dist/trace/OutcomeTrace.d.ts +38 -0
  197. package/packages/core/dist/trace/OutcomeTrace.d.ts.map +1 -0
  198. package/packages/core/dist/trace/OutcomeTrace.js +9 -0
  199. package/packages/core/dist/trace/OutcomeTrace.js.map +1 -0
  200. package/packages/core/dist/trace/SkillTraceDecorator.d.ts +25 -0
  201. package/packages/core/dist/trace/SkillTraceDecorator.d.ts.map +1 -0
  202. package/packages/core/dist/trace/SkillTraceDecorator.js +41 -0
  203. package/packages/core/dist/trace/SkillTraceDecorator.js.map +1 -0
  204. package/packages/core/dist/trace/TraceReplay.d.ts +25 -0
  205. package/packages/core/dist/trace/TraceReplay.d.ts.map +1 -0
  206. package/packages/core/dist/trace/TraceReplay.js +40 -0
  207. package/packages/core/dist/trace/TraceReplay.js.map +1 -0
  208. package/packages/core/dist/trace/TraversalLedger.d.ts +33 -0
  209. package/packages/core/dist/trace/TraversalLedger.d.ts.map +1 -0
  210. package/packages/core/dist/trace/TraversalLedger.js +61 -0
  211. package/packages/core/dist/trace/TraversalLedger.js.map +1 -0
  212. package/packages/core/dist/types/SelfImprovement.d.ts +174 -0
  213. package/packages/core/dist/types/SelfImprovement.d.ts.map +1 -0
  214. package/packages/core/dist/types/SelfImprovement.js +23 -0
  215. package/packages/core/dist/types/SelfImprovement.js.map +1 -0
  216. package/packages/core/dist/types/SkillDefinition.d.ts +68 -0
  217. package/packages/core/dist/types/SkillDefinition.d.ts.map +1 -0
  218. package/packages/core/dist/types/SkillDefinition.js +12 -0
  219. package/packages/core/dist/types/SkillDefinition.js.map +1 -0
  220. package/packages/daemon/dist/BackgroundWorkers.d.ts +55 -0
  221. package/packages/daemon/dist/BackgroundWorkers.d.ts.map +1 -0
  222. package/packages/daemon/dist/BackgroundWorkers.js +121 -0
  223. package/packages/daemon/dist/BackgroundWorkers.js.map +1 -0
  224. package/packages/daemon/dist/EntityScopedContext.d.ts +22 -0
  225. package/packages/daemon/dist/EntityScopedContext.d.ts.map +1 -0
  226. package/packages/daemon/dist/EntityScopedContext.js +85 -0
  227. package/packages/daemon/dist/EntityScopedContext.js.map +1 -0
  228. package/packages/daemon/dist/HTTPServer.d.ts +27 -0
  229. package/packages/daemon/dist/HTTPServer.d.ts.map +1 -0
  230. package/packages/daemon/dist/HTTPServer.js +62 -0
  231. package/packages/daemon/dist/HTTPServer.js.map +1 -0
  232. package/packages/daemon/dist/SessionManager.d.ts +95 -0
  233. package/packages/daemon/dist/SessionManager.d.ts.map +1 -0
  234. package/packages/daemon/dist/SessionManager.js +205 -0
  235. package/packages/daemon/dist/SessionManager.js.map +1 -0
  236. package/packages/daemon/dist/SkillRegistry.d.ts +34 -0
  237. package/packages/daemon/dist/SkillRegistry.d.ts.map +1 -0
  238. package/packages/daemon/dist/SkillRegistry.js +90 -0
  239. package/packages/daemon/dist/SkillRegistry.js.map +1 -0
  240. package/packages/daemon/dist/SkillVariableResolver.d.ts +24 -0
  241. package/packages/daemon/dist/SkillVariableResolver.d.ts.map +1 -0
  242. package/packages/daemon/dist/SkillVariableResolver.js +85 -0
  243. package/packages/daemon/dist/SkillVariableResolver.js.map +1 -0
  244. package/packages/daemon/dist/WebSocketEvents.d.ts +107 -0
  245. package/packages/daemon/dist/WebSocketEvents.d.ts.map +1 -0
  246. package/packages/daemon/dist/WebSocketEvents.js +111 -0
  247. package/packages/daemon/dist/WebSocketEvents.js.map +1 -0
  248. package/packages/daemon/dist/ZeroAgentDaemon.d.ts +39 -0
  249. package/packages/daemon/dist/ZeroAgentDaemon.d.ts.map +1 -0
  250. package/packages/daemon/dist/ZeroAgentDaemon.js +161 -0
  251. package/packages/daemon/dist/ZeroAgentDaemon.js.map +1 -0
  252. package/packages/daemon/dist/config/ConfigSchema.d.ts +631 -0
  253. package/packages/daemon/dist/config/ConfigSchema.d.ts.map +1 -0
  254. package/packages/daemon/dist/config/ConfigSchema.js +107 -0
  255. package/packages/daemon/dist/config/ConfigSchema.js.map +1 -0
  256. package/packages/daemon/dist/config/DaemonConfig.d.ts +10 -0
  257. package/packages/daemon/dist/config/DaemonConfig.d.ts.map +1 -0
  258. package/packages/daemon/dist/config/DaemonConfig.js +34 -0
  259. package/packages/daemon/dist/config/DaemonConfig.js.map +1 -0
  260. package/packages/daemon/dist/index.d.ts +10 -0
  261. package/packages/daemon/dist/index.d.ts.map +1 -0
  262. package/packages/daemon/dist/index.js +8 -0
  263. package/packages/daemon/dist/index.js.map +1 -0
  264. package/packages/daemon/dist/routes/entities.d.ts +6 -0
  265. package/packages/daemon/dist/routes/entities.d.ts.map +1 -0
  266. package/packages/daemon/dist/routes/entities.js +54 -0
  267. package/packages/daemon/dist/routes/entities.js.map +1 -0
  268. package/packages/daemon/dist/routes/graph.d.ts +6 -0
  269. package/packages/daemon/dist/routes/graph.d.ts.map +1 -0
  270. package/packages/daemon/dist/routes/graph.js +61 -0
  271. package/packages/daemon/dist/routes/graph.js.map +1 -0
  272. package/packages/daemon/dist/routes/health.d.ts +15 -0
  273. package/packages/daemon/dist/routes/health.d.ts.map +1 -0
  274. package/packages/daemon/dist/routes/health.js +11 -0
  275. package/packages/daemon/dist/routes/health.js.map +1 -0
  276. package/packages/daemon/dist/routes/sessions.d.ts +6 -0
  277. package/packages/daemon/dist/routes/sessions.d.ts.map +1 -0
  278. package/packages/daemon/dist/routes/sessions.js +43 -0
  279. package/packages/daemon/dist/routes/sessions.js.map +1 -0
  280. package/packages/daemon/dist/routes/skills.d.ts +6 -0
  281. package/packages/daemon/dist/routes/skills.d.ts.map +1 -0
  282. package/packages/daemon/dist/routes/skills.js +62 -0
  283. package/packages/daemon/dist/routes/skills.js.map +1 -0
  284. package/packages/daemon/dist/routes/subagents.d.ts +3 -0
  285. package/packages/daemon/dist/routes/subagents.d.ts.map +1 -0
  286. package/packages/daemon/dist/routes/subagents.js +14 -0
  287. package/packages/daemon/dist/routes/subagents.js.map +1 -0
  288. package/packages/daemon/dist/routes/traces.d.ts +6 -0
  289. package/packages/daemon/dist/routes/traces.d.ts.map +1 -0
  290. package/packages/daemon/dist/routes/traces.js +31 -0
  291. package/packages/daemon/dist/routes/traces.js.map +1 -0
  292. package/packages/daemon/dist/start.d.ts +7 -0
  293. package/packages/daemon/dist/start.d.ts.map +1 -0
  294. package/packages/daemon/dist/start.js +24 -0
  295. package/packages/daemon/dist/start.js.map +1 -0
  296. package/packages/mcp-hub/dist/FilteredProxy.d.ts +20 -0
  297. package/packages/mcp-hub/dist/FilteredProxy.d.ts.map +1 -0
  298. package/packages/mcp-hub/dist/FilteredProxy.js +43 -0
  299. package/packages/mcp-hub/dist/FilteredProxy.js.map +1 -0
  300. package/packages/mcp-hub/dist/MCPDiscovery.d.ts +18 -0
  301. package/packages/mcp-hub/dist/MCPDiscovery.d.ts.map +1 -0
  302. package/packages/mcp-hub/dist/MCPDiscovery.js +86 -0
  303. package/packages/mcp-hub/dist/MCPDiscovery.js.map +1 -0
  304. package/packages/mcp-hub/dist/MCPHub.d.ts +48 -0
  305. package/packages/mcp-hub/dist/MCPHub.d.ts.map +1 -0
  306. package/packages/mcp-hub/dist/MCPHub.js +100 -0
  307. package/packages/mcp-hub/dist/MCPHub.js.map +1 -0
  308. package/packages/mcp-hub/dist/builtin/BrowserMCP.d.ts +6 -0
  309. package/packages/mcp-hub/dist/builtin/BrowserMCP.d.ts.map +1 -0
  310. package/packages/mcp-hub/dist/builtin/BrowserMCP.js +69 -0
  311. package/packages/mcp-hub/dist/builtin/BrowserMCP.js.map +1 -0
  312. package/packages/mcp-hub/dist/builtin/FilesystemMCP.d.ts +11 -0
  313. package/packages/mcp-hub/dist/builtin/FilesystemMCP.d.ts.map +1 -0
  314. package/packages/mcp-hub/dist/builtin/FilesystemMCP.js +104 -0
  315. package/packages/mcp-hub/dist/builtin/FilesystemMCP.js.map +1 -0
  316. package/packages/mcp-hub/dist/builtin/MemoryMCP.d.ts +9 -0
  317. package/packages/mcp-hub/dist/builtin/MemoryMCP.d.ts.map +1 -0
  318. package/packages/mcp-hub/dist/builtin/MemoryMCP.js +185 -0
  319. package/packages/mcp-hub/dist/builtin/MemoryMCP.js.map +1 -0
  320. package/packages/mcp-hub/dist/builtin/ShellMCP.d.ts +8 -0
  321. package/packages/mcp-hub/dist/builtin/ShellMCP.d.ts.map +1 -0
  322. package/packages/mcp-hub/dist/builtin/ShellMCP.js +74 -0
  323. package/packages/mcp-hub/dist/builtin/ShellMCP.js.map +1 -0
  324. package/packages/mcp-hub/dist/index.d.ts +9 -0
  325. package/packages/mcp-hub/dist/index.d.ts.map +1 -0
  326. package/packages/mcp-hub/dist/index.js +8 -0
  327. package/packages/mcp-hub/dist/index.js.map +1 -0
  328. package/packages/mcp-hub/dist/types.d.ts +30 -0
  329. package/packages/mcp-hub/dist/types.d.ts.map +1 -0
  330. package/packages/mcp-hub/dist/types.js +2 -0
  331. package/packages/mcp-hub/dist/types.js.map +1 -0
  332. package/packages/subagent/dist/CapabilityToken.d.ts +66 -0
  333. package/packages/subagent/dist/CapabilityToken.d.ts.map +1 -0
  334. package/packages/subagent/dist/CapabilityToken.js +120 -0
  335. package/packages/subagent/dist/CapabilityToken.js.map +1 -0
  336. package/packages/subagent/dist/ResourceDefaults.d.ts +16 -0
  337. package/packages/subagent/dist/ResourceDefaults.d.ts.map +1 -0
  338. package/packages/subagent/dist/ResourceDefaults.js +68 -0
  339. package/packages/subagent/dist/ResourceDefaults.js.map +1 -0
  340. package/packages/subagent/dist/SkillInputResolver.d.ts +30 -0
  341. package/packages/subagent/dist/SkillInputResolver.d.ts.map +1 -0
  342. package/packages/subagent/dist/SkillInputResolver.js +59 -0
  343. package/packages/subagent/dist/SkillInputResolver.js.map +1 -0
  344. package/packages/subagent/dist/SkillInvoker.d.ts +33 -0
  345. package/packages/subagent/dist/SkillInvoker.d.ts.map +1 -0
  346. package/packages/subagent/dist/SkillInvoker.js +69 -0
  347. package/packages/subagent/dist/SkillInvoker.js.map +1 -0
  348. package/packages/subagent/dist/SubagentOrchestrator.d.ts +52 -0
  349. package/packages/subagent/dist/SubagentOrchestrator.d.ts.map +1 -0
  350. package/packages/subagent/dist/SubagentOrchestrator.js +198 -0
  351. package/packages/subagent/dist/SubagentOrchestrator.js.map +1 -0
  352. package/packages/subagent/dist/SubagentResult.d.ts +34 -0
  353. package/packages/subagent/dist/SubagentResult.d.ts.map +1 -0
  354. package/packages/subagent/dist/SubagentResult.js +21 -0
  355. package/packages/subagent/dist/SubagentResult.js.map +1 -0
  356. package/packages/subagent/dist/Watchdog.d.ts +23 -0
  357. package/packages/subagent/dist/Watchdog.d.ts.map +1 -0
  358. package/packages/subagent/dist/Watchdog.js +44 -0
  359. package/packages/subagent/dist/Watchdog.js.map +1 -0
  360. package/packages/subagent/dist/index.d.ts +15 -0
  361. package/packages/subagent/dist/index.d.ts.map +1 -0
  362. package/packages/subagent/dist/index.js +23 -0
  363. package/packages/subagent/dist/index.js.map +1 -0
  364. package/packages/subagent/dist/sandbox/BwrapBackend.d.ts +14 -0
  365. package/packages/subagent/dist/sandbox/BwrapBackend.d.ts.map +1 -0
  366. package/packages/subagent/dist/sandbox/BwrapBackend.js +171 -0
  367. package/packages/subagent/dist/sandbox/BwrapBackend.js.map +1 -0
  368. package/packages/subagent/dist/sandbox/CloudBackend.d.ts +28 -0
  369. package/packages/subagent/dist/sandbox/CloudBackend.d.ts.map +1 -0
  370. package/packages/subagent/dist/sandbox/CloudBackend.js +52 -0
  371. package/packages/subagent/dist/sandbox/CloudBackend.js.map +1 -0
  372. package/packages/subagent/dist/sandbox/DockerBackend.d.ts +14 -0
  373. package/packages/subagent/dist/sandbox/DockerBackend.d.ts.map +1 -0
  374. package/packages/subagent/dist/sandbox/DockerBackend.js +149 -0
  375. package/packages/subagent/dist/sandbox/DockerBackend.js.map +1 -0
  376. package/packages/subagent/dist/sandbox/FirecrackerBackend.d.ts +17 -0
  377. package/packages/subagent/dist/sandbox/FirecrackerBackend.d.ts.map +1 -0
  378. package/packages/subagent/dist/sandbox/FirecrackerBackend.js +54 -0
  379. package/packages/subagent/dist/sandbox/FirecrackerBackend.js.map +1 -0
  380. package/packages/subagent/dist/sandbox/PodmanBackend.d.ts +13 -0
  381. package/packages/subagent/dist/sandbox/PodmanBackend.d.ts.map +1 -0
  382. package/packages/subagent/dist/sandbox/PodmanBackend.js +144 -0
  383. package/packages/subagent/dist/sandbox/PodmanBackend.js.map +1 -0
  384. package/packages/subagent/dist/sandbox/ProcessBackend.d.ts +16 -0
  385. package/packages/subagent/dist/sandbox/ProcessBackend.d.ts.map +1 -0
  386. package/packages/subagent/dist/sandbox/ProcessBackend.js +152 -0
  387. package/packages/subagent/dist/sandbox/ProcessBackend.js.map +1 -0
  388. package/packages/subagent/dist/sandbox/SandboxManager.d.ts +17 -0
  389. package/packages/subagent/dist/sandbox/SandboxManager.d.ts.map +1 -0
  390. package/packages/subagent/dist/sandbox/SandboxManager.js +45 -0
  391. package/packages/subagent/dist/sandbox/SandboxManager.js.map +1 -0
  392. package/packages/subagent/dist/sandbox/types.d.ts +35 -0
  393. package/packages/subagent/dist/sandbox/types.d.ts.map +1 -0
  394. package/packages/subagent/dist/sandbox/types.js +5 -0
  395. package/packages/subagent/dist/sandbox/types.js.map +1 -0
  396. package/packages/subagent-runtime/dist/AgentLoop.d.ts +46 -0
  397. package/packages/subagent-runtime/dist/AgentLoop.d.ts.map +1 -0
  398. package/packages/subagent-runtime/dist/AgentLoop.js +85 -0
  399. package/packages/subagent-runtime/dist/AgentLoop.js.map +1 -0
  400. package/packages/subagent-runtime/dist/MCPProxy.d.ts +24 -0
  401. package/packages/subagent-runtime/dist/MCPProxy.d.ts.map +1 -0
  402. package/packages/subagent-runtime/dist/MCPProxy.js +31 -0
  403. package/packages/subagent-runtime/dist/MCPProxy.js.map +1 -0
  404. package/packages/subagent-runtime/dist/OutputChannel.d.ts +10 -0
  405. package/packages/subagent-runtime/dist/OutputChannel.d.ts.map +1 -0
  406. package/packages/subagent-runtime/dist/OutputChannel.js +14 -0
  407. package/packages/subagent-runtime/dist/OutputChannel.js.map +1 -0
  408. package/packages/subagent-runtime/dist/ResourceTracker.d.ts +29 -0
  409. package/packages/subagent-runtime/dist/ResourceTracker.d.ts.map +1 -0
  410. package/packages/subagent-runtime/dist/ResourceTracker.js +46 -0
  411. package/packages/subagent-runtime/dist/ResourceTracker.js.map +1 -0
  412. package/packages/subagent-runtime/dist/TokenValidator.d.ts +17 -0
  413. package/packages/subagent-runtime/dist/TokenValidator.d.ts.map +1 -0
  414. package/packages/subagent-runtime/dist/TokenValidator.js +29 -0
  415. package/packages/subagent-runtime/dist/TokenValidator.js.map +1 -0
  416. package/packages/subagent-runtime/dist/index.d.ts +6 -0
  417. package/packages/subagent-runtime/dist/index.d.ts.map +1 -0
  418. package/packages/subagent-runtime/dist/index.js +11 -0
  419. package/packages/subagent-runtime/dist/index.js.map +1 -0
  420. package/packages/subagent-runtime/dist/main.d.ts +2 -0
  421. package/packages/subagent-runtime/dist/main.d.ts.map +1 -0
  422. package/packages/subagent-runtime/dist/main.js +102 -0
  423. package/packages/subagent-runtime/dist/main.js.map +1 -0
  424. package/seeds/b2b-outbound/package.json +6 -0
  425. package/seeds/research/package.json +6 -0
  426. package/seeds/software-engineering/install.ts +78 -0
  427. package/seeds/software-engineering/package.json +6 -0
  428. package/seeds/software-engineering/sprint-workflow.json +102 -0
  429. package/skills/build.yaml +97 -0
  430. package/skills/debug.yaml +117 -0
  431. package/skills/design-review.yaml +119 -0
  432. package/skills/doc.yaml +107 -0
  433. package/skills/office-hours.yaml +76 -0
  434. package/skills/plan-ceo-review.yaml +84 -0
  435. package/skills/plan-eng-review.yaml +96 -0
  436. package/skills/qa.yaml +116 -0
  437. package/skills/refactor.yaml +125 -0
  438. package/skills/research.yaml +108 -0
  439. package/skills/retro.yaml +106 -0
  440. package/skills/review.yaml +101 -0
  441. package/skills/security-audit.yaml +114 -0
  442. package/skills/ship.yaml +108 -0
  443. package/skills/test-writer.yaml +131 -0
@@ -0,0 +1,16 @@
1
+ import type { SQLiteAdapter } from '../storage/adapters/SQLiteAdapter.js';
2
+ import type { WeightEventLog } from '../storage/WeightEventLog.js';
3
+ export declare class EdgeWeightUpdater {
4
+ private adapter;
5
+ private weightLog;
6
+ constructor(adapter: SQLiteAdapter, weightLog: WeightEventLog);
7
+ /**
8
+ * Update edge weight with optimistic concurrency control.
9
+ * Retries up to 3 times with exponential backoff (1ms, 2ms, 4ms).
10
+ * On 3rd failure: LWW (last-write-wins) fallback.
11
+ */
12
+ update(edgeId: string, expectedWeight: number, newWeight: number, reason: string, traceId?: string): Promise<boolean>;
13
+ private logEvent;
14
+ private sleep;
15
+ }
16
+ //# sourceMappingURL=EdgeWeightUpdater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgeWeightUpdater.d.ts","sourceRoot":"","sources":["../../src/concurrency/EdgeWeightUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,sCAAsC,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,SAAS;gBADT,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,cAAc;IAGnC;;;;OAIG;IACG,MAAM,CACV,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IA8BnB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,57 @@
1
+ export class EdgeWeightUpdater {
2
+ adapter;
3
+ weightLog;
4
+ constructor(adapter, weightLog) {
5
+ this.adapter = adapter;
6
+ this.weightLog = weightLog;
7
+ }
8
+ /**
9
+ * Update edge weight with optimistic concurrency control.
10
+ * Retries up to 3 times with exponential backoff (1ms, 2ms, 4ms).
11
+ * On 3rd failure: LWW (last-write-wins) fallback.
12
+ */
13
+ async update(edgeId, expectedWeight, newWeight, reason, traceId) {
14
+ const delays = [1, 2, 4];
15
+ let currentExpected = expectedWeight;
16
+ for (let attempt = 0; attempt <= 2; attempt++) {
17
+ const success = this.adapter.updateEdgeWeight(edgeId, newWeight, currentExpected);
18
+ if (success) {
19
+ this.logEvent(edgeId, currentExpected, newWeight, reason, traceId);
20
+ return true;
21
+ }
22
+ // Re-read current weight for next attempt
23
+ const edge = this.adapter.getEdge(edgeId);
24
+ if (!edge)
25
+ return false;
26
+ currentExpected = edge.weight;
27
+ if (attempt < 2) {
28
+ await this.sleep(delays[attempt]);
29
+ }
30
+ }
31
+ // Emergency LWW fallback — all 3 OCC attempts failed
32
+ console.warn(`OCC conflict on edge ${edgeId} after 3 retries — LWW fallback`);
33
+ // NOTE: forceUpdateEdgeWeight must exist on SQLiteAdapter.
34
+ // It executes: UPDATE edges SET weight = ? WHERE id = ?
35
+ // without any OCC version/expected-weight check.
36
+ this.adapter.forceUpdateEdgeWeight(edgeId, newWeight);
37
+ this.logEvent(edgeId, currentExpected, newWeight, `${reason}:lww_fallback`, traceId);
38
+ return true;
39
+ }
40
+ logEvent(edgeId, oldWeight, newWeight, reason, traceId) {
41
+ const event = {
42
+ id: crypto.randomUUID(),
43
+ edge_id: edgeId,
44
+ old_weight: oldWeight,
45
+ new_weight: newWeight,
46
+ delta: newWeight - oldWeight,
47
+ reason,
48
+ trace_id: traceId ?? null,
49
+ created_at: Date.now(),
50
+ };
51
+ this.weightLog.append(event);
52
+ }
53
+ sleep(ms) {
54
+ return new Promise(resolve => setTimeout(resolve, ms));
55
+ }
56
+ }
57
+ //# sourceMappingURL=EdgeWeightUpdater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgeWeightUpdater.js","sourceRoot":"","sources":["../../src/concurrency/EdgeWeightUpdater.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,iBAAiB;IAElB;IACA;IAFV,YACU,OAAsB,EACtB,SAAyB;QADzB,YAAO,GAAP,OAAO,CAAe;QACtB,cAAS,GAAT,SAAS,CAAgB;IAChC,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,MAAc,EACd,cAAsB,EACtB,SAAiB,EACjB,MAAc,EACd,OAAgB;QAEhB,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,eAAe,GAAG,cAAc,CAAC;QAErC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAClF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,0CAA0C;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;YAE9B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,OAAO,CAAC,IAAI,CAAC,wBAAwB,MAAM,iCAAiC,CAAC,CAAC;QAC9E,2DAA2D;QAC3D,wDAAwD;QACxD,iDAAiD;QACjD,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ,CACd,MAAc,EACd,SAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,OAAgB;QAEhB,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,SAAS,GAAG,SAAS;YAC5B,MAAM;YACN,QAAQ,EAAE,OAAO,IAAI,IAAI;YACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ import type { SQLiteAdapter } from '../storage/adapters/SQLiteAdapter.js';
2
+ export interface SnapshotEntry {
3
+ edge_id: string;
4
+ weight_at_snapshot: number;
5
+ version: number;
6
+ }
7
+ export interface SessionSnapshotData {
8
+ session_id: string;
9
+ created_at: number;
10
+ edges: Map<string, SnapshotEntry>;
11
+ pending_updates: Map<string, number>;
12
+ }
13
+ export interface MergeResult {
14
+ applied: number;
15
+ conflicted: number;
16
+ skipped: number;
17
+ }
18
+ /**
19
+ * Optimistic Concurrency Control (OCC) snapshot isolation per session.
20
+ *
21
+ * Each session captures a snapshot of edge weights at the start, records
22
+ * pending updates during execution, and merges them back at the end.
23
+ * Conflicts are detected by comparing edge versions (number of weight events)
24
+ * at snapshot time vs merge time.
25
+ */
26
+ export declare class SessionSnapshotManager {
27
+ private adapter;
28
+ private snapshots;
29
+ constructor(adapter: SQLiteAdapter);
30
+ /**
31
+ * Create a snapshot for a session, capturing current weight and version
32
+ * for each specified edge.
33
+ */
34
+ createSnapshot(sessionId: string, edgeIds: string[]): SessionSnapshotData;
35
+ /**
36
+ * Record a pending weight update within an active session snapshot.
37
+ * The update is buffered and only applied on merge.
38
+ */
39
+ recordUpdate(sessionId: string, edgeId: string, newWeight: number): void;
40
+ /**
41
+ * Merge a session's pending updates back into the live graph.
42
+ *
43
+ * Conflict resolution strategy:
44
+ * - If no version change since snapshot: apply via CAS (updateEdgeWeight).
45
+ * - If version changed AND session succeeded: session wins, force write.
46
+ * - If version changed AND session failed: skip the update.
47
+ * - If the edge no longer exists: skip.
48
+ */
49
+ mergeSnapshot(sessionId: string, sessionSucceeded: boolean): MergeResult;
50
+ /**
51
+ * Retrieve the snapshot data for an active session.
52
+ */
53
+ getSnapshot(sessionId: string): SessionSnapshotData | null;
54
+ /**
55
+ * Discard a session snapshot without merging.
56
+ */
57
+ discardSnapshot(sessionId: string): void;
58
+ /**
59
+ * Derive an edge's version from the number of weight events recorded for it.
60
+ */
61
+ private getEdgeVersion;
62
+ }
63
+ //# sourceMappingURL=SessionSnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionSnapshot.d.ts","sourceRoot":"","sources":["../../src/concurrency/SessionSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAG1E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,SAAS,CAA0C;gBAEvC,OAAO,EAAE,aAAa;IAE1C;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,mBAAmB;IAuBzE;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOxE;;;;;;;;OAQG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAG,WAAW;IAoDxE;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAI1D;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,cAAc;CAGvB"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Optimistic Concurrency Control (OCC) snapshot isolation per session.
3
+ *
4
+ * Each session captures a snapshot of edge weights at the start, records
5
+ * pending updates during execution, and merges them back at the end.
6
+ * Conflicts are detected by comparing edge versions (number of weight events)
7
+ * at snapshot time vs merge time.
8
+ */
9
+ export class SessionSnapshotManager {
10
+ adapter;
11
+ snapshots = new Map();
12
+ constructor(adapter) {
13
+ this.adapter = adapter;
14
+ }
15
+ /**
16
+ * Create a snapshot for a session, capturing current weight and version
17
+ * for each specified edge.
18
+ */
19
+ createSnapshot(sessionId, edgeIds) {
20
+ const snapshot = {
21
+ session_id: sessionId,
22
+ created_at: Date.now(),
23
+ edges: new Map(),
24
+ pending_updates: new Map(),
25
+ };
26
+ for (const edgeId of edgeIds) {
27
+ const edge = this.adapter.getEdge(edgeId);
28
+ if (edge) {
29
+ snapshot.edges.set(edgeId, {
30
+ edge_id: edgeId,
31
+ weight_at_snapshot: edge.weight,
32
+ version: this.getEdgeVersion(edgeId),
33
+ });
34
+ }
35
+ }
36
+ this.snapshots.set(sessionId, snapshot);
37
+ return snapshot;
38
+ }
39
+ /**
40
+ * Record a pending weight update within an active session snapshot.
41
+ * The update is buffered and only applied on merge.
42
+ */
43
+ recordUpdate(sessionId, edgeId, newWeight) {
44
+ const snapshot = this.snapshots.get(sessionId);
45
+ if (snapshot) {
46
+ snapshot.pending_updates.set(edgeId, newWeight);
47
+ }
48
+ }
49
+ /**
50
+ * Merge a session's pending updates back into the live graph.
51
+ *
52
+ * Conflict resolution strategy:
53
+ * - If no version change since snapshot: apply via CAS (updateEdgeWeight).
54
+ * - If version changed AND session succeeded: session wins, force write.
55
+ * - If version changed AND session failed: skip the update.
56
+ * - If the edge no longer exists: skip.
57
+ */
58
+ mergeSnapshot(sessionId, sessionSucceeded) {
59
+ const snapshot = this.snapshots.get(sessionId);
60
+ if (!snapshot) {
61
+ return { applied: 0, conflicted: 0, skipped: 0 };
62
+ }
63
+ const result = { applied: 0, conflicted: 0, skipped: 0 };
64
+ for (const [edgeId, pendingWeight] of snapshot.pending_updates) {
65
+ const current = this.adapter.getEdge(edgeId);
66
+ if (!current) {
67
+ result.skipped++;
68
+ continue;
69
+ }
70
+ const snapshotEntry = snapshot.edges.get(edgeId);
71
+ const currentVersion = this.getEdgeVersion(edgeId);
72
+ // Check if the edge has been modified since our snapshot
73
+ if (snapshotEntry && currentVersion > snapshotEntry.version) {
74
+ // Conflict detected: another session modified this edge
75
+ result.conflicted++;
76
+ if (sessionSucceeded) {
77
+ // Session wins -- force the write (last-writer-wins for successful sessions)
78
+ this.adapter.forceUpdateEdgeWeight(edgeId, pendingWeight);
79
+ result.applied++;
80
+ }
81
+ else {
82
+ result.skipped++;
83
+ }
84
+ }
85
+ else {
86
+ // No conflict -- attempt CAS update using expected weight
87
+ const expectedWeight = snapshotEntry
88
+ ? snapshotEntry.weight_at_snapshot
89
+ : current.weight;
90
+ const success = this.adapter.updateEdgeWeight(edgeId, pendingWeight, expectedWeight);
91
+ if (success) {
92
+ result.applied++;
93
+ }
94
+ else {
95
+ // CAS failed (weight changed between version check and CAS)
96
+ result.conflicted++;
97
+ result.skipped++;
98
+ }
99
+ }
100
+ }
101
+ // Clean up the snapshot after merge
102
+ this.snapshots.delete(sessionId);
103
+ return result;
104
+ }
105
+ /**
106
+ * Retrieve the snapshot data for an active session.
107
+ */
108
+ getSnapshot(sessionId) {
109
+ return this.snapshots.get(sessionId) ?? null;
110
+ }
111
+ /**
112
+ * Discard a session snapshot without merging.
113
+ */
114
+ discardSnapshot(sessionId) {
115
+ this.snapshots.delete(sessionId);
116
+ }
117
+ /**
118
+ * Derive an edge's version from the number of weight events recorded for it.
119
+ */
120
+ getEdgeVersion(edgeId) {
121
+ return this.adapter.getWeightEvents(edgeId).length;
122
+ }
123
+ }
124
+ //# sourceMappingURL=SessionSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionSnapshot.js","sourceRoot":"","sources":["../../src/concurrency/SessionSnapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface HNSWSearchResult {
2
+ id: string;
3
+ distance: number;
4
+ similarity: number;
5
+ }
6
+ export interface HNSWConfig {
7
+ dimensions: number;
8
+ metric?: 'cos' | 'l2';
9
+ connectivity?: number;
10
+ ef_construction?: number;
11
+ }
12
+ export declare class HNSWIndex {
13
+ private config;
14
+ private vectors;
15
+ private usearchIndex;
16
+ constructor(config: HNSWConfig);
17
+ static open(path: string, config: HNSWConfig): Promise<HNSWIndex>;
18
+ add(id: string, vector: Float32Array): void;
19
+ remove(id: string): void;
20
+ search(query: Float32Array, limit?: number): HNSWSearchResult[];
21
+ private cosineSimilarity;
22
+ get size(): number;
23
+ get dimensions(): number;
24
+ toJSON(): {
25
+ entries: Array<{
26
+ id: string;
27
+ vector: number[];
28
+ }>;
29
+ };
30
+ static fromJSON(data: {
31
+ entries: Array<{
32
+ id: string;
33
+ vector: number[];
34
+ }>;
35
+ }, config: HNSWConfig): HNSWIndex;
36
+ }
37
+ //# sourceMappingURL=HNSWIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HNSWIndex.d.ts","sourceRoot":"","sources":["../../src/embedding/HNSWIndex.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,YAAY,CAAwB;gBAEhC,MAAM,EAAE,UAAU;WAUjB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBvE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAS3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;IAanE,OAAO,CAAC,gBAAgB;IAaxB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAGD,MAAM,IAAI;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE;IAQ9D,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,EAC1D,MAAM,EAAE,UAAU,GACjB,SAAS;CAOb"}
@@ -0,0 +1,86 @@
1
+ export class HNSWIndex {
2
+ config;
3
+ // In-memory fallback: Map<id, Float32Array>
4
+ vectors;
5
+ usearchIndex = null;
6
+ constructor(config) {
7
+ this.config = {
8
+ dimensions: config.dimensions,
9
+ metric: config.metric ?? 'cos',
10
+ connectivity: config.connectivity ?? 16,
11
+ ef_construction: config.ef_construction ?? 200,
12
+ };
13
+ this.vectors = new Map();
14
+ }
15
+ static async open(path, config) {
16
+ const index = new HNSWIndex(config);
17
+ // Try to load usearch, fall back to brute-force
18
+ try {
19
+ // Dynamic import — may not be installed
20
+ // @ts-expect-error usearch may not be installed
21
+ const usearch = await import('usearch');
22
+ // TODO: initialize usearch index from path
23
+ void usearch;
24
+ void path;
25
+ }
26
+ catch {
27
+ // Brute-force fallback — fine for <10K vectors
28
+ }
29
+ return index;
30
+ }
31
+ add(id, vector) {
32
+ if (vector.length !== this.config.dimensions) {
33
+ throw new Error(`Vector dimension mismatch: expected ${this.config.dimensions}, got ${vector.length}`);
34
+ }
35
+ this.vectors.set(id, vector);
36
+ }
37
+ remove(id) {
38
+ this.vectors.delete(id);
39
+ }
40
+ search(query, limit = 10) {
41
+ if (this.vectors.size === 0)
42
+ return [];
43
+ // Brute-force cosine similarity
44
+ const results = [];
45
+ for (const [id, vec] of this.vectors) {
46
+ const sim = this.cosineSimilarity(query, vec);
47
+ results.push({ id, distance: 1 - sim, similarity: sim });
48
+ }
49
+ results.sort((a, b) => b.similarity - a.similarity);
50
+ return results.slice(0, limit);
51
+ }
52
+ cosineSimilarity(a, b) {
53
+ let dot = 0;
54
+ let normA = 0;
55
+ let normB = 0;
56
+ for (let i = 0; i < a.length; i++) {
57
+ dot += a[i] * b[i];
58
+ normA += a[i] * a[i];
59
+ normB += b[i] * b[i];
60
+ }
61
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
62
+ return denom === 0 ? 0 : dot / denom;
63
+ }
64
+ get size() {
65
+ return this.vectors.size;
66
+ }
67
+ get dimensions() {
68
+ return this.config.dimensions;
69
+ }
70
+ // Serialize for snapshot injection into subagents
71
+ toJSON() {
72
+ const entries = [];
73
+ for (const [id, vec] of this.vectors) {
74
+ entries.push({ id, vector: Array.from(vec) });
75
+ }
76
+ return { entries };
77
+ }
78
+ static fromJSON(data, config) {
79
+ const index = new HNSWIndex(config);
80
+ for (const entry of data.entries) {
81
+ index.add(entry.id, new Float32Array(entry.vector));
82
+ }
83
+ return index;
84
+ }
85
+ }
86
+ //# sourceMappingURL=HNSWIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HNSWIndex.js","sourceRoot":"","sources":["../../src/embedding/HNSWIndex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { EmbeddingAdapter } from './adapters/OllamaAdapter.js';
2
+ import type { NodeContent } from '../graph/GraphNode.js';
3
+ export declare class MultimodalEmbedder {
4
+ private textAdapter;
5
+ private visionAdapter;
6
+ constructor(opts: {
7
+ textAdapter?: EmbeddingAdapter;
8
+ visionAdapter?: EmbeddingAdapter;
9
+ });
10
+ get dimensions(): number;
11
+ get isAvailable(): boolean;
12
+ /**
13
+ * Compute a fused embedding from a label + content items.
14
+ * Late fusion: average of per-modality embeddings.
15
+ * Returns null if no adapter is available.
16
+ */
17
+ embed(label: string, content: NodeContent[]): Promise<Float32Array | null>;
18
+ /**
19
+ * Embed a single text string (convenience).
20
+ */
21
+ embedText(text: string): Promise<Float32Array | null>;
22
+ private averageEmbeddings;
23
+ }
24
+ //# sourceMappingURL=MultimodalEmbedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultimodalEmbedder.d.ts","sourceRoot":"","sources":["../../src/embedding/MultimodalEmbedder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,aAAa,CAA0B;gBAEnC,IAAI,EAAE;QAChB,WAAW,CAAC,EAAE,gBAAgB,CAAC;QAC/B,aAAa,CAAC,EAAE,gBAAgB,CAAC;KAClC;IAKD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAwChF;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAK3D,OAAO,CAAC,iBAAiB;CAU1B"}
@@ -0,0 +1,75 @@
1
+ import { ContentType } from '../graph/GraphNode.js';
2
+ export class MultimodalEmbedder {
3
+ textAdapter;
4
+ visionAdapter;
5
+ constructor(opts) {
6
+ this.textAdapter = opts.textAdapter ?? null;
7
+ this.visionAdapter = opts.visionAdapter ?? null;
8
+ }
9
+ get dimensions() {
10
+ return this.textAdapter?.dimensions ?? this.visionAdapter?.dimensions ?? 0;
11
+ }
12
+ get isAvailable() {
13
+ return this.textAdapter !== null || this.visionAdapter !== null;
14
+ }
15
+ /**
16
+ * Compute a fused embedding from a label + content items.
17
+ * Late fusion: average of per-modality embeddings.
18
+ * Returns null if no adapter is available.
19
+ */
20
+ async embed(label, content) {
21
+ if (!this.isAvailable)
22
+ return null;
23
+ const embeddings = [];
24
+ for (const item of content) {
25
+ switch (item.type) {
26
+ case ContentType.TEXT:
27
+ case ContentType.CODE:
28
+ case ContentType.STRUCTURED:
29
+ if (this.textAdapter) {
30
+ embeddings.push(await this.textAdapter.embed(item.data));
31
+ }
32
+ break;
33
+ case ContentType.IMAGE:
34
+ if (this.visionAdapter) {
35
+ embeddings.push(await this.visionAdapter.embed(item.data));
36
+ }
37
+ break;
38
+ case ContentType.AUDIO: {
39
+ // Use transcription if available
40
+ const transcription = item.metadata?.transcription;
41
+ if (transcription && this.textAdapter) {
42
+ embeddings.push(await this.textAdapter.embed(transcription));
43
+ }
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ // Always embed the label
49
+ if (this.textAdapter) {
50
+ embeddings.push(await this.textAdapter.embed(label));
51
+ }
52
+ if (embeddings.length === 0)
53
+ return null;
54
+ return this.averageEmbeddings(embeddings);
55
+ }
56
+ /**
57
+ * Embed a single text string (convenience).
58
+ */
59
+ async embedText(text) {
60
+ if (!this.textAdapter)
61
+ return null;
62
+ return this.textAdapter.embed(text);
63
+ }
64
+ averageEmbeddings(embeddings) {
65
+ const dim = embeddings[0].length;
66
+ const result = new Float32Array(dim);
67
+ for (const emb of embeddings) {
68
+ for (let i = 0; i < dim; i++) {
69
+ result[i] += emb[i] / embeddings.length;
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ }
75
+ //# sourceMappingURL=MultimodalEmbedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultimodalEmbedder.js","sourceRoot":"","sources":["../../src/embedding/MultimodalEmbedder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { OllamaAdapter, type EmbeddingAdapter } from './OllamaAdapter.js';
2
+ export declare class NomicAdapter extends OllamaAdapter implements EmbeddingAdapter {
3
+ constructor(opts?: {
4
+ baseUrl?: string;
5
+ });
6
+ }
7
+ //# sourceMappingURL=NomicAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NomicAdapter.d.ts","sourceRoot":"","sources":["../../../src/embedding/adapters/NomicAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,qBAAa,YAAa,SAAQ,aAAc,YAAW,gBAAgB;gBAC7D,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAOxC"}
@@ -0,0 +1,11 @@
1
+ import { OllamaAdapter } from './OllamaAdapter.js';
2
+ export class NomicAdapter extends OllamaAdapter {
3
+ constructor(opts) {
4
+ super({
5
+ model: 'nomic-embed-text',
6
+ dimensions: 768,
7
+ baseUrl: opts?.baseUrl,
8
+ });
9
+ }
10
+ }
11
+ //# sourceMappingURL=NomicAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NomicAdapter.js","sourceRoot":"","sources":["../../../src/embedding/adapters/NomicAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,MAAM,oBAAoB,CAAC;AAE1E,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,IAA2B;QACrC,KAAK,CAAC;YACJ,KAAK,EAAE,kBAAkB;YACzB,UAAU,EAAE,GAAG;YACf,OAAO,EAAE,IAAI,EAAE,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export interface EmbeddingAdapter {
2
+ embed(text: string): Promise<Float32Array>;
3
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
4
+ readonly dimensions: number;
5
+ readonly modelName: string;
6
+ }
7
+ export declare class OllamaAdapter implements EmbeddingAdapter {
8
+ readonly dimensions: number;
9
+ readonly modelName: string;
10
+ private baseUrl;
11
+ constructor(opts: {
12
+ model: string;
13
+ dimensions: number;
14
+ baseUrl?: string;
15
+ });
16
+ embed(text: string): Promise<Float32Array>;
17
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
18
+ }
19
+ //# sourceMappingURL=OllamaAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OllamaAdapter.d.ts","sourceRoot":"","sources":["../../../src/embedding/adapters/OllamaAdapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAMnE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAa1C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAI3D"}
@@ -0,0 +1,27 @@
1
+ export class OllamaAdapter {
2
+ dimensions;
3
+ modelName;
4
+ baseUrl;
5
+ constructor(opts) {
6
+ this.modelName = opts.model;
7
+ this.dimensions = opts.dimensions;
8
+ this.baseUrl = opts.baseUrl ?? 'http://localhost:11434';
9
+ }
10
+ async embed(text) {
11
+ const resp = await fetch(`${this.baseUrl}/api/embeddings`, {
12
+ method: 'POST',
13
+ headers: { 'Content-Type': 'application/json' },
14
+ body: JSON.stringify({ model: this.modelName, prompt: text }),
15
+ });
16
+ if (!resp.ok) {
17
+ throw new Error(`Ollama embedding failed: ${resp.status} ${await resp.text()}`);
18
+ }
19
+ const data = (await resp.json());
20
+ return new Float32Array(data.embedding);
21
+ }
22
+ async embedBatch(texts) {
23
+ // Ollama doesn't have a batch endpoint — run sequentially
24
+ return Promise.all(texts.map((t) => this.embed(t)));
25
+ }
26
+ }
27
+ //# sourceMappingURL=OllamaAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OllamaAdapter.js","sourceRoot":"","sources":["../../../src/embedding/adapters/OllamaAdapter.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,aAAa;IACf,UAAU,CAAS;IACnB,SAAS,CAAS;IACnB,OAAO,CAAS;IAExB,YAAY,IAA6D;QACvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,wBAAwB,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC5D,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,0DAA0D;QAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { EmbeddingAdapter } from './OllamaAdapter.js';
2
+ export declare class OpenAIAdapter implements EmbeddingAdapter {
3
+ readonly dimensions = 1536;
4
+ readonly modelName = "text-embedding-3-small";
5
+ private apiKey;
6
+ private baseUrl;
7
+ constructor(opts: {
8
+ apiKey: string;
9
+ baseUrl?: string;
10
+ });
11
+ embed(text: string): Promise<Float32Array>;
12
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
13
+ }
14
+ //# sourceMappingURL=OpenAIAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIAdapter.d.ts","sourceRoot":"","sources":["../../../src/embedding/adapters/OpenAIAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qBAAa,aAAc,YAAW,gBAAgB;IACpD,QAAQ,CAAC,UAAU,QAAQ;IAC3B,QAAQ,CAAC,SAAS,4BAA4B;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAKhD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmB1C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAmB3D"}