@symerian/symi 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/{agents-B0pTMEwy.js → agents-b1LWBQC2.js} +4 -4
  2. package/dist/{agents.config-_b7ghdyb.js → agents.config-BImdIqjf.js} +1 -1
  3. package/dist/{agents.config-CdNbu8M5.js → agents.config-CH52CAyr.js} +1 -1
  4. package/dist/{audio-preflight-BkIfnmpi.js → audio-preflight-BsfqyC31.js} +4 -4
  5. package/dist/{auth-choice-Bx2Ly3cQ.js → auth-choice-DX1GLTBf.js} +1 -1
  6. package/dist/{auth-choice-EFFQA4ii.js → auth-choice-DcA3lQQX.js} +1 -1
  7. package/dist/{banner-B3eic4uq.js → banner-C9OgeI9S.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +6 -6
  10. package/dist/bundled/session-memory/handler.js +6 -6
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-75aPoFR-.js → channel-options-CKHMtbhF.js} +1 -1
  13. package/dist/{channel-options-CiowWU_F.js → channel-options-CUlWJdG7.js} +1 -1
  14. package/dist/{channel-web-B3e8z6ws.js → channel-web-DNGWTM8I.js} +1 -1
  15. package/dist/{channels-cli-DZM3aIdY.js → channels-cli-C7Q3h_ZW.js} +4 -4
  16. package/dist/{channels-cli-BDAVsmSm.js → channels-cli-D3n-xoKD.js} +4 -4
  17. package/dist/{chrome-CxSAp8x3.js → chrome-w3SLcQJF.js} +7 -7
  18. package/dist/{cli-BRwovkQi.js → cli-9nGKXD05.js} +1 -1
  19. package/dist/{cli-D9SQsNnH.js → cli-Bf6Le7bx.js} +1 -1
  20. package/dist/{command-registry-BOI6nYdi.js → command-registry-C6H5FwOm.js} +9 -9
  21. package/dist/{completion-cli-NNzoK79d.js → completion-cli-Cuqh9oMX.js} +1 -1
  22. package/dist/{completion-cli-83vpWmfU.js → completion-cli-DJNeDB6-.js} +2 -2
  23. package/dist/{config-cli-DEAh6EN8.js → config-cli-BG7fqSG5.js} +1 -1
  24. package/dist/{config-cli-MLtPektI.js → config-cli-BZARhhJb.js} +1 -1
  25. package/dist/{configure-vl7Z4vWj.js → configure-1q8nqdUB.js} +3 -3
  26. package/dist/{configure-BdfU-OWp.js → configure-CXMeenDU.js} +3 -3
  27. package/dist/{deliver-BA7ZN3iM.js → deliver-BmPK91JP.js} +1 -1
  28. package/dist/{doctor-completion-OyrrKhcY.js → doctor-completion-DE0ljh_m.js} +1 -1
  29. package/dist/{doctor-completion-Ds-_m1_I.js → doctor-completion-MHRUVcxM.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +1 -1
  32. package/dist/{gateway-cli-DfFSqETj.js → gateway-cli-A_kepvEA.js} +9 -9
  33. package/dist/{gateway-cli-Coue82yW.js → gateway-cli-BL_vVTU2.js} +9 -9
  34. package/dist/{glass-ui-ws-Dkh8KQKx.js → glass-ui-ws-CWG8XziA.js} +7 -7
  35. package/dist/{glass-ui-ws-D0Y3Ftjr.js → glass-ui-ws-Drv5ICqE.js} +7 -7
  36. package/dist/{health-B1LT2TG3.js → health-B71iKlbh.js} +1 -1
  37. package/dist/{health-BL_zFcJ8.js → health-BTXjJASN.js} +1 -1
  38. package/dist/{hooks-cli-CI7p--JB.js → hooks-cli-D8Sc2Ha-.js} +2 -2
  39. package/dist/{hooks-cli-BoE1T7F1.js → hooks-cli-R6NcEG6h.js} +2 -2
  40. package/dist/{image-BGmVDkkw.js → image-rZ4x9VS9.js} +1 -1
  41. package/dist/index.js +6 -6
  42. package/dist/llm-slug-generator.js +6 -6
  43. package/dist/{models-DSx-ohwA.js → models-CNdluTFK.js} +2 -2
  44. package/dist/{models-cli-Dm_3bpun.js → models-cli-CN2aEEwr.js} +3 -3
  45. package/dist/{models-cli-B-mDqwNv.js → models-cli-dZewIFFK.js} +2 -2
  46. package/dist/{onboard-u4HyeN9s.js → onboard-DoPuzIkY.js} +2 -2
  47. package/dist/{onboard-channels-CixaQo6p.js → onboard-channels-BrmH9pSy.js} +1 -1
  48. package/dist/{onboard-channels-BUz8JSpV.js → onboard-channels-C-e8WBT5.js} +1 -1
  49. package/dist/{onboard-CPRPPhos.js → onboard-jMdLiAFB.js} +2 -2
  50. package/dist/{onboarding-DVnX6G65.js → onboarding-C4tCCVuf.js} +3 -3
  51. package/dist/{onboarding-HeYKKCUg.js → onboarding-Dahfev0C.js} +3 -3
  52. package/dist/{onboarding.finalize-BJD7ST55.js → onboarding.finalize-B-jArghw.js} +6 -6
  53. package/dist/{onboarding.finalize-CyfJOd_0.js → onboarding.finalize-C-UcCZwc.js} +5 -5
  54. package/dist/{pi-embedded-Du1crlEA.js → pi-embedded-Cox_hxBz.js} +229 -161
  55. package/dist/{pi-embedded-helpers-DEEaCvEp.js → pi-embedded-helpers-B2z46qeM.js} +4 -4
  56. package/dist/{pi-embedded-Dbwt0RDE.js → pi-embedded-u1nTVeVL.js} +243 -175
  57. package/dist/{plugin-registry-BHTWmVtf.js → plugin-registry-BUjhiC8S.js} +1 -1
  58. package/dist/{plugin-registry-B3_VvP9Z.js → plugin-registry-DB6m_jhG.js} +1 -1
  59. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  60. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  61. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  62. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  63. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  64. package/dist/plugin-sdk/{api-key-rotation-CVBMpnPc.js → api-key-rotation-D_sMvI5W.js} +1 -1
  65. package/dist/plugin-sdk/{audio-preflight-DoQQKlxa.js → audio-preflight-VpItkiy3.js} +24 -24
  66. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  67. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  68. package/dist/plugin-sdk/{channel-web-pXiGDTMm.js → channel-web-DBJ2f-u5.js} +22 -22
  69. package/dist/plugin-sdk/{chrome-C7c_0I5M.js → chrome-B7RdxmJ0.js} +3 -3
  70. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  71. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  72. package/dist/plugin-sdk/{commands-registry-CQFbmUMs.js → commands-registry-COIaslGl.js} +4 -4
  73. package/dist/plugin-sdk/{config-DDkdiUOR.js → config-KlTNfkFF.js} +9 -9
  74. package/dist/plugin-sdk/{deliver-BUns_L9e.js → deliver-BiGlXG5k.js} +10 -10
  75. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  76. package/dist/plugin-sdk/{image-BOYy0Ump.js → image-CLOPx7yW.js} +4 -4
  77. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  78. package/dist/plugin-sdk/index.js +53 -53
  79. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  80. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  81. package/dist/plugin-sdk/{login-Bh3DZPam.js → login-DQMXuxOk.js} +7 -7
  82. package/dist/plugin-sdk/{login-qr-DbR7odSr.js → login-qr-BjVZSoCi.js} +9 -9
  83. package/dist/plugin-sdk/{manager-DckktAQ3.js → manager-CBSBFuFz.js} +8 -8
  84. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  85. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  86. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  87. package/dist/plugin-sdk/{model-selection-OpU8HN50.js → model-selection-CsbEfrS0.js} +4 -4
  88. package/dist/plugin-sdk/{outbound-rF6G8Xpr.js → outbound-B0e8KdaR.js} +7 -7
  89. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  90. package/dist/plugin-sdk/{pi-auth-json-CJk8t14T.js → pi-auth-json-qWi7ZIYV.js} +5 -5
  91. package/dist/plugin-sdk/{pi-embedded-helpers-BveUP4hk.js → pi-embedded-helpers-CW630epe.js} +17 -17
  92. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  93. package/dist/plugin-sdk/{pw-ai-DjGUsee-.js → pw-ai-CnbPIPY9.js} +8 -8
  94. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  95. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  96. package/dist/plugin-sdk/{replies-fI39rPGa.js → replies-LLcQL3w6.js} +3 -3
  97. package/dist/plugin-sdk/{reply-ClH0tnJf.js → reply-8bK0BH5o.js} +305 -237
  98. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  99. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  100. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  101. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  102. package/dist/plugin-sdk/{runner-BVqnEfNe.js → runner-CGBT7tgF.js} +9 -9
  103. package/dist/plugin-sdk/{send-BtANzsAo.js → send-B2CEnVLL.js} +6 -6
  104. package/dist/plugin-sdk/{send-BHbXh8Ly.js → send-C5h_YxNb.js} +7 -7
  105. package/dist/plugin-sdk/{send-D6LMZJ_h.js → send-CRsR8-vO.js} +10 -10
  106. package/dist/plugin-sdk/{send-Bxdu6ZZy.js → send-CjOBB3Vo.js} +10 -10
  107. package/dist/plugin-sdk/{send-BMfJIhCk.js → send-pYqe432l.js} +6 -6
  108. package/dist/plugin-sdk/{session-kI0tzViQ.js → session-BsOrxiMj.js} +4 -4
  109. package/dist/plugin-sdk/{skill-commands-DCNXVERE.js → skill-commands-ff_01_r3.js} +5 -5
  110. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  111. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  112. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  113. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  114. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  115. package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
  116. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  117. package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
  118. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  119. package/dist/plugin-sdk/{tool-loop-detection-edmW8ZiF.js → tool-loop-detection-BVA6fax-.js} +2 -2
  120. package/dist/plugin-sdk/web-C-5ZChok.js +65 -0
  121. package/dist/plugin-sdk/{whatsapp-actions-CcBzDuL-.js → whatsapp-actions-DfseosPO.js} +21 -21
  122. package/dist/{plugins-cli-CiJ3j55S.js → plugins-cli-BuFYsQIf.js} +2 -2
  123. package/dist/{plugins-cli-Dm1uy7by.js → plugins-cli-DZhaDtma.js} +2 -2
  124. package/dist/{program-CH2ZAXFK.js → program-DlXflM2j.js} +7 -7
  125. package/dist/{program-context-BHdXKRCG.js → program-context-CgOHSNfJ.js} +17 -17
  126. package/dist/{prompt-select-styled-D8-TYiCU.js → prompt-select-styled-BM24eNt6.js} +4 -4
  127. package/dist/{prompt-select-styled-YbkZmrxn.js → prompt-select-styled-VDp7sLVS.js} +4 -4
  128. package/dist/{provider-auth-helpers-BvwbMhtC.js → provider-auth-helpers-DPc2nJjU.js} +1 -1
  129. package/dist/{provider-auth-helpers-BXnJRRuA.js → provider-auth-helpers-DqyK6Uuv.js} +1 -1
  130. package/dist/{push-apns-CtNHq-T0.js → push-apns-BP1VrPYl.js} +1 -1
  131. package/dist/{push-apns-BKDV4tcx.js → push-apns-DmCBSfsH.js} +1 -1
  132. package/dist/{pw-ai-DhwRiS06.js → pw-ai-PiQUncix.js} +1 -1
  133. package/dist/{register.agent-BUq96Y9v.js → register.agent-CFngezQc.js} +5 -5
  134. package/dist/{register.agent-BKI5-fHH.js → register.agent-MXEw1cDP.js} +6 -6
  135. package/dist/{register.configure-wxLUAVNm.js → register.configure-Dye2lrEX.js} +6 -6
  136. package/dist/{register.configure-D5lE614j.js → register.configure-yuP_CFyL.js} +6 -6
  137. package/dist/{register.maintenance-C7McOGSl.js → register.maintenance-CmGslWRY.js} +7 -7
  138. package/dist/{register.maintenance-CBkeGPZ5.js → register.maintenance-CmsjyCHR.js} +8 -8
  139. package/dist/{register.message-COdTYFse.js → register.message-BqeA08JG.js} +2 -2
  140. package/dist/{register.message-CI-7hMop.js → register.message-COWiw927.js} +2 -2
  141. package/dist/{register.onboard-BB0BR6ER.js → register.onboard-Bi5HeqKP.js} +4 -4
  142. package/dist/{register.onboard-Cvq4D9PO.js → register.onboard-GL4FQKKt.js} +4 -4
  143. package/dist/{register.setup-BYdcj7kG.js → register.setup-CwdX8TGJ.js} +4 -4
  144. package/dist/{register.setup-BFsDqWth.js → register.setup-DE8B6eLm.js} +4 -4
  145. package/dist/{register.status-health-sessions-Z5xGFCb6.js → register.status-health-sessions-CDZ7zo1L.js} +3 -3
  146. package/dist/{register.status-health-sessions-CLTBPceP.js → register.status-health-sessions-DD5niftr.js} +3 -3
  147. package/dist/{register.subclis-DbjFcioS.js → register.subclis-Cn7QTC_-.js} +9 -9
  148. package/dist/{reply-Dlka9TPn.js → reply-BU9TUp_K.js} +229 -161
  149. package/dist/{run-main-CZKS1Km-.js → run-main-B6YILTPp.js} +14 -14
  150. package/dist/{runner-B_KP4voe.js → runner-CCSMfQee.js} +1 -1
  151. package/dist/{server-methods-Dl2xnUeP.js → server-methods-BTiR6t8F.js} +7 -7
  152. package/dist/{server-methods-060ibtki.js → server-methods-DFsGxi3M.js} +7 -7
  153. package/dist/{server-node-events-CxdmKBmm.js → server-node-events-BNDR2xkm.js} +2 -2
  154. package/dist/{server-node-events-BaVEbs-L.js → server-node-events-DEifFVMC.js} +2 -2
  155. package/dist/{status-DFFFYwyN.js → status-BlSxFEeo.js} +1 -1
  156. package/dist/{status-B161_hoB.js → status-ChsVYdUd.js} +2 -2
  157. package/dist/{status-DqWKFOGN.js → status-D6EakoGU.js} +2 -2
  158. package/dist/{status-V0eZ4bzN.js → status-DwZBYK_G.js} +1 -1
  159. package/dist/{subagent-registry-DLH72QgE.js → subagent-registry-XIFSKsi7.js} +229 -161
  160. package/dist/{update-cli-t1GIk6uw.js → update-cli-C4Hrx6N-.js} +8 -8
  161. package/dist/{update-cli-BHNHad5c.js → update-cli-CXfz9C2E.js} +7 -7
  162. package/dist/{update-runner-CDG0-jLB.js → update-runner-BWHG84zP.js} +1 -1
  163. package/dist/{update-runner-Ciq1c0YL.js → update-runner-C6_7IzDb.js} +1 -1
  164. package/dist/{web-FaXjM6fP.js → web-Bpy6uQ4f.js} +1 -1
  165. package/dist/{web-CWhHll12.js → web-C1iHUvKH.js} +2 -2
  166. package/dist/{web-B_JQgMeX.js → web-CB8bYQpw.js} +6 -6
  167. package/dist/{web-BkvYOXO1.js → web-DPXq2-or.js} +1 -1
  168. package/package.json +1 -1
  169. package/dist/plugin-sdk/web-D-2D6z4H.js +0 -65
@@ -51787,7 +51787,7 @@ function isVoiceChannelType(type) {
51787
51787
  function createDefaultDeps() {
51788
51788
  return {
51789
51789
  sendMessageWhatsApp: async (...args) => {
51790
- const { sendMessageWhatsApp } = await import("./web-BkvYOXO1.js");
51790
+ const { sendMessageWhatsApp } = await import("./web-DPXq2-or.js");
51791
51791
  return await sendMessageWhatsApp(...args);
51792
51792
  },
51793
51793
  sendMessageTelegram: async (...args) => {
@@ -67069,7 +67069,7 @@ function loadWebLoginQr() {
67069
67069
  return webLoginQrPromise;
67070
67070
  }
67071
67071
  function loadWebChannel() {
67072
- webChannelPromise ??= import("./web-BkvYOXO1.js");
67072
+ webChannelPromise ??= import("./web-DPXq2-or.js");
67073
67073
  return webChannelPromise;
67074
67074
  }
67075
67075
  function loadWhatsAppActions() {
@@ -72586,6 +72586,162 @@ async function compactEmbeddedPiSession(params) {
72586
72586
  return enqueueCommandInLane(sessionLane, () => enqueueGlobal(async () => compactEmbeddedPiSessionDirect(params)));
72587
72587
  }
72588
72588
 
72589
+ //#endregion
72590
+ //#region src/config/model-profiles-builtin.ts
72591
+ /**
72592
+ * Built-in model profiles. Ordered from most-specific to least-specific so
72593
+ * that `resolveModelProfile` can return the first match.
72594
+ *
72595
+ * Order matters: "ollama/" must precede "gemma" because model IDs like
72596
+ * "ollama/gemma4:31b-128k" contain both substrings.
72597
+ */
72598
+ const BUILTIN_PROFILES = [
72599
+ {
72600
+ match: ["ollama/"],
72601
+ label: "Ollama Local",
72602
+ params: {
72603
+ temperature: 1,
72604
+ top_p: .95,
72605
+ top_k: 64,
72606
+ max_tokens: 4096,
72607
+ stop: ["<end_of_turn>", "<eos>"]
72608
+ },
72609
+ streaming: {
72610
+ deltaThrottleMs: 50,
72611
+ flushOnFinal: true,
72612
+ chunkPattern: "burst"
72613
+ },
72614
+ filters: {
72615
+ stripPatterns: [
72616
+ "<\\|channel>\\w*",
72617
+ "<channel\\|>",
72618
+ "<start_of_turn>(?:model|user)?",
72619
+ "<end_of_turn>"
72620
+ ],
72621
+ suppressMonologue: true,
72622
+ hasStructuredThinking: false
72623
+ },
72624
+ promptAdditions: ["You are running locally via Ollama. Do not output raw control tokens or internal monologue. Send brief progress updates on long tasks."],
72625
+ ui: {
72626
+ badge: "Local",
72627
+ watchdogMs: 9e5,
72628
+ armWatchdogOnSend: true
72629
+ }
72630
+ },
72631
+ {
72632
+ match: ["anthropic/", "claude-"],
72633
+ label: "Claude",
72634
+ params: {
72635
+ temperature: 1,
72636
+ top_p: 1,
72637
+ max_tokens: 8192
72638
+ },
72639
+ streaming: {
72640
+ deltaThrottleMs: 150,
72641
+ flushOnFinal: false,
72642
+ chunkPattern: "token"
72643
+ },
72644
+ filters: {
72645
+ stripPatterns: [],
72646
+ suppressMonologue: false,
72647
+ hasStructuredThinking: true
72648
+ },
72649
+ promptAdditions: [],
72650
+ ui: {
72651
+ badge: "API",
72652
+ watchdogMs: 3e5,
72653
+ armWatchdogOnSend: false
72654
+ }
72655
+ },
72656
+ {
72657
+ match: ["gemma", "redsand/"],
72658
+ label: "Gemma 4",
72659
+ params: {
72660
+ temperature: 1,
72661
+ top_p: .95,
72662
+ top_k: 64,
72663
+ max_tokens: 4096,
72664
+ stop: ["<end_of_turn>", "<eos>"]
72665
+ },
72666
+ streaming: {
72667
+ deltaThrottleMs: 50,
72668
+ flushOnFinal: true,
72669
+ chunkPattern: "burst"
72670
+ },
72671
+ filters: {
72672
+ stripPatterns: [
72673
+ "<\\|channel>\\w*",
72674
+ "<channel\\|>",
72675
+ "<start_of_turn>(?:model|user)?",
72676
+ "<end_of_turn>",
72677
+ "<\\|(?:fim_prefix|fim_suffix|fim_middle)\\|>",
72678
+ "^\\s*<bos>\\s*"
72679
+ ],
72680
+ suppressMonologue: true,
72681
+ hasStructuredThinking: false
72682
+ },
72683
+ promptAdditions: [
72684
+ "You are running as Gemma 4 via vLLM. Important behavioral rules:",
72685
+ "- Never output raw control tokens, channel tags, or turn markers in your responses.",
72686
+ "- Never display internal status checks, plans, or self-assessments. Your visible output should only be conversational responses and final results.",
72687
+ "- When working on multi-step tasks, send a brief one-line status update every 30-60 seconds so the user knows you are active.",
72688
+ "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
72689
+ "- Do not use <|channel>thought or similar syntax. If you need to reason, do so silently."
72690
+ ],
72691
+ ui: {
72692
+ badge: "CoreWeave",
72693
+ watchdogMs: 6e5,
72694
+ armWatchdogOnSend: true
72695
+ }
72696
+ }
72697
+ ];
72698
+
72699
+ //#endregion
72700
+ //#region src/config/resolve-model-profile.ts
72701
+ /** Default profile returned when no match is found. */
72702
+ const FALLBACK_PROFILE = {
72703
+ match: "*",
72704
+ label: "Generic",
72705
+ params: {
72706
+ temperature: 1,
72707
+ max_tokens: 4096
72708
+ },
72709
+ streaming: {
72710
+ deltaThrottleMs: 150,
72711
+ flushOnFinal: true,
72712
+ chunkPattern: "burst"
72713
+ },
72714
+ filters: {
72715
+ stripPatterns: [],
72716
+ suppressMonologue: false,
72717
+ hasStructuredThinking: false
72718
+ },
72719
+ promptAdditions: [],
72720
+ ui: {
72721
+ watchdogMs: 3e5,
72722
+ armWatchdogOnSend: true
72723
+ }
72724
+ };
72725
+ /**
72726
+ * Resolve the active model profile for a given model ID.
72727
+ *
72728
+ * Resolution order:
72729
+ * 1. User-defined profiles (from `models.profiles` in symi.json)
72730
+ * 2. Built-in profiles ({@link BUILTIN_PROFILES})
72731
+ * 3. Fallback "Generic" profile
72732
+ *
72733
+ * Matching is case-insensitive prefix/substring against the model ID.
72734
+ */
72735
+ function resolveModelProfile(modelId, userProfiles) {
72736
+ const id = modelId.toLowerCase();
72737
+ const allProfiles = [...userProfiles ?? [], ...BUILTIN_PROFILES];
72738
+ for (const profile of allProfiles) {
72739
+ const patterns = Array.isArray(profile.match) ? profile.match : [profile.match];
72740
+ for (const pattern of patterns) if (id.startsWith(pattern.toLowerCase()) || id.includes(pattern.toLowerCase())) return profile;
72741
+ }
72742
+ return FALLBACK_PROFILE;
72743
+ }
72744
+
72589
72745
  //#endregion
72590
72746
  //#region src/agents/pi-embedded-runner/extra-params.ts
72591
72747
  const OPENROUTER_APP_HEADERS = {
@@ -72605,7 +72761,9 @@ const OPENAI_RESPONSES_PROVIDERS = new Set(["openai"]);
72605
72761
  function resolveExtraParams(params) {
72606
72762
  const modelKey = `${params.provider}/${params.modelId}`;
72607
72763
  const modelConfig = params.cfg?.agents?.defaults?.models?.[modelKey];
72608
- return modelConfig?.params ? { ...modelConfig.params } : void 0;
72764
+ if (modelConfig?.params) return { ...modelConfig.params };
72765
+ const profile = resolveModelProfile(modelKey, params.cfg?.models?.profiles);
72766
+ if (profile.params && Object.keys(profile.params).length > 0) return { ...profile.params };
72609
72767
  }
72610
72768
  /**
72611
72769
  * Resolve cacheRetention from extraParams, supporting both new `cacheRetention`
@@ -72635,16 +72793,40 @@ function createStreamFnWithExtraParams(baseStreamFn, extraParams, provider) {
72635
72793
  if (typeof extraParams.top_p === "number") streamParams.top_p = extraParams.top_p;
72636
72794
  if (typeof extraParams.top_k === "number") streamParams.top_k = extraParams.top_k;
72637
72795
  if (typeof extraParams.repeat_penalty === "number") streamParams.repeat_penalty = extraParams.repeat_penalty;
72796
+ if (Array.isArray(extraParams.stop) && extraParams.stop.length > 0) streamParams.stop = extraParams.stop;
72638
72797
  if (extraParams.chat_template_kwargs && typeof extraParams.chat_template_kwargs === "object") streamParams.chat_template_kwargs = extraParams.chat_template_kwargs;
72639
72798
  const cacheRetention = resolveCacheRetention(extraParams, provider);
72640
72799
  if (cacheRetention) streamParams.cacheRetention = cacheRetention;
72641
72800
  if (Object.keys(streamParams).length === 0) return;
72642
72801
  log$2.debug(`creating streamFn wrapper with params: ${JSON.stringify(streamParams)}`);
72802
+ const sp = streamParams;
72803
+ const payloadOverrides = {};
72804
+ if (Array.isArray(sp.stop) && sp.stop.length > 0) payloadOverrides.stop = sp.stop;
72805
+ if (typeof sp.top_p === "number") payloadOverrides.top_p = sp.top_p;
72806
+ if (typeof sp.top_k === "number") payloadOverrides.top_k = sp.top_k;
72807
+ if (typeof sp.repeat_penalty === "number") payloadOverrides.repeat_penalty = sp.repeat_penalty;
72808
+ const hasPayloadOverrides = Object.keys(payloadOverrides).length > 0;
72643
72809
  const underlying = baseStreamFn ?? streamSimple;
72644
- const wrappedStreamFn = (model, context, options) => underlying(model, context, {
72645
- ...streamParams,
72646
- ...options
72647
- });
72810
+ const wrappedStreamFn = (model, context, options) => {
72811
+ if (hasPayloadOverrides) {
72812
+ const originalOnPayload = options?.onPayload;
72813
+ return underlying(model, context, {
72814
+ ...streamParams,
72815
+ ...options,
72816
+ onPayload: (payload) => {
72817
+ if (payload && typeof payload === "object") {
72818
+ const p = payload;
72819
+ for (const [key, value] of Object.entries(payloadOverrides)) if (p[key] === void 0) p[key] = value;
72820
+ }
72821
+ originalOnPayload?.(payload);
72822
+ }
72823
+ });
72824
+ }
72825
+ return underlying(model, context, {
72826
+ ...streamParams,
72827
+ ...options
72828
+ });
72829
+ };
72648
72830
  return wrappedStreamFn;
72649
72831
  }
72650
72832
  function isDirectOpenAIBaseUrl(baseUrl) {
@@ -72763,6 +72945,42 @@ function createZaiToolStreamWrapper(baseStreamFn, enabled) {
72763
72945
  });
72764
72946
  };
72765
72947
  }
72948
+ const GEMMA_STOP_SEQUENCES = ["<end_of_turn>", "<eos>"];
72949
+ const VLLM_GEMMA_HINTS = ["gemma", "redsand"];
72950
+ function isVllmOrGemmaProvider(provider, modelId, cfg) {
72951
+ const lower = `${provider}/${modelId}`.toLowerCase();
72952
+ if (VLLM_GEMMA_HINTS.some((h) => lower.includes(h))) return true;
72953
+ const baseUrl = ((cfg?.models?.providers?.[provider])?.baseUrl ?? "").toLowerCase();
72954
+ return baseUrl.includes("coreweave") || baseUrl.includes("vllm");
72955
+ }
72956
+ /**
72957
+ * Wrap the stream function to fix vLLM/Gemma compat issues via onPayload:
72958
+ * 1. Replace `max_completion_tokens` with `max_tokens` (vLLM ignores the former)
72959
+ * 2. Inject Gemma stop sequences if none are set
72960
+ * 3. Remove unsupported fields (store, stream_options.include_usage on older vLLM)
72961
+ */
72962
+ function createVllmCompatWrapper(baseStreamFn, extraParams) {
72963
+ const underlying = baseStreamFn ?? streamSimple;
72964
+ const configuredStop = Array.isArray(extraParams.stop) ? extraParams.stop : GEMMA_STOP_SEQUENCES;
72965
+ return (model, context, options) => {
72966
+ const originalOnPayload = options?.onPayload;
72967
+ return underlying(model, context, {
72968
+ ...options,
72969
+ onPayload: (payload) => {
72970
+ if (payload && typeof payload === "object") {
72971
+ const p = payload;
72972
+ if (p.max_completion_tokens && !p.max_tokens) {
72973
+ p.max_tokens = p.max_completion_tokens;
72974
+ delete p.max_completion_tokens;
72975
+ }
72976
+ if (!p.stop && configuredStop.length > 0) p.stop = configuredStop;
72977
+ delete p.store;
72978
+ }
72979
+ originalOnPayload?.(payload);
72980
+ }
72981
+ });
72982
+ };
72983
+ }
72766
72984
  /**
72767
72985
  * Apply extra params (like temperature) to an agent's streamFn.
72768
72986
  * Also adds OpenRouter app attribution headers when using the OpenRouter provider.
@@ -72797,161 +73015,11 @@ function applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverr
72797
73015
  agent.streamFn = createZaiToolStreamWrapper(agent.streamFn, true);
72798
73016
  }
72799
73017
  }
72800
- agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
72801
- }
72802
-
72803
- //#endregion
72804
- //#region src/config/model-profiles-builtin.ts
72805
- /**
72806
- * Built-in model profiles. Ordered from most-specific to least-specific so
72807
- * that `resolveModelProfile` can return the first match.
72808
- *
72809
- * Order matters: "ollama/" must precede "gemma" because model IDs like
72810
- * "ollama/gemma4:31b-128k" contain both substrings.
72811
- */
72812
- const BUILTIN_PROFILES = [
72813
- {
72814
- match: ["ollama/"],
72815
- label: "Ollama Local",
72816
- params: {
72817
- temperature: 1,
72818
- top_p: .95,
72819
- top_k: 64,
72820
- max_tokens: 4096
72821
- },
72822
- streaming: {
72823
- deltaThrottleMs: 50,
72824
- flushOnFinal: true,
72825
- chunkPattern: "burst"
72826
- },
72827
- filters: {
72828
- stripPatterns: [
72829
- "<\\|channel>\\w*",
72830
- "<channel\\|>",
72831
- "<start_of_turn>(?:model|user)?",
72832
- "<end_of_turn>"
72833
- ],
72834
- suppressMonologue: true,
72835
- hasStructuredThinking: false
72836
- },
72837
- promptAdditions: ["You are running locally via Ollama. Do not output raw control tokens or internal monologue. Send brief progress updates on long tasks."],
72838
- ui: {
72839
- badge: "Local",
72840
- watchdogMs: 9e5,
72841
- armWatchdogOnSend: true
72842
- }
72843
- },
72844
- {
72845
- match: ["anthropic/", "claude-"],
72846
- label: "Claude",
72847
- params: {
72848
- temperature: 1,
72849
- top_p: 1,
72850
- max_tokens: 8192
72851
- },
72852
- streaming: {
72853
- deltaThrottleMs: 150,
72854
- flushOnFinal: false,
72855
- chunkPattern: "token"
72856
- },
72857
- filters: {
72858
- stripPatterns: [],
72859
- suppressMonologue: false,
72860
- hasStructuredThinking: true
72861
- },
72862
- promptAdditions: [],
72863
- ui: {
72864
- badge: "API",
72865
- watchdogMs: 3e5,
72866
- armWatchdogOnSend: false
72867
- }
72868
- },
72869
- {
72870
- match: ["gemma", "redsand/"],
72871
- label: "Gemma 4",
72872
- params: {
72873
- temperature: 1,
72874
- top_p: .95,
72875
- top_k: 64,
72876
- max_tokens: 8192
72877
- },
72878
- streaming: {
72879
- deltaThrottleMs: 50,
72880
- flushOnFinal: true,
72881
- chunkPattern: "burst"
72882
- },
72883
- filters: {
72884
- stripPatterns: [
72885
- "<\\|channel>\\w*",
72886
- "<channel\\|>",
72887
- "<start_of_turn>(?:model|user)?",
72888
- "<end_of_turn>",
72889
- "<\\|(?:fim_prefix|fim_suffix|fim_middle)\\|>",
72890
- "^\\s*<bos>\\s*"
72891
- ],
72892
- suppressMonologue: true,
72893
- hasStructuredThinking: false
72894
- },
72895
- promptAdditions: [
72896
- "You are running as Gemma 4 via vLLM. Important behavioral rules:",
72897
- "- Never output raw control tokens, channel tags, or turn markers in your responses.",
72898
- "- Never display internal status checks, plans, or self-assessments. Your visible output should only be conversational responses and final results.",
72899
- "- When working on multi-step tasks, send a brief one-line status update every 30-60 seconds so the user knows you are active.",
72900
- "- Keep planning and reasoning internal. Only speak when you have a result or need user input.",
72901
- "- Do not use <|channel>thought or similar syntax. If you need to reason, do so silently."
72902
- ],
72903
- ui: {
72904
- badge: "CoreWeave",
72905
- watchdogMs: 6e5,
72906
- armWatchdogOnSend: true
72907
- }
72908
- }
72909
- ];
72910
-
72911
- //#endregion
72912
- //#region src/config/resolve-model-profile.ts
72913
- /** Default profile returned when no match is found. */
72914
- const FALLBACK_PROFILE = {
72915
- match: "*",
72916
- label: "Generic",
72917
- params: {
72918
- temperature: 1,
72919
- max_tokens: 4096
72920
- },
72921
- streaming: {
72922
- deltaThrottleMs: 150,
72923
- flushOnFinal: true,
72924
- chunkPattern: "burst"
72925
- },
72926
- filters: {
72927
- stripPatterns: [],
72928
- suppressMonologue: false,
72929
- hasStructuredThinking: false
72930
- },
72931
- promptAdditions: [],
72932
- ui: {
72933
- watchdogMs: 3e5,
72934
- armWatchdogOnSend: true
73018
+ if (isVllmOrGemmaProvider(provider, modelId, cfg)) {
73019
+ log$2.debug(`applying vLLM/Gemma compat wrapper for ${provider}/${modelId}`);
73020
+ agent.streamFn = createVllmCompatWrapper(agent.streamFn, merged);
72935
73021
  }
72936
- };
72937
- /**
72938
- * Resolve the active model profile for a given model ID.
72939
- *
72940
- * Resolution order:
72941
- * 1. User-defined profiles (from `models.profiles` in symi.json)
72942
- * 2. Built-in profiles ({@link BUILTIN_PROFILES})
72943
- * 3. Fallback "Generic" profile
72944
- *
72945
- * Matching is case-insensitive prefix/substring against the model ID.
72946
- */
72947
- function resolveModelProfile(modelId, userProfiles) {
72948
- const id = modelId.toLowerCase();
72949
- const allProfiles = [...userProfiles ?? [], ...BUILTIN_PROFILES];
72950
- for (const profile of allProfiles) {
72951
- const patterns = Array.isArray(profile.match) ? profile.match : [profile.match];
72952
- for (const pattern of patterns) if (id.startsWith(pattern.toLowerCase()) || id.includes(pattern.toLowerCase())) return profile;
72953
- }
72954
- return FALLBACK_PROFILE;
73022
+ agent.streamFn = createOpenAIResponsesStoreWrapper(agent.streamFn);
72955
73023
  }
72956
73024
 
72957
73025
  //#endregion
@@ -12,7 +12,7 @@ import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n a
12
12
  import { S as isPidAlive, x as resolveProcessScopedMap } from "./model-auth-CwOuTuXl.js";
13
13
  import { o as listDeliverableMessageChannels, s as normalizeMessageChannel } from "./message-channel-DbsRltF2.js";
14
14
  import { _ as parseDurationMs, a as writeConfigFile, n as loadConfig, s as parseByteSize, t as createConfigIO } from "./config-eEaJddXj.js";
15
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CxSAp8x3.js";
15
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-w3SLcQJF.js";
16
16
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-o5WVqM4V.js";
17
17
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-BoQgnc8X.js";
18
18
  import { t as SsrFBlockedError } from "./ssrf-BTMDZjHT.js";
@@ -933,7 +933,7 @@ function isModuleNotFoundError(err) {
933
933
  }
934
934
  async function loadPwAiModule(mode) {
935
935
  try {
936
- return await import("./pw-ai-DhwRiS06.js");
936
+ return await import("./pw-ai-PiQUncix.js");
937
937
  } catch (err) {
938
938
  if (mode === "soft") return null;
939
939
  if (isModuleNotFoundError(err)) return null;
@@ -3473,11 +3473,11 @@ function createProfileContext(opts, profile) {
3473
3473
  const userDataDir = resolveSymiUserDataDir(profile.name);
3474
3474
  const profileState = getProfileState();
3475
3475
  if (await isHttpReachable(300) && !profileState.running) try {
3476
- await (await import("./pw-ai-DhwRiS06.js")).closePlaywrightBrowserConnection();
3476
+ await (await import("./pw-ai-PiQUncix.js")).closePlaywrightBrowserConnection();
3477
3477
  } catch {}
3478
3478
  if (profileState.running) await stopRunningBrowser();
3479
3479
  try {
3480
- await (await import("./pw-ai-DhwRiS06.js")).closePlaywrightBrowserConnection();
3480
+ await (await import("./pw-ai-PiQUncix.js")).closePlaywrightBrowserConnection();
3481
3481
  } catch {}
3482
3482
  if (!fsSync.existsSync(userDataDir)) return {
3483
3483
  moved: false,