@symerian/symi 2.0.15 → 2.0.17

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 (320) hide show
  1. package/dist/{acp-cli-BKh-53nn.js → acp-cli-DqQjT50N.js} +3 -3
  2. package/dist/{acp-cli-CRT2rkIR.js → acp-cli-SgZGC8og.js} +3 -3
  3. package/dist/{agents-CNsMe4Dr.js → agents-C4_0TzXm.js} +7 -7
  4. package/dist/{agents.config-yx78oSLx.js → agents.config-Bneyaqn6.js} +1 -1
  5. package/dist/{agents.config-CdDf19dm.js → agents.config-D9Ufj9CE.js} +1 -1
  6. package/dist/{audio-preflight-DSeaWZZW.js → audio-preflight-5w1q1hWh.js} +11 -11
  7. package/dist/{audio-preflight-B8ffbICW.js → audio-preflight-BiAp3Hvj.js} +5 -5
  8. package/dist/{audio-preflight-CO2seHjy.js → audio-preflight-Cpsd8C3J.js} +11 -11
  9. package/dist/{audio-preflight-DRQD_nt1.js → audio-preflight-mSUx5I34.js} +5 -5
  10. package/dist/{audit-CiugrQda.js → audit-BCHYqYge.js} +6 -6
  11. package/dist/{audit-DKUpFt8z.js → audit-FH7mu_3g.js} +6 -6
  12. package/dist/{auth-choice-CXMFi9LR.js → auth-choice-5u4JonD1.js} +4 -4
  13. package/dist/{auth-choice-mw9ndZQO.js → auth-choice-B8qrETy7.js} +4 -4
  14. package/dist/{banner-B-joBGLz.js → banner-CufnkY4K.js} +1 -1
  15. package/dist/{browser-cli-iXhPMwGZ.js → browser-cli-Cmyh_mQi.js} +4 -4
  16. package/dist/{browser-cli-Bk7Q_04S.js → browser-cli-n1RQ8OQs.js} +4 -4
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +14 -14
  19. package/dist/bundled/session-memory/handler.js +14 -14
  20. package/dist/{call-BQiCOxB6.js → call-BKOIc76f.js} +2 -2
  21. package/dist/{call-BNyqFDDZ.js → call-C30ffTSt.js} +2 -2
  22. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  23. package/dist/{channel-options-XPRRVrmU.js → channel-options-BBDX9s3H.js} +1 -1
  24. package/dist/{channel-options-D74Jofp4.js → channel-options-CxOu5Gvn.js} +1 -1
  25. package/dist/{channel-web-vRvvtf0S.js → channel-web-DxSaM7GA.js} +7 -7
  26. package/dist/{channels-cli-D3lj5dXo.js → channels-cli-CB6lWL72.js} +31 -31
  27. package/dist/{channels-cli-DgxPfJF7.js → channels-cli-CvtvmTOx.js} +32 -32
  28. package/dist/{chrome-B_zrSLce.js → chrome-1cQdPKbv.js} +8 -8
  29. package/dist/{chrome-BgIDB_SH.js → chrome-CPwj5x24.js} +1 -1
  30. package/dist/{chrome-D9OwvWm7.js → chrome-CUsfMVUk.js} +1 -1
  31. package/dist/{chrome-LmEyZdbC.js → chrome-DPu6LSX4.js} +8 -8
  32. package/dist/cli/daemon-cli.js +1 -1
  33. package/dist/{cli-DQQAfUbo.js → cli-CU_pJKCD.js} +27 -27
  34. package/dist/{cli-Bg_5WQFe.js → cli-cDOiHmL7.js} +28 -28
  35. package/dist/{client-Cnoh7nRo.js → client-CQSyCS4M.js} +2 -1
  36. package/dist/{client-LeVQns9-.js → client-DMBZpU6X.js} +2 -1
  37. package/dist/{command-registry-Cde2LqTh.js → command-registry-D1zcgjTn.js} +11 -11
  38. package/dist/{completion-cli-KJUTWJP3.js → completion-cli-C8TsFimX.js} +2 -2
  39. package/dist/{completion-cli-Cx9htCOm.js → completion-cli-DWcx6gc6.js} +1 -1
  40. package/dist/{config-Dgn_cL29.js → config-BLe0R4JX.js} +3 -1
  41. package/dist/{config-BjGo9GnL.js → config-ClXqj_D1.js} +3 -1
  42. package/dist/{config-DM0K7qC1.js → config-CvuX_y8t.js} +3 -1
  43. package/dist/{config-amjzHiWZ.js → config-DehS9e5w.js} +3 -1
  44. package/dist/{config-cli-ozfA6MGF.js → config-cli-CEp26CMt.js} +2 -2
  45. package/dist/{config-cli-C5-P9Nzz.js → config-cli-DcjOWFbW.js} +2 -2
  46. package/dist/{config-guard-Cnu2qssk.js → config-guard-CGgFpviD.js} +3 -3
  47. package/dist/{config-guard-BpQn1MKk.js → config-guard-Ix_EcPkt.js} +2 -2
  48. package/dist/{config-validation-BHjDr-an.js → config-validation-BQnULegl.js} +1 -1
  49. package/dist/{config-validation-pVfqbrLy.js → config-validation-Ct_myZSl.js} +1 -1
  50. package/dist/{configure-ktsZw1bT.js → configure-B3aYKtwN.js} +10 -10
  51. package/dist/{configure-DiuQ_aTS.js → configure-DbqI2Bgi.js} +10 -10
  52. package/dist/{control-service-DVFF3PrV.js → control-service-CZ8lXYgi.js} +4 -4
  53. package/dist/{control-service-DMz_CcLi.js → control-service-DI1Do6Nn.js} +4 -4
  54. package/dist/control-ui/css/style.css +9 -0
  55. package/dist/control-ui/js/app.js +137 -0
  56. package/dist/control-ui/js/gateway.js +10 -2
  57. package/dist/{cron-cli-iWejT5dL.js → cron-cli-BH6kt3EZ.js} +4 -4
  58. package/dist/{cron-cli-BVy2Ysgu.js → cron-cli-NJy3v3Eb.js} +4 -4
  59. package/dist/{daemon-cli-CFZpc0hg.js → daemon-cli-BuOGkn7L.js} +6 -6
  60. package/dist/{daemon-cli-BU1FofT_.js → daemon-cli-CweZn-1O.js} +6 -6
  61. package/dist/daemon-cli.js +5 -2
  62. package/dist/{daemon-runtime-B38pOixq.js → daemon-runtime-C1t_OfMD.js} +1 -1
  63. package/dist/{daemon-runtime-CjgoCPLb.js → daemon-runtime-D1K-9VEC.js} +1 -1
  64. package/dist/{deliver-B3UoBZdC.js → deliver-BorDF5OG.js} +2 -2
  65. package/dist/{deliver-DONp5mgd.js → deliver-CIc_l0o6.js} +3 -3
  66. package/dist/{deliver-CkjSfucB.js → deliver-D8xILUUI.js} +2 -2
  67. package/dist/{deliver-2Y_F_0yh.js → deliver-DqqfC-g1.js} +3 -3
  68. package/dist/{devices-cli-CKAh6Hnl.js → devices-cli-BE5ZzcA7.js} +3 -3
  69. package/dist/{devices-cli-DC8knKQP.js → devices-cli-BUdOf8m2.js} +3 -3
  70. package/dist/{directory-cli-DH9ww80p.js → directory-cli-BBdctcDF.js} +1 -1
  71. package/dist/{directory-cli-B0H80BMR.js → directory-cli-DQHIn9um.js} +1 -1
  72. package/dist/{dns-cli-Lzt29-Zu.js → dns-cli-6H_E37de.js} +1 -1
  73. package/dist/{dns-cli-CVMQnrzw.js → dns-cli-mCiUyfvk.js} +1 -1
  74. package/dist/{doctor-completion-CrN6Ly8x.js → doctor-completion-CAdewURI.js} +1 -1
  75. package/dist/{doctor-completion-Vwi_je1c.js → doctor-completion-CXUM27y3.js} +1 -1
  76. package/dist/{doctor-config-flow-B150h841.js → doctor-config-flow-BWD9G2UQ.js} +2 -2
  77. package/dist/{doctor-config-flow-C_56SUPO.js → doctor-config-flow-CthAM9my.js} +2 -2
  78. package/dist/entry.js +1 -1
  79. package/dist/{exec-approvals-cli-CfrLzlfe.js → exec-approvals-cli-CYKHeoEA.js} +5 -5
  80. package/dist/{exec-approvals-cli-D7ZfJtB3.js → exec-approvals-cli-CjU3pZzx.js} +5 -5
  81. package/dist/extensionAPI.js +14 -14
  82. package/dist/{gateway-cli-CwO3878F.js → gateway-cli-Bs96hk7L.js} +44 -44
  83. package/dist/{gateway-cli-DyqK4XZ1.js → gateway-cli-n-kmAuP8.js} +43 -43
  84. package/dist/{gateway-rpc-XxpDa3Bd.js → gateway-rpc-0C2uJScX.js} +1 -1
  85. package/dist/{gateway-rpc-BnsXD9QK.js → gateway-rpc-CTqBFfgd.js} +1 -1
  86. package/dist/{glass-ui-ws-BmqwQaCf.js → glass-ui-ws-DFYRIWTO.js} +46 -40
  87. package/dist/{glass-ui-ws-zVNodseh.js → glass-ui-ws-mIHlWvBv.js} +45 -39
  88. package/dist/{health-UjXEBnzA.js → health-CpbZDInE.js} +5 -5
  89. package/dist/{health-Q1RP1M2f.js → health-gsbXEgFI.js} +5 -5
  90. package/dist/{hooks-cli-D4qJl6do.js → hooks-cli-SJWnM2SY.js} +29 -29
  91. package/dist/{hooks-cli-DOT9uGZw.js → hooks-cli-iVG6fkFc.js} +28 -28
  92. package/dist/{image-DrZEJQwQ.js → image-DIzd7Gw9.js} +2 -2
  93. package/dist/{image-B4LY9KFw.js → image-DWOvY8sR.js} +2 -2
  94. package/dist/{image-CSeAnozE.js → image-DrkD-6sg.js} +2 -2
  95. package/dist/{image-RFofsrof.js → image-GHA29jwQ.js} +2 -2
  96. package/dist/index.js +36 -36
  97. package/dist/{lifecycle-core-BYV6-zd8.js → lifecycle-core-CE8aXuLe.js} +2 -2
  98. package/dist/{lifecycle-core-De5BcVI4.js → lifecycle-core-CPLYFbS4.js} +2 -2
  99. package/dist/llm-slug-generator.js +14 -14
  100. package/dist/{login-CXSct1EH.js → login-BcCF4noU.js} +2 -2
  101. package/dist/{login-BH17fJ5L.js → login-C5eMLg1G.js} +2 -2
  102. package/dist/{login-BG_7eJLu.js → login-DNeGXcjV.js} +2 -2
  103. package/dist/{login-BZYFLDxo.js → login-_Ynqrjet.js} +2 -2
  104. package/dist/{login-qr-zVpxocbF.js → login-qr-CYEYc0Vo.js} +2 -2
  105. package/dist/{login-qr-9OQSnm5L.js → login-qr-CzD7_Pru.js} +2 -2
  106. package/dist/{login-qr-DoNfx43Q.js → login-qr-DjXNemMm.js} +2 -2
  107. package/dist/{login-qr-BLmEvZVj.js → login-qr-E4YwhoPt.js} +2 -2
  108. package/dist/{logs-cli-DfFvgxqj.js → logs-cli-BLp5AOM0.js} +4 -4
  109. package/dist/{logs-cli-D3iVwGDc.js → logs-cli-CIQ4qmRW.js} +4 -4
  110. package/dist/{manager-B5EXdBQV.js → manager-BmHL5ETi.js} +134 -17
  111. package/dist/{manager-CYHgFXd8.js → manager-CPQ2pEj3.js} +134 -17
  112. package/dist/{manager-C_DoJrcP.js → manager-Oiy1uHsu.js} +134 -17
  113. package/dist/{manager-oiX42wby.js → manager-oQJvFR6J.js} +134 -17
  114. package/dist/{memory-cli-BhnOq4Ev.js → memory-cli-BUoM-v1-.js} +206 -3
  115. package/dist/{memory-cli-D4J9SO7Z.js → memory-cli-CGRSXKeF.js} +206 -3
  116. package/dist/{model-catalog-DjJ9GtKX.js → model-catalog-DZbVIJnH.js} +3 -3
  117. package/dist/{model-catalog-Dj5pIc1G.js → model-catalog-sW2MkIv9.js} +2 -2
  118. package/dist/{model-picker-ay4NPk8S.js → model-picker-BJBeaNrK.js} +2 -2
  119. package/dist/{model-picker-DXwUsLAy.js → model-picker-DUl7Gvdh.js} +2 -2
  120. package/dist/{models-DKsiIvSx.js → models-LtuCAbk5.js} +8 -8
  121. package/dist/{models-cli-ULbdeSgc.js → models-cli-CB2zHB3Q.js} +31 -31
  122. package/dist/{models-cli-BS6UJ98e.js → models-cli-DEQCqsfo.js} +31 -31
  123. package/dist/{models-config-u4va9_AO.js → models-config-BH6-rmtt.js} +1 -1
  124. package/dist/{models-config-Cb41NmVa.js → models-config-DT09Fas0.js} +1 -1
  125. package/dist/{node-cli-BDruQPgf.js → node-cli-BnZT8tc-.js} +10 -10
  126. package/dist/{node-cli-Dq7jjGmU.js → node-cli-znp1IPL2.js} +10 -10
  127. package/dist/{nodes-cli-CO1-qlpY.js → nodes-cli-C8L5ablK.js} +4 -4
  128. package/dist/{nodes-cli-D71AOvPL.js → nodes-cli-D3bHqKX1.js} +4 -4
  129. package/dist/{onboard-Bt-BwfkR.js → onboard-B725u5vG.js} +7 -7
  130. package/dist/{onboard-B387frTY.js → onboard-Dz7lPFv1.js} +7 -7
  131. package/dist/{onboard-channels-COcxT5Q0.js → onboard-channels-DPb8R8S3.js} +1 -1
  132. package/dist/{onboard-channels-ybPEmcP8.js → onboard-channels-DjG2jZUq.js} +1 -1
  133. package/dist/{onboard-custom-BKR6vm2R.js → onboard-custom-CFqoXgjd.js} +2 -2
  134. package/dist/{onboard-custom-DoIhWPnb.js → onboard-custom-in5WChfX.js} +2 -2
  135. package/dist/{onboard-helpers-CUQrf3zD.js → onboard-helpers-BmDQMRZ7.js} +2 -2
  136. package/dist/{onboard-helpers-BuSj9DUm.js → onboard-helpers-_sSsfEAa.js} +2 -2
  137. package/dist/{onboard-remote-DTYzroFm.js → onboard-remote-BeAAhzmD.js} +1 -1
  138. package/dist/{onboard-remote-BSjc42yV.js → onboard-remote-CBEIs-Ew.js} +1 -1
  139. package/dist/{onboard-skills-70EumFmD.js → onboard-skills-Bx_OM5v0.js} +1 -1
  140. package/dist/{onboard-skills-BD8JNVwL.js → onboard-skills-EVFmwR8Q.js} +1 -1
  141. package/dist/{onboarding-BibGEGIS.js → onboarding-D-FQIiBn.js} +10 -10
  142. package/dist/{onboarding-CdN_NU2d.js → onboarding-qxWeXuGM.js} +10 -10
  143. package/dist/{onboarding.finalize-CY1NjrGb.js → onboarding.finalize-DJTQnGkJ.js} +35 -35
  144. package/dist/{onboarding.finalize-CvahVrDM.js → onboarding.finalize-D_gWQwW0.js} +33 -33
  145. package/dist/{onboarding.gateway-config-DipSuaKH.js → onboarding.gateway-config-Boplq1Mn.js} +5 -5
  146. package/dist/{onboarding.gateway-config-Cj_s_IG8.js → onboarding.gateway-config-r7VeJWM7.js} +5 -5
  147. package/dist/{outbound-Bv4FdtnF.js → outbound-B_cf2WkB.js} +1 -1
  148. package/dist/{outbound-DfOF58G2.js → outbound-DPCAcHLQ.js} +1 -1
  149. package/dist/{outbound-BNMysnJ1.js → outbound-DRslTBga.js} +1 -1
  150. package/dist/{outbound-Cedd_yui.js → outbound-yaYfpPTu.js} +1 -1
  151. package/dist/{pairing-cli-B7oA36Ke.js → pairing-cli-DFgfVeeY.js} +1 -1
  152. package/dist/{pairing-cli-7_4ayuXX.js → pairing-cli-DOMZSDiT.js} +1 -1
  153. package/dist/{pi-auth-json-DuUL9qfI.js → pi-auth-json-Do26xypW.js} +1 -1
  154. package/dist/{pi-embedded-BjzaB3CT.js → pi-embedded-BINp4yHJ.js} +242 -40
  155. package/dist/{pi-embedded-9wEA_0mu.js → pi-embedded-C6BUGEuF.js} +242 -40
  156. package/dist/{pi-embedded-helpers-BmYZe8o8.js → pi-embedded-helpers-BDwdFGX-.js} +5 -5
  157. package/dist/{pi-embedded-helpers-CgxKWHj9.js → pi-embedded-helpers-Cs0TgOaH.js} +1 -1
  158. package/dist/{pi-embedded-helpers-kB5lBgXk.js → pi-embedded-helpers-Dfp-iKzJ.js} +5 -5
  159. package/dist/{pi-embedded-helpers-ueCT6VlS.js → pi-embedded-helpers-jynCNZsb.js} +1 -1
  160. package/dist/{pi-tools.policy-DPmdlOwE.js → pi-tools.policy-eb_uvOQV.js} +2 -2
  161. package/dist/{pi-tools.policy-T6Z5F-_n.js → pi-tools.policy-vws0LV7U.js} +2 -2
  162. package/dist/{plugin-registry-CEoSVvL1.js → plugin-registry-C61W5IWr.js} +2 -2
  163. package/dist/{plugin-registry-BAbkdLQ7.js → plugin-registry-D1cKRWYQ.js} +2 -2
  164. package/dist/plugin-sdk/agents/memory-search.d.ts +2 -2
  165. package/dist/plugin-sdk/{audio-preflight-CpYjfwrA.js → audio-preflight-CdG1OBN2.js} +5 -5
  166. package/dist/plugin-sdk/{channel-web-xXTpy0N_.js → channel-web-DFVIpsZB.js} +7 -7
  167. package/dist/plugin-sdk/{chrome-BFy_lpld.js → chrome-XyjVFCkY.js} +1 -1
  168. package/dist/plugin-sdk/config/types.tools.d.ts +2 -2
  169. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +2 -2
  170. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +4 -4
  171. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +4 -4
  172. package/dist/plugin-sdk/config/zod-schema.d.ts +4 -4
  173. package/dist/plugin-sdk/{config-Do1-fcaS.js → config-DG32gDDp.js} +3 -1
  174. package/dist/plugin-sdk/{deliver-BwnrMlHO.js → deliver-BdbnTrPD.js} +2 -2
  175. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -0
  176. package/dist/plugin-sdk/{image-k_W1USVr.js → image-B4_TBNqR.js} +2 -2
  177. package/dist/plugin-sdk/index.js +18 -18
  178. package/dist/plugin-sdk/{login-DPofXJE3.js → login-Dey5tDpn.js} +2 -2
  179. package/dist/plugin-sdk/{login-qr-CNatqAUv.js → login-qr-Tx8z1frn.js} +2 -2
  180. package/dist/plugin-sdk/{manager-DnoXj4EG.js → manager-RdPsBbBU.js} +134 -17
  181. package/dist/plugin-sdk/memory/embeddings-ollama.d.ts +27 -0
  182. package/dist/plugin-sdk/memory/embeddings.d.ts +4 -1
  183. package/dist/plugin-sdk/memory/manager-sync-ops.d.ts +1 -1
  184. package/dist/plugin-sdk/memory/manager.d.ts +1 -1
  185. package/dist/plugin-sdk/{outbound-w5v_6nFD.js → outbound-BpzsDbEV.js} +1 -1
  186. package/dist/plugin-sdk/{pi-embedded-helpers-Cs2-_EpL.js → pi-embedded-helpers-OWtoPEg8.js} +5 -5
  187. package/dist/plugin-sdk/{pw-ai-BoitXk7j.js → pw-ai-OhVopvbb.js} +2 -2
  188. package/dist/plugin-sdk/{replies-BU-tUT8j.js → replies-DiFTMGgM.js} +1 -1
  189. package/dist/plugin-sdk/{reply-EEvLfWgt.js → reply-v8ed4JLy.js} +236 -34
  190. package/dist/plugin-sdk/{runner-Br1179I4.js → runner-BUXsfUip.js} +2 -2
  191. package/dist/plugin-sdk/{send-Dkyi5g1U.js → send-BXvJJUV_.js} +1 -1
  192. package/dist/plugin-sdk/{send-BaLZTKkj.js → send-BbFwAS_k.js} +1 -1
  193. package/dist/plugin-sdk/{send-P8PiZ2Os.js → send-CGSsrvd1.js} +1 -1
  194. package/dist/plugin-sdk/{send-Ts2lINh9.js → send-DXcq1jzH.js} +1 -1
  195. package/dist/plugin-sdk/{send-CE6VxWke.js → send-Drdgnfr_.js} +1 -1
  196. package/dist/plugin-sdk/{session-Bwdr4g-M.js → session-CX5KhlOe.js} +1 -1
  197. package/dist/plugin-sdk/{web-COWtpMAH.js → web-DfIRv_Mx.js} +18 -18
  198. package/dist/plugin-sdk/{whatsapp-actions-Di-yCTCj.js → whatsapp-actions-Dh6Y2fu9.js} +2 -2
  199. package/dist/{plugins-cli-C_S07pgO.js → plugins-cli-ClY_BPg9.js} +28 -28
  200. package/dist/{plugins-cli-BpuQ7Y9l.js → plugins-cli-UmtKEuxj.js} +29 -29
  201. package/dist/{program-cO9YX6wL.js → program-CNsuYlJt.js} +35 -35
  202. package/dist/{program-context-QBBvnWFX.js → program-context-C2XeNCxI.js} +38 -38
  203. package/dist/{prompt-select-styled-D3dYbx2P.js → prompt-select-styled-CgsYQqlJ.js} +15 -15
  204. package/dist/{prompt-select-styled-CepuQSKg.js → prompt-select-styled-CiYSpQIf.js} +15 -15
  205. package/dist/{provider-auth-helpers-DXqvuBCi.js → provider-auth-helpers-CVAbJckC.js} +2 -2
  206. package/dist/{provider-auth-helpers-BMACaaEd.js → provider-auth-helpers-XIYHuUnj.js} +2 -2
  207. package/dist/{push-apns-DhZgao_r.js → push-apns-6y-7OuAU.js} +1 -1
  208. package/dist/{push-apns-8YIzbTM7.js → push-apns-9q7Pl5I0.js} +1 -1
  209. package/dist/{pw-ai-CQzJmf8V.js → pw-ai-BdNmRxEw.js} +2 -2
  210. package/dist/{pw-ai-s-d46DCX.js → pw-ai-BfUWg8Eh.js} +2 -2
  211. package/dist/{pw-ai-CdaTpZo1.js → pw-ai-C9noP7iN.js} +2 -2
  212. package/dist/{pw-ai-CAkn033M.js → pw-ai-Dnh_iopr.js} +2 -2
  213. package/dist/{qr-cli-DlVBiDQm.js → qr-cli-BbRZOhwI.js} +1 -1
  214. package/dist/{qr-cli-Diq_Rb3t.js → qr-cli-Cac34dCs.js} +1 -1
  215. package/dist/{register.agent-CSUoUVKd.js → register.agent-DmLJVv4N.js} +36 -36
  216. package/dist/{register.agent-CiTS9lyx.js → register.agent-Ys85zXmm.js} +34 -34
  217. package/dist/{register.configure-BbE9MAer.js → register.configure-BwmAY5TF.js} +38 -38
  218. package/dist/{register.configure-CuCVLOW0.js → register.configure-DYuK1UkU.js} +39 -39
  219. package/dist/{register.maintenance-D8bthvou.js → register.maintenance-625En1kE.js} +36 -36
  220. package/dist/{register.maintenance-CJG75LTu.js → register.maintenance-BQa25CA8.js} +38 -38
  221. package/dist/{register.message-CyqE4E2O.js → register.message-CDpK3rbI.js} +29 -29
  222. package/dist/{register.message-nUpHGrEE.js → register.message-DKeM6mQo.js} +28 -28
  223. package/dist/{register.onboard-Dlw-TCPH.js → register.onboard-CbvkWFq5.js} +34 -34
  224. package/dist/{register.onboard-BDlne5KX.js → register.onboard-DtMjj81J.js} +35 -35
  225. package/dist/{register.setup-ByMyofSq.js → register.setup-BHhLns2f.js} +35 -35
  226. package/dist/{register.setup-B8kiMuah.js → register.setup-DdX4Ahvt.js} +34 -34
  227. package/dist/{register.status-health-sessions-0odRpA-p.js → register.status-health-sessions-CqMFel_o.js} +33 -33
  228. package/dist/{register.status-health-sessions-Diirshgb.js → register.status-health-sessions-D1KvwnF9.js} +31 -31
  229. package/dist/{register.subclis-CqEj9vfW.js → register.subclis-su5EMHvC.js} +28 -28
  230. package/dist/{replies-CTKReSzx.js → replies-DqyX2Vln.js} +1 -1
  231. package/dist/{replies-D9V19U2-.js → replies-DtdP8R93.js} +1 -1
  232. package/dist/{replies-DqdOBkTB.js → replies-Dzc6eCFS.js} +1 -1
  233. package/dist/{replies-QloQerhz.js → replies-zeeuLUij.js} +1 -1
  234. package/dist/{reply-B9o45s3E.js → reply-DyFibFiG.js} +43 -43
  235. package/dist/{routes-BYphcpth.js → routes-B7FWIw81.js} +3 -3
  236. package/dist/{routes-qIyRWgzF.js → routes-CEjKic_-.js} +3 -3
  237. package/dist/{rpc-B8S3CF-2.js → rpc-CR9IjVRa.js} +1 -1
  238. package/dist/{rpc-K2mc_55f.js → rpc-CV10Y2YL.js} +1 -1
  239. package/dist/{run-main-C__lZ7VF.js → run-main-CRPU46XB.js} +46 -46
  240. package/dist/{runner-C0tJTZmp.js → runner-BkANJiWS.js} +3 -3
  241. package/dist/{runner-CJJY2r19.js → runner-CTglx_CV.js} +2 -2
  242. package/dist/{runner-DOvsNiYz.js → runner-v0fS4J7T.js} +2 -2
  243. package/dist/{runner-BXN4KYDK.js → runner-w5reqY02.js} +3 -3
  244. package/dist/{sandbox-CbuJolk2.js → sandbox-BpIrSDhl.js} +5 -5
  245. package/dist/{sandbox-rMmahr2s.js → sandbox-DTzJlbvf.js} +5 -5
  246. package/dist/{sandbox-cli-C90jqh9l.js → sandbox-cli-B4VN_9mV.js} +6 -6
  247. package/dist/{sandbox-cli-Duc05KL9.js → sandbox-cli-R_ZOY_KC.js} +6 -6
  248. package/dist/{security-cli-Bt0VkUtO.js → security-cli-BMB3kCFA.js} +10 -10
  249. package/dist/{security-cli-YGXUUBvD.js → security-cli-DmpyxTgQ.js} +10 -10
  250. package/dist/{send-BeASPkFg.js → send-1iB7Rdwp.js} +1 -1
  251. package/dist/{send-BVw7fCyL.js → send-BLT3lTZy.js} +1 -1
  252. package/dist/{send-3YM-aarb.js → send-BR3reUOE.js} +1 -1
  253. package/dist/{send-CYfaZNZ4.js → send-BXiiQprI.js} +1 -1
  254. package/dist/{send-De_WCeGZ.js → send-BbV4XqMl.js} +1 -1
  255. package/dist/{send-D3M6pMr5.js → send-Bt4UsVrd.js} +1 -1
  256. package/dist/{send-CzE5UKr-.js → send-Bx04WqH5.js} +1 -1
  257. package/dist/{send-BVZGeP2r.js → send-CC2vm0xU.js} +1 -1
  258. package/dist/{send-CHOArYFe.js → send-CEjpAJ8N.js} +1 -1
  259. package/dist/{send-hNornLoH.js → send-CQzO_Tg0.js} +1 -1
  260. package/dist/{send-BH09HKsX.js → send-CRWQglv9.js} +1 -1
  261. package/dist/{send-D0dzPf6g.js → send-CZ18Xq5n.js} +1 -1
  262. package/dist/{send-mi3NHnwI.js → send-CltKx_vS.js} +1 -1
  263. package/dist/{send-D_yJMeJa.js → send-DDrpEKUg.js} +1 -1
  264. package/dist/{send-D16XtYvC.js → send-DVLEgg9H.js} +1 -1
  265. package/dist/{send-Do-0Kcmv.js → send-Dm4UYQsf.js} +1 -1
  266. package/dist/{send-DEWzWqfZ.js → send-DyK4u4yH.js} +1 -1
  267. package/dist/{send-B18gkuvz.js → send-EQ1insgp.js} +1 -1
  268. package/dist/{send-C7u4_H5t.js → send-hJthT6M_.js} +1 -1
  269. package/dist/{send-BsocounR.js → send-tDTl6xgz.js} +1 -1
  270. package/dist/{server-context-DG2dIhAy.js → server-context-BcjcQhiM.js} +5 -5
  271. package/dist/{server-context-bMIwnOnH.js → server-context-DbcjnRHG.js} +5 -5
  272. package/dist/{server-methods-Df9KsV_-.js → server-methods-56m79WbR.js} +35 -19
  273. package/dist/{server-methods-B_NSJmhc.js → server-methods-U_lDP83A.js} +34 -18
  274. package/dist/{server-node-events-ZG0SBDkU.js → server-node-events-DpGswbj8.js} +28 -28
  275. package/dist/{server-node-events-C2mugatX.js → server-node-events-Q9J_E8Ce.js} +29 -29
  276. package/dist/{session-BjcsCwgz.js → session-1Q4kg4xp.js} +1 -1
  277. package/dist/{session-BkVBeAkg.js → session-B4JR6zUJ.js} +1 -1
  278. package/dist/{session-BeJq-MLE.js → session-BvXsNdtA.js} +1 -1
  279. package/dist/{session-T0JXlYWe.js → session-C86mCuOs.js} +1 -1
  280. package/dist/{session-utils-Cdv2Qaq2.js → session-utils-CFvGKxdu.js} +3 -3
  281. package/dist/{sessions-DJAxaVI7.js → sessions-B3nP13Fw.js} +1 -1
  282. package/dist/{sessions-BEyCtqBB.js → sessions-BdeJp6uY.js} +1 -1
  283. package/dist/{sessions-CX93jXmG.js → sessions-m60NabL_.js} +3 -3
  284. package/dist/{shared-CMw4odDH.js → shared-mv9M8Mzc.js} +1 -1
  285. package/dist/{shared-CLXhDldI.js → shared-sOiAK5kN.js} +1 -1
  286. package/dist/{skills-cli-CQ7XQ4Kn.js → skills-cli-B7FG8Ft4.js} +1 -1
  287. package/dist/{skills-cli-DIx7YItN.js → skills-cli-DVTw-NM0.js} +1 -1
  288. package/dist/{status-BytVj4kU.js → status-BNmYNm1S.js} +2 -2
  289. package/dist/{status-hgm5EhwS.js → status-D4KjZ3qi.js} +9 -9
  290. package/dist/{status-BTF6_aBO.js → status-DIYjr2wp.js} +2 -2
  291. package/dist/{status-PADx9rG7.js → status-DbXRbJqY.js} +10 -10
  292. package/dist/{status.update-BXs3adtg.js → status.update-CbXOcYqG.js} +1 -1
  293. package/dist/{status.update-DlaskfTr.js → status.update-DKLvc9EH.js} +1 -1
  294. package/dist/{subagent-registry-BR2Qhqjf.js → subagent-registry-Ct3GvWVn.js} +44 -44
  295. package/dist/{system-cli-BMrwtPdR.js → system-cli-9b3AzE_M.js} +4 -4
  296. package/dist/{system-cli-B_cCDKOu.js → system-cli-B_KTvR0v.js} +4 -4
  297. package/dist/{systemd-hints-BBPT8Use.js → systemd-hints-BE7qhp3n.js} +1 -1
  298. package/dist/{systemd-hints-Bm2H1erP.js → systemd-hints-D_u4AuIu.js} +1 -1
  299. package/dist/{tui-CcirlGg5.js → tui-BViOdgFZ.js} +5 -5
  300. package/dist/{tui-cli-hcbzeOtp.js → tui-cli-B97jQaQp.js} +10 -10
  301. package/dist/{tui-cli-D3VMk5c8.js → tui-cli-DKQz32oa.js} +10 -10
  302. package/dist/{tui-0rURH3b3.js → tui-oo_JjD-G.js} +5 -5
  303. package/dist/{update-cli-CHr8rjf-.js → update-cli-C9S00L1E.js} +41 -41
  304. package/dist/{update-cli-qacplfF4.js → update-cli-Dhk0Yxsm.js} +39 -39
  305. package/dist/{update-runner-DM8zQvQB.js → update-runner-BnIIcsqA.js} +1 -1
  306. package/dist/{update-runner-DNA7FJa2.js → update-runner-DBZOvTzN.js} +1 -1
  307. package/dist/{web-UroM-w6c.js → web-5uLk4OEM.js} +31 -31
  308. package/dist/{web-DkQc82PT.js → web-8NQJ75ip.js} +31 -31
  309. package/dist/{web-BKQnrqo-.js → web-f7lkf_un.js} +17 -17
  310. package/dist/{web-CAnxcgBD.js → web-mXHyxR_l.js} +17 -17
  311. package/dist/{webhooks-cli-B0Crq2Ec.js → webhooks-cli-BLi_usfE.js} +1 -1
  312. package/dist/{webhooks-cli-CLIdArAE.js → webhooks-cli-Dz9n2L0-.js} +1 -1
  313. package/dist/{whatsapp-actions-BIjGyW3T.js → whatsapp-actions-6S6PNs2p.js} +2 -2
  314. package/dist/{whatsapp-actions-BL7tCNC_.js → whatsapp-actions-B4YPuD2Q.js} +2 -2
  315. package/dist/{whatsapp-actions-B821AFp-.js → whatsapp-actions-ChtHuvdU.js} +2 -2
  316. package/dist/{whatsapp-actions-Jfx4zcwv.js → whatsapp-actions-M8kjDd9l.js} +2 -2
  317. package/dist/{with-timeout-Cj_xUxo6.js → with-timeout-2zPYOOzh.js} +1 -1
  318. package/dist/{with-timeout-BeA4Jxcl.js → with-timeout-gaHpaiis.js} +1 -1
  319. package/docs/reference/templates/SYMIPULSE.md +22 -1
  320. package/package.json +1 -1
@@ -63,7 +63,7 @@ function mergeConfig(defaults, overrides, agentId) {
63
63
  const provider = overrides?.provider ?? defaults?.provider ?? "auto";
64
64
  const defaultRemote = defaults?.remote;
65
65
  const overrideRemote = overrides?.remote;
66
- const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "auto";
66
+ const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "ollama" || provider === "auto";
67
67
  const batch = {
68
68
  enabled: overrideRemote?.batch?.enabled ?? defaultRemote?.batch?.enabled ?? false,
69
69
  wait: overrideRemote?.batch?.wait ?? defaultRemote?.batch?.wait ?? true,
@@ -330,6 +330,124 @@ async function resolveGeminiEmbeddingClient(options) {
330
330
  };
331
331
  }
332
332
 
333
+ //#endregion
334
+ //#region src/memory/embeddings-remote-fetch.ts
335
+ async function fetchRemoteEmbeddingVectors(params) {
336
+ const res = await fetch(params.url, {
337
+ method: "POST",
338
+ headers: params.headers,
339
+ body: JSON.stringify(params.body)
340
+ });
341
+ if (!res.ok) {
342
+ const text = await res.text();
343
+ throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
344
+ }
345
+ return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
346
+ }
347
+
348
+ //#endregion
349
+ //#region src/memory/embeddings-ollama.ts
350
+ /**
351
+ * Known embedding model name prefixes. Ollama's `/api/tags` does not expose
352
+ * model capabilities, so we rely on well-known naming patterns.
353
+ */
354
+ const EMBEDDING_MODEL_PATTERNS = [
355
+ "nomic-embed",
356
+ "mxbai-embed",
357
+ "all-minilm",
358
+ "bge-",
359
+ "snowflake-arctic-embed",
360
+ "gte-",
361
+ "e5-",
362
+ "multilingual-e5",
363
+ "paraphrase-",
364
+ "jina-embeddings",
365
+ "stella-"
366
+ ];
367
+ function isEmbeddingModel(name) {
368
+ const lower = name.toLowerCase();
369
+ return EMBEDDING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));
370
+ }
371
+ /**
372
+ * Resolve the Ollama API base URL from config or defaults.
373
+ * Strips any trailing `/v1` suffix since we need the native API base.
374
+ */
375
+ function resolveOllamaBaseUrl(cfg) {
376
+ const configured = cfg?.models?.providers?.ollama?.baseUrl?.trim() ?? void 0;
377
+ if (configured) return configured.replace(/\/v1\/?$/, "").replace(/\/$/, "");
378
+ return "http://127.0.0.1:11434";
379
+ }
380
+ /**
381
+ * Probe an Ollama instance for available embedding models.
382
+ * Returns null if Ollama is unreachable or has no embedding models.
383
+ */
384
+ async function probeOllamaEmbeddingModels(baseUrl) {
385
+ try {
386
+ const controller = new AbortController();
387
+ const timeout = setTimeout(() => controller.abort(), 5e3);
388
+ const res = await fetch(`${baseUrl}/api/tags`, { signal: controller.signal });
389
+ clearTimeout(timeout);
390
+ if (!res.ok) return null;
391
+ const models = ((await res.json()).models ?? []).map((m) => m.name ?? "").filter(Boolean).filter(isEmbeddingModel);
392
+ if (models.length === 0) return null;
393
+ return {
394
+ models,
395
+ baseUrl
396
+ };
397
+ } catch {
398
+ return null;
399
+ }
400
+ }
401
+ /**
402
+ * Create an embedding provider that uses Ollama's OpenAI-compatible
403
+ * `/v1/embeddings` endpoint. No auth header is required for local Ollama.
404
+ */
405
+ async function createOllamaEmbeddingProvider(options) {
406
+ const cfg = options.config;
407
+ const remoteBaseUrl = options.remote?.baseUrl?.trim();
408
+ let ollamaBase;
409
+ if (remoteBaseUrl) ollamaBase = remoteBaseUrl.replace(/\/v1\/?$/, "").replace(/\/$/, "");
410
+ else ollamaBase = resolveOllamaBaseUrl(cfg);
411
+ let model = options.model?.trim();
412
+ if (!model) {
413
+ const probe = await probeOllamaEmbeddingModels(ollamaBase);
414
+ if (!probe || probe.models.length === 0) throw new Error(`No embedding models found on Ollama at ${ollamaBase}. Pull one with: ollama pull nomic-embed-text`);
415
+ model = probe.models[0];
416
+ }
417
+ const embeddingsUrl = `${ollamaBase}/v1/embeddings`;
418
+ const headers = { "Content-Type": "application/json" };
419
+ const apiKey = options.remote?.apiKey?.trim();
420
+ if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
421
+ const client = {
422
+ baseUrl: ollamaBase,
423
+ model
424
+ };
425
+ const embed = async (input) => {
426
+ if (input.length === 0) return [];
427
+ return await fetchRemoteEmbeddingVectors({
428
+ url: embeddingsUrl,
429
+ headers,
430
+ body: {
431
+ model,
432
+ input
433
+ },
434
+ errorPrefix: "ollama embeddings failed"
435
+ });
436
+ };
437
+ return {
438
+ provider: {
439
+ id: "ollama",
440
+ model,
441
+ embedQuery: async (text) => {
442
+ const [vec] = await embed([text]);
443
+ return vec ?? [];
444
+ },
445
+ embedBatch: embed
446
+ },
447
+ client
448
+ };
449
+ }
450
+
333
451
  //#endregion
334
452
  //#region src/memory/embeddings-remote-client.ts
335
453
  async function resolveRemoteEmbeddingBearerClient(params) {
@@ -354,21 +472,6 @@ async function resolveRemoteEmbeddingBearerClient(params) {
354
472
  };
355
473
  }
356
474
 
357
- //#endregion
358
- //#region src/memory/embeddings-remote-fetch.ts
359
- async function fetchRemoteEmbeddingVectors(params) {
360
- const res = await fetch(params.url, {
361
- method: "POST",
362
- headers: params.headers,
363
- body: JSON.stringify(params.body)
364
- });
365
- if (!res.ok) {
366
- const text = await res.text();
367
- throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
368
- }
369
- return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
370
- }
371
-
372
475
  //#endregion
373
476
  //#region src/memory/embeddings-openai.ts
374
477
  const DEFAULT_OPENAI_EMBEDDING_MODEL = "text-embedding-3-small";
@@ -556,6 +659,13 @@ async function createEmbeddingProvider(options) {
556
659
  const fallback = options.fallback;
557
660
  const createProvider = async (id) => {
558
661
  if (id === "local") return { provider: await createLocalEmbeddingProvider(options) };
662
+ if (id === "ollama") {
663
+ const { provider, client } = await createOllamaEmbeddingProvider(options);
664
+ return {
665
+ provider,
666
+ ollama: client
667
+ };
668
+ }
559
669
  if (id === "gemini") {
560
670
  const { provider, client } = await createGeminiEmbeddingProvider(options);
561
671
  return {
@@ -588,6 +698,13 @@ async function createEmbeddingProvider(options) {
588
698
  } catch (err) {
589
699
  localError = formatLocalSetupError(err);
590
700
  }
701
+ try {
702
+ const probe = await probeOllamaEmbeddingModels(resolveOllamaBaseUrl(options.config));
703
+ if (probe && probe.models.length > 0) return {
704
+ ...await createProvider("ollama"),
705
+ requestedProvider
706
+ };
707
+ } catch {}
591
708
  for (const provider of REMOTE_EMBEDDING_PROVIDER_IDS) try {
592
709
  return {
593
710
  ...await createProvider(provider),
@@ -3742,4 +3859,4 @@ var MemoryIndexManager = class MemoryIndexManager extends MemoryManagerEmbedding
3742
3859
  };
3743
3860
 
3744
3861
  //#endregion
3745
- export { resolveMemorySearchConfig as n, manager_exports as t };
3862
+ export { resolveMemorySearchConfig as i, probeOllamaEmbeddingModels as n, resolveOllamaBaseUrl as r, manager_exports as t };
@@ -60,7 +60,7 @@ function mergeConfig(defaults, overrides, agentId) {
60
60
  const provider = overrides?.provider ?? defaults?.provider ?? "auto";
61
61
  const defaultRemote = defaults?.remote;
62
62
  const overrideRemote = overrides?.remote;
63
- const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "auto";
63
+ const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "ollama" || provider === "auto";
64
64
  const batch = {
65
65
  enabled: overrideRemote?.batch?.enabled ?? defaultRemote?.batch?.enabled ?? false,
66
66
  wait: overrideRemote?.batch?.wait ?? defaultRemote?.batch?.wait ?? true,
@@ -327,6 +327,124 @@ async function resolveGeminiEmbeddingClient(options) {
327
327
  };
328
328
  }
329
329
 
330
+ //#endregion
331
+ //#region src/memory/embeddings-remote-fetch.ts
332
+ async function fetchRemoteEmbeddingVectors(params) {
333
+ const res = await fetch(params.url, {
334
+ method: "POST",
335
+ headers: params.headers,
336
+ body: JSON.stringify(params.body)
337
+ });
338
+ if (!res.ok) {
339
+ const text = await res.text();
340
+ throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
341
+ }
342
+ return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
343
+ }
344
+
345
+ //#endregion
346
+ //#region src/memory/embeddings-ollama.ts
347
+ /**
348
+ * Known embedding model name prefixes. Ollama's `/api/tags` does not expose
349
+ * model capabilities, so we rely on well-known naming patterns.
350
+ */
351
+ const EMBEDDING_MODEL_PATTERNS = [
352
+ "nomic-embed",
353
+ "mxbai-embed",
354
+ "all-minilm",
355
+ "bge-",
356
+ "snowflake-arctic-embed",
357
+ "gte-",
358
+ "e5-",
359
+ "multilingual-e5",
360
+ "paraphrase-",
361
+ "jina-embeddings",
362
+ "stella-"
363
+ ];
364
+ function isEmbeddingModel(name) {
365
+ const lower = name.toLowerCase();
366
+ return EMBEDDING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));
367
+ }
368
+ /**
369
+ * Resolve the Ollama API base URL from config or defaults.
370
+ * Strips any trailing `/v1` suffix since we need the native API base.
371
+ */
372
+ function resolveOllamaBaseUrl(cfg) {
373
+ const configured = cfg?.models?.providers?.ollama?.baseUrl?.trim() ?? void 0;
374
+ if (configured) return configured.replace(/\/v1\/?$/, "").replace(/\/$/, "");
375
+ return "http://127.0.0.1:11434";
376
+ }
377
+ /**
378
+ * Probe an Ollama instance for available embedding models.
379
+ * Returns null if Ollama is unreachable or has no embedding models.
380
+ */
381
+ async function probeOllamaEmbeddingModels(baseUrl) {
382
+ try {
383
+ const controller = new AbortController();
384
+ const timeout = setTimeout(() => controller.abort(), 5e3);
385
+ const res = await fetch(`${baseUrl}/api/tags`, { signal: controller.signal });
386
+ clearTimeout(timeout);
387
+ if (!res.ok) return null;
388
+ const models = ((await res.json()).models ?? []).map((m) => m.name ?? "").filter(Boolean).filter(isEmbeddingModel);
389
+ if (models.length === 0) return null;
390
+ return {
391
+ models,
392
+ baseUrl
393
+ };
394
+ } catch {
395
+ return null;
396
+ }
397
+ }
398
+ /**
399
+ * Create an embedding provider that uses Ollama's OpenAI-compatible
400
+ * `/v1/embeddings` endpoint. No auth header is required for local Ollama.
401
+ */
402
+ async function createOllamaEmbeddingProvider(options) {
403
+ const cfg = options.config;
404
+ const remoteBaseUrl = options.remote?.baseUrl?.trim();
405
+ let ollamaBase;
406
+ if (remoteBaseUrl) ollamaBase = remoteBaseUrl.replace(/\/v1\/?$/, "").replace(/\/$/, "");
407
+ else ollamaBase = resolveOllamaBaseUrl(cfg);
408
+ let model = options.model?.trim();
409
+ if (!model) {
410
+ const probe = await probeOllamaEmbeddingModels(ollamaBase);
411
+ if (!probe || probe.models.length === 0) throw new Error(`No embedding models found on Ollama at ${ollamaBase}. Pull one with: ollama pull nomic-embed-text`);
412
+ model = probe.models[0];
413
+ }
414
+ const embeddingsUrl = `${ollamaBase}/v1/embeddings`;
415
+ const headers = { "Content-Type": "application/json" };
416
+ const apiKey = options.remote?.apiKey?.trim();
417
+ if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
418
+ const client = {
419
+ baseUrl: ollamaBase,
420
+ model
421
+ };
422
+ const embed = async (input) => {
423
+ if (input.length === 0) return [];
424
+ return await fetchRemoteEmbeddingVectors({
425
+ url: embeddingsUrl,
426
+ headers,
427
+ body: {
428
+ model,
429
+ input
430
+ },
431
+ errorPrefix: "ollama embeddings failed"
432
+ });
433
+ };
434
+ return {
435
+ provider: {
436
+ id: "ollama",
437
+ model,
438
+ embedQuery: async (text) => {
439
+ const [vec] = await embed([text]);
440
+ return vec ?? [];
441
+ },
442
+ embedBatch: embed
443
+ },
444
+ client
445
+ };
446
+ }
447
+
330
448
  //#endregion
331
449
  //#region src/memory/embeddings-remote-client.ts
332
450
  async function resolveRemoteEmbeddingBearerClient(params) {
@@ -351,21 +469,6 @@ async function resolveRemoteEmbeddingBearerClient(params) {
351
469
  };
352
470
  }
353
471
 
354
- //#endregion
355
- //#region src/memory/embeddings-remote-fetch.ts
356
- async function fetchRemoteEmbeddingVectors(params) {
357
- const res = await fetch(params.url, {
358
- method: "POST",
359
- headers: params.headers,
360
- body: JSON.stringify(params.body)
361
- });
362
- if (!res.ok) {
363
- const text = await res.text();
364
- throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
365
- }
366
- return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
367
- }
368
-
369
472
  //#endregion
370
473
  //#region src/memory/embeddings-openai.ts
371
474
  const DEFAULT_OPENAI_EMBEDDING_MODEL = "text-embedding-3-small";
@@ -553,6 +656,13 @@ async function createEmbeddingProvider(options) {
553
656
  const fallback = options.fallback;
554
657
  const createProvider = async (id) => {
555
658
  if (id === "local") return { provider: await createLocalEmbeddingProvider(options) };
659
+ if (id === "ollama") {
660
+ const { provider, client } = await createOllamaEmbeddingProvider(options);
661
+ return {
662
+ provider,
663
+ ollama: client
664
+ };
665
+ }
556
666
  if (id === "gemini") {
557
667
  const { provider, client } = await createGeminiEmbeddingProvider(options);
558
668
  return {
@@ -585,6 +695,13 @@ async function createEmbeddingProvider(options) {
585
695
  } catch (err) {
586
696
  localError = formatLocalSetupError(err);
587
697
  }
698
+ try {
699
+ const probe = await probeOllamaEmbeddingModels(resolveOllamaBaseUrl(options.config));
700
+ if (probe && probe.models.length > 0) return {
701
+ ...await createProvider("ollama"),
702
+ requestedProvider
703
+ };
704
+ } catch {}
588
705
  for (const provider of REMOTE_EMBEDDING_PROVIDER_IDS) try {
589
706
  return {
590
707
  ...await createProvider(provider),
@@ -3739,4 +3856,4 @@ var MemoryIndexManager = class MemoryIndexManager extends MemoryManagerEmbedding
3739
3856
  };
3740
3857
 
3741
3858
  //#endregion
3742
- export { resolveMemorySearchConfig as n, manager_exports as t };
3859
+ export { resolveMemorySearchConfig as i, probeOllamaEmbeddingModels as n, resolveOllamaBaseUrl as r, manager_exports as t };
@@ -63,7 +63,7 @@ function mergeConfig(defaults, overrides, agentId) {
63
63
  const provider = overrides?.provider ?? defaults?.provider ?? "auto";
64
64
  const defaultRemote = defaults?.remote;
65
65
  const overrideRemote = overrides?.remote;
66
- const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "auto";
66
+ const includeRemote = Boolean(overrideRemote?.baseUrl || overrideRemote?.apiKey || overrideRemote?.headers || defaultRemote?.baseUrl || defaultRemote?.apiKey || defaultRemote?.headers) || provider === "openai" || provider === "gemini" || provider === "voyage" || provider === "ollama" || provider === "auto";
67
67
  const batch = {
68
68
  enabled: overrideRemote?.batch?.enabled ?? defaultRemote?.batch?.enabled ?? false,
69
69
  wait: overrideRemote?.batch?.wait ?? defaultRemote?.batch?.wait ?? true,
@@ -330,6 +330,124 @@ async function resolveGeminiEmbeddingClient(options) {
330
330
  };
331
331
  }
332
332
 
333
+ //#endregion
334
+ //#region src/memory/embeddings-remote-fetch.ts
335
+ async function fetchRemoteEmbeddingVectors(params) {
336
+ const res = await fetch(params.url, {
337
+ method: "POST",
338
+ headers: params.headers,
339
+ body: JSON.stringify(params.body)
340
+ });
341
+ if (!res.ok) {
342
+ const text = await res.text();
343
+ throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
344
+ }
345
+ return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
346
+ }
347
+
348
+ //#endregion
349
+ //#region src/memory/embeddings-ollama.ts
350
+ /**
351
+ * Known embedding model name prefixes. Ollama's `/api/tags` does not expose
352
+ * model capabilities, so we rely on well-known naming patterns.
353
+ */
354
+ const EMBEDDING_MODEL_PATTERNS = [
355
+ "nomic-embed",
356
+ "mxbai-embed",
357
+ "all-minilm",
358
+ "bge-",
359
+ "snowflake-arctic-embed",
360
+ "gte-",
361
+ "e5-",
362
+ "multilingual-e5",
363
+ "paraphrase-",
364
+ "jina-embeddings",
365
+ "stella-"
366
+ ];
367
+ function isEmbeddingModel(name) {
368
+ const lower = name.toLowerCase();
369
+ return EMBEDDING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));
370
+ }
371
+ /**
372
+ * Resolve the Ollama API base URL from config or defaults.
373
+ * Strips any trailing `/v1` suffix since we need the native API base.
374
+ */
375
+ function resolveOllamaBaseUrl(cfg) {
376
+ const configured = cfg?.models?.providers?.ollama?.baseUrl?.trim() ?? void 0;
377
+ if (configured) return configured.replace(/\/v1\/?$/, "").replace(/\/$/, "");
378
+ return "http://127.0.0.1:11434";
379
+ }
380
+ /**
381
+ * Probe an Ollama instance for available embedding models.
382
+ * Returns null if Ollama is unreachable or has no embedding models.
383
+ */
384
+ async function probeOllamaEmbeddingModels(baseUrl) {
385
+ try {
386
+ const controller = new AbortController();
387
+ const timeout = setTimeout(() => controller.abort(), 5e3);
388
+ const res = await fetch(`${baseUrl}/api/tags`, { signal: controller.signal });
389
+ clearTimeout(timeout);
390
+ if (!res.ok) return null;
391
+ const models = ((await res.json()).models ?? []).map((m) => m.name ?? "").filter(Boolean).filter(isEmbeddingModel);
392
+ if (models.length === 0) return null;
393
+ return {
394
+ models,
395
+ baseUrl
396
+ };
397
+ } catch {
398
+ return null;
399
+ }
400
+ }
401
+ /**
402
+ * Create an embedding provider that uses Ollama's OpenAI-compatible
403
+ * `/v1/embeddings` endpoint. No auth header is required for local Ollama.
404
+ */
405
+ async function createOllamaEmbeddingProvider(options) {
406
+ const cfg = options.config;
407
+ const remoteBaseUrl = options.remote?.baseUrl?.trim();
408
+ let ollamaBase;
409
+ if (remoteBaseUrl) ollamaBase = remoteBaseUrl.replace(/\/v1\/?$/, "").replace(/\/$/, "");
410
+ else ollamaBase = resolveOllamaBaseUrl(cfg);
411
+ let model = options.model?.trim();
412
+ if (!model) {
413
+ const probe = await probeOllamaEmbeddingModels(ollamaBase);
414
+ if (!probe || probe.models.length === 0) throw new Error(`No embedding models found on Ollama at ${ollamaBase}. Pull one with: ollama pull nomic-embed-text`);
415
+ model = probe.models[0];
416
+ }
417
+ const embeddingsUrl = `${ollamaBase}/v1/embeddings`;
418
+ const headers = { "Content-Type": "application/json" };
419
+ const apiKey = options.remote?.apiKey?.trim();
420
+ if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
421
+ const client = {
422
+ baseUrl: ollamaBase,
423
+ model
424
+ };
425
+ const embed = async (input) => {
426
+ if (input.length === 0) return [];
427
+ return await fetchRemoteEmbeddingVectors({
428
+ url: embeddingsUrl,
429
+ headers,
430
+ body: {
431
+ model,
432
+ input
433
+ },
434
+ errorPrefix: "ollama embeddings failed"
435
+ });
436
+ };
437
+ return {
438
+ provider: {
439
+ id: "ollama",
440
+ model,
441
+ embedQuery: async (text) => {
442
+ const [vec] = await embed([text]);
443
+ return vec ?? [];
444
+ },
445
+ embedBatch: embed
446
+ },
447
+ client
448
+ };
449
+ }
450
+
333
451
  //#endregion
334
452
  //#region src/memory/embeddings-remote-client.ts
335
453
  async function resolveRemoteEmbeddingBearerClient(params) {
@@ -354,21 +472,6 @@ async function resolveRemoteEmbeddingBearerClient(params) {
354
472
  };
355
473
  }
356
474
 
357
- //#endregion
358
- //#region src/memory/embeddings-remote-fetch.ts
359
- async function fetchRemoteEmbeddingVectors(params) {
360
- const res = await fetch(params.url, {
361
- method: "POST",
362
- headers: params.headers,
363
- body: JSON.stringify(params.body)
364
- });
365
- if (!res.ok) {
366
- const text = await res.text();
367
- throw new Error(`${params.errorPrefix}: ${res.status} ${text}`);
368
- }
369
- return ((await res.json()).data ?? []).map((entry) => entry.embedding ?? []);
370
- }
371
-
372
475
  //#endregion
373
476
  //#region src/memory/embeddings-openai.ts
374
477
  const DEFAULT_OPENAI_EMBEDDING_MODEL = "text-embedding-3-small";
@@ -556,6 +659,13 @@ async function createEmbeddingProvider(options) {
556
659
  const fallback = options.fallback;
557
660
  const createProvider = async (id) => {
558
661
  if (id === "local") return { provider: await createLocalEmbeddingProvider(options) };
662
+ if (id === "ollama") {
663
+ const { provider, client } = await createOllamaEmbeddingProvider(options);
664
+ return {
665
+ provider,
666
+ ollama: client
667
+ };
668
+ }
559
669
  if (id === "gemini") {
560
670
  const { provider, client } = await createGeminiEmbeddingProvider(options);
561
671
  return {
@@ -588,6 +698,13 @@ async function createEmbeddingProvider(options) {
588
698
  } catch (err) {
589
699
  localError = formatLocalSetupError(err);
590
700
  }
701
+ try {
702
+ const probe = await probeOllamaEmbeddingModels(resolveOllamaBaseUrl(options.config));
703
+ if (probe && probe.models.length > 0) return {
704
+ ...await createProvider("ollama"),
705
+ requestedProvider
706
+ };
707
+ } catch {}
591
708
  for (const provider of REMOTE_EMBEDDING_PROVIDER_IDS) try {
592
709
  return {
593
710
  ...await createProvider(provider),
@@ -3742,4 +3859,4 @@ var MemoryIndexManager = class MemoryIndexManager extends MemoryManagerEmbedding
3742
3859
  };
3743
3860
 
3744
3861
  //#endregion
3745
- export { resolveMemorySearchConfig as n, manager_exports as t };
3862
+ export { resolveMemorySearchConfig as i, probeOllamaEmbeddingModels as n, resolveOllamaBaseUrl as r, manager_exports as t };