@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 };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
|
|
2
2
|
import { Dt as theme, Et as isRich, Tt as colorize, Yt as resolveStateDir, _ as defaultRuntime, ct as shortenHomeInString, lt as shortenHomePath, o as createSubsystemLogger, ot as resolveUserPath, xt as setVerbose } from "./entry.js";
|
|
3
|
+
import { xt as resolveApiKeyForProvider } from "./auth-profiles-BD22fK4p.js";
|
|
3
4
|
import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D-jRCY0d.js";
|
|
4
|
-
import { C as parseDurationMs, i as loadConfig } from "./config-
|
|
5
|
+
import { C as parseDurationMs, i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DehS9e5w.js";
|
|
5
6
|
import { n as formatErrorMessage } from "./errors-Ba_ROWsq.js";
|
|
6
7
|
import { s as resolveSessionTranscriptsDirForAgent } from "./paths-DNdWAq7b.js";
|
|
7
8
|
import { t as splitShellArgs } from "./shell-argv-DjSugwgF.js";
|
|
9
|
+
import { n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-CPQ2pEj3.js";
|
|
8
10
|
import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-CQGamAhm.js";
|
|
9
11
|
import { t as formatDocsLink } from "./links-DlWpl9Yv.js";
|
|
10
12
|
import { r as withManager } from "./cli-utils-CCaEbxAz.js";
|
|
@@ -222,7 +224,7 @@ async function getMemorySearchManager(params) {
|
|
|
222
224
|
const wrapper = new FallbackMemoryManager({
|
|
223
225
|
primary,
|
|
224
226
|
fallbackFactory: async () => {
|
|
225
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
227
|
+
const { MemoryIndexManager } = await import("./manager-CPQ2pEj3.js").then((n) => n.t);
|
|
226
228
|
return await MemoryIndexManager.get(params);
|
|
227
229
|
}
|
|
228
230
|
}, () => QMD_MANAGER_CACHE.delete(cacheKey));
|
|
@@ -235,7 +237,7 @@ async function getMemorySearchManager(params) {
|
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
239
|
try {
|
|
238
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
240
|
+
const { MemoryIndexManager } = await import("./manager-CPQ2pEj3.js").then((n) => n.t);
|
|
239
241
|
return { manager: await MemoryIndexManager.get(params) };
|
|
240
242
|
} catch (err) {
|
|
241
243
|
return {
|
|
@@ -861,6 +863,207 @@ function registerMemoryCli(program) {
|
|
|
861
863
|
}
|
|
862
864
|
});
|
|
863
865
|
});
|
|
866
|
+
memory.command("setup").description("Auto-detect and configure the best embedding provider").option("--agent <id>", "Agent id (default: default agent)").option("--dry-run", "Show what would be configured without writing", false).option("--verbose", "Verbose logging", false).action(async (opts) => {
|
|
867
|
+
setVerbose(Boolean(opts.verbose));
|
|
868
|
+
await runMemorySetup(opts);
|
|
869
|
+
});
|
|
870
|
+
}
|
|
871
|
+
async function detectEmbeddingProviders(cfg) {
|
|
872
|
+
const detected = [];
|
|
873
|
+
const ollamaProbe = await probeOllamaEmbeddingModels(resolveOllamaBaseUrl(cfg));
|
|
874
|
+
if (ollamaProbe && ollamaProbe.models.length > 0) detected.push({
|
|
875
|
+
id: "ollama",
|
|
876
|
+
model: ollamaProbe.models[0],
|
|
877
|
+
baseUrl: ollamaProbe.baseUrl,
|
|
878
|
+
reason: `Ollama at ${ollamaProbe.baseUrl} — ${ollamaProbe.models[0]}`
|
|
879
|
+
});
|
|
880
|
+
for (const remote of [
|
|
881
|
+
{
|
|
882
|
+
id: "openai",
|
|
883
|
+
envKey: "OPENAI_API_KEY",
|
|
884
|
+
defaultModel: "text-embedding-3-small"
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
id: "gemini",
|
|
888
|
+
envKey: "GEMINI_API_KEY",
|
|
889
|
+
defaultModel: "gemini-embedding-001"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
id: "voyage",
|
|
893
|
+
envKey: "VOYAGE_API_KEY",
|
|
894
|
+
defaultModel: "voyage-4-large"
|
|
895
|
+
}
|
|
896
|
+
]) {
|
|
897
|
+
const envValue = process.env[remote.envKey]?.trim();
|
|
898
|
+
let hasKey = Boolean(envValue);
|
|
899
|
+
if (!hasKey) try {
|
|
900
|
+
const resolved = await resolveApiKeyForProvider({
|
|
901
|
+
provider: remote.id,
|
|
902
|
+
cfg
|
|
903
|
+
});
|
|
904
|
+
hasKey = Boolean(resolved?.apiKey);
|
|
905
|
+
} catch {}
|
|
906
|
+
if (hasKey) detected.push({
|
|
907
|
+
id: remote.id,
|
|
908
|
+
model: remote.defaultModel,
|
|
909
|
+
reason: `${remote.id} — API key found`
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
return detected;
|
|
913
|
+
}
|
|
914
|
+
function setNestedValue(obj, path, value) {
|
|
915
|
+
let current = obj;
|
|
916
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
917
|
+
const key = path[i];
|
|
918
|
+
if (current[key] === void 0 || typeof current[key] !== "object" || current[key] === null) current[key] = {};
|
|
919
|
+
current = current[key];
|
|
920
|
+
}
|
|
921
|
+
current[path[path.length - 1]] = value;
|
|
922
|
+
}
|
|
923
|
+
async function runMemorySetup(opts) {
|
|
924
|
+
const rich = isRich();
|
|
925
|
+
const heading = (text) => colorize(rich, theme.heading, text);
|
|
926
|
+
const success = (text) => colorize(rich, theme.success, text);
|
|
927
|
+
const warn = (text) => colorize(rich, theme.warn, text);
|
|
928
|
+
const info = (text) => colorize(rich, theme.info, text);
|
|
929
|
+
const muted = (text) => colorize(rich, theme.muted, text);
|
|
930
|
+
const cfg = loadConfig();
|
|
931
|
+
const agentId = resolveAgent(cfg, opts.agent);
|
|
932
|
+
defaultRuntime.log(heading("Detecting embedding providers..."));
|
|
933
|
+
defaultRuntime.log("");
|
|
934
|
+
const detected = await detectEmbeddingProviders(cfg);
|
|
935
|
+
const ollamaBase = resolveOllamaBaseUrl(cfg);
|
|
936
|
+
const ollamaFound = detected.some((d) => d.id === "ollama");
|
|
937
|
+
const openaiFound = detected.some((d) => d.id === "openai");
|
|
938
|
+
const geminiFound = detected.some((d) => d.id === "gemini");
|
|
939
|
+
const voyageFound = detected.some((d) => d.id === "voyage");
|
|
940
|
+
if (ollamaFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "ollama").reason}`);
|
|
941
|
+
else defaultRuntime.log(` ${warn("✗")} Ollama — not reachable at ${ollamaBase} or no embedding models`);
|
|
942
|
+
if (openaiFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "openai").reason}`);
|
|
943
|
+
else defaultRuntime.log(` ${warn("✗")} OpenAI — no API key`);
|
|
944
|
+
if (geminiFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "gemini").reason}`);
|
|
945
|
+
else defaultRuntime.log(` ${warn("✗")} Gemini — no API key`);
|
|
946
|
+
if (voyageFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "voyage").reason}`);
|
|
947
|
+
else defaultRuntime.log(` ${warn("✗")} Voyage — no API key`);
|
|
948
|
+
defaultRuntime.log("");
|
|
949
|
+
if (detected.length === 0) {
|
|
950
|
+
defaultRuntime.error("No embedding providers detected.");
|
|
951
|
+
defaultRuntime.error("");
|
|
952
|
+
defaultRuntime.error("To fix, do one of:");
|
|
953
|
+
defaultRuntime.error(" - Install Ollama and pull an embedding model: ollama pull nomic-embed-text");
|
|
954
|
+
defaultRuntime.error(" - Set OPENAI_API_KEY environment variable");
|
|
955
|
+
defaultRuntime.error(" - Set GEMINI_API_KEY or VOYAGE_API_KEY environment variable");
|
|
956
|
+
process.exitCode = 1;
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
const best = detected[0];
|
|
960
|
+
defaultRuntime.log(`${heading("Configuring:")} ${info(best.id)} (${best.model})`);
|
|
961
|
+
if (opts.dryRun) {
|
|
962
|
+
defaultRuntime.log(muted(" (dry run — no changes written)"));
|
|
963
|
+
const configProvider = best.id === "ollama" ? "openai" : best.id;
|
|
964
|
+
defaultRuntime.log(` provider = ${info(configProvider)}${best.id === "ollama" ? muted(" (via Ollama)") : ""}`);
|
|
965
|
+
defaultRuntime.log(` model = ${info(best.model)}`);
|
|
966
|
+
if (best.baseUrl) {
|
|
967
|
+
const configUrl = best.id === "ollama" ? `${best.baseUrl}/v1` : best.baseUrl;
|
|
968
|
+
defaultRuntime.log(` remote.baseUrl = ${info(configUrl)}`);
|
|
969
|
+
}
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
972
|
+
const snapshot = await readConfigFileSnapshot();
|
|
973
|
+
const next = structuredClone(snapshot.resolved);
|
|
974
|
+
const memPath = [
|
|
975
|
+
"agents",
|
|
976
|
+
"defaults",
|
|
977
|
+
"memorySearch"
|
|
978
|
+
];
|
|
979
|
+
setNestedValue(next, [...memPath, "enabled"], true);
|
|
980
|
+
setNestedValue(next, [...memPath, "sources"], ["memory", "sessions"]);
|
|
981
|
+
if (best.id === "ollama" && best.baseUrl) {
|
|
982
|
+
setNestedValue(next, [...memPath, "provider"], "openai");
|
|
983
|
+
setNestedValue(next, [...memPath, "model"], best.model);
|
|
984
|
+
setNestedValue(next, [
|
|
985
|
+
...memPath,
|
|
986
|
+
"remote",
|
|
987
|
+
"baseUrl"
|
|
988
|
+
], `${best.baseUrl}/v1`);
|
|
989
|
+
setNestedValue(next, [
|
|
990
|
+
...memPath,
|
|
991
|
+
"remote",
|
|
992
|
+
"apiKey"
|
|
993
|
+
], "ollama-local");
|
|
994
|
+
} else {
|
|
995
|
+
setNestedValue(next, [...memPath, "provider"], best.id);
|
|
996
|
+
setNestedValue(next, [...memPath, "model"], best.model);
|
|
997
|
+
if (best.baseUrl) setNestedValue(next, [
|
|
998
|
+
...memPath,
|
|
999
|
+
"remote",
|
|
1000
|
+
"baseUrl"
|
|
1001
|
+
], best.baseUrl);
|
|
1002
|
+
}
|
|
1003
|
+
await writeConfigFile(next);
|
|
1004
|
+
defaultRuntime.log(` ${success("✓")} Updated symi.json`);
|
|
1005
|
+
defaultRuntime.log("");
|
|
1006
|
+
defaultRuntime.log(heading("Indexing memory files..."));
|
|
1007
|
+
const freshCfg = loadConfig();
|
|
1008
|
+
let indexOk = false;
|
|
1009
|
+
await withMemoryManagerForAgent({
|
|
1010
|
+
cfg: freshCfg,
|
|
1011
|
+
agentId,
|
|
1012
|
+
run: async (manager) => {
|
|
1013
|
+
const syncFn = manager.sync ? manager.sync.bind(manager) : void 0;
|
|
1014
|
+
if (!syncFn) {
|
|
1015
|
+
defaultRuntime.log(warn(" Memory backend does not support indexing."));
|
|
1016
|
+
return;
|
|
1017
|
+
}
|
|
1018
|
+
try {
|
|
1019
|
+
await withProgressTotals({
|
|
1020
|
+
label: "Indexing memory…",
|
|
1021
|
+
total: 0
|
|
1022
|
+
}, async (update, progress) => {
|
|
1023
|
+
await syncFn({
|
|
1024
|
+
reason: "cli",
|
|
1025
|
+
force: true,
|
|
1026
|
+
progress: (syncUpdate) => {
|
|
1027
|
+
update({
|
|
1028
|
+
completed: syncUpdate.completed,
|
|
1029
|
+
total: syncUpdate.total,
|
|
1030
|
+
label: syncUpdate.label
|
|
1031
|
+
});
|
|
1032
|
+
if (syncUpdate.label) progress.setLabel(syncUpdate.label);
|
|
1033
|
+
}
|
|
1034
|
+
});
|
|
1035
|
+
});
|
|
1036
|
+
const status = manager.status();
|
|
1037
|
+
defaultRuntime.log(` ${success("✓")} ${status.files ?? 0} files → ${status.chunks ?? 0} chunks` + (status.vector?.dims ? ` (${status.vector.dims}-dim vectors)` : ""));
|
|
1038
|
+
indexOk = true;
|
|
1039
|
+
} catch (err) {
|
|
1040
|
+
defaultRuntime.error(` ${warn("✗")} Index failed: ${formatErrorMessage(err)}`);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
});
|
|
1044
|
+
if (!indexOk) {
|
|
1045
|
+
process.exitCode = 1;
|
|
1046
|
+
return;
|
|
1047
|
+
}
|
|
1048
|
+
defaultRuntime.log("");
|
|
1049
|
+
defaultRuntime.log(heading("Verifying search..."));
|
|
1050
|
+
await withMemoryManagerForAgent({
|
|
1051
|
+
cfg: freshCfg,
|
|
1052
|
+
agentId,
|
|
1053
|
+
run: async (manager) => {
|
|
1054
|
+
try {
|
|
1055
|
+
const results = await manager.search("test memory verification", { maxResults: 3 });
|
|
1056
|
+
defaultRuntime.log(` ${success("✓")} Test query returned ${results.length} results` + (results.length > 0 ? ` (score ${results[results.length - 1].score.toFixed(2)}–${results[0].score.toFixed(2)})` : ""));
|
|
1057
|
+
} catch (err) {
|
|
1058
|
+
defaultRuntime.log(` ${warn("✗")} Search verification failed: ${formatErrorMessage(err)}`);
|
|
1059
|
+
process.exitCode = 1;
|
|
1060
|
+
return;
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
});
|
|
1064
|
+
defaultRuntime.log("");
|
|
1065
|
+
defaultRuntime.log(success("Memory system is fully operational."));
|
|
1066
|
+
defaultRuntime.log(muted("Restart the gateway to apply: systemctl --user restart symi-gateway"));
|
|
864
1067
|
}
|
|
865
1068
|
|
|
866
1069
|
//#endregion
|
|
@@ -3,11 +3,13 @@ import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
|
|
|
3
3
|
import { B as theme, P as setVerbose, R as colorize, S as shortenHomePath, x as shortenHomeInString, y as resolveUserPath, z as isRich } from "./utils-B-0b9bGM.js";
|
|
4
4
|
import { f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
|
|
5
5
|
import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-CgUHAtCo.js";
|
|
6
|
-
import {
|
|
6
|
+
import { q as resolveApiKeyForProvider } from "./model-selection-Csawd2_i.js";
|
|
7
|
+
import { C as parseDurationMs, i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } from "./config-BLe0R4JX.js";
|
|
7
8
|
import { n as formatErrorMessage } from "./errors-BF3TeRH2.js";
|
|
8
9
|
import { s as resolveSessionTranscriptsDirForAgent } from "./paths-CyhzMxFA.js";
|
|
9
10
|
import { d as listMemoryFiles, f as normalizeExtraMemoryPaths } from "./sqlite-Dx3J_aSE.js";
|
|
10
11
|
import { t as splitShellArgs } from "./shell-argv-BbiXH_xm.js";
|
|
12
|
+
import { n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-Oiy1uHsu.js";
|
|
11
13
|
import { t as formatDocsLink } from "./links-3i1eUga4.js";
|
|
12
14
|
import { r as withManager } from "./cli-utils-DN_hM6ov.js";
|
|
13
15
|
import { t as formatHelpExamples } from "./help-format-B_-M23wP.js";
|
|
@@ -224,7 +226,7 @@ async function getMemorySearchManager(params) {
|
|
|
224
226
|
const wrapper = new FallbackMemoryManager({
|
|
225
227
|
primary,
|
|
226
228
|
fallbackFactory: async () => {
|
|
227
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
229
|
+
const { MemoryIndexManager } = await import("./manager-Oiy1uHsu.js").then((n) => n.t);
|
|
228
230
|
return await MemoryIndexManager.get(params);
|
|
229
231
|
}
|
|
230
232
|
}, () => QMD_MANAGER_CACHE.delete(cacheKey));
|
|
@@ -237,7 +239,7 @@ async function getMemorySearchManager(params) {
|
|
|
237
239
|
}
|
|
238
240
|
}
|
|
239
241
|
try {
|
|
240
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
242
|
+
const { MemoryIndexManager } = await import("./manager-Oiy1uHsu.js").then((n) => n.t);
|
|
241
243
|
return { manager: await MemoryIndexManager.get(params) };
|
|
242
244
|
} catch (err) {
|
|
243
245
|
return {
|
|
@@ -863,6 +865,207 @@ function registerMemoryCli(program) {
|
|
|
863
865
|
}
|
|
864
866
|
});
|
|
865
867
|
});
|
|
868
|
+
memory.command("setup").description("Auto-detect and configure the best embedding provider").option("--agent <id>", "Agent id (default: default agent)").option("--dry-run", "Show what would be configured without writing", false).option("--verbose", "Verbose logging", false).action(async (opts) => {
|
|
869
|
+
setVerbose(Boolean(opts.verbose));
|
|
870
|
+
await runMemorySetup(opts);
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
async function detectEmbeddingProviders(cfg) {
|
|
874
|
+
const detected = [];
|
|
875
|
+
const ollamaProbe = await probeOllamaEmbeddingModels(resolveOllamaBaseUrl(cfg));
|
|
876
|
+
if (ollamaProbe && ollamaProbe.models.length > 0) detected.push({
|
|
877
|
+
id: "ollama",
|
|
878
|
+
model: ollamaProbe.models[0],
|
|
879
|
+
baseUrl: ollamaProbe.baseUrl,
|
|
880
|
+
reason: `Ollama at ${ollamaProbe.baseUrl} — ${ollamaProbe.models[0]}`
|
|
881
|
+
});
|
|
882
|
+
for (const remote of [
|
|
883
|
+
{
|
|
884
|
+
id: "openai",
|
|
885
|
+
envKey: "OPENAI_API_KEY",
|
|
886
|
+
defaultModel: "text-embedding-3-small"
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
id: "gemini",
|
|
890
|
+
envKey: "GEMINI_API_KEY",
|
|
891
|
+
defaultModel: "gemini-embedding-001"
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
id: "voyage",
|
|
895
|
+
envKey: "VOYAGE_API_KEY",
|
|
896
|
+
defaultModel: "voyage-4-large"
|
|
897
|
+
}
|
|
898
|
+
]) {
|
|
899
|
+
const envValue = process.env[remote.envKey]?.trim();
|
|
900
|
+
let hasKey = Boolean(envValue);
|
|
901
|
+
if (!hasKey) try {
|
|
902
|
+
const resolved = await resolveApiKeyForProvider({
|
|
903
|
+
provider: remote.id,
|
|
904
|
+
cfg
|
|
905
|
+
});
|
|
906
|
+
hasKey = Boolean(resolved?.apiKey);
|
|
907
|
+
} catch {}
|
|
908
|
+
if (hasKey) detected.push({
|
|
909
|
+
id: remote.id,
|
|
910
|
+
model: remote.defaultModel,
|
|
911
|
+
reason: `${remote.id} — API key found`
|
|
912
|
+
});
|
|
913
|
+
}
|
|
914
|
+
return detected;
|
|
915
|
+
}
|
|
916
|
+
function setNestedValue(obj, path, value) {
|
|
917
|
+
let current = obj;
|
|
918
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
919
|
+
const key = path[i];
|
|
920
|
+
if (current[key] === void 0 || typeof current[key] !== "object" || current[key] === null) current[key] = {};
|
|
921
|
+
current = current[key];
|
|
922
|
+
}
|
|
923
|
+
current[path[path.length - 1]] = value;
|
|
924
|
+
}
|
|
925
|
+
async function runMemorySetup(opts) {
|
|
926
|
+
const rich = isRich();
|
|
927
|
+
const heading = (text) => colorize(rich, theme.heading, text);
|
|
928
|
+
const success = (text) => colorize(rich, theme.success, text);
|
|
929
|
+
const warn = (text) => colorize(rich, theme.warn, text);
|
|
930
|
+
const info = (text) => colorize(rich, theme.info, text);
|
|
931
|
+
const muted = (text) => colorize(rich, theme.muted, text);
|
|
932
|
+
const cfg = loadConfig();
|
|
933
|
+
const agentId = resolveAgent(cfg, opts.agent);
|
|
934
|
+
defaultRuntime.log(heading("Detecting embedding providers..."));
|
|
935
|
+
defaultRuntime.log("");
|
|
936
|
+
const detected = await detectEmbeddingProviders(cfg);
|
|
937
|
+
const ollamaBase = resolveOllamaBaseUrl(cfg);
|
|
938
|
+
const ollamaFound = detected.some((d) => d.id === "ollama");
|
|
939
|
+
const openaiFound = detected.some((d) => d.id === "openai");
|
|
940
|
+
const geminiFound = detected.some((d) => d.id === "gemini");
|
|
941
|
+
const voyageFound = detected.some((d) => d.id === "voyage");
|
|
942
|
+
if (ollamaFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "ollama").reason}`);
|
|
943
|
+
else defaultRuntime.log(` ${warn("✗")} Ollama — not reachable at ${ollamaBase} or no embedding models`);
|
|
944
|
+
if (openaiFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "openai").reason}`);
|
|
945
|
+
else defaultRuntime.log(` ${warn("✗")} OpenAI — no API key`);
|
|
946
|
+
if (geminiFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "gemini").reason}`);
|
|
947
|
+
else defaultRuntime.log(` ${warn("✗")} Gemini — no API key`);
|
|
948
|
+
if (voyageFound) defaultRuntime.log(` ${success("✓")} ${detected.find((d) => d.id === "voyage").reason}`);
|
|
949
|
+
else defaultRuntime.log(` ${warn("✗")} Voyage — no API key`);
|
|
950
|
+
defaultRuntime.log("");
|
|
951
|
+
if (detected.length === 0) {
|
|
952
|
+
defaultRuntime.error("No embedding providers detected.");
|
|
953
|
+
defaultRuntime.error("");
|
|
954
|
+
defaultRuntime.error("To fix, do one of:");
|
|
955
|
+
defaultRuntime.error(" - Install Ollama and pull an embedding model: ollama pull nomic-embed-text");
|
|
956
|
+
defaultRuntime.error(" - Set OPENAI_API_KEY environment variable");
|
|
957
|
+
defaultRuntime.error(" - Set GEMINI_API_KEY or VOYAGE_API_KEY environment variable");
|
|
958
|
+
process.exitCode = 1;
|
|
959
|
+
return;
|
|
960
|
+
}
|
|
961
|
+
const best = detected[0];
|
|
962
|
+
defaultRuntime.log(`${heading("Configuring:")} ${info(best.id)} (${best.model})`);
|
|
963
|
+
if (opts.dryRun) {
|
|
964
|
+
defaultRuntime.log(muted(" (dry run — no changes written)"));
|
|
965
|
+
const configProvider = best.id === "ollama" ? "openai" : best.id;
|
|
966
|
+
defaultRuntime.log(` provider = ${info(configProvider)}${best.id === "ollama" ? muted(" (via Ollama)") : ""}`);
|
|
967
|
+
defaultRuntime.log(` model = ${info(best.model)}`);
|
|
968
|
+
if (best.baseUrl) {
|
|
969
|
+
const configUrl = best.id === "ollama" ? `${best.baseUrl}/v1` : best.baseUrl;
|
|
970
|
+
defaultRuntime.log(` remote.baseUrl = ${info(configUrl)}`);
|
|
971
|
+
}
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
974
|
+
const snapshot = await readConfigFileSnapshot();
|
|
975
|
+
const next = structuredClone(snapshot.resolved);
|
|
976
|
+
const memPath = [
|
|
977
|
+
"agents",
|
|
978
|
+
"defaults",
|
|
979
|
+
"memorySearch"
|
|
980
|
+
];
|
|
981
|
+
setNestedValue(next, [...memPath, "enabled"], true);
|
|
982
|
+
setNestedValue(next, [...memPath, "sources"], ["memory", "sessions"]);
|
|
983
|
+
if (best.id === "ollama" && best.baseUrl) {
|
|
984
|
+
setNestedValue(next, [...memPath, "provider"], "openai");
|
|
985
|
+
setNestedValue(next, [...memPath, "model"], best.model);
|
|
986
|
+
setNestedValue(next, [
|
|
987
|
+
...memPath,
|
|
988
|
+
"remote",
|
|
989
|
+
"baseUrl"
|
|
990
|
+
], `${best.baseUrl}/v1`);
|
|
991
|
+
setNestedValue(next, [
|
|
992
|
+
...memPath,
|
|
993
|
+
"remote",
|
|
994
|
+
"apiKey"
|
|
995
|
+
], "ollama-local");
|
|
996
|
+
} else {
|
|
997
|
+
setNestedValue(next, [...memPath, "provider"], best.id);
|
|
998
|
+
setNestedValue(next, [...memPath, "model"], best.model);
|
|
999
|
+
if (best.baseUrl) setNestedValue(next, [
|
|
1000
|
+
...memPath,
|
|
1001
|
+
"remote",
|
|
1002
|
+
"baseUrl"
|
|
1003
|
+
], best.baseUrl);
|
|
1004
|
+
}
|
|
1005
|
+
await writeConfigFile(next);
|
|
1006
|
+
defaultRuntime.log(` ${success("✓")} Updated symi.json`);
|
|
1007
|
+
defaultRuntime.log("");
|
|
1008
|
+
defaultRuntime.log(heading("Indexing memory files..."));
|
|
1009
|
+
const freshCfg = loadConfig();
|
|
1010
|
+
let indexOk = false;
|
|
1011
|
+
await withMemoryManagerForAgent({
|
|
1012
|
+
cfg: freshCfg,
|
|
1013
|
+
agentId,
|
|
1014
|
+
run: async (manager) => {
|
|
1015
|
+
const syncFn = manager.sync ? manager.sync.bind(manager) : void 0;
|
|
1016
|
+
if (!syncFn) {
|
|
1017
|
+
defaultRuntime.log(warn(" Memory backend does not support indexing."));
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
try {
|
|
1021
|
+
await withProgressTotals({
|
|
1022
|
+
label: "Indexing memory…",
|
|
1023
|
+
total: 0
|
|
1024
|
+
}, async (update, progress) => {
|
|
1025
|
+
await syncFn({
|
|
1026
|
+
reason: "cli",
|
|
1027
|
+
force: true,
|
|
1028
|
+
progress: (syncUpdate) => {
|
|
1029
|
+
update({
|
|
1030
|
+
completed: syncUpdate.completed,
|
|
1031
|
+
total: syncUpdate.total,
|
|
1032
|
+
label: syncUpdate.label
|
|
1033
|
+
});
|
|
1034
|
+
if (syncUpdate.label) progress.setLabel(syncUpdate.label);
|
|
1035
|
+
}
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
const status = manager.status();
|
|
1039
|
+
defaultRuntime.log(` ${success("✓")} ${status.files ?? 0} files → ${status.chunks ?? 0} chunks` + (status.vector?.dims ? ` (${status.vector.dims}-dim vectors)` : ""));
|
|
1040
|
+
indexOk = true;
|
|
1041
|
+
} catch (err) {
|
|
1042
|
+
defaultRuntime.error(` ${warn("✗")} Index failed: ${formatErrorMessage(err)}`);
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
});
|
|
1046
|
+
if (!indexOk) {
|
|
1047
|
+
process.exitCode = 1;
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
defaultRuntime.log("");
|
|
1051
|
+
defaultRuntime.log(heading("Verifying search..."));
|
|
1052
|
+
await withMemoryManagerForAgent({
|
|
1053
|
+
cfg: freshCfg,
|
|
1054
|
+
agentId,
|
|
1055
|
+
run: async (manager) => {
|
|
1056
|
+
try {
|
|
1057
|
+
const results = await manager.search("test memory verification", { maxResults: 3 });
|
|
1058
|
+
defaultRuntime.log(` ${success("✓")} Test query returned ${results.length} results` + (results.length > 0 ? ` (score ${results[results.length - 1].score.toFixed(2)}–${results[0].score.toFixed(2)})` : ""));
|
|
1059
|
+
} catch (err) {
|
|
1060
|
+
defaultRuntime.log(` ${warn("✗")} Search verification failed: ${formatErrorMessage(err)}`);
|
|
1061
|
+
process.exitCode = 1;
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
defaultRuntime.log("");
|
|
1067
|
+
defaultRuntime.log(success("Memory system is fully operational."));
|
|
1068
|
+
defaultRuntime.log(muted("Restart the gateway to apply: systemctl --user restart symi-gateway"));
|
|
866
1069
|
}
|
|
867
1070
|
|
|
868
1071
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Ft as resolveSymiAgentDir } from "./model-selection-Csawd2_i.js";
|
|
2
|
-
import { i as loadConfig } from "./config-
|
|
3
|
-
import { t as ensureSymiModelsJson } from "./models-config-
|
|
2
|
+
import { i as loadConfig } from "./config-BLe0R4JX.js";
|
|
3
|
+
import { t as ensureSymiModelsJson } from "./models-config-BH6-rmtt.js";
|
|
4
4
|
|
|
5
5
|
//#region src/agents/model-catalog.ts
|
|
6
6
|
let modelCatalogPromise = null;
|
|
@@ -37,7 +37,7 @@ async function loadModelCatalog(params) {
|
|
|
37
37
|
});
|
|
38
38
|
try {
|
|
39
39
|
await ensureSymiModelsJson(params?.config ?? loadConfig());
|
|
40
|
-
await (await import("./pi-auth-json-
|
|
40
|
+
await (await import("./pi-auth-json-Do26xypW.js")).ensurePiAuthJsonFromAuthProfiles(resolveSymiAgentDir());
|
|
41
41
|
const piSdk = await importPiSdk();
|
|
42
42
|
const agentDir = resolveSymiAgentDir();
|
|
43
43
|
const { join } = await import("node:path");
|