@symerian/symi 3.5.24 → 3.5.26

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 (252) hide show
  1. package/dist/{agent-DgVWcnlD.js → agent-CB5yb-7V.js} +1 -1
  2. package/dist/{agent-CBfp75J4.js → agent-CoHzNs_e.js} +18 -18
  3. package/dist/{agent-scope-DOrZjOnW.js → agent-scope-Bnsyyeci.js} +18 -18
  4. package/dist/{agents-Dlcpc1K3.js → agents-DtRd3yEb.js} +3 -3
  5. package/dist/{agents.config-B7sNDvhz.js → agents.config-DA0ISLi7.js} +1 -1
  6. package/dist/{audit-Ce-u6aaR.js → audit-CuwXq_EA.js} +20 -20
  7. package/dist/{audit-CPloCzEZ.js → audit-DyncRBKq.js} +2 -2
  8. package/dist/{auth-choice--DymOp5O.js → auth-choice-5SLfZiQ7.js} +2 -2
  9. package/dist/{auth-choice-CUvx59kv.js → auth-choice-DKRHawfp.js} +11 -11
  10. package/dist/{auth-profiles-Ce7R_25e.js → auth-profiles-D5nYBj_Z.js} +2 -2
  11. package/dist/{auth-token-Cr28IDKY.js → auth-token-fgnCQEHT.js} +3 -3
  12. package/dist/{banner-CY_9VW7E.js → banner-B_P_FrmA.js} +1 -1
  13. package/dist/{browser-cli-Ibgld3mA.js → browser-cli-BI81RlI8.js} +9 -9
  14. package/dist/{browser-cli-C5VVk6C9.js → browser-cli-CcCYZtag.js} +3 -3
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +2 -2
  17. package/dist/bundled/session-memory/handler.js +2 -2
  18. package/dist/{call-C2urR5Fj.js → call-DTshgdlW.js} +1 -1
  19. package/dist/{call-xdEE97oU.js → call-xUpyZDH4.js} +9 -9
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-rFgJaKzJ.js → channel-options-8NGYZjfd.js} +1 -1
  22. package/dist/{channel-options-DCmWOAc0.js → channel-options-vjcKi2yl.js} +1 -1
  23. package/dist/{channels-cli-QMHCRAb5.js → channels-cli-Bx90nSmB.js} +9 -9
  24. package/dist/{channels-cli-Cs1Z0dn8.js → channels-cli-CfBFa-VO.js} +57 -57
  25. package/dist/{chrome-DJChpTwP.js → chrome-38OnGyuN.js} +2 -2
  26. package/dist/{cli-BafqEuaj.js → cli-DHG9iZJi.js} +6 -6
  27. package/dist/{cli-CadU09SC.js → cli-qf0qK7oi.js} +45 -45
  28. package/dist/{client-yVTJ5jx5.js → client-BOd5o3Kp.js} +9 -1
  29. package/dist/{client-Cs9Bh-G0.js → client-DiPa71im.js} +10 -2
  30. package/dist/{command-registry-CLm8TAH3.js → command-registry-DBbzZvh6.js} +11 -11
  31. package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
  32. package/dist/{completion-cli-Dd56ibFZ.js → completion-cli-Ddfrnilx.js} +12 -12
  33. package/dist/{completion-cli-DOBXkVwG.js → completion-cli-DoQrkCAd.js} +2 -2
  34. package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
  35. package/dist/{config-cli-BgHYqFH1.js → config-cli-9a5qBcdo.js} +1 -1
  36. package/dist/{config-cli-GwUJEapt.js → config-cli-JVGYyfYA.js} +4 -4
  37. package/dist/{config-guard-BRm3RiOi.js → config-guard-DStz4_V2.js} +6 -6
  38. package/dist/{config-validation-Cdyg1BZB.js → config-validation-Dxj9LRzr.js} +1 -1
  39. package/dist/{configure-5md67tCP.js → configure-Bqz2Hvnf.js} +14 -14
  40. package/dist/{configure-DmzM0S7L.js → configure-ryB8EvyP.js} +6 -6
  41. package/dist/{consolidate-DymnvvYm.js → consolidate-CO32_TEx.js} +6 -6
  42. package/dist/{control-service-D8kKOts5.js → control-service-CUreKVeY.js} +4 -4
  43. package/dist/control-ui/css/style.css +177 -9
  44. package/dist/control-ui/index.html +42 -0
  45. package/dist/control-ui/js/symframe-modes.js +65 -0
  46. package/dist/control-ui/js/symframe.js +139 -0
  47. package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
  48. package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
  49. package/dist/{cron-cli-BNBs3zue.js → cron-cli-DsGkkt1s.js} +3 -3
  50. package/dist/{cron-cli-CE9bV9Et.js → cron-cli-pZ_7Wzhj.js} +7 -7
  51. package/dist/{daemon-cli-BYiG4GOU.js → daemon-cli-BDzcfcu_.js} +11 -11
  52. package/dist/{daemon-cli-DDqeG2nd.js → daemon-cli-dbAPTgGm.js} +2 -2
  53. package/dist/daemon-cli.js +9 -1
  54. package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
  55. package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
  56. package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
  57. package/dist/{devices-cli-Bhr6jGtH.js → devices-cli-BIZbo_Pt.js} +6 -6
  58. package/dist/{devices-cli-BJ3rVWOw.js → devices-cli-CIAuYH4P.js} +2 -2
  59. package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
  60. package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
  61. package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
  62. package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
  63. package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
  64. package/dist/{doctor-completion-k0HiL05o.js → doctor-completion-Bk55g4MP.js} +1 -1
  65. package/dist/{doctor-completion-BpUGRguQ.js → doctor-completion-eh7aImCx.js} +2 -2
  66. package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
  67. package/dist/entry.js +1 -1
  68. package/dist/{exec-approvals-cli-CzvIqBUd.js → exec-approvals-cli-B2UY9dZC.js} +13 -13
  69. package/dist/{exec-approvals-cli-Cau1vPQI.js → exec-approvals-cli-BiXeyPPz.js} +4 -4
  70. package/dist/extensionAPI.js +2 -2
  71. package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
  72. package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
  73. package/dist/{gateway-cli-DgmGygc6.js → gateway-cli-BGMVOW2G.js} +16 -16
  74. package/dist/{gateway-cli-D1d5YAt0.js → gateway-cli-BwPy7u0B.js} +98 -98
  75. package/dist/{gateway-rpc-BTGT1SuZ.js → gateway-rpc-DmFOiGIJ.js} +1 -1
  76. package/dist/{gateway-rpc-Kv0-8W2E.js → gateway-rpc-DpRnrv_i.js} +1 -1
  77. package/dist/{glass-ui-ws-BH9WH_VN.js → glass-ui-ws-CwOiILiY.js} +67 -67
  78. package/dist/{glass-ui-ws-Dl45d7eU.js → glass-ui-ws-Z-W33_mF.js} +13 -13
  79. package/dist/{health-DpE9GWGn.js → health-Bc1wmAO5.js} +4 -4
  80. package/dist/{health-znS85U-F.js → health-Dkwuq8ta.js} +1 -1
  81. package/dist/{hooks-cli-Cb9BzCOY.js → hooks-cli-Bn6x6Jnj.js} +7 -7
  82. package/dist/{hooks-cli-D7xxbEwI.js → hooks-cli-DOjHV2fF.js} +59 -59
  83. package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
  84. package/dist/index.js +52 -52
  85. package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
  86. package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
  87. package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
  88. package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
  89. package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
  90. package/dist/llm-slug-generator.js +2 -2
  91. package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
  92. package/dist/{logs-cli-LiAjkog2.js → logs-cli-CJLJ745C.js} +3 -3
  93. package/dist/{logs-cli-DvIVuW0d.js → logs-cli-CYFlhj51.js} +7 -7
  94. package/dist/{manager-V4UCf0Av.js → manager-BHddoe4T.js} +1 -1
  95. package/dist/{manager-CceVgXHV.js → manager-DH00nlW8.js} +1 -1
  96. package/dist/{manager-CoCX7L5u.js → manager-DuWp0CTD.js} +15 -15
  97. package/dist/{manager-DDynl084.js → manager-F0-SHT1B.js} +1 -1
  98. package/dist/{memory-A2D5e8dL.js → memory-C02Znuee.js} +2 -2
  99. package/dist/{memory-cli-1zjVJITN.js → memory-cli-083UJtVJ.js} +2 -2
  100. package/dist/{memory-cli-D8Z_5-Nz.js → memory-cli-BnBKckEk.js} +12 -12
  101. package/dist/{memory-B067LTL9.js → memory-fFc7GGPZ.js} +5 -5
  102. package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
  103. package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
  104. package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
  105. package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
  106. package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
  107. package/dist/{models-BYev6YAG.js → models-Bh_frCup.js} +3 -3
  108. package/dist/{models-cli-Fa5r1QYP.js → models-cli-BhBu4Dwm.js} +9 -9
  109. package/dist/{models-cli-C979SN3Z.js → models-cli-DVdb_TUS.js} +55 -55
  110. package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
  111. package/dist/{node-cli-DGybtex_.js → node-cli-B0ePfMUr.js} +27 -27
  112. package/dist/{node-cli-Cv7x1gGu.js → node-cli-CBW_ECu_.js} +1 -1
  113. package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
  114. package/dist/{nodes-cli-DaHOBbd4.js → nodes-cli-CJ0gxF5n.js} +3 -3
  115. package/dist/{nodes-cli-C-mEw2av.js → nodes-cli-L0gy-26E.js} +10 -10
  116. package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
  117. package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
  118. package/dist/{onboard-D-m6WTZl.js → onboard-BSxqEQfo.js} +3 -3
  119. package/dist/{onboard-CotuAZi6.js → onboard-D6GZ2t-L.js} +15 -15
  120. package/dist/{onboard-channels-Z-Jkrk5-.js → onboard-channels-BkR3MKMp.js} +1 -1
  121. package/dist/{onboard-channels-DSyynpou.js → onboard-channels-DVS9vciR.js} +4 -4
  122. package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
  123. package/dist/{onboard-helpers-CLXJ8zp0.js → onboard-helpers-CJlheOSJ.js} +8 -8
  124. package/dist/{onboard-helpers-Dhr98nj8.js → onboard-helpers-t7tI9KSA.js} +1 -1
  125. package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
  126. package/dist/{onboard-remote-BYBai0w3.js → onboard-remote-CVZ8l58S.js} +1 -1
  127. package/dist/{onboard-remote-DZdMxd1Q.js → onboard-remote-DH3bPYbE.js} +1 -1
  128. package/dist/{onboard-skills-2SUv-W7i.js → onboard-skills-Bjf7kWvg.js} +1 -1
  129. package/dist/{onboard-skills-BxJlS1Bk.js → onboard-skills-MgcaLiE6.js} +3 -3
  130. package/dist/{onboarding-BckHLQMV.js → onboarding-CrCGoZ4H.js} +7 -7
  131. package/dist/{onboarding-BnoGiOh3.js → onboarding-D-mzwQ_f.js} +12 -12
  132. package/dist/{onboarding.finalize-CbH_ShIW.js → onboarding.finalize-BYzduVFA.js} +9 -9
  133. package/dist/{onboarding.finalize-g86Q4433.js → onboarding.finalize-DBFL76p0.js} +31 -31
  134. package/dist/{onboarding.gateway-config-CEXjbEM0.js → onboarding.gateway-config-BCDgsFl8.js} +8 -8
  135. package/dist/{onboarding.gateway-config-sNSeEykB.js → onboarding.gateway-config-xWUSbtoY.js} +3 -3
  136. package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
  137. package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
  138. package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
  139. package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
  140. package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
  141. package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
  142. package/dist/{pi-embedded-B9rtlNMc.js → pi-embedded-DGnpyHm-.js} +50 -7
  143. package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
  144. package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
  145. package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
  146. package/dist/{plugin-registry-CS4WgHbu.js → plugin-registry-B74FBx4U.js} +1 -1
  147. package/dist/{plugin-registry-AsC9gydF.js → plugin-registry-KP94aK4z.js} +3 -3
  148. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
  149. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +5 -1
  150. package/dist/plugin-sdk/index.js +6 -6
  151. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +7 -2
  152. package/dist/{plugins-cli-CbByGz8z.js → plugins-cli-B4ljapU5.js} +54 -54
  153. package/dist/{plugins-cli-BY42hyHP.js → plugins-cli-Cmf3kRf5.js} +7 -7
  154. package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
  155. package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
  156. package/dist/{program-P9F1DxBa.js → program-CGuYYumL.js} +12 -12
  157. package/dist/{program-context-CiyK6MfV.js → program-context-BzqGUxMS.js} +40 -40
  158. package/dist/{prompt-select-styled-DaNQ_GgB.js → prompt-select-styled-BVkRteee.js} +38 -38
  159. package/dist/{prompt-select-styled-B2ah467m.js → prompt-select-styled-b752FPLG.js} +7 -7
  160. package/dist/{provider-auth-helpers-Bgb_Bfp9.js → provider-auth-helpers-BKveYcEH.js} +1 -1
  161. package/dist/{provider-auth-helpers-D2FDvwT5.js → provider-auth-helpers-C6GjAO-s.js} +6 -6
  162. package/dist/{push-apns-va-DRu4U.js → push-apns-CbbWM63o.js} +4 -4
  163. package/dist/{push-apns-DnSCjFu7.js → push-apns-HNg0rTkI.js} +1 -1
  164. package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
  165. package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
  166. package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
  167. package/dist/{register.agent-BuEcmVg0.js → register.agent-DbPYGG3u.js} +12 -12
  168. package/dist/{register.agent-BqdQ0s30.js → register.agent-DhS2lmWo.js} +67 -67
  169. package/dist/{register.configure-YDKJ-KQg.js → register.configure-B0M15y31.js} +14 -14
  170. package/dist/{register.configure-Dhwi-4FG.js → register.configure-ChjzXxh8.js} +70 -70
  171. package/dist/{register.maintenance-BiGvpEj-.js → register.maintenance-bzLNOqch.js} +13 -13
  172. package/dist/{register.maintenance-iMjNw9uy.js → register.maintenance-frHWf6Xs.js} +67 -67
  173. package/dist/{register.message-BIuLbESM.js → register.message-Bfukmte_.js} +7 -7
  174. package/dist/{register.message-Ao_b9s2g.js → register.message-DWB4eVII.js} +47 -47
  175. package/dist/{register.onboard-ymhSAezZ.js → register.onboard-4P8ud4Sw.js} +25 -25
  176. package/dist/{register.onboard-C4vIASed.js → register.onboard-CDsSVoFI.js} +6 -6
  177. package/dist/{register.setup-D-Jt2e1d.js → register.setup-Bp8rYeRx.js} +6 -6
  178. package/dist/{register.setup-CKs9mqtD.js → register.setup-D0I7sEGc.js} +28 -28
  179. package/dist/{register.status-health-sessions-U-azRmpb.js → register.status-health-sessions-69Gigo_H.js} +41 -41
  180. package/dist/{register.status-health-sessions-BY9hMD1s.js → register.status-health-sessions-DE2db_Uo.js} +8 -8
  181. package/dist/{register.subclis-Cibmeapc.js → register.subclis-QXO75pUm.js} +20 -20
  182. package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
  183. package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
  184. package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
  185. package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
  186. package/dist/{rpc-BnAKPQDB.js → rpc-BBtNUyxN.js} +1 -1
  187. package/dist/{rpc-DjqFrbOc.js → rpc-DTqyJZKO.js} +1 -1
  188. package/dist/{run-main-BhEQjKtM.js → run-main-MD8Z8ydF.js} +20 -20
  189. package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
  190. package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
  191. package/dist/{security-cli-CS-ZT1LE.js → security-cli-DZ-6QDRB.js} +3 -3
  192. package/dist/{security-cli-JKsf9SIu.js → security-cli-iJpHPABF.js} +29 -29
  193. package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
  194. package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
  195. package/dist/{server-methods-B2tykucj.js → server-methods-DHWxmfIu.js} +67 -61
  196. package/dist/{server-methods-CWxr5b-w.js → server-methods-DTkVQH8Q.js} +18 -12
  197. package/dist/{server-node-events-ClDEcUTJ.js → server-node-events-C0smPxrR.js} +8 -8
  198. package/dist/{server-node-events-BKqszk_a.js → server-node-events-DHSiqnRS.js} +48 -48
  199. package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
  200. package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
  201. package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
  202. package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
  203. package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
  204. package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
  205. package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
  206. package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
  207. package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
  208. package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
  209. package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
  210. package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
  211. package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
  212. package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
  213. package/dist/{status-ojZB_Lrf.js → status-BEZotN01.js} +5 -5
  214. package/dist/{status-DPGFZPpp.js → status-DUbs9rVu.js} +3 -3
  215. package/dist/{status-DHBVIMyL.js → status-ISN-LC9F.js} +23 -23
  216. package/dist/{status-K1k4g3Ai.js → status-OTYFx93W.js} +1 -1
  217. package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
  218. package/dist/{subagent-registry-BOt7g9hn.js → subagent-registry-CVhLz4p3.js} +43 -8
  219. package/dist/{symframe-cli-CrUtJw_7.js → symframe-cli-BSAQ05fb.js} +22 -6
  220. package/dist/{symframe-cli-CX3dINPw.js → symframe-cli-CPE5nxuJ.js} +28 -12
  221. package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
  222. package/dist/{synthesis-Bc2QkGvt.js → synthesis-C1mZnGqD.js} +2 -2
  223. package/dist/{synthesis-D91XE0n4.js → synthesis-CDPVZw2P.js} +2 -2
  224. package/dist/{synthesis-DmqicCsT.js → synthesis-DkHCk0El.js} +45 -45
  225. package/dist/{synthesis-BIQLrbys.js → synthesis-RhT991Ni.js} +6 -6
  226. package/dist/{system-cli-CvN-Wq9U.js → system-cli-Dy6_0Qp7.js} +3 -3
  227. package/dist/{system-cli-DUHzCGfK.js → system-cli-nWJwLo85.js} +7 -7
  228. package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
  229. package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
  230. package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
  231. package/dist/{tui-DCqVZ6sC.js → tui-ZL7IGA7l.js} +7 -7
  232. package/dist/{tui-cli-DqvgN5ng.js → tui-cli-B-DKpOxE.js} +3 -3
  233. package/dist/{tui-cli-CI-P3sei.js → tui-cli-CEpMtmhP.js} +19 -19
  234. package/dist/{tui-BxgdImL_.js → tui-h57L-YTX.js} +2 -2
  235. package/dist/{unified-runner-CdJx7yN8.js → unified-runner-Cppo8O8z.js} +50 -7
  236. package/dist/{unified-runner-CznU7Ad0.js → unified-runner-CsadjpQa.js} +139 -104
  237. package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
  238. package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
  239. package/dist/{update-cli-DBoIBDNe.js → update-cli-48-Nah-Y.js} +77 -77
  240. package/dist/{update-cli-Dn6QQZLd.js → update-cli-D9g9s187.js} +14 -14
  241. package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
  242. package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
  243. package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
  244. package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
  245. package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
  246. package/extensions/memory-core/package.json +1 -1
  247. package/extensions/msteams/CHANGELOG.md +12 -0
  248. package/extensions/msteams/package.json +1 -1
  249. package/extensions/open-prose/package.json +1 -1
  250. package/extensions/outlook/package.json +1 -1
  251. package/extensions/slack/package.json +1 -1
  252. package/package.json +1 -1
@@ -3,93 +3,93 @@ import { D as shouldLogVerbose, H as createInternalHookEvent, M as getChildLogge
3
3
  import { _ as resolveStateDir, u as resolveGatewayPort } from "./paths-By0XjHBk.js";
4
4
  import { S as isPlainObject, _ as shortenHomeInString, b as sliceUtf16Safe, c as escapeRegExp, h as resolveUserPath, r as clampInt, t as CONFIG_DIR, u as isRecord, v as shortenHomePath, x as truncateUtf16Safe, y as sleep } from "./utils-CTPsqyE_.js";
5
5
  import { d as createNonExitingRuntime, f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
6
- import { T as resolveAuthProfileDisplayLabel, a as markAuthProfileFailure, b as ensureAuthProfileStore, g as markAuthProfileGood, h as listProfilesForProvider, i as isProfileInCooldown, n as resolveAuthProfileOrder, o as markAuthProfileUsed, r as getSoonestCooldownExpiry, w as resolveAuthStorePathForDisplay } from "./auth-profiles-Ce7R_25e.js";
6
+ import { T as resolveAuthProfileDisplayLabel, a as markAuthProfileFailure, b as ensureAuthProfileStore, g as markAuthProfileGood, h as listProfilesForProvider, i as isProfileInCooldown, n as resolveAuthProfileOrder, o as markAuthProfileUsed, r as getSoonestCooldownExpiry, w as resolveAuthStorePathForDisplay } from "./auth-profiles-D5nYBj_Z.js";
7
7
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
8
8
  import { S as resolveThreadParentSessionKey, _ as isAcpSessionKey, a as classifySessionKeyShape, b as isSubagentSessionKey, c as resolveAgentIdFromSessionKey, g as getSubagentDepth, l as resolveThreadSessionKeys, m as normalizeAccountId, o as normalizeAgentId, p as DEFAULT_ACCOUNT_ID, r as buildAgentMainSessionKey, s as normalizeMainKey, t as DEFAULT_AGENT_ID, u as sanitizeAgentId, x as parseAgentSessionKey, y as isCronSessionKey } from "./session-key-DUSb7CCb.js";
9
- import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
9
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-DeCVdZB4.js";
10
10
  import { a as logError, i as logDebug, n as runExec, o as logInfo, r as spawnWithFallback, s as logWarn, t as runCommandWithTimeout } from "./exec-DuYbft0z.js";
11
- import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentConfig, s as resolveAgentSkillsFilter, w as filterBootstrapFilesForSession } from "./agent-scope-DOrZjOnW.js";
12
- import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, _ as resolveModelRefFromString, a as findNormalizedProviderValue, b as resolveThinkingDefault, c as modelKey, h as resolveDefaultModelForAgent, l as normalizeModelRef$1, m as resolveConfiguredModelRef, n as buildConfiguredAllowlistKeys, r as buildModelAliasIndex, t as buildAllowedModelSet, u as normalizeProviderId, w as DEFAULT_PROVIDER, x as getProviderAdapter, y as resolveSubagentSpawnModelSelection } from "./model-selection-7wdmO-Iw.js";
11
+ import { C as ensureAgentWorkspace, E as loadWorkspaceBootstrapFiles, c as resolveAgentWorkspaceDir, d as resolveSessionAgentId, f as resolveSessionAgentIds, h as DEFAULT_BOOTSTRAP_FILENAME, i as resolveAgentDir, l as resolveDefaultAgentId, m as DEFAULT_AGENT_WORKSPACE_DIR, r as resolveAgentConfig, s as resolveAgentSkillsFilter, w as filterBootstrapFilesForSession } from "./agent-scope-Bnsyyeci.js";
12
+ import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, _ as resolveModelRefFromString, a as findNormalizedProviderValue, b as resolveThinkingDefault, c as modelKey, h as resolveDefaultModelForAgent, l as normalizeModelRef$1, m as resolveConfiguredModelRef, n as buildConfiguredAllowlistKeys, r as buildModelAliasIndex, t as buildAllowedModelSet, u as normalizeProviderId, w as DEFAULT_PROVIDER, x as getProviderAdapter, y as resolveSubagentSpawnModelSelection } from "./model-selection-CCTzD29o.js";
13
13
  import { n as normalizeSecretInput } from "./normalize-secret-input-DjGU5EXe.js";
14
14
  import { n as saveJsonFile, t as loadJsonFile } from "./json-file-CNp4GTiH.js";
15
15
  import { t as resolveSymiAgentDir } from "./agent-paths-BbZSGrUA.js";
16
- import { A as isRawApiErrorPayload, B as sanitizeGoogleTurnOrdering, C as isCloudCodeAssistFormatError, D as isFailoverErrorMessage, E as isFailoverAssistantError, F as sanitizeUserFacingText, I as buildBootstrapContextFiles, L as ensureSessionHeader, M as isTransientHttpError, N as parseImageDimensionError, O as isLikelyContextOverflowError, P as parseImageSizeError, R as resolveBootstrapMaxChars, S as isBillingAssistantError, T as isContextOverflowError, _ as formatAssistantErrorText, a as normalizeTextForComparison, b as getApiErrorPayloadFingerprint, c as sanitizeToolResultImages, d as extractToolResultId, f as downgradeOpenAIReasoningBlocks, g as classifyFailoverReason, h as BILLING_ERROR_USER_MESSAGE, i as isMessagingToolDuplicateNormalized, j as isTimeoutErrorMessage, k as isRateLimitAssistantError, l as resolveImageSanitizationLimits, m as isGoogleModelApi, n as validateGeminiTurns, o as sanitizeSessionMessagesImages, p as isAntigravityClaude, r as pickFallbackThinkingLevel, s as sanitizeImageBlocks, t as validateAnthropicTurns, u as extractToolCallsFromAssistant, v as formatBillingErrorMessage, w as isCompactionFailureError, x as isAuthAssistantError, y as formatRawAssistantErrorForUi, z as resolveBootstrapTotalMaxChars } from "./pi-embedded-helpers-D-OFjhdI.js";
17
- import { A as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, C as unsetConfigValueAtPath, N as VERSION, S as setConfigValueAtPath, _ as resetConfigOverrides, b as getConfigValueAtPath, c as resolveConfigSnapshotHash, f as parseDurationMs, g as getConfigOverrides, h as validateJsonSchemaValue, i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, u as validateConfigObjectWithPlugins, v as setConfigOverride, x as parseConfigPath, y as unsetConfigOverride } from "./config-B4jkreCN.js";
16
+ import { A as isRawApiErrorPayload, B as sanitizeGoogleTurnOrdering, C as isCloudCodeAssistFormatError, D as isFailoverErrorMessage, E as isFailoverAssistantError, F as sanitizeUserFacingText, I as buildBootstrapContextFiles, L as ensureSessionHeader, M as isTransientHttpError, N as parseImageDimensionError, O as isLikelyContextOverflowError, P as parseImageSizeError, R as resolveBootstrapMaxChars, S as isBillingAssistantError, T as isContextOverflowError, _ as formatAssistantErrorText, a as normalizeTextForComparison, b as getApiErrorPayloadFingerprint, c as sanitizeToolResultImages, d as extractToolResultId, f as downgradeOpenAIReasoningBlocks, g as classifyFailoverReason, h as BILLING_ERROR_USER_MESSAGE, i as isMessagingToolDuplicateNormalized, j as isTimeoutErrorMessage, k as isRateLimitAssistantError, l as resolveImageSanitizationLimits, m as isGoogleModelApi, n as validateGeminiTurns, o as sanitizeSessionMessagesImages, p as isAntigravityClaude, r as pickFallbackThinkingLevel, s as sanitizeImageBlocks, t as validateAnthropicTurns, u as extractToolCallsFromAssistant, v as formatBillingErrorMessage, w as isCompactionFailureError, x as isAuthAssistantError, y as formatRawAssistantErrorForUi, z as resolveBootstrapTotalMaxChars } from "./pi-embedded-helpers-j1JrlsI0.js";
17
+ import { A as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, C as unsetConfigValueAtPath, N as VERSION, S as setConfigValueAtPath, _ as resetConfigOverrides, b as getConfigValueAtPath, c as resolveConfigSnapshotHash, f as parseDurationMs, g as getConfigOverrides, h as validateJsonSchemaValue, i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, u as validateConfigObjectWithPlugins, v as setConfigOverride, x as parseConfigPath, y as unsetConfigOverride } from "./config-BngIfn5l.js";
18
18
  import { t as parseBooleanValue } from "./boolean-CbZoNRMn.js";
19
19
  import { t as isTruthyEnvValue } from "./env-BRnPI9sO.js";
20
20
  import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell } from "./shell-env-Dc3iU7HK.js";
21
21
  import { a as safeStatSync, c as applyTestPluginDefaults, d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, i as isPathInside, n as loadPluginManifestRegistry, r as discoverSymiPlugins, u as normalizePluginsConfig } from "./manifest-registry-D1MLZEjS.js";
22
22
  import { a as isPathInsideWithRealpath } from "./legacy-names-BQ9vKISY.js";
23
- import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-BkznAPKO.js";
24
- import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-DJChpTwP.js";
25
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-ChcbJgNo.js";
23
+ import { C as stripPluginOnlyAllowlist, S as resolveToolProfilePolicy, T as matchesAnyGlobPattern, _ as collectExplicitAllowlist, a as ensureSandboxWorkspaceForSession, b as mergeAlsoAllowPolicy, c as resolveSandboxRuntimeStatus, d as getBridgeAuthForPort, g as buildPluginToolGroups, h as applyOwnerOnlyToolPolicy, o as resolveSandboxContext, v as expandPolicyWithPluginGroups, w as compileGlobPatterns, x as normalizeToolName } from "./sandbox-CZGTCone.js";
24
+ import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-38OnGyuN.js";
25
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-DXdk410X.js";
26
26
  import { l as parseFrontmatterBlock } from "./frontmatter-B_jqcova.js";
27
- import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-BwDmcZdt.js";
28
- import { n as getMediaDir, r as saveMediaBuffer } from "./routes-ivqbutvM.js";
27
+ import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as applySkillEnvOverridesFromSnapshot, i as loadWorkspaceSkillEntries, l as assertMediaNotDataUrl, m as applySkillEnvOverrides, p as resolveSandboxedMediaSource, r as buildWorkspaceSkillSnapshot, u as assertSandboxPath } from "./skills-CYcBtLGH.js";
28
+ import { n as getMediaDir, r as saveMediaBuffer } from "./routes-BwTUoI5h.js";
29
29
  import { n as formatErrorMessage, r as formatUncaughtError, t as extractErrorCode } from "./errors-bI7Tdx75.js";
30
- import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-DObzwe08.js";
30
+ import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-BWqg8NZT.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-DOZRI5XH.js";
32
- import { _ as mediaKindFromMime, c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, h as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, m as normalizeMimeType$1, p as kindFromMime, s as resizeToJpeg, u as getFileExtension } from "./image-ops-L70xVnpG.js";
33
- import { C as capArrayByJsonBytes, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields } from "./sessions-Dxf5Kjig.js";
32
+ import { _ as mediaKindFromMime, c as detectMime, d as imageMimeFromFormat, f as isAudioFileName, h as MAX_IMAGE_BYTES, i as getImageMetadata, l as extensionForMime, m as normalizeMimeType$1, p as kindFromMime, s as resizeToJpeg, u as getFileExtension } from "./image-ops-BzCBIakN.js";
33
+ import { C as capArrayByJsonBytes, F as resolveSessionResetType, H as resolveMainSessionKey, I as resolveThreadFlag, J as acquireSessionWriteLock, L as DEFAULT_RESET_TRIGGERS, M as evaluateSessionFreshness, N as resolveChannelResetConfig, P as resolveSessionResetPolicy, R as resolveFreshSessionTotalTokens, S as archiveSessionTranscripts, W as deriveSessionMetaPatch, X as resolveSessionLockMaxHoldFromTimeout, _ as mergeDeliveryContext, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as deliveryContextKey, h as deliveryContextFromSession, j as resolveSessionKey, m as resolveCacheTtlMs$1, o as loadSessionStore, p as isCacheEnabled, q as resolveGroupSessionKey, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, v as normalizeDeliveryContext, y as normalizeSessionDeliveryFields } from "./sessions-BCc3THTm.js";
34
34
  import { c as normalizeStringEntries, i as resolveChannelGroupRequireMention, l as normalizeStringEntriesLower, n as listChannelDocks, o as normalizeAtHashSlug, r as resolveChannelGroupPolicy, s as normalizeHyphenSlug, t as getChannelDock } from "./dock-hF45sewN.js";
35
35
  import { a as isInternalMessageChannel, c as listDeliverableMessageChannels, h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, o as isMarkdownCapableMessageChannel, p as GATEWAY_CLIENT_IDS, t as INTERNAL_MESSAGE_CHANNEL, u as resolveGatewayMessageChannel } from "./message-channel-DgjXWzf-.js";
36
36
  import { t as normalizeChatType } from "./chat-type-CUJqUqwu.js";
37
37
  import { n as resolveConversationLabel } from "./conversation-label-CffvEjpp.js";
38
38
  import { a as resolveSlackAccount, c as resolveSlackBotToken, n as listChannelPlugins, r as normalizeChannelId$1, s as resolveSlackAppToken, t as getChannelPlugin } from "./plugins-CF5skkHh.js";
39
- import { _ as resolveSlackChannelId, a as markdownToIRWithMeta, c as MediaFetchError, d as createSlackWebClient, f as resolveSlackWebClientOptions, g as parseSlackTarget, h as buildSlackBlocksFallbackText, i as renderMarkdownWithMarkers, l as fetchRemoteMedia, m as validateSlackBlocksArray, o as getDefaultLocalRoots, p as parseSlackBlocksInput, s as loadWebMedia, t as sendMessageSlack, u as readResponseWithLimit } from "./send-B0jHSNMF.js";
39
+ import { _ as resolveSlackChannelId, a as markdownToIRWithMeta, c as MediaFetchError, d as createSlackWebClient, f as resolveSlackWebClientOptions, g as parseSlackTarget, h as buildSlackBlocksFallbackText, i as renderMarkdownWithMarkers, l as fetchRemoteMedia, m as validateSlackBlocksArray, o as getDefaultLocalRoots, p as parseSlackBlocksInput, s as loadWebMedia, t as sendMessageSlack, u as readResponseWithLimit } from "./send-CxjvucMO.js";
40
40
  import { c as resolveStorePath, i as resolveSessionTranscriptPath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, t as resolveDefaultSessionStorePath } from "./paths-BtvQ7JvU.js";
41
41
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-Dfn-vEsu.js";
42
42
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-x1D4Vniz.js";
43
43
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-COroyVA5.js";
44
44
  import { n as isSilentReplyText, t as SILENT_REPLY_TOKEN } from "./tokens-0yh2UnJq.js";
45
- import { c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-lTZLIQqf.js";
45
+ import { c as normalizeChannelTargetInput, d as parseReplyDirectives, f as MEDIA_TOKEN_RE, g as initializeGlobalHookRunner, h as getGlobalHookRunner, l as normalizeTargetForProvider, m as parseInlineDirectives$1, o as normalizeReplyPayloadsForDelivery, p as splitMediaFromOutput, s as buildTargetResolverSignature, t as deliverOutboundPayloads, u as throwIfAborted } from "./deliver-CWMFmMCv.js";
46
46
  import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-DbT9t0Sh.js";
47
47
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-DnkpMfCl.js";
48
- import { i as resolveApiKeyForProvider, n as getCustomProviderApiKey, o as resolveEnvApiKey, r as requireApiKey, s as resolveModelAuthMode, t as getApiKeyForModel } from "./model-auth-1EAQvYRv.js";
49
- import { b as OLLAMA_NATIVE_BASE_URL, c as normalizeGoogleModelId, t as ensureSymiModelsJson, x as createOllamaStreamFn } from "./models-config-B5Xxy-c-.js";
50
- import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-Db8XJVGL.js";
48
+ import { i as resolveApiKeyForProvider, n as getCustomProviderApiKey, o as resolveEnvApiKey, r as requireApiKey, s as resolveModelAuthMode, t as getApiKeyForModel } from "./model-auth-_C07_3Yr.js";
49
+ import { b as OLLAMA_NATIVE_BASE_URL, c as normalizeGoogleModelId, t as ensureSymiModelsJson, x as createOllamaStreamFn } from "./models-config-DlXge3Sd.js";
50
+ import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-D-vdh-nY.js";
51
51
  import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o as derivePromptTokens, r as loadSessionCostSummary } from "./session-cost-usage-D3mgssM_.js";
52
- import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-Cs1jlD-q.js";
53
- import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-DPR4A2dx.js";
54
- import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-BFNeXT65.js";
55
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-B067LTL9.js";
56
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-CoCX7L5u.js";
57
- import { f as runTasksWithConcurrency } from "./internal-DVCddhhN.js";
52
+ import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-CJhcRx3E.js";
53
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-CLrF-Yr_.js";
54
+ import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-CtZtkTJK.js";
55
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-fFc7GGPZ.js";
56
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-DuWp0CTD.js";
57
+ import { f as runTasksWithConcurrency } from "./internal-csqU78gW.js";
58
58
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-BxfKjCUx.js";
59
59
  import { n as resolveMarkdownTableMode } from "./markdown-tables-CS1Tvb3z.js";
60
60
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-BhdrdVp5.js";
61
61
  import { t as fetchWithSsrFGuard } from "./fetch-guard-JHxT9355.js";
62
- import { n as getDefaultMediaLocalRoots } from "./local-roots-CgDCgCuM.js";
62
+ import { n as getDefaultMediaLocalRoots } from "./local-roots-2Jb79HZ8.js";
63
63
  import { i as resolveNativeSkillsEnabled, n as isRestartEnabled, r as resolveNativeCommandsEnabled, t as isCommandFlagEnabled } from "./commands-DUzLGgEZ.js";
64
- import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-Ca5hh7nh.js";
65
- import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-Cs9Bh-G0.js";
66
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-xdEE97oU.js";
64
+ import { a as shouldHandleTextCommands, i as normalizeCommandBody, n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-CwXsDVuO.js";
65
+ import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-DiPa71im.js";
66
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-xUpyZDH4.js";
67
67
  import { n as resolveToolDisplay, t as formatToolDetail } from "./tool-display-DFOL6UQ9.js";
68
68
  import { n as formatTimeAgo } from "./format-relative-D4GQsWlP.js";
69
69
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-B7Rvs8pK.js";
70
- import { g as getSkillsSnapshotVersion, h as ensureSkillsWatcher, t as getRemoteSkillEligibility } from "./skills-remote-bz71Bstn.js";
70
+ import { g as getSkillsSnapshotVersion, h as ensureSkillsWatcher, t as getRemoteSkillEligibility } from "./skills-remote-BcRQTDsZ.js";
71
71
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-ClQLvlCW.js";
72
- import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-IWi6-nY9.js";
73
- import { i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames } from "./skill-commands-DDGGlq68.js";
74
- import { a as removeChannelAllowFromStoreEntry, c as listPairingChannels, i as readChannelAllowFromStore, o as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-BNhJOnWn.js";
72
+ import { n as loadModelCatalog, r as modelSupportsVision, t as findModelInCatalog } from "./model-catalog-BWurV7gl.js";
73
+ import { i as resolveSkillCommandInvocation, n as listSkillCommandsForAgents, r as listSkillCommandsForWorkspace, t as listReservedChatSlashCommandNames } from "./skill-commands-DWvXs3lz.js";
74
+ import { a as removeChannelAllowFromStoreEntry, c as listPairingChannels, i as readChannelAllowFromStore, o as upsertChannelPairingRequest, t as addChannelAllowFromStoreEntry } from "./pairing-store-Be-ZQK87.js";
75
75
  import { _ as getTrustedSafeBinDirs, b as buildSafeShellCommand, d as resolveExecApprovals, f as resolveExecApprovalsFromFile, g as resolveSafeBins, h as evaluateShellAllowlist, i as maxAsk, l as recordAllowlistUse, n as addAllowlistEntry, o as minSecurity, u as requiresExecApproval, y as buildSafeBinsShellCommand } from "./exec-approvals-DioSaIeH.js";
76
- import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-De9ma6e1.js";
76
+ import { a as canvasSnapshotTempPath, c as parseCameraClipPayload, d as writeCameraClipPayloadToFile, f as writeUrlToFile, g as normalizePathPrepend, h as mergePathPrepend, i as parseEnvPairs, l as parseCameraSnapPayload, m as applyPathPrepend, n as screenRecordTempPath, o as parseCanvasSnapshotPayload, p as buildNodeShellCommand, r as writeScreenRecordToFile, s as cameraTempPath, t as parseScreenRecordPayload, u as writeBase64ToFile } from "./nodes-screen-Cp5QP3ET.js";
77
77
  import { n as parseNodeList, r as parsePairingList, t as resolveNodeIdFromCandidates } from "./node-match-N7nsmfM6.js";
78
78
  import { t as formatDurationCompact$1 } from "./format-duration-CIjmjQST.js";
79
79
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-9ygk6nTV.js";
80
80
  import { i as resolveModelCostConfig, n as formatTokenCount$2, r as formatUsd, t as estimateUsageCost } from "./usage-format-DeczTGI-.js";
81
81
  import { i as resolveWindow, n as formatSummaryReport, r as loadCostBenchmarkSummary, t as buildCostBreakdown } from "./breakdown-B_Dhhm3K.js";
82
82
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-BLIhifCJ.js";
83
- import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-D8kKOts5.js";
83
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-CUreKVeY.js";
84
84
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-DQs772BN.js";
85
85
  import { t as emitSymframePush } from "./symframe-broadcast-CXo2qoxy.js";
86
86
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-H1qOf0q-.js";
87
- import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-C1IIA6kH.js";
87
+ import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-Du0VftVs.js";
88
88
  import { t as parseTimeoutMs } from "./parse-timeout-DmEcHIsV.js";
89
- import { n as registerMemoryCli } from "./memory-cli-D8Z_5-Nz.js";
90
- import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-CbXXjn9X.js";
91
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-H2t-Xkfc.js";
92
- import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-MUMSB_7d.js";
89
+ import { n as registerMemoryCli } from "./memory-cli-BnBKckEk.js";
90
+ import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-B_3j7R_Q.js";
91
+ import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-CvAqjEH9.js";
92
+ import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-Cwbcw-km.js";
93
93
  import { createRequire } from "node:module";
94
94
  import process$1 from "node:process";
95
95
  import { fileURLToPath } from "node:url";
@@ -98,7 +98,7 @@ import path from "node:path";
98
98
  import fs, { constants, existsSync, statSync } from "node:fs";
99
99
  import os, { homedir } from "node:os";
100
100
  import JSON5 from "json5";
101
- import fs$1 from "node:fs/promises";
101
+ import fsPromises from "node:fs/promises";
102
102
  import { execFileSync, spawn, spawnSync } from "node:child_process";
103
103
  import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
104
104
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
@@ -1848,7 +1848,7 @@ async function imageResult(params) {
1848
1848
  }, params.label, params.imageSanitization);
1849
1849
  }
1850
1850
  async function imageResultFromFile(params) {
1851
- const buf = await fs$1.readFile(params.path);
1851
+ const buf = await fsPromises.readFile(params.path);
1852
1852
  const mimeType = await detectMime({ buffer: buf.slice(0, 256) }) ?? "image/png";
1853
1853
  return await imageResult({
1854
1854
  label: params.label,
@@ -4695,6 +4695,12 @@ function buildAgentSystemPrompt(params) {
4695
4695
  " - `recall` — re-summon a recently-released card (id optional → most-recent).",
4696
4696
  " - `pin` — persist a card across reload + /new (user-curated; the user can also pin from the UI).",
4697
4697
  " - `unpin` — remove the pin; does NOT drop the card.",
4698
+ "Panel modes (Stage D — `action: \"setMode\"` with `mode` and optional `focusedId`):",
4699
+ " - `ambient` (default) — substrate + cards + AWAITING all visible. Normal multi-task posture.",
4700
+ " - `focus` — one card centered, substrate dim, AWAITING hidden. Use when actively iterating on a single artifact (e.g. drafting an email). Pass `focusedId` to halo a specific card.",
4701
+ " - `awaiting` — footer prominent, cards collapsed to titles. Use when you've kicked off long-running work (subagents, scheduled tasks) and the user is waiting for results.",
4702
+ " - `quiet` — substrate only, cards + AWAITING hidden. Use when you're thinking and have nothing actionable to surface yet.",
4703
+ "Modes are sticky until you `setMode` again or the user overrides via the header chips. Default to `ambient`; pick `focus` only when you genuinely want a single card to dominate; pick `awaiting` only when waiting is the user's primary experience.",
4698
4704
  "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email — shown in your panel.\"). Don't repeat the full content in chat.",
4699
4705
  "",
4700
4706
  ...compactMode ? [] : [
@@ -5828,7 +5834,7 @@ async function routeReply(params) {
5828
5834
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
5829
5835
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
5830
5836
  try {
5831
- const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
5837
+ const { deliverOutboundPayloads } = await import("./deliver-CWMFmMCv.js").then((n) => n.n);
5832
5838
  return {
5833
5839
  ok: true,
5834
5840
  messageId: (await deliverOutboundPayloads({
@@ -11669,7 +11675,7 @@ var MediaAttachmentCache = class {
11669
11675
  const size = await this.ensureLocalStat(entry);
11670
11676
  if (entry.resolvedPath) {
11671
11677
  if (size !== void 0 && size > params.maxBytes) throw new MediaUnderstandingSkipError("maxBytes", `Attachment ${params.attachmentIndex + 1} exceeds maxBytes ${params.maxBytes}`);
11672
- const buffer = await fs$1.readFile(entry.resolvedPath);
11678
+ const buffer = await fsPromises.readFile(entry.resolvedPath);
11673
11679
  entry.buffer = buffer;
11674
11680
  entry.bufferMime = entry.bufferMime ?? entry.attachment.mime ?? await detectMime({
11675
11681
  buffer,
@@ -11739,10 +11745,10 @@ var MediaAttachmentCache = class {
11739
11745
  prefix: "symi-media",
11740
11746
  extension: path.extname(bufferResult.fileName || "") || ""
11741
11747
  });
11742
- await fs$1.writeFile(tmpPath, bufferResult.buffer);
11748
+ await fsPromises.writeFile(tmpPath, bufferResult.buffer);
11743
11749
  entry.tempPath = tmpPath;
11744
11750
  entry.tempCleanup = async () => {
11745
- await fs$1.unlink(tmpPath).catch(() => {});
11751
+ await fsPromises.unlink(tmpPath).catch(() => {});
11746
11752
  };
11747
11753
  return {
11748
11754
  path: tmpPath,
@@ -11789,12 +11795,12 @@ var MediaAttachmentCache = class {
11789
11795
  if (entry.statSize !== void 0) return entry.statSize;
11790
11796
  try {
11791
11797
  const currentPath = entry.resolvedPath;
11792
- const stat = await fs$1.stat(currentPath);
11798
+ const stat = await fsPromises.stat(currentPath);
11793
11799
  if (!stat.isFile()) {
11794
11800
  entry.resolvedPath = void 0;
11795
11801
  return;
11796
11802
  }
11797
- const canonicalPath = await fs$1.realpath(currentPath).catch(() => currentPath);
11803
+ const canonicalPath = await fsPromises.realpath(currentPath).catch(() => currentPath);
11798
11804
  if (!isInboundPathAllowed({
11799
11805
  filePath: canonicalPath,
11800
11806
  roots: await this.getCanonicalLocalPathRoots()
@@ -11816,7 +11822,7 @@ var MediaAttachmentCache = class {
11816
11822
  if (this.canonicalLocalPathRoots) return await this.canonicalLocalPathRoots;
11817
11823
  this.canonicalLocalPathRoots = (async () => mergeInboundPathRoots(this.localPathRoots, await Promise.all(this.localPathRoots.map(async (root) => {
11818
11824
  if (root.includes("*")) return root;
11819
- return await fs$1.realpath(root).catch(() => root);
11825
+ return await fsPromises.realpath(root).catch(() => root);
11820
11826
  }))))();
11821
11827
  return await this.canonicalLocalPathRoots;
11822
11828
  }
@@ -11887,7 +11893,7 @@ function formatAudioTranscripts(outputs) {
11887
11893
  async function fileExists(filePath) {
11888
11894
  if (!filePath) return false;
11889
11895
  try {
11890
- await fs$1.stat(filePath);
11896
+ await fsPromises.stat(filePath);
11891
11897
  return true;
11892
11898
  } catch {
11893
11899
  return false;
@@ -11987,7 +11993,7 @@ async function resolveCliOutput(params) {
11987
11993
  const commandId = commandBase(params.command);
11988
11994
  const fileOutput = commandId === "whisper-cli" ? resolveWhisperCppOutputPath(params.args) : commandId === "whisper" ? resolveWhisperOutputPath(params.args, params.mediaPath) : null;
11989
11995
  if (fileOutput && await fileExists(fileOutput)) try {
11990
- const content = await fs$1.readFile(fileOutput, "utf8");
11996
+ const content = await fsPromises.readFile(fileOutput, "utf8");
11991
11997
  if (content.trim()) return content.trim();
11992
11998
  } catch {}
11993
11999
  if (commandId === "gemini") {
@@ -12278,7 +12284,7 @@ async function runCliEntry(params) {
12278
12284
  maxBytes,
12279
12285
  timeoutMs
12280
12286
  });
12281
- const outputDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12287
+ const outputDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12282
12288
  const mediaPath = pathResult.path;
12283
12289
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
12284
12290
  const templCtx = {
@@ -12312,7 +12318,7 @@ async function runCliEntry(params) {
12312
12318
  model: command
12313
12319
  };
12314
12320
  } finally {
12315
- await fs$1.rm(outputDir, {
12321
+ await fsPromises.rm(outputDir, {
12316
12322
  recursive: true,
12317
12323
  force: true
12318
12324
  }).catch(() => {});
@@ -12356,9 +12362,9 @@ function candidateBinaryNames(name) {
12356
12362
  }
12357
12363
  async function isExecutable$1(filePath) {
12358
12364
  try {
12359
- if (!(await fs$1.stat(filePath)).isFile()) return false;
12365
+ if (!(await fsPromises.stat(filePath)).isFile()) return false;
12360
12366
  if (process.platform === "win32") return true;
12361
- await fs$1.access(filePath, constants.X_OK);
12367
+ await fsPromises.access(filePath, constants.X_OK);
12362
12368
  return true;
12363
12369
  } catch {
12364
12370
  return false;
@@ -14070,7 +14076,7 @@ async function createModelSelectionState(params) {
14070
14076
  }
14071
14077
  }
14072
14078
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14073
- const { ensureAuthProfileStore } = await import("./auth-profiles-Ce7R_25e.js").then((n) => n.t);
14079
+ const { ensureAuthProfileStore } = await import("./auth-profiles-D5nYBj_Z.js").then((n) => n.t);
14074
14080
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14075
14081
  const providerKey = normalizeProviderId(provider);
14076
14082
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -17214,7 +17220,7 @@ async function resolveSandboxWorkdir(params) {
17214
17220
  cwd: process.cwd(),
17215
17221
  root: params.sandbox.workspaceDir
17216
17222
  });
17217
- if (!(await fs$1.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17223
+ if (!(await fsPromises.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17218
17224
  const relative = resolved.relative ? resolved.relative.split(path.sep).join(path.posix.sep) : "";
17219
17225
  const containerWorkdir = relative ? path.posix.join(params.sandbox.containerWorkdir, relative) : params.sandbox.containerWorkdir;
17220
17226
  return {
@@ -18228,13 +18234,13 @@ async function validateScriptFileForShellBleed(params) {
18228
18234
  cwd: params.workdir,
18229
18235
  root: params.workdir
18230
18236
  });
18231
- stat = await fs$1.stat(absPath);
18237
+ stat = await fsPromises.stat(absPath);
18232
18238
  } catch {
18233
18239
  return;
18234
18240
  }
18235
18241
  if (!stat.isFile()) return;
18236
18242
  if (stat.size > 512 * 1024) return;
18237
- const content = await fs$1.readFile(absPath, "utf-8");
18243
+ const content = await fsPromises.readFile(absPath, "utf-8");
18238
18244
  const first = /\$[A-Z_][A-Z0-9_]{1,}/g.exec(content);
18239
18245
  if (first) {
18240
18246
  const idx = first.index;
@@ -22969,7 +22975,7 @@ async function handleCommands(params) {
22969
22975
  try {
22970
22976
  const messages = [];
22971
22977
  if (sessionFile) {
22972
- const content = await fs$1.readFile(sessionFile, "utf-8");
22978
+ const content = await fsPromises.readFile(sessionFile, "utf-8");
22973
22979
  for (const line of content.split("\n")) {
22974
22980
  if (!line.trim()) continue;
22975
22981
  try {
@@ -25156,7 +25162,7 @@ async function readJsonlFromPath(jsonlPath) {
25156
25162
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${resolved}`);
25157
25163
  throw new Error("jsonlPath outside allowed roots");
25158
25164
  }
25159
- const canonical = await fs$1.realpath(resolved).catch(() => resolved);
25165
+ const canonical = await fsPromises.realpath(resolved).catch(() => resolved);
25160
25166
  if (!isInboundPathAllowed({
25161
25167
  filePath: canonical,
25162
25168
  roots
@@ -25164,7 +25170,7 @@ async function readJsonlFromPath(jsonlPath) {
25164
25170
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${canonical}`);
25165
25171
  throw new Error("jsonlPath outside allowed roots");
25166
25172
  }
25167
- return await fs$1.readFile(canonical, "utf8");
25173
+ return await fsPromises.readFile(canonical, "utf8");
25168
25174
  }
25169
25175
  const CanvasToolSchema = Type.Object({
25170
25176
  action: stringEnum(CANVAS_ACTIONS),
@@ -25940,7 +25946,14 @@ const ARTIFACT_ACTIONS = [
25940
25946
  "release",
25941
25947
  "recall",
25942
25948
  "pin",
25943
- "unpin"
25949
+ "unpin",
25950
+ "setMode"
25951
+ ];
25952
+ const PANEL_MODES = [
25953
+ "ambient",
25954
+ "focus",
25955
+ "awaiting",
25956
+ "quiet"
25944
25957
  ];
25945
25958
  /**
25946
25959
  * Stage A: intent vocabulary added as orthogonal metadata to renderer type.
@@ -25988,7 +26001,9 @@ const DisplayArtifactSchema = Type.Object({
25988
26001
  email: Type.Optional(EmailFieldsSchema),
25989
26002
  actions: Type.Optional(Type.Array(ActionSchema)),
25990
26003
  sticky: Type.Optional(Type.Boolean()),
25991
- force: Type.Optional(Type.Boolean())
26004
+ force: Type.Optional(Type.Boolean()),
26005
+ mode: Type.Optional(stringEnum(PANEL_MODES)),
26006
+ focusedId: Type.Optional(Type.String())
25992
26007
  });
25993
26008
  function genCardId() {
25994
26009
  return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
@@ -25997,12 +26012,32 @@ function createDisplayArtifactTool() {
25997
26012
  return {
25998
26013
  label: "Display Artifact",
25999
26014
  name: "display_artifact",
26000
- description: "Push a card into the Glass UI symframe — the right-column window into your mind. Use for content that represents what you're thinking about, holding, considering, or producing — drafts, references you're keeping in view, options being weighed, generated artifacts. Always set `intent` (holding | weighing | producing | drafted | reference | awaiting). Renderer `type`: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise (set force:true to update a sticky card), action=remove to dismiss. Stage-C attention verbs (id-only, no card body): action=dwell pulls a card to the top with a brief highlight, action=release softly fades a card out (recoverable via recall), action=recall re-summons a recently-released card (id optional → most recent), action=pin persists across reload, action=unpin removes the pin.",
26015
+ description: "Push a card into the Glass UI symframe — the right-column window into your mind. Use for content that represents what you're thinking about, holding, considering, or producing — drafts, references you're keeping in view, options being weighed, generated artifacts. Always set `intent` (holding | weighing | producing | drafted | reference | awaiting). Renderer `type`: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise (set force:true to update a sticky card), action=remove to dismiss. Stage-C attention verbs (id-only, no card body): action=dwell pulls a card to the top with a brief highlight, action=release softly fades a card out (recoverable via recall), action=recall re-summons a recently-released card (id optional → most recent), action=pin persists across reload, action=unpin removes the pin. Stage-D mode verb: action=setMode with mode=ambient|focus|awaiting|quiet (optional focusedId for focus) switches the panel's posture for the current task.",
26001
26016
  parameters: DisplayArtifactSchema,
26002
26017
  execute: async (_toolCallId, args) => {
26003
26018
  const params = args;
26004
26019
  const actionRaw = readStringParam(params, "action");
26005
26020
  const action = ARTIFACT_ACTIONS.includes(actionRaw ?? "") ? actionRaw : "add";
26021
+ if (action === "setMode") {
26022
+ const modeRaw = readStringParam(params, "mode");
26023
+ if (!modeRaw || !PANEL_MODES.includes(modeRaw)) return jsonResult({
26024
+ ok: false,
26025
+ error: `setMode requires \`mode\` ∈ {${PANEL_MODES.join(" | ")}}`
26026
+ });
26027
+ const mode = modeRaw;
26028
+ const focusedId = readStringParam(params, "focusedId");
26029
+ emitSymframePush({
26030
+ action: "setMode",
26031
+ mode,
26032
+ focusedId: focusedId || void 0
26033
+ });
26034
+ return jsonResult({
26035
+ ok: true,
26036
+ action,
26037
+ mode,
26038
+ focusedId
26039
+ });
26040
+ }
26006
26041
  const id = readStringParam(params, "id") || (action === "add" ? genCardId() : void 0);
26007
26042
  if (action !== "add" && action !== "recall" && !id) return jsonResult({
26008
26043
  ok: false,
@@ -26838,7 +26873,7 @@ async function hydrateAttachmentPayload(params) {
26838
26873
  accountId: params.accountId
26839
26874
  }),
26840
26875
  sandboxValidated: true,
26841
- readFile: (filePath) => fs$1.readFile(filePath)
26876
+ readFile: (filePath) => fsPromises.readFile(filePath)
26842
26877
  });
26843
26878
  params.args.buffer = media.buffer.toString("base64");
26844
26879
  if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
@@ -33452,7 +33487,7 @@ async function deliverSessionMaintenanceWarning(params) {
33452
33487
  return;
33453
33488
  }
33454
33489
  try {
33455
- const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
33490
+ const { deliverOutboundPayloads } = await import("./deliver-CWMFmMCv.js").then((n) => n.n);
33456
33491
  await deliverOutboundPayloads({
33457
33492
  cfg: params.cfg,
33458
33493
  channel,
@@ -33857,7 +33892,7 @@ async function stageSandboxMedia(params) {
33857
33892
  };
33858
33893
  try {
33859
33894
  const destDir = sandbox ? path.join(effectiveWorkspaceDir, "media", "inbound") : effectiveWorkspaceDir;
33860
- await fs$1.mkdir(destDir, { recursive: true });
33895
+ await fsPromises.mkdir(destDir, { recursive: true });
33861
33896
  const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
33862
33897
  cfg,
33863
33898
  accountId: ctx.AccountId
@@ -33907,7 +33942,7 @@ async function stageSandboxMedia(params) {
33907
33942
  usedNames.add(fileName);
33908
33943
  const dest = path.join(destDir, fileName);
33909
33944
  if (ctx.MediaRemoteHost) await scpFile(ctx.MediaRemoteHost, source, dest);
33910
- else await fs$1.copyFile(source, dest);
33945
+ else await fsPromises.copyFile(source, dest);
33911
33946
  const stagedPath = sandbox ? path.posix.join("media", "inbound", fileName) : dest;
33912
33947
  staged.set(source, stagedPath);
33913
33948
  }
@@ -39238,7 +39273,7 @@ function readSlackExternalArgMenuToken(raw) {
39238
39273
  }
39239
39274
  let commandsRegistry;
39240
39275
  async function getCommandsRegistry() {
39241
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-Ca5hh7nh.js").then((n) => n.t);
39276
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-CwXsDVuO.js").then((n) => n.t);
39242
39277
  return commandsRegistry;
39243
39278
  }
39244
39279
  function encodeSlackCommandArgValue(parts) {
@@ -39580,11 +39615,11 @@ async function registerSlackMonitorSlashCommands(params) {
39580
39615
  const channelName = channelInfo?.name;
39581
39616
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
39582
39617
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
39583
- import("./resolve-route-C1IIA6kH.js").then((n) => n.r),
39618
+ import("./resolve-route-Du0VftVs.js").then((n) => n.r),
39584
39619
  import("./inbound-context-B7Rvs8pK.js").then((n) => n.n),
39585
39620
  Promise.resolve().then(() => provider_dispatcher_exports)
39586
39621
  ]);
39587
- const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CffvEjpp.js").then((n) => n.t), import("./reply-prefix-BFNeXT65.js").then((n) => n.n)]);
39622
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CffvEjpp.js").then((n) => n.t), import("./reply-prefix-CtZtkTJK.js").then((n) => n.n)]);
39588
39623
  const route = resolveAgentRoute({
39589
39624
  cfg,
39590
39625
  channel: "slack",
@@ -39641,7 +39676,7 @@ async function registerSlackMonitorSlashCommands(params) {
39641
39676
  });
39642
39677
  const deliverSlashPayloads = async (replies) => {
39643
39678
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
39644
- import("./replies-CbXXjn9X.js").then((n) => n.r),
39679
+ import("./replies-B_3j7R_Q.js").then((n) => n.r),
39645
39680
  import("./chunk-BxfKjCUx.js").then((n) => n.s),
39646
39681
  import("./markdown-tables-CS1Tvb3z.js").then((n) => n.t)
39647
39682
  ]);
@@ -39696,7 +39731,7 @@ async function registerSlackMonitorSlashCommands(params) {
39696
39731
  let nativeCommands = [];
39697
39732
  if (nativeEnabled) {
39698
39733
  reg = await getCommandsRegistry();
39699
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DDGGlq68.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39734
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DWvXs3lz.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39700
39735
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
39701
39736
  skillCommands,
39702
39737
  provider: "slack"
@@ -40829,7 +40864,7 @@ function resolvePluginTools(params) {
40829
40864
  //#endregion
40830
40865
  //#region src/agents/apply-patch-update.ts
40831
40866
  async function defaultReadFile(filePath) {
40832
- return fs$1.readFile(filePath, "utf8");
40867
+ return fsPromises.readFile(filePath, "utf8");
40833
40868
  }
40834
40869
  async function applyUpdateHunk(filePath, chunks, options) {
40835
40870
  const originalLines = (await (options?.readFile ?? defaultReadFile)(filePath).catch((err) => {
@@ -41073,10 +41108,10 @@ function resolvePatchFileOps(options) {
41073
41108
  };
41074
41109
  }
41075
41110
  return {
41076
- readFile: (filePath) => fs$1.readFile(filePath, "utf8"),
41077
- writeFile: (filePath, content) => fs$1.writeFile(filePath, content, "utf8"),
41078
- remove: (filePath) => fs$1.rm(filePath),
41079
- mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
41111
+ readFile: (filePath) => fsPromises.readFile(filePath, "utf8"),
41112
+ writeFile: (filePath, content) => fsPromises.writeFile(filePath, content, "utf8"),
41113
+ remove: (filePath) => fsPromises.rm(filePath),
41114
+ mkdirp: (dir) => fsPromises.mkdir(dir, { recursive: true }).then(() => {})
41080
41115
  };
41081
41116
  }
41082
41117
  async function ensureDir(filePath, ops) {
@@ -42281,7 +42316,7 @@ async function repairSessionFileIfNeeded(params) {
42281
42316
  };
42282
42317
  let content;
42283
42318
  try {
42284
- content = await fs$1.readFile(sessionFile, "utf-8");
42319
+ content = await fsPromises.readFile(sessionFile, "utf-8");
42285
42320
  } catch (err) {
42286
42321
  if (err?.code === "ENOENT") return {
42287
42322
  repaired: false,
@@ -42329,15 +42364,15 @@ async function repairSessionFileIfNeeded(params) {
42329
42364
  const backupPath = `${sessionFile}.bak-${process.pid}-${Date.now()}`;
42330
42365
  const tmpPath = `${sessionFile}.repair-${process.pid}-${Date.now()}.tmp`;
42331
42366
  try {
42332
- const stat = await fs$1.stat(sessionFile).catch(() => null);
42333
- await fs$1.writeFile(backupPath, content, "utf-8");
42334
- if (stat) await fs$1.chmod(backupPath, stat.mode);
42335
- await fs$1.writeFile(tmpPath, cleaned, "utf-8");
42336
- if (stat) await fs$1.chmod(tmpPath, stat.mode);
42337
- await fs$1.rename(tmpPath, sessionFile);
42367
+ const stat = await fsPromises.stat(sessionFile).catch(() => null);
42368
+ await fsPromises.writeFile(backupPath, content, "utf-8");
42369
+ if (stat) await fsPromises.chmod(backupPath, stat.mode);
42370
+ await fsPromises.writeFile(tmpPath, cleaned, "utf-8");
42371
+ if (stat) await fsPromises.chmod(tmpPath, stat.mode);
42372
+ await fsPromises.rename(tmpPath, sessionFile);
42338
42373
  } catch (err) {
42339
42374
  try {
42340
- await fs$1.unlink(tmpPath);
42375
+ await fsPromises.unlink(tmpPath);
42341
42376
  } catch (cleanupErr) {
42342
42377
  params.warn?.(`session file repair cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : "unknown error"} (${path.basename(tmpPath)})`);
42343
42378
  }
@@ -43610,7 +43645,7 @@ async function prewarmSessionFile(sessionFile) {
43610
43645
  if (!isSessionManagerCacheEnabled()) return;
43611
43646
  if (isSessionManagerCached(sessionFile)) return;
43612
43647
  try {
43613
- const handle = await fs$1.open(sessionFile, "r");
43648
+ const handle = await fsPromises.open(sessionFile, "r");
43614
43649
  try {
43615
43650
  const buffer = Buffer$1.alloc(4096);
43616
43651
  await handle.read(buffer, 0, buffer.length, 0);
@@ -43750,7 +43785,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43750
43785
  } catch (err) {
43751
43786
  return fail(describeUnknownError(err));
43752
43787
  }
43753
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
43788
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
43754
43789
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
43755
43790
  const sandbox = await resolveSandboxContext({
43756
43791
  config: params.config,
@@ -43758,7 +43793,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43758
43793
  workspaceDir: resolvedWorkspace
43759
43794
  });
43760
43795
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
43761
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
43796
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
43762
43797
  await ensureSessionHeader({
43763
43798
  sessionFile: params.sessionFile,
43764
43799
  sessionId: params.sessionId,
@@ -44083,12 +44118,12 @@ function getQueuedFileWriter(writers, filePath) {
44083
44118
  const existing = writers.get(filePath);
44084
44119
  if (existing) return existing;
44085
44120
  const dir = path.dirname(filePath);
44086
- const ready = fs$1.mkdir(dir, { recursive: true }).catch(() => void 0);
44121
+ const ready = fsPromises.mkdir(dir, { recursive: true }).catch(() => void 0);
44087
44122
  let queue = Promise.resolve();
44088
44123
  const writer = {
44089
44124
  filePath,
44090
44125
  write: (line) => {
44091
- queue = queue.then(() => ready).then(() => fs$1.appendFile(filePath, line, "utf8")).catch(() => void 0);
44126
+ queue = queue.then(() => ready).then(() => fsPromises.appendFile(filePath, line, "utf8")).catch(() => void 0);
44092
44127
  }
44093
44128
  };
44094
44129
  writers.set(filePath, writer);
@@ -47179,7 +47214,7 @@ Use the message tool with buttons:
47179
47214
  */
47180
47215
  async function readSessionFile(sessionFile) {
47181
47216
  try {
47182
- return await fs$1.readFile(sessionFile, "utf-8");
47217
+ return await fsPromises.readFile(sessionFile, "utf-8");
47183
47218
  } catch {
47184
47219
  return null;
47185
47220
  }
@@ -47188,8 +47223,8 @@ async function writeAtomically(sessionFile, text) {
47188
47223
  const dir = path.dirname(sessionFile);
47189
47224
  const base = path.basename(sessionFile);
47190
47225
  const tmp = path.join(dir, `.${base}.prune-${process.pid}-${Date.now()}.tmp`);
47191
- await fs$1.writeFile(tmp, text, "utf-8");
47192
- await fs$1.rename(tmp, sessionFile);
47226
+ await fsPromises.writeFile(tmp, text, "utf-8");
47227
+ await fsPromises.rename(tmp, sessionFile);
47193
47228
  }
47194
47229
  /**
47195
47230
  * Remove empty assistant JSONL entries from the session file.
@@ -47291,7 +47326,7 @@ function isInPoisonRange(version) {
47291
47326
  */
47292
47327
  async function checkSessionPoison(sessionFile) {
47293
47328
  try {
47294
- const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
47329
+ const firstLine = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n")[0];
47295
47330
  if (!firstLine) return null;
47296
47331
  const header = JSON.parse(firstLine);
47297
47332
  if (header.type !== "session") return null;
@@ -47309,7 +47344,7 @@ async function checkSessionPoison(sessionFile) {
47309
47344
  */
47310
47345
  async function archivePoisonedSession(sessionFile) {
47311
47346
  const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
47312
- await fs$1.rename(sessionFile, archiveName);
47347
+ await fsPromises.rename(sessionFile, archiveName);
47313
47348
  return archiveName;
47314
47349
  }
47315
47350
  /**
@@ -47318,14 +47353,14 @@ async function archivePoisonedSession(sessionFile) {
47318
47353
  */
47319
47354
  async function stampSessionVersion(sessionFile) {
47320
47355
  try {
47321
- const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
47356
+ const lines = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n");
47322
47357
  if (lines.length === 0) return;
47323
47358
  const header = JSON.parse(lines[0]);
47324
47359
  if (header.type !== "session") return;
47325
47360
  if (header.symiVersion === VERSION) return;
47326
47361
  header.symiVersion = VERSION;
47327
47362
  lines[0] = JSON.stringify(header);
47328
- await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
47363
+ await fsPromises.writeFile(sessionFile, lines.join("\n"), "utf-8");
47329
47364
  } catch {}
47330
47365
  }
47331
47366
  /**
@@ -47554,7 +47589,7 @@ async function prepareSessionManagerForRun(params) {
47554
47589
  return;
47555
47590
  }
47556
47591
  if (params.hadSessionFile && header && !hasAssistant) {
47557
- await fs$1.writeFile(params.sessionFile, "", "utf-8");
47592
+ await fsPromises.writeFile(params.sessionFile, "", "utf-8");
47558
47593
  sm.fileEntries = [header];
47559
47594
  sm.byId?.clear?.();
47560
47595
  sm.labelsById?.clear?.();
@@ -48112,7 +48147,7 @@ async function runEmbeddedAttempt(params) {
48112
48147
  const prevCwd = process.cwd();
48113
48148
  const runAbortController = new AbortController();
48114
48149
  log$7.debug(`embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${params.provider} model=${params.modelId} thinking=${params.thinkLevel} messageChannel=${params.messageChannel ?? params.messageProvider ?? "unknown"}`);
48115
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
48150
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
48116
48151
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
48117
48152
  const sandbox = await resolveSandboxContext({
48118
48153
  config: params.config,
@@ -48120,7 +48155,7 @@ async function runEmbeddedAttempt(params) {
48120
48155
  workspaceDir: resolvedWorkspace
48121
48156
  });
48122
48157
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
48123
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
48158
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
48124
48159
  let restoreSkillEnv;
48125
48160
  process.chdir(effectiveWorkspace);
48126
48161
  try {
@@ -48329,7 +48364,7 @@ async function runEmbeddedAttempt(params) {
48329
48364
  sessionFile: params.sessionFile,
48330
48365
  warn: (message) => log$7.warn(message)
48331
48366
  });
48332
- const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
48367
+ const hadSessionFile = await fsPromises.stat(params.sessionFile).then(() => true).catch(() => false);
48333
48368
  const transcriptPolicy = resolveTranscriptPolicy({
48334
48369
  modelApi: params.model?.api,
48335
48370
  provider: params.provider,
@@ -49421,7 +49456,7 @@ async function runEmbeddedPiAgent(params) {
49421
49456
  }
49422
49457
  runLoopIterations += 1;
49423
49458
  attemptedThinking.add(thinkLevel);
49424
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
49459
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
49425
49460
  const prompt = provider === "anthropic" ? scrubAnthropicRefusalMagic(params.prompt) : params.prompt;
49426
49461
  const attempt = await runEmbeddedAttempt({
49427
49462
  sessionId: params.sessionId,