@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.
- package/dist/{acp-cli-BKh-53nn.js → acp-cli-DqQjT50N.js} +3 -3
- package/dist/{acp-cli-CRT2rkIR.js → acp-cli-SgZGC8og.js} +3 -3
- package/dist/{agents-CNsMe4Dr.js → agents-C4_0TzXm.js} +7 -7
- package/dist/{agents.config-yx78oSLx.js → agents.config-Bneyaqn6.js} +1 -1
- package/dist/{agents.config-CdDf19dm.js → agents.config-D9Ufj9CE.js} +1 -1
- package/dist/{audio-preflight-DSeaWZZW.js → audio-preflight-5w1q1hWh.js} +11 -11
- package/dist/{audio-preflight-B8ffbICW.js → audio-preflight-BiAp3Hvj.js} +5 -5
- package/dist/{audio-preflight-CO2seHjy.js → audio-preflight-Cpsd8C3J.js} +11 -11
- package/dist/{audio-preflight-DRQD_nt1.js → audio-preflight-mSUx5I34.js} +5 -5
- package/dist/{audit-CiugrQda.js → audit-BCHYqYge.js} +6 -6
- package/dist/{audit-DKUpFt8z.js → audit-FH7mu_3g.js} +6 -6
- package/dist/{auth-choice-CXMFi9LR.js → auth-choice-5u4JonD1.js} +4 -4
- package/dist/{auth-choice-mw9ndZQO.js → auth-choice-B8qrETy7.js} +4 -4
- package/dist/{banner-B-joBGLz.js → banner-CufnkY4K.js} +1 -1
- package/dist/{browser-cli-iXhPMwGZ.js → browser-cli-Cmyh_mQi.js} +4 -4
- package/dist/{browser-cli-Bk7Q_04S.js → browser-cli-n1RQ8OQs.js} +4 -4
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +14 -14
- package/dist/bundled/session-memory/handler.js +14 -14
- package/dist/{call-BQiCOxB6.js → call-BKOIc76f.js} +2 -2
- package/dist/{call-BNyqFDDZ.js → call-C30ffTSt.js} +2 -2
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-XPRRVrmU.js → channel-options-BBDX9s3H.js} +1 -1
- package/dist/{channel-options-D74Jofp4.js → channel-options-CxOu5Gvn.js} +1 -1
- package/dist/{channel-web-vRvvtf0S.js → channel-web-DxSaM7GA.js} +7 -7
- package/dist/{channels-cli-D3lj5dXo.js → channels-cli-CB6lWL72.js} +31 -31
- package/dist/{channels-cli-DgxPfJF7.js → channels-cli-CvtvmTOx.js} +32 -32
- package/dist/{chrome-B_zrSLce.js → chrome-1cQdPKbv.js} +8 -8
- package/dist/{chrome-BgIDB_SH.js → chrome-CPwj5x24.js} +1 -1
- package/dist/{chrome-D9OwvWm7.js → chrome-CUsfMVUk.js} +1 -1
- package/dist/{chrome-LmEyZdbC.js → chrome-DPu6LSX4.js} +8 -8
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DQQAfUbo.js → cli-CU_pJKCD.js} +27 -27
- package/dist/{cli-Bg_5WQFe.js → cli-cDOiHmL7.js} +28 -28
- package/dist/{client-Cnoh7nRo.js → client-CQSyCS4M.js} +2 -1
- package/dist/{client-LeVQns9-.js → client-DMBZpU6X.js} +2 -1
- package/dist/{command-registry-Cde2LqTh.js → command-registry-D1zcgjTn.js} +11 -11
- package/dist/{completion-cli-KJUTWJP3.js → completion-cli-C8TsFimX.js} +2 -2
- package/dist/{completion-cli-Cx9htCOm.js → completion-cli-DWcx6gc6.js} +1 -1
- package/dist/{config-Dgn_cL29.js → config-BLe0R4JX.js} +3 -1
- package/dist/{config-BjGo9GnL.js → config-ClXqj_D1.js} +3 -1
- package/dist/{config-DM0K7qC1.js → config-CvuX_y8t.js} +3 -1
- package/dist/{config-amjzHiWZ.js → config-DehS9e5w.js} +3 -1
- package/dist/{config-cli-ozfA6MGF.js → config-cli-CEp26CMt.js} +2 -2
- package/dist/{config-cli-C5-P9Nzz.js → config-cli-DcjOWFbW.js} +2 -2
- package/dist/{config-guard-Cnu2qssk.js → config-guard-CGgFpviD.js} +3 -3
- package/dist/{config-guard-BpQn1MKk.js → config-guard-Ix_EcPkt.js} +2 -2
- package/dist/{config-validation-BHjDr-an.js → config-validation-BQnULegl.js} +1 -1
- package/dist/{config-validation-pVfqbrLy.js → config-validation-Ct_myZSl.js} +1 -1
- package/dist/{configure-ktsZw1bT.js → configure-B3aYKtwN.js} +10 -10
- package/dist/{configure-DiuQ_aTS.js → configure-DbqI2Bgi.js} +10 -10
- package/dist/{control-service-DVFF3PrV.js → control-service-CZ8lXYgi.js} +4 -4
- package/dist/{control-service-DMz_CcLi.js → control-service-DI1Do6Nn.js} +4 -4
- package/dist/control-ui/css/style.css +9 -0
- package/dist/control-ui/js/app.js +137 -0
- package/dist/control-ui/js/gateway.js +10 -2
- package/dist/{cron-cli-iWejT5dL.js → cron-cli-BH6kt3EZ.js} +4 -4
- package/dist/{cron-cli-BVy2Ysgu.js → cron-cli-NJy3v3Eb.js} +4 -4
- package/dist/{daemon-cli-CFZpc0hg.js → daemon-cli-BuOGkn7L.js} +6 -6
- package/dist/{daemon-cli-BU1FofT_.js → daemon-cli-CweZn-1O.js} +6 -6
- package/dist/daemon-cli.js +5 -2
- package/dist/{daemon-runtime-B38pOixq.js → daemon-runtime-C1t_OfMD.js} +1 -1
- package/dist/{daemon-runtime-CjgoCPLb.js → daemon-runtime-D1K-9VEC.js} +1 -1
- package/dist/{deliver-B3UoBZdC.js → deliver-BorDF5OG.js} +2 -2
- package/dist/{deliver-DONp5mgd.js → deliver-CIc_l0o6.js} +3 -3
- package/dist/{deliver-CkjSfucB.js → deliver-D8xILUUI.js} +2 -2
- package/dist/{deliver-2Y_F_0yh.js → deliver-DqqfC-g1.js} +3 -3
- package/dist/{devices-cli-CKAh6Hnl.js → devices-cli-BE5ZzcA7.js} +3 -3
- package/dist/{devices-cli-DC8knKQP.js → devices-cli-BUdOf8m2.js} +3 -3
- package/dist/{directory-cli-DH9ww80p.js → directory-cli-BBdctcDF.js} +1 -1
- package/dist/{directory-cli-B0H80BMR.js → directory-cli-DQHIn9um.js} +1 -1
- package/dist/{dns-cli-Lzt29-Zu.js → dns-cli-6H_E37de.js} +1 -1
- package/dist/{dns-cli-CVMQnrzw.js → dns-cli-mCiUyfvk.js} +1 -1
- package/dist/{doctor-completion-CrN6Ly8x.js → doctor-completion-CAdewURI.js} +1 -1
- package/dist/{doctor-completion-Vwi_je1c.js → doctor-completion-CXUM27y3.js} +1 -1
- package/dist/{doctor-config-flow-B150h841.js → doctor-config-flow-BWD9G2UQ.js} +2 -2
- package/dist/{doctor-config-flow-C_56SUPO.js → doctor-config-flow-CthAM9my.js} +2 -2
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-CfrLzlfe.js → exec-approvals-cli-CYKHeoEA.js} +5 -5
- package/dist/{exec-approvals-cli-D7ZfJtB3.js → exec-approvals-cli-CjU3pZzx.js} +5 -5
- package/dist/extensionAPI.js +14 -14
- package/dist/{gateway-cli-CwO3878F.js → gateway-cli-Bs96hk7L.js} +44 -44
- package/dist/{gateway-cli-DyqK4XZ1.js → gateway-cli-n-kmAuP8.js} +43 -43
- package/dist/{gateway-rpc-XxpDa3Bd.js → gateway-rpc-0C2uJScX.js} +1 -1
- package/dist/{gateway-rpc-BnsXD9QK.js → gateway-rpc-CTqBFfgd.js} +1 -1
- package/dist/{glass-ui-ws-BmqwQaCf.js → glass-ui-ws-DFYRIWTO.js} +46 -40
- package/dist/{glass-ui-ws-zVNodseh.js → glass-ui-ws-mIHlWvBv.js} +45 -39
- package/dist/{health-UjXEBnzA.js → health-CpbZDInE.js} +5 -5
- package/dist/{health-Q1RP1M2f.js → health-gsbXEgFI.js} +5 -5
- package/dist/{hooks-cli-D4qJl6do.js → hooks-cli-SJWnM2SY.js} +29 -29
- package/dist/{hooks-cli-DOT9uGZw.js → hooks-cli-iVG6fkFc.js} +28 -28
- package/dist/{image-DrZEJQwQ.js → image-DIzd7Gw9.js} +2 -2
- package/dist/{image-B4LY9KFw.js → image-DWOvY8sR.js} +2 -2
- package/dist/{image-CSeAnozE.js → image-DrkD-6sg.js} +2 -2
- package/dist/{image-RFofsrof.js → image-GHA29jwQ.js} +2 -2
- package/dist/index.js +36 -36
- package/dist/{lifecycle-core-BYV6-zd8.js → lifecycle-core-CE8aXuLe.js} +2 -2
- package/dist/{lifecycle-core-De5BcVI4.js → lifecycle-core-CPLYFbS4.js} +2 -2
- package/dist/llm-slug-generator.js +14 -14
- package/dist/{login-CXSct1EH.js → login-BcCF4noU.js} +2 -2
- package/dist/{login-BH17fJ5L.js → login-C5eMLg1G.js} +2 -2
- package/dist/{login-BG_7eJLu.js → login-DNeGXcjV.js} +2 -2
- package/dist/{login-BZYFLDxo.js → login-_Ynqrjet.js} +2 -2
- package/dist/{login-qr-zVpxocbF.js → login-qr-CYEYc0Vo.js} +2 -2
- package/dist/{login-qr-9OQSnm5L.js → login-qr-CzD7_Pru.js} +2 -2
- package/dist/{login-qr-DoNfx43Q.js → login-qr-DjXNemMm.js} +2 -2
- package/dist/{login-qr-BLmEvZVj.js → login-qr-E4YwhoPt.js} +2 -2
- package/dist/{logs-cli-DfFvgxqj.js → logs-cli-BLp5AOM0.js} +4 -4
- package/dist/{logs-cli-D3iVwGDc.js → logs-cli-CIQ4qmRW.js} +4 -4
- package/dist/{manager-B5EXdBQV.js → manager-BmHL5ETi.js} +134 -17
- package/dist/{manager-CYHgFXd8.js → manager-CPQ2pEj3.js} +134 -17
- package/dist/{manager-C_DoJrcP.js → manager-Oiy1uHsu.js} +134 -17
- package/dist/{manager-oiX42wby.js → manager-oQJvFR6J.js} +134 -17
- package/dist/{memory-cli-BhnOq4Ev.js → memory-cli-BUoM-v1-.js} +206 -3
- package/dist/{memory-cli-D4J9SO7Z.js → memory-cli-CGRSXKeF.js} +206 -3
- package/dist/{model-catalog-DjJ9GtKX.js → model-catalog-DZbVIJnH.js} +3 -3
- package/dist/{model-catalog-Dj5pIc1G.js → model-catalog-sW2MkIv9.js} +2 -2
- package/dist/{model-picker-ay4NPk8S.js → model-picker-BJBeaNrK.js} +2 -2
- package/dist/{model-picker-DXwUsLAy.js → model-picker-DUl7Gvdh.js} +2 -2
- package/dist/{models-DKsiIvSx.js → models-LtuCAbk5.js} +8 -8
- package/dist/{models-cli-ULbdeSgc.js → models-cli-CB2zHB3Q.js} +31 -31
- package/dist/{models-cli-BS6UJ98e.js → models-cli-DEQCqsfo.js} +31 -31
- package/dist/{models-config-u4va9_AO.js → models-config-BH6-rmtt.js} +1 -1
- package/dist/{models-config-Cb41NmVa.js → models-config-DT09Fas0.js} +1 -1
- package/dist/{node-cli-BDruQPgf.js → node-cli-BnZT8tc-.js} +10 -10
- package/dist/{node-cli-Dq7jjGmU.js → node-cli-znp1IPL2.js} +10 -10
- package/dist/{nodes-cli-CO1-qlpY.js → nodes-cli-C8L5ablK.js} +4 -4
- package/dist/{nodes-cli-D71AOvPL.js → nodes-cli-D3bHqKX1.js} +4 -4
- package/dist/{onboard-Bt-BwfkR.js → onboard-B725u5vG.js} +7 -7
- package/dist/{onboard-B387frTY.js → onboard-Dz7lPFv1.js} +7 -7
- package/dist/{onboard-channels-COcxT5Q0.js → onboard-channels-DPb8R8S3.js} +1 -1
- package/dist/{onboard-channels-ybPEmcP8.js → onboard-channels-DjG2jZUq.js} +1 -1
- package/dist/{onboard-custom-BKR6vm2R.js → onboard-custom-CFqoXgjd.js} +2 -2
- package/dist/{onboard-custom-DoIhWPnb.js → onboard-custom-in5WChfX.js} +2 -2
- package/dist/{onboard-helpers-CUQrf3zD.js → onboard-helpers-BmDQMRZ7.js} +2 -2
- package/dist/{onboard-helpers-BuSj9DUm.js → onboard-helpers-_sSsfEAa.js} +2 -2
- package/dist/{onboard-remote-DTYzroFm.js → onboard-remote-BeAAhzmD.js} +1 -1
- package/dist/{onboard-remote-BSjc42yV.js → onboard-remote-CBEIs-Ew.js} +1 -1
- package/dist/{onboard-skills-70EumFmD.js → onboard-skills-Bx_OM5v0.js} +1 -1
- package/dist/{onboard-skills-BD8JNVwL.js → onboard-skills-EVFmwR8Q.js} +1 -1
- package/dist/{onboarding-BibGEGIS.js → onboarding-D-FQIiBn.js} +10 -10
- package/dist/{onboarding-CdN_NU2d.js → onboarding-qxWeXuGM.js} +10 -10
- package/dist/{onboarding.finalize-CY1NjrGb.js → onboarding.finalize-DJTQnGkJ.js} +35 -35
- package/dist/{onboarding.finalize-CvahVrDM.js → onboarding.finalize-D_gWQwW0.js} +33 -33
- package/dist/{onboarding.gateway-config-DipSuaKH.js → onboarding.gateway-config-Boplq1Mn.js} +5 -5
- package/dist/{onboarding.gateway-config-Cj_s_IG8.js → onboarding.gateway-config-r7VeJWM7.js} +5 -5
- package/dist/{outbound-Bv4FdtnF.js → outbound-B_cf2WkB.js} +1 -1
- package/dist/{outbound-DfOF58G2.js → outbound-DPCAcHLQ.js} +1 -1
- package/dist/{outbound-BNMysnJ1.js → outbound-DRslTBga.js} +1 -1
- package/dist/{outbound-Cedd_yui.js → outbound-yaYfpPTu.js} +1 -1
- package/dist/{pairing-cli-B7oA36Ke.js → pairing-cli-DFgfVeeY.js} +1 -1
- package/dist/{pairing-cli-7_4ayuXX.js → pairing-cli-DOMZSDiT.js} +1 -1
- package/dist/{pi-auth-json-DuUL9qfI.js → pi-auth-json-Do26xypW.js} +1 -1
- package/dist/{pi-embedded-BjzaB3CT.js → pi-embedded-BINp4yHJ.js} +242 -40
- package/dist/{pi-embedded-9wEA_0mu.js → pi-embedded-C6BUGEuF.js} +242 -40
- package/dist/{pi-embedded-helpers-BmYZe8o8.js → pi-embedded-helpers-BDwdFGX-.js} +5 -5
- package/dist/{pi-embedded-helpers-CgxKWHj9.js → pi-embedded-helpers-Cs0TgOaH.js} +1 -1
- package/dist/{pi-embedded-helpers-kB5lBgXk.js → pi-embedded-helpers-Dfp-iKzJ.js} +5 -5
- package/dist/{pi-embedded-helpers-ueCT6VlS.js → pi-embedded-helpers-jynCNZsb.js} +1 -1
- package/dist/{pi-tools.policy-DPmdlOwE.js → pi-tools.policy-eb_uvOQV.js} +2 -2
- package/dist/{pi-tools.policy-T6Z5F-_n.js → pi-tools.policy-vws0LV7U.js} +2 -2
- package/dist/{plugin-registry-CEoSVvL1.js → plugin-registry-C61W5IWr.js} +2 -2
- package/dist/{plugin-registry-BAbkdLQ7.js → plugin-registry-D1cKRWYQ.js} +2 -2
- package/dist/plugin-sdk/agents/memory-search.d.ts +2 -2
- package/dist/plugin-sdk/{audio-preflight-CpYjfwrA.js → audio-preflight-CdG1OBN2.js} +5 -5
- package/dist/plugin-sdk/{channel-web-xXTpy0N_.js → channel-web-DFVIpsZB.js} +7 -7
- package/dist/plugin-sdk/{chrome-BFy_lpld.js → chrome-XyjVFCkY.js} +1 -1
- package/dist/plugin-sdk/config/types.tools.d.ts +2 -2
- package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +2 -2
- package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +4 -4
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +4 -4
- package/dist/plugin-sdk/config/zod-schema.d.ts +4 -4
- package/dist/plugin-sdk/{config-Do1-fcaS.js → config-DG32gDDp.js} +3 -1
- package/dist/plugin-sdk/{deliver-BwnrMlHO.js → deliver-BdbnTrPD.js} +2 -2
- package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -0
- package/dist/plugin-sdk/{image-k_W1USVr.js → image-B4_TBNqR.js} +2 -2
- package/dist/plugin-sdk/index.js +18 -18
- package/dist/plugin-sdk/{login-DPofXJE3.js → login-Dey5tDpn.js} +2 -2
- package/dist/plugin-sdk/{login-qr-CNatqAUv.js → login-qr-Tx8z1frn.js} +2 -2
- package/dist/plugin-sdk/{manager-DnoXj4EG.js → manager-RdPsBbBU.js} +134 -17
- package/dist/plugin-sdk/memory/embeddings-ollama.d.ts +27 -0
- package/dist/plugin-sdk/memory/embeddings.d.ts +4 -1
- package/dist/plugin-sdk/memory/manager-sync-ops.d.ts +1 -1
- package/dist/plugin-sdk/memory/manager.d.ts +1 -1
- package/dist/plugin-sdk/{outbound-w5v_6nFD.js → outbound-BpzsDbEV.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-Cs2-_EpL.js → pi-embedded-helpers-OWtoPEg8.js} +5 -5
- package/dist/plugin-sdk/{pw-ai-BoitXk7j.js → pw-ai-OhVopvbb.js} +2 -2
- package/dist/plugin-sdk/{replies-BU-tUT8j.js → replies-DiFTMGgM.js} +1 -1
- package/dist/plugin-sdk/{reply-EEvLfWgt.js → reply-v8ed4JLy.js} +236 -34
- package/dist/plugin-sdk/{runner-Br1179I4.js → runner-BUXsfUip.js} +2 -2
- package/dist/plugin-sdk/{send-Dkyi5g1U.js → send-BXvJJUV_.js} +1 -1
- package/dist/plugin-sdk/{send-BaLZTKkj.js → send-BbFwAS_k.js} +1 -1
- package/dist/plugin-sdk/{send-P8PiZ2Os.js → send-CGSsrvd1.js} +1 -1
- package/dist/plugin-sdk/{send-Ts2lINh9.js → send-DXcq1jzH.js} +1 -1
- package/dist/plugin-sdk/{send-CE6VxWke.js → send-Drdgnfr_.js} +1 -1
- package/dist/plugin-sdk/{session-Bwdr4g-M.js → session-CX5KhlOe.js} +1 -1
- package/dist/plugin-sdk/{web-COWtpMAH.js → web-DfIRv_Mx.js} +18 -18
- package/dist/plugin-sdk/{whatsapp-actions-Di-yCTCj.js → whatsapp-actions-Dh6Y2fu9.js} +2 -2
- package/dist/{plugins-cli-C_S07pgO.js → plugins-cli-ClY_BPg9.js} +28 -28
- package/dist/{plugins-cli-BpuQ7Y9l.js → plugins-cli-UmtKEuxj.js} +29 -29
- package/dist/{program-cO9YX6wL.js → program-CNsuYlJt.js} +35 -35
- package/dist/{program-context-QBBvnWFX.js → program-context-C2XeNCxI.js} +38 -38
- package/dist/{prompt-select-styled-D3dYbx2P.js → prompt-select-styled-CgsYQqlJ.js} +15 -15
- package/dist/{prompt-select-styled-CepuQSKg.js → prompt-select-styled-CiYSpQIf.js} +15 -15
- package/dist/{provider-auth-helpers-DXqvuBCi.js → provider-auth-helpers-CVAbJckC.js} +2 -2
- package/dist/{provider-auth-helpers-BMACaaEd.js → provider-auth-helpers-XIYHuUnj.js} +2 -2
- package/dist/{push-apns-DhZgao_r.js → push-apns-6y-7OuAU.js} +1 -1
- package/dist/{push-apns-8YIzbTM7.js → push-apns-9q7Pl5I0.js} +1 -1
- package/dist/{pw-ai-CQzJmf8V.js → pw-ai-BdNmRxEw.js} +2 -2
- package/dist/{pw-ai-s-d46DCX.js → pw-ai-BfUWg8Eh.js} +2 -2
- package/dist/{pw-ai-CdaTpZo1.js → pw-ai-C9noP7iN.js} +2 -2
- package/dist/{pw-ai-CAkn033M.js → pw-ai-Dnh_iopr.js} +2 -2
- package/dist/{qr-cli-DlVBiDQm.js → qr-cli-BbRZOhwI.js} +1 -1
- package/dist/{qr-cli-Diq_Rb3t.js → qr-cli-Cac34dCs.js} +1 -1
- package/dist/{register.agent-CSUoUVKd.js → register.agent-DmLJVv4N.js} +36 -36
- package/dist/{register.agent-CiTS9lyx.js → register.agent-Ys85zXmm.js} +34 -34
- package/dist/{register.configure-BbE9MAer.js → register.configure-BwmAY5TF.js} +38 -38
- package/dist/{register.configure-CuCVLOW0.js → register.configure-DYuK1UkU.js} +39 -39
- package/dist/{register.maintenance-D8bthvou.js → register.maintenance-625En1kE.js} +36 -36
- package/dist/{register.maintenance-CJG75LTu.js → register.maintenance-BQa25CA8.js} +38 -38
- package/dist/{register.message-CyqE4E2O.js → register.message-CDpK3rbI.js} +29 -29
- package/dist/{register.message-nUpHGrEE.js → register.message-DKeM6mQo.js} +28 -28
- package/dist/{register.onboard-Dlw-TCPH.js → register.onboard-CbvkWFq5.js} +34 -34
- package/dist/{register.onboard-BDlne5KX.js → register.onboard-DtMjj81J.js} +35 -35
- package/dist/{register.setup-ByMyofSq.js → register.setup-BHhLns2f.js} +35 -35
- package/dist/{register.setup-B8kiMuah.js → register.setup-DdX4Ahvt.js} +34 -34
- package/dist/{register.status-health-sessions-0odRpA-p.js → register.status-health-sessions-CqMFel_o.js} +33 -33
- package/dist/{register.status-health-sessions-Diirshgb.js → register.status-health-sessions-D1KvwnF9.js} +31 -31
- package/dist/{register.subclis-CqEj9vfW.js → register.subclis-su5EMHvC.js} +28 -28
- package/dist/{replies-CTKReSzx.js → replies-DqyX2Vln.js} +1 -1
- package/dist/{replies-D9V19U2-.js → replies-DtdP8R93.js} +1 -1
- package/dist/{replies-DqdOBkTB.js → replies-Dzc6eCFS.js} +1 -1
- package/dist/{replies-QloQerhz.js → replies-zeeuLUij.js} +1 -1
- package/dist/{reply-B9o45s3E.js → reply-DyFibFiG.js} +43 -43
- package/dist/{routes-BYphcpth.js → routes-B7FWIw81.js} +3 -3
- package/dist/{routes-qIyRWgzF.js → routes-CEjKic_-.js} +3 -3
- package/dist/{rpc-B8S3CF-2.js → rpc-CR9IjVRa.js} +1 -1
- package/dist/{rpc-K2mc_55f.js → rpc-CV10Y2YL.js} +1 -1
- package/dist/{run-main-C__lZ7VF.js → run-main-CRPU46XB.js} +46 -46
- package/dist/{runner-C0tJTZmp.js → runner-BkANJiWS.js} +3 -3
- package/dist/{runner-CJJY2r19.js → runner-CTglx_CV.js} +2 -2
- package/dist/{runner-DOvsNiYz.js → runner-v0fS4J7T.js} +2 -2
- package/dist/{runner-BXN4KYDK.js → runner-w5reqY02.js} +3 -3
- package/dist/{sandbox-CbuJolk2.js → sandbox-BpIrSDhl.js} +5 -5
- package/dist/{sandbox-rMmahr2s.js → sandbox-DTzJlbvf.js} +5 -5
- package/dist/{sandbox-cli-C90jqh9l.js → sandbox-cli-B4VN_9mV.js} +6 -6
- package/dist/{sandbox-cli-Duc05KL9.js → sandbox-cli-R_ZOY_KC.js} +6 -6
- package/dist/{security-cli-Bt0VkUtO.js → security-cli-BMB3kCFA.js} +10 -10
- package/dist/{security-cli-YGXUUBvD.js → security-cli-DmpyxTgQ.js} +10 -10
- package/dist/{send-BeASPkFg.js → send-1iB7Rdwp.js} +1 -1
- package/dist/{send-BVw7fCyL.js → send-BLT3lTZy.js} +1 -1
- package/dist/{send-3YM-aarb.js → send-BR3reUOE.js} +1 -1
- package/dist/{send-CYfaZNZ4.js → send-BXiiQprI.js} +1 -1
- package/dist/{send-De_WCeGZ.js → send-BbV4XqMl.js} +1 -1
- package/dist/{send-D3M6pMr5.js → send-Bt4UsVrd.js} +1 -1
- package/dist/{send-CzE5UKr-.js → send-Bx04WqH5.js} +1 -1
- package/dist/{send-BVZGeP2r.js → send-CC2vm0xU.js} +1 -1
- package/dist/{send-CHOArYFe.js → send-CEjpAJ8N.js} +1 -1
- package/dist/{send-hNornLoH.js → send-CQzO_Tg0.js} +1 -1
- package/dist/{send-BH09HKsX.js → send-CRWQglv9.js} +1 -1
- package/dist/{send-D0dzPf6g.js → send-CZ18Xq5n.js} +1 -1
- package/dist/{send-mi3NHnwI.js → send-CltKx_vS.js} +1 -1
- package/dist/{send-D_yJMeJa.js → send-DDrpEKUg.js} +1 -1
- package/dist/{send-D16XtYvC.js → send-DVLEgg9H.js} +1 -1
- package/dist/{send-Do-0Kcmv.js → send-Dm4UYQsf.js} +1 -1
- package/dist/{send-DEWzWqfZ.js → send-DyK4u4yH.js} +1 -1
- package/dist/{send-B18gkuvz.js → send-EQ1insgp.js} +1 -1
- package/dist/{send-C7u4_H5t.js → send-hJthT6M_.js} +1 -1
- package/dist/{send-BsocounR.js → send-tDTl6xgz.js} +1 -1
- package/dist/{server-context-DG2dIhAy.js → server-context-BcjcQhiM.js} +5 -5
- package/dist/{server-context-bMIwnOnH.js → server-context-DbcjnRHG.js} +5 -5
- package/dist/{server-methods-Df9KsV_-.js → server-methods-56m79WbR.js} +35 -19
- package/dist/{server-methods-B_NSJmhc.js → server-methods-U_lDP83A.js} +34 -18
- package/dist/{server-node-events-ZG0SBDkU.js → server-node-events-DpGswbj8.js} +28 -28
- package/dist/{server-node-events-C2mugatX.js → server-node-events-Q9J_E8Ce.js} +29 -29
- package/dist/{session-BjcsCwgz.js → session-1Q4kg4xp.js} +1 -1
- package/dist/{session-BkVBeAkg.js → session-B4JR6zUJ.js} +1 -1
- package/dist/{session-BeJq-MLE.js → session-BvXsNdtA.js} +1 -1
- package/dist/{session-T0JXlYWe.js → session-C86mCuOs.js} +1 -1
- package/dist/{session-utils-Cdv2Qaq2.js → session-utils-CFvGKxdu.js} +3 -3
- package/dist/{sessions-DJAxaVI7.js → sessions-B3nP13Fw.js} +1 -1
- package/dist/{sessions-BEyCtqBB.js → sessions-BdeJp6uY.js} +1 -1
- package/dist/{sessions-CX93jXmG.js → sessions-m60NabL_.js} +3 -3
- package/dist/{shared-CMw4odDH.js → shared-mv9M8Mzc.js} +1 -1
- package/dist/{shared-CLXhDldI.js → shared-sOiAK5kN.js} +1 -1
- package/dist/{skills-cli-CQ7XQ4Kn.js → skills-cli-B7FG8Ft4.js} +1 -1
- package/dist/{skills-cli-DIx7YItN.js → skills-cli-DVTw-NM0.js} +1 -1
- package/dist/{status-BytVj4kU.js → status-BNmYNm1S.js} +2 -2
- package/dist/{status-hgm5EhwS.js → status-D4KjZ3qi.js} +9 -9
- package/dist/{status-BTF6_aBO.js → status-DIYjr2wp.js} +2 -2
- package/dist/{status-PADx9rG7.js → status-DbXRbJqY.js} +10 -10
- package/dist/{status.update-BXs3adtg.js → status.update-CbXOcYqG.js} +1 -1
- package/dist/{status.update-DlaskfTr.js → status.update-DKLvc9EH.js} +1 -1
- package/dist/{subagent-registry-BR2Qhqjf.js → subagent-registry-Ct3GvWVn.js} +44 -44
- package/dist/{system-cli-BMrwtPdR.js → system-cli-9b3AzE_M.js} +4 -4
- package/dist/{system-cli-B_cCDKOu.js → system-cli-B_KTvR0v.js} +4 -4
- package/dist/{systemd-hints-BBPT8Use.js → systemd-hints-BE7qhp3n.js} +1 -1
- package/dist/{systemd-hints-Bm2H1erP.js → systemd-hints-D_u4AuIu.js} +1 -1
- package/dist/{tui-CcirlGg5.js → tui-BViOdgFZ.js} +5 -5
- package/dist/{tui-cli-hcbzeOtp.js → tui-cli-B97jQaQp.js} +10 -10
- package/dist/{tui-cli-D3VMk5c8.js → tui-cli-DKQz32oa.js} +10 -10
- package/dist/{tui-0rURH3b3.js → tui-oo_JjD-G.js} +5 -5
- package/dist/{update-cli-CHr8rjf-.js → update-cli-C9S00L1E.js} +41 -41
- package/dist/{update-cli-qacplfF4.js → update-cli-Dhk0Yxsm.js} +39 -39
- package/dist/{update-runner-DM8zQvQB.js → update-runner-BnIIcsqA.js} +1 -1
- package/dist/{update-runner-DNA7FJa2.js → update-runner-DBZOvTzN.js} +1 -1
- package/dist/{web-UroM-w6c.js → web-5uLk4OEM.js} +31 -31
- package/dist/{web-DkQc82PT.js → web-8NQJ75ip.js} +31 -31
- package/dist/{web-BKQnrqo-.js → web-f7lkf_un.js} +17 -17
- package/dist/{web-CAnxcgBD.js → web-mXHyxR_l.js} +17 -17
- package/dist/{webhooks-cli-B0Crq2Ec.js → webhooks-cli-BLi_usfE.js} +1 -1
- package/dist/{webhooks-cli-CLIdArAE.js → webhooks-cli-Dz9n2L0-.js} +1 -1
- package/dist/{whatsapp-actions-BIjGyW3T.js → whatsapp-actions-6S6PNs2p.js} +2 -2
- package/dist/{whatsapp-actions-BL7tCNC_.js → whatsapp-actions-B4YPuD2Q.js} +2 -2
- package/dist/{whatsapp-actions-B821AFp-.js → whatsapp-actions-ChtHuvdU.js} +2 -2
- package/dist/{whatsapp-actions-Jfx4zcwv.js → whatsapp-actions-M8kjDd9l.js} +2 -2
- package/dist/{with-timeout-Cj_xUxo6.js → with-timeout-2zPYOOzh.js} +1 -1
- package/dist/{with-timeout-BeA4Jxcl.js → with-timeout-gaHpaiis.js} +1 -1
- package/docs/reference/templates/SYMIPULSE.md +22 -1
- 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 };
|