@symerian/symi 3.5.20 → 3.5.22

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 (257) hide show
  1. package/dist/{agent-D0Z4r5fr.js → agent-DgVWcnlD.js} +1 -1
  2. package/dist/{agent-DCDT-MPE.js → agent-NT0EKnK_.js} +18 -18
  3. package/dist/{agent-scope-DOrZjOnW.js → agent-scope-Bnsyyeci.js} +18 -18
  4. package/dist/{agents-CdkBeP0d.js → agents-Dlcpc1K3.js} +3 -3
  5. package/dist/{agents.config-B7sNDvhz.js → agents.config-DA0ISLi7.js} +1 -1
  6. package/dist/{audit-B7deV4Lp.js → audit-CPloCzEZ.js} +2 -2
  7. package/dist/{audit-BCStg-Hv.js → audit-CXIXYDRx.js} +20 -20
  8. package/dist/{auth-choice-BIGcxSzP.js → auth-choice--DymOp5O.js} +2 -2
  9. package/dist/{auth-choice-B3DU-aBr.js → auth-choice-BtXIQPTU.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-ChNdzPjD.js → banner-CY_9VW7E.js} +1 -1
  13. package/dist/{browser-cli-C9xaKW8l.js → browser-cli-C5VVk6C9.js} +3 -3
  14. package/dist/{browser-cli-BTg8SVs-.js → browser-cli-DOTM7UBC.js} +9 -9
  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-BccaLPi8.js → call-Bpjj5p7I.js} +9 -9
  19. package/dist/{call-DZg43vv8.js → call-C2urR5Fj.js} +1 -1
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-CUptVX8c.js → channel-options-XRJiHUm5.js} +1 -1
  22. package/dist/{channel-options-LLmAnD_L.js → channel-options-rFgJaKzJ.js} +1 -1
  23. package/dist/{channels-cli-xoromnio.js → channels-cli-CQ4M05oy.js} +57 -57
  24. package/dist/{channels-cli-B0OQvVUL.js → channels-cli-QMHCRAb5.js} +9 -9
  25. package/dist/{chrome-DJChpTwP.js → chrome-38OnGyuN.js} +2 -2
  26. package/dist/{chrome-3jl2ulOE.js → chrome-DNssqQJs.js} +7 -7
  27. package/dist/{cli-C7v-sID8.js → cli-B-uoiYP2.js} +45 -45
  28. package/dist/{cli-CMNR7ULk.js → cli-BafqEuaj.js} +6 -6
  29. package/dist/{client-k0MT6NBw.js → client-CTrfpKT3.js} +7 -2
  30. package/dist/{client-DCxeV1bw.js → client-yVTJ5jx5.js} +6 -1
  31. package/dist/{command-registry-CXcvXjUR.js → command-registry-CLm8TAH3.js} +11 -11
  32. package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
  33. package/dist/{completion-cli-DJ1YCeSg.js → completion-cli-Cn_81QBb.js} +12 -12
  34. package/dist/{completion-cli-B1Fg6Lmg.js → completion-cli-DOBXkVwG.js} +2 -2
  35. package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
  36. package/dist/{config-cli-D5DlWt6T.js → config-cli-B1cPkJ4p.js} +4 -4
  37. package/dist/{config-cli-CQ1FAvY_.js → config-cli-BgHYqFH1.js} +1 -1
  38. package/dist/{config-guard-BRm3RiOi.js → config-guard-DStz4_V2.js} +6 -6
  39. package/dist/{config-validation-Cdyg1BZB.js → config-validation-Dxj9LRzr.js} +1 -1
  40. package/dist/{configure-bhJB2Dti.js → configure-C7zmSgvC.js} +14 -14
  41. package/dist/{configure-DG1lf0Ld.js → configure-DmzM0S7L.js} +6 -6
  42. package/dist/{consolidate-DymnvvYm.js → consolidate-CO32_TEx.js} +6 -6
  43. package/dist/{control-service-D8kKOts5.js → control-service-CUreKVeY.js} +4 -4
  44. package/dist/control-ui/css/style.css +281 -0
  45. package/dist/control-ui/index.html +45 -115
  46. package/dist/control-ui/js/scheduling.js +85 -224
  47. package/dist/control-ui/js/subagents.js +78 -394
  48. package/dist/control-ui/js/symframe-awaiting.js +306 -0
  49. package/dist/control-ui/js/symframe-pin-store.js +104 -0
  50. package/dist/control-ui/js/symframe-substrate.js +11 -7
  51. package/dist/control-ui/js/symframe.js +250 -30
  52. package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
  53. package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
  54. package/dist/{cron-cli-8RaBr1CM.js → cron-cli-BNBs3zue.js} +3 -3
  55. package/dist/{cron-cli-fW3wtftG.js → cron-cli-otPeKxmi.js} +7 -7
  56. package/dist/{daemon-cli-Y6clFgva.js → daemon-cli-DDqeG2nd.js} +2 -2
  57. package/dist/{daemon-cli-0EiZTQ2A.js → daemon-cli-qDdMg615.js} +11 -11
  58. package/dist/daemon-cli.js +6 -1
  59. package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
  60. package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
  61. package/dist/{deliver-f3cIWxXT.js → deliver-q23ar_Pm.js} +4 -4
  62. package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
  63. package/dist/{devices-cli-C2gQTsB0.js → devices-cli-BJ3rVWOw.js} +2 -2
  64. package/dist/{devices-cli-DfiSkZ7k.js → devices-cli-DDPwF2Nx.js} +6 -6
  65. package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
  66. package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
  67. package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
  68. package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
  69. package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
  70. package/dist/{doctor-completion-CfF0J8fs.js → doctor-completion-CL7MyXlo.js} +2 -2
  71. package/dist/{doctor-completion-ScxFfN93.js → doctor-completion-k0HiL05o.js} +1 -1
  72. package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
  73. package/dist/entry.js +1 -1
  74. package/dist/{exec-approvals-cli-Cl-vWA1q.js → exec-approvals-cli-Cau1vPQI.js} +4 -4
  75. package/dist/{exec-approvals-cli-BaKWIf56.js → exec-approvals-cli-DsBoQu5H.js} +13 -13
  76. package/dist/extensionAPI.js +4 -4
  77. package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
  78. package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
  79. package/dist/{gateway-cli-kq5EWlnF.js → gateway-cli-DG_2YZ8B.js} +98 -98
  80. package/dist/{gateway-cli-CK-5nguV.js → gateway-cli-DgmGygc6.js} +16 -16
  81. package/dist/{gateway-rpc-Bzg_TTKP.js → gateway-rpc-Kv0-8W2E.js} +1 -1
  82. package/dist/{gateway-rpc-D12UaJS5.js → gateway-rpc-gaoD882s.js} +1 -1
  83. package/dist/{glass-ui-ws-B6p0iPsO.js → glass-ui-ws-Bof7krDJ.js} +67 -67
  84. package/dist/{glass-ui-ws-CVr0_1gT.js → glass-ui-ws-Dl45d7eU.js} +13 -13
  85. package/dist/{health-CPU9rQGj.js → health-CMbUI4aN.js} +4 -4
  86. package/dist/{health-CJb2CYtg.js → health-znS85U-F.js} +1 -1
  87. package/dist/{hooks-cli-DbgVZaP4.js → hooks-cli-Cb9BzCOY.js} +7 -7
  88. package/dist/{hooks-cli-13HCu5Xs.js → hooks-cli-Cgjor7F-.js} +59 -59
  89. package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
  90. package/dist/index.js +52 -52
  91. package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
  92. package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
  93. package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
  94. package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
  95. package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
  96. package/dist/llm-slug-generator.js +2 -2
  97. package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
  98. package/dist/{logs-cli-R16VTptK.js → logs-cli-Kr145PO_.js} +7 -7
  99. package/dist/{logs-cli-CQeK5fn7.js → logs-cli-LiAjkog2.js} +3 -3
  100. package/dist/{manager-CxFs8Z_F.js → manager-CceVgXHV.js} +1 -1
  101. package/dist/{manager-B2SWSuad.js → manager-DDynl084.js} +1 -1
  102. package/dist/{manager-CHLdCC6u.js → manager-DG6PODgu.js} +15 -15
  103. package/dist/{manager-LPPGAsqn.js → manager-qrAOWmHt.js} +1 -1
  104. package/dist/{memory-DFpqcIst.js → memory-A2D5e8dL.js} +2 -2
  105. package/dist/{memory-DavRjdTi.js → memory-BFnx3v3_.js} +5 -5
  106. package/dist/{memory-cli-DZnq3S6s.js → memory-cli-1zjVJITN.js} +2 -2
  107. package/dist/{memory-cli-B-Cp1Sb1.js → memory-cli-CHNghdrm.js} +12 -12
  108. package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
  109. package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
  110. package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
  111. package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
  112. package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
  113. package/dist/{models-Cht7Mzvs.js → models-BYev6YAG.js} +3 -3
  114. package/dist/{models-cli-B_motPDX.js → models-cli-BbK8HMKa.js} +55 -55
  115. package/dist/{models-cli-DXswzgUR.js → models-cli-Fa5r1QYP.js} +9 -9
  116. package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
  117. package/dist/{node-cli-D-gsjRXY.js → node-cli-BPnBosC4.js} +27 -27
  118. package/dist/{node-cli-VmKhIXuP.js → node-cli-Cv7x1gGu.js} +1 -1
  119. package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
  120. package/dist/{nodes-cli-BMvxQGCp.js → nodes-cli-CN_m6PO5.js} +10 -10
  121. package/dist/{nodes-cli-D199d74o.js → nodes-cli-DaHOBbd4.js} +3 -3
  122. package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
  123. package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
  124. package/dist/{onboard-DFJcbABp.js → onboard-B2IcTMv-.js} +15 -15
  125. package/dist/{onboard-CdRA8BRG.js → onboard-D-m6WTZl.js} +3 -3
  126. package/dist/{onboard-channels-fadyQGBK.js → onboard-channels-Z-Jkrk5-.js} +1 -1
  127. package/dist/{onboard-channels-Ca7ZFQ2Y.js → onboard-channels-wfGO5Zlh.js} +4 -4
  128. package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
  129. package/dist/{onboard-helpers-CQBpac8h.js → onboard-helpers-BKejzolA.js} +8 -8
  130. package/dist/{onboard-helpers-BcLPSb5N.js → onboard-helpers-Dhr98nj8.js} +1 -1
  131. package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
  132. package/dist/{onboard-remote-Bo3tpC9N.js → onboard-remote-DZdMxd1Q.js} +1 -1
  133. package/dist/{onboard-remote-BWK5Ths4.js → onboard-remote-y3ZmP90U.js} +1 -1
  134. package/dist/{onboard-skills-BLl8HPJO.js → onboard-skills-2SUv-W7i.js} +1 -1
  135. package/dist/{onboard-skills-DvacccqZ.js → onboard-skills-BFhHfrt9.js} +3 -3
  136. package/dist/{onboarding-ojb2rFkA.js → onboarding-BckHLQMV.js} +7 -7
  137. package/dist/{onboarding-BywueA1d.js → onboarding-DqlPV372.js} +12 -12
  138. package/dist/{onboarding.finalize-DdxBQpUU.js → onboarding.finalize-Bwjv3jew.js} +31 -31
  139. package/dist/{onboarding.finalize-DHvlZi9G.js → onboarding.finalize-CbH_ShIW.js} +9 -9
  140. package/dist/{onboarding.gateway-config-DPBNWNV6.js → onboarding.gateway-config-CiRo9EMt.js} +8 -8
  141. package/dist/{onboarding.gateway-config-ZK9517uR.js → onboarding.gateway-config-sNSeEykB.js} +3 -3
  142. package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
  143. package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
  144. package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
  145. package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
  146. package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
  147. package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
  148. package/dist/{pi-embedded-Da0QRlM0.js → pi-embedded-CviuByGd.js} +32 -16
  149. package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
  150. package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
  151. package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
  152. package/dist/{plugin-registry-tG7NXc3Y.js → plugin-registry-B43UosQh.js} +3 -3
  153. package/dist/{plugin-registry-Tlmjr-LX.js → plugin-registry-CS4WgHbu.js} +1 -1
  154. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -1
  155. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +18 -6
  156. package/dist/{plugins-cli-CRKD8aho.js → plugins-cli-BV2wbjfI.js} +54 -54
  157. package/dist/{plugins-cli-Cm0G_-Y5.js → plugins-cli-BY42hyHP.js} +7 -7
  158. package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
  159. package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
  160. package/dist/{program-DEmAlwmD.js → program-P9F1DxBa.js} +12 -12
  161. package/dist/{program-context-DRCRbDpu.js → program-context-BmXxHUKe.js} +40 -40
  162. package/dist/{prompt-select-styled-pomsR-zf.js → prompt-select-styled-B2ah467m.js} +7 -7
  163. package/dist/{prompt-select-styled-B41Tx9aC.js → prompt-select-styled-BlQZX6pK.js} +38 -38
  164. package/dist/{provider-auth-helpers-rKWs_r7a.js → provider-auth-helpers-Bgb_Bfp9.js} +1 -1
  165. package/dist/{provider-auth-helpers-CdQwOam7.js → provider-auth-helpers-WLwb6tL4.js} +6 -6
  166. package/dist/{push-apns-eCM0qmrY.js → push-apns-CBGvXev_.js} +4 -4
  167. package/dist/{push-apns-CZPUHftn.js → push-apns-DnSCjFu7.js} +1 -1
  168. package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
  169. package/dist/{pw-ai-DOAsQ5NX.js → pw-ai-v__CyAlM.js} +1 -1
  170. package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
  171. package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
  172. package/dist/{register.agent-BQPvYYdn.js → register.agent-BuEcmVg0.js} +12 -12
  173. package/dist/{register.agent-N1hoqMFR.js → register.agent-CXdTiqyP.js} +67 -67
  174. package/dist/{register.configure-BHHZ44xB.js → register.configure-DVcn-gCO.js} +70 -70
  175. package/dist/{register.configure-BAc3P4Z-.js → register.configure-YDKJ-KQg.js} +14 -14
  176. package/dist/{register.maintenance-lX0a3Hzl.js → register.maintenance-BiGvpEj-.js} +13 -13
  177. package/dist/{register.maintenance-DDgy5Iyy.js → register.maintenance-cpspl8D6.js} +67 -67
  178. package/dist/{register.message-Br-IH_0z.js → register.message-BIuLbESM.js} +7 -7
  179. package/dist/{register.message-B4lDhHpE.js → register.message-BjcYy5UG.js} +47 -47
  180. package/dist/{register.onboard-B-GoYJIc.js → register.onboard-C4vIASed.js} +6 -6
  181. package/dist/{register.onboard-Bv0s2_KV.js → register.onboard-D4RN92s2.js} +25 -25
  182. package/dist/{register.setup-DQ6KLkAI.js → register.setup-BvoXF0xl.js} +28 -28
  183. package/dist/{register.setup-4lNdC98i.js → register.setup-D-Jt2e1d.js} +6 -6
  184. package/dist/{register.status-health-sessions-Cg7bK5K2.js → register.status-health-sessions-BY9hMD1s.js} +8 -8
  185. package/dist/{register.status-health-sessions-ByGn71_M.js → register.status-health-sessions-DjDvCXBn.js} +41 -41
  186. package/dist/{register.subclis-FMlcLBX0.js → register.subclis-Cibmeapc.js} +20 -20
  187. package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
  188. package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
  189. package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
  190. package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
  191. package/dist/{rpc-Dk1Az_d8.js → rpc-BnAKPQDB.js} +1 -1
  192. package/dist/{rpc-JAmDaTYt.js → rpc-CwxSZZOx.js} +1 -1
  193. package/dist/{run-main-DSyeVDsT.js → run-main-BhEQjKtM.js} +20 -20
  194. package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
  195. package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
  196. package/dist/{security-cli-DmgGLP83.js → security-cli-CS-ZT1LE.js} +3 -3
  197. package/dist/{security-cli-D47LQbpf.js → security-cli-DJd7Fcdy.js} +29 -29
  198. package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
  199. package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
  200. package/dist/{server-methods-DGBBt49x.js → server-methods-CWxr5b-w.js} +19 -13
  201. package/dist/{server-methods-BkHB2MOW.js → server-methods-DfVfzYqq.js} +68 -62
  202. package/dist/{server-node-events-C186LRm0.js → server-node-events-B0yC6hi1.js} +48 -48
  203. package/dist/{server-node-events-D-Akk3uq.js → server-node-events-ClDEcUTJ.js} +8 -8
  204. package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
  205. package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
  206. package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
  207. package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
  208. package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
  209. package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
  210. package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
  211. package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
  212. package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
  213. package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
  214. package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
  215. package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
  216. package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
  217. package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
  218. package/dist/{status-CFgCSaDq.js → status-BWxLtb3D.js} +23 -23
  219. package/dist/{status-poPDyC8O.js → status-Doq8T1zj.js} +3 -3
  220. package/dist/{status-Bahhq7OQ.js → status-K1k4g3Ai.js} +1 -1
  221. package/dist/{status-D9LC5P_Y.js → status-ojZB_Lrf.js} +5 -5
  222. package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
  223. package/dist/{subagent-registry-V2o45tIn.js → subagent-registry-BOt7g9hn.js} +21 -10
  224. package/dist/{symframe-cli-bxdpivve.js → symframe-cli-CrUtJw_7.js} +31 -7
  225. package/dist/{symframe-cli-ppdMo15M.js → symframe-cli-D1CtN3pf.js} +37 -13
  226. package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
  227. package/dist/{synthesis-B2EyHFXy.js → synthesis-BIQLrbys.js} +6 -6
  228. package/dist/{synthesis-C2WbvLOI.js → synthesis-D91XE0n4.js} +2 -2
  229. package/dist/{synthesis-DGau1ONT.js → synthesis-DuP2d469.js} +4 -4
  230. package/dist/{synthesis-CPSq83PP.js → synthesis-VZNnlUTf.js} +45 -45
  231. package/dist/{system-cli-nPyjUPBH.js → system-cli-CvN-Wq9U.js} +3 -3
  232. package/dist/{system-cli-BroqLjZ6.js → system-cli-r7WJj0Xh.js} +7 -7
  233. package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
  234. package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
  235. package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
  236. package/dist/{tui-Bp9k5skv.js → tui-BxgdImL_.js} +2 -2
  237. package/dist/{tui-DzROrE20.js → tui-J7Jxp-FF.js} +7 -7
  238. package/dist/{tui-cli-BHBF8O-3.js → tui-cli-DR48dU_C.js} +19 -19
  239. package/dist/{tui-cli-Dv4hBFdc.js → tui-cli-DqvgN5ng.js} +3 -3
  240. package/dist/{unified-runner-CIQIkbvi.js → unified-runner-CdJx7yN8.js} +25 -9
  241. package/dist/{unified-runner-CduaBH_0.js → unified-runner-DXjH-prv.js} +117 -106
  242. package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
  243. package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
  244. package/dist/{update-cli-WcLxjBiY.js → update-cli-CKpjWtlv.js} +77 -77
  245. package/dist/{update-cli-BKnHBe8a.js → update-cli-Dn6QQZLd.js} +14 -14
  246. package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
  247. package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
  248. package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
  249. package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
  250. package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
  251. package/extensions/memory-core/package.json +1 -1
  252. package/extensions/msteams/CHANGELOG.md +12 -0
  253. package/extensions/msteams/package.json +1 -1
  254. package/extensions/open-prose/package.json +1 -1
  255. package/extensions/outlook/package.json +1 -1
  256. package/extensions/slack/package.json +1 -1
  257. 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-DavRjdTi.js";
56
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-CHLdCC6u.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-BFnx3v3_.js";
56
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-DG6PODgu.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-k0MT6NBw.js";
66
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-BccaLPi8.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-CTrfpKT3.js";
66
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-Bpjj5p7I.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-B-Cp1Sb1.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-CHNghdrm.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,
@@ -4689,6 +4689,12 @@ function buildAgentSystemPrompt(params) {
4689
4689
  " - `awaiting` — deferred/scheduled/in-flight work (sub-agent output, scheduled task)",
4690
4690
  "Renderer `type`: `text` · `markdown` · `code` (with `language` hljs hint) · `email-draft` (with `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (`url` + optional `mimeType`).",
4691
4691
  "Use `action: \"update\"` with the same `id` to revise a card you pushed earlier (e.g. iterate a draft across turns). `action: \"remove\"` to dismiss. Set `force: true` only when overriding a sticky card — sticky cards represent the user's pinned context and shouldn't be clobbered by routine pushes.",
4692
+ "Attention verbs (Stage C — id-only, no card body):",
4693
+ " - `dwell` — pull a card to the top with a brief highlight pulse. Use when the user's next message references something you pushed earlier and you want to draw their eye to it.",
4694
+ " - `release` — soft-dismiss a card with a fade-out. Recoverable via `recall` for ~10 most-recent. Prefer this over `remove` when letting a thought go gracefully (e.g. a weighing option just decided against).",
4695
+ " - `recall` — re-summon a recently-released card (id optional → most-recent).",
4696
+ " - `pin` — persist a card across reload + /new (user-curated; the user can also pin from the UI).",
4697
+ " - `unpin` — remove the pin; does NOT drop the card.",
4692
4698
  "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.",
4693
4699
  "",
4694
4700
  ...compactMode ? [] : [
@@ -5822,7 +5828,7 @@ async function routeReply(params) {
5822
5828
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
5823
5829
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
5824
5830
  try {
5825
- const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
5831
+ const { deliverOutboundPayloads } = await import("./deliver-CWMFmMCv.js").then((n) => n.n);
5826
5832
  return {
5827
5833
  ok: true,
5828
5834
  messageId: (await deliverOutboundPayloads({
@@ -11663,7 +11669,7 @@ var MediaAttachmentCache = class {
11663
11669
  const size = await this.ensureLocalStat(entry);
11664
11670
  if (entry.resolvedPath) {
11665
11671
  if (size !== void 0 && size > params.maxBytes) throw new MediaUnderstandingSkipError("maxBytes", `Attachment ${params.attachmentIndex + 1} exceeds maxBytes ${params.maxBytes}`);
11666
- const buffer = await fs$1.readFile(entry.resolvedPath);
11672
+ const buffer = await fsPromises.readFile(entry.resolvedPath);
11667
11673
  entry.buffer = buffer;
11668
11674
  entry.bufferMime = entry.bufferMime ?? entry.attachment.mime ?? await detectMime({
11669
11675
  buffer,
@@ -11733,10 +11739,10 @@ var MediaAttachmentCache = class {
11733
11739
  prefix: "symi-media",
11734
11740
  extension: path.extname(bufferResult.fileName || "") || ""
11735
11741
  });
11736
- await fs$1.writeFile(tmpPath, bufferResult.buffer);
11742
+ await fsPromises.writeFile(tmpPath, bufferResult.buffer);
11737
11743
  entry.tempPath = tmpPath;
11738
11744
  entry.tempCleanup = async () => {
11739
- await fs$1.unlink(tmpPath).catch(() => {});
11745
+ await fsPromises.unlink(tmpPath).catch(() => {});
11740
11746
  };
11741
11747
  return {
11742
11748
  path: tmpPath,
@@ -11783,12 +11789,12 @@ var MediaAttachmentCache = class {
11783
11789
  if (entry.statSize !== void 0) return entry.statSize;
11784
11790
  try {
11785
11791
  const currentPath = entry.resolvedPath;
11786
- const stat = await fs$1.stat(currentPath);
11792
+ const stat = await fsPromises.stat(currentPath);
11787
11793
  if (!stat.isFile()) {
11788
11794
  entry.resolvedPath = void 0;
11789
11795
  return;
11790
11796
  }
11791
- const canonicalPath = await fs$1.realpath(currentPath).catch(() => currentPath);
11797
+ const canonicalPath = await fsPromises.realpath(currentPath).catch(() => currentPath);
11792
11798
  if (!isInboundPathAllowed({
11793
11799
  filePath: canonicalPath,
11794
11800
  roots: await this.getCanonicalLocalPathRoots()
@@ -11810,7 +11816,7 @@ var MediaAttachmentCache = class {
11810
11816
  if (this.canonicalLocalPathRoots) return await this.canonicalLocalPathRoots;
11811
11817
  this.canonicalLocalPathRoots = (async () => mergeInboundPathRoots(this.localPathRoots, await Promise.all(this.localPathRoots.map(async (root) => {
11812
11818
  if (root.includes("*")) return root;
11813
- return await fs$1.realpath(root).catch(() => root);
11819
+ return await fsPromises.realpath(root).catch(() => root);
11814
11820
  }))))();
11815
11821
  return await this.canonicalLocalPathRoots;
11816
11822
  }
@@ -11881,7 +11887,7 @@ function formatAudioTranscripts(outputs) {
11881
11887
  async function fileExists(filePath) {
11882
11888
  if (!filePath) return false;
11883
11889
  try {
11884
- await fs$1.stat(filePath);
11890
+ await fsPromises.stat(filePath);
11885
11891
  return true;
11886
11892
  } catch {
11887
11893
  return false;
@@ -11981,7 +11987,7 @@ async function resolveCliOutput(params) {
11981
11987
  const commandId = commandBase(params.command);
11982
11988
  const fileOutput = commandId === "whisper-cli" ? resolveWhisperCppOutputPath(params.args) : commandId === "whisper" ? resolveWhisperOutputPath(params.args, params.mediaPath) : null;
11983
11989
  if (fileOutput && await fileExists(fileOutput)) try {
11984
- const content = await fs$1.readFile(fileOutput, "utf8");
11990
+ const content = await fsPromises.readFile(fileOutput, "utf8");
11985
11991
  if (content.trim()) return content.trim();
11986
11992
  } catch {}
11987
11993
  if (commandId === "gemini") {
@@ -12272,7 +12278,7 @@ async function runCliEntry(params) {
12272
12278
  maxBytes,
12273
12279
  timeoutMs
12274
12280
  });
12275
- const outputDir = await fs$1.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12281
+ const outputDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "symi-media-cli-"));
12276
12282
  const mediaPath = pathResult.path;
12277
12283
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
12278
12284
  const templCtx = {
@@ -12306,7 +12312,7 @@ async function runCliEntry(params) {
12306
12312
  model: command
12307
12313
  };
12308
12314
  } finally {
12309
- await fs$1.rm(outputDir, {
12315
+ await fsPromises.rm(outputDir, {
12310
12316
  recursive: true,
12311
12317
  force: true
12312
12318
  }).catch(() => {});
@@ -12350,9 +12356,9 @@ function candidateBinaryNames(name) {
12350
12356
  }
12351
12357
  async function isExecutable$1(filePath) {
12352
12358
  try {
12353
- if (!(await fs$1.stat(filePath)).isFile()) return false;
12359
+ if (!(await fsPromises.stat(filePath)).isFile()) return false;
12354
12360
  if (process.platform === "win32") return true;
12355
- await fs$1.access(filePath, constants.X_OK);
12361
+ await fsPromises.access(filePath, constants.X_OK);
12356
12362
  return true;
12357
12363
  } catch {
12358
12364
  return false;
@@ -14064,7 +14070,7 @@ async function createModelSelectionState(params) {
14064
14070
  }
14065
14071
  }
14066
14072
  if (sessionEntry && sessionStore && sessionKey && sessionEntry.authProfileOverride) {
14067
- const { ensureAuthProfileStore } = await import("./auth-profiles-Ce7R_25e.js").then((n) => n.t);
14073
+ const { ensureAuthProfileStore } = await import("./auth-profiles-D5nYBj_Z.js").then((n) => n.t);
14068
14074
  const profile = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false }).profiles[sessionEntry.authProfileOverride];
14069
14075
  const providerKey = normalizeProviderId(provider);
14070
14076
  if (!profile || normalizeProviderId(profile.provider) !== providerKey) await clearSessionAuthProfileOverride({
@@ -17208,7 +17214,7 @@ async function resolveSandboxWorkdir(params) {
17208
17214
  cwd: process.cwd(),
17209
17215
  root: params.sandbox.workspaceDir
17210
17216
  });
17211
- if (!(await fs$1.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17217
+ if (!(await fsPromises.stat(resolved.resolved)).isDirectory()) throw new Error("workdir is not a directory");
17212
17218
  const relative = resolved.relative ? resolved.relative.split(path.sep).join(path.posix.sep) : "";
17213
17219
  const containerWorkdir = relative ? path.posix.join(params.sandbox.containerWorkdir, relative) : params.sandbox.containerWorkdir;
17214
17220
  return {
@@ -18222,13 +18228,13 @@ async function validateScriptFileForShellBleed(params) {
18222
18228
  cwd: params.workdir,
18223
18229
  root: params.workdir
18224
18230
  });
18225
- stat = await fs$1.stat(absPath);
18231
+ stat = await fsPromises.stat(absPath);
18226
18232
  } catch {
18227
18233
  return;
18228
18234
  }
18229
18235
  if (!stat.isFile()) return;
18230
18236
  if (stat.size > 512 * 1024) return;
18231
- const content = await fs$1.readFile(absPath, "utf-8");
18237
+ const content = await fsPromises.readFile(absPath, "utf-8");
18232
18238
  const first = /\$[A-Z_][A-Z0-9_]{1,}/g.exec(content);
18233
18239
  if (first) {
18234
18240
  const idx = first.index;
@@ -22963,7 +22969,7 @@ async function handleCommands(params) {
22963
22969
  try {
22964
22970
  const messages = [];
22965
22971
  if (sessionFile) {
22966
- const content = await fs$1.readFile(sessionFile, "utf-8");
22972
+ const content = await fsPromises.readFile(sessionFile, "utf-8");
22967
22973
  for (const line of content.split("\n")) {
22968
22974
  if (!line.trim()) continue;
22969
22975
  try {
@@ -25150,7 +25156,7 @@ async function readJsonlFromPath(jsonlPath) {
25150
25156
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${resolved}`);
25151
25157
  throw new Error("jsonlPath outside allowed roots");
25152
25158
  }
25153
- const canonical = await fs$1.realpath(resolved).catch(() => resolved);
25159
+ const canonical = await fsPromises.realpath(resolved).catch(() => resolved);
25154
25160
  if (!isInboundPathAllowed({
25155
25161
  filePath: canonical,
25156
25162
  roots
@@ -25158,7 +25164,7 @@ async function readJsonlFromPath(jsonlPath) {
25158
25164
  if (shouldLogVerbose()) logVerbose(`Blocked canvas jsonlPath outside allowed roots: ${canonical}`);
25159
25165
  throw new Error("jsonlPath outside allowed roots");
25160
25166
  }
25161
- return await fs$1.readFile(canonical, "utf8");
25167
+ return await fsPromises.readFile(canonical, "utf8");
25162
25168
  }
25163
25169
  const CanvasToolSchema = Type.Object({
25164
25170
  action: stringEnum(CANVAS_ACTIONS),
@@ -25929,7 +25935,12 @@ const ARTIFACT_TYPES = [
25929
25935
  const ARTIFACT_ACTIONS = [
25930
25936
  "add",
25931
25937
  "update",
25932
- "remove"
25938
+ "remove",
25939
+ "dwell",
25940
+ "release",
25941
+ "recall",
25942
+ "pin",
25943
+ "unpin"
25933
25944
  ];
25934
25945
  /**
25935
25946
  * Stage A: intent vocabulary added as orthogonal metadata to renderer type.
@@ -25986,19 +25997,19 @@ function createDisplayArtifactTool() {
25986
25997
  return {
25987
25998
  label: "Display Artifact",
25988
25999
  name: "display_artifact",
25989
- 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), or action=remove to dismiss.",
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.",
25990
26001
  parameters: DisplayArtifactSchema,
25991
26002
  execute: async (_toolCallId, args) => {
25992
26003
  const params = args;
25993
26004
  const actionRaw = readStringParam(params, "action");
25994
- const action = actionRaw === "update" || actionRaw === "remove" ? actionRaw : "add";
26005
+ const action = ARTIFACT_ACTIONS.includes(actionRaw ?? "") ? actionRaw : "add";
25995
26006
  const id = readStringParam(params, "id") || (action === "add" ? genCardId() : void 0);
25996
- if (action !== "add" && !id) return jsonResult({
26007
+ if (action !== "add" && action !== "recall" && !id) return jsonResult({
25997
26008
  ok: false,
25998
26009
  error: `${action} requires an id`
25999
26010
  });
26000
26011
  const force = params.force === true;
26001
- if (action === "remove") {
26012
+ if (action === "remove" || action === "dwell" || action === "release" || action === "recall" || action === "pin" || action === "unpin") {
26002
26013
  emitSymframePush({
26003
26014
  action,
26004
26015
  id,
@@ -26827,7 +26838,7 @@ async function hydrateAttachmentPayload(params) {
26827
26838
  accountId: params.accountId
26828
26839
  }),
26829
26840
  sandboxValidated: true,
26830
- readFile: (filePath) => fs$1.readFile(filePath)
26841
+ readFile: (filePath) => fsPromises.readFile(filePath)
26831
26842
  });
26832
26843
  params.args.buffer = media.buffer.toString("base64");
26833
26844
  if (!contentTypeParam && media.contentType) params.args.contentType = media.contentType;
@@ -33441,7 +33452,7 @@ async function deliverSessionMaintenanceWarning(params) {
33441
33452
  return;
33442
33453
  }
33443
33454
  try {
33444
- const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
33455
+ const { deliverOutboundPayloads } = await import("./deliver-CWMFmMCv.js").then((n) => n.n);
33445
33456
  await deliverOutboundPayloads({
33446
33457
  cfg: params.cfg,
33447
33458
  channel,
@@ -33846,7 +33857,7 @@ async function stageSandboxMedia(params) {
33846
33857
  };
33847
33858
  try {
33848
33859
  const destDir = sandbox ? path.join(effectiveWorkspaceDir, "media", "inbound") : effectiveWorkspaceDir;
33849
- await fs$1.mkdir(destDir, { recursive: true });
33860
+ await fsPromises.mkdir(destDir, { recursive: true });
33850
33861
  const remoteAttachmentRoots = resolveIMessageRemoteAttachmentRoots({
33851
33862
  cfg,
33852
33863
  accountId: ctx.AccountId
@@ -33896,7 +33907,7 @@ async function stageSandboxMedia(params) {
33896
33907
  usedNames.add(fileName);
33897
33908
  const dest = path.join(destDir, fileName);
33898
33909
  if (ctx.MediaRemoteHost) await scpFile(ctx.MediaRemoteHost, source, dest);
33899
- else await fs$1.copyFile(source, dest);
33910
+ else await fsPromises.copyFile(source, dest);
33900
33911
  const stagedPath = sandbox ? path.posix.join("media", "inbound", fileName) : dest;
33901
33912
  staged.set(source, stagedPath);
33902
33913
  }
@@ -39227,7 +39238,7 @@ function readSlackExternalArgMenuToken(raw) {
39227
39238
  }
39228
39239
  let commandsRegistry;
39229
39240
  async function getCommandsRegistry() {
39230
- if (!commandsRegistry) commandsRegistry = await import("./commands-registry-Ca5hh7nh.js").then((n) => n.t);
39241
+ if (!commandsRegistry) commandsRegistry = await import("./commands-registry-CwXsDVuO.js").then((n) => n.t);
39231
39242
  return commandsRegistry;
39232
39243
  }
39233
39244
  function encodeSlackCommandArgValue(parts) {
@@ -39569,11 +39580,11 @@ async function registerSlackMonitorSlashCommands(params) {
39569
39580
  const channelName = channelInfo?.name;
39570
39581
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
39571
39582
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
39572
- import("./resolve-route-C1IIA6kH.js").then((n) => n.r),
39583
+ import("./resolve-route-Du0VftVs.js").then((n) => n.r),
39573
39584
  import("./inbound-context-B7Rvs8pK.js").then((n) => n.n),
39574
39585
  Promise.resolve().then(() => provider_dispatcher_exports)
39575
39586
  ]);
39576
- const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CffvEjpp.js").then((n) => n.t), import("./reply-prefix-BFNeXT65.js").then((n) => n.n)]);
39587
+ const [{ resolveConversationLabel }, { createReplyPrefixOptions }] = await Promise.all([import("./conversation-label-CffvEjpp.js").then((n) => n.t), import("./reply-prefix-CtZtkTJK.js").then((n) => n.n)]);
39577
39588
  const route = resolveAgentRoute({
39578
39589
  cfg,
39579
39590
  channel: "slack",
@@ -39630,7 +39641,7 @@ async function registerSlackMonitorSlashCommands(params) {
39630
39641
  });
39631
39642
  const deliverSlashPayloads = async (replies) => {
39632
39643
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
39633
- import("./replies-CbXXjn9X.js").then((n) => n.r),
39644
+ import("./replies-B_3j7R_Q.js").then((n) => n.r),
39634
39645
  import("./chunk-BxfKjCUx.js").then((n) => n.s),
39635
39646
  import("./markdown-tables-CS1Tvb3z.js").then((n) => n.t)
39636
39647
  ]);
@@ -39685,7 +39696,7 @@ async function registerSlackMonitorSlashCommands(params) {
39685
39696
  let nativeCommands = [];
39686
39697
  if (nativeEnabled) {
39687
39698
  reg = await getCommandsRegistry();
39688
- const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DDGGlq68.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39699
+ const skillCommands = nativeSkillsEnabled ? (await import("./skill-commands-DWvXs3lz.js").then((n) => n.a)).listSkillCommandsForAgents({ cfg }) : [];
39689
39700
  nativeCommands = reg.listNativeCommandSpecsForConfig(cfg, {
39690
39701
  skillCommands,
39691
39702
  provider: "slack"
@@ -40818,7 +40829,7 @@ function resolvePluginTools(params) {
40818
40829
  //#endregion
40819
40830
  //#region src/agents/apply-patch-update.ts
40820
40831
  async function defaultReadFile(filePath) {
40821
- return fs$1.readFile(filePath, "utf8");
40832
+ return fsPromises.readFile(filePath, "utf8");
40822
40833
  }
40823
40834
  async function applyUpdateHunk(filePath, chunks, options) {
40824
40835
  const originalLines = (await (options?.readFile ?? defaultReadFile)(filePath).catch((err) => {
@@ -41062,10 +41073,10 @@ function resolvePatchFileOps(options) {
41062
41073
  };
41063
41074
  }
41064
41075
  return {
41065
- readFile: (filePath) => fs$1.readFile(filePath, "utf8"),
41066
- writeFile: (filePath, content) => fs$1.writeFile(filePath, content, "utf8"),
41067
- remove: (filePath) => fs$1.rm(filePath),
41068
- mkdirp: (dir) => fs$1.mkdir(dir, { recursive: true }).then(() => {})
41076
+ readFile: (filePath) => fsPromises.readFile(filePath, "utf8"),
41077
+ writeFile: (filePath, content) => fsPromises.writeFile(filePath, content, "utf8"),
41078
+ remove: (filePath) => fsPromises.rm(filePath),
41079
+ mkdirp: (dir) => fsPromises.mkdir(dir, { recursive: true }).then(() => {})
41069
41080
  };
41070
41081
  }
41071
41082
  async function ensureDir(filePath, ops) {
@@ -42270,7 +42281,7 @@ async function repairSessionFileIfNeeded(params) {
42270
42281
  };
42271
42282
  let content;
42272
42283
  try {
42273
- content = await fs$1.readFile(sessionFile, "utf-8");
42284
+ content = await fsPromises.readFile(sessionFile, "utf-8");
42274
42285
  } catch (err) {
42275
42286
  if (err?.code === "ENOENT") return {
42276
42287
  repaired: false,
@@ -42318,15 +42329,15 @@ async function repairSessionFileIfNeeded(params) {
42318
42329
  const backupPath = `${sessionFile}.bak-${process.pid}-${Date.now()}`;
42319
42330
  const tmpPath = `${sessionFile}.repair-${process.pid}-${Date.now()}.tmp`;
42320
42331
  try {
42321
- const stat = await fs$1.stat(sessionFile).catch(() => null);
42322
- await fs$1.writeFile(backupPath, content, "utf-8");
42323
- if (stat) await fs$1.chmod(backupPath, stat.mode);
42324
- await fs$1.writeFile(tmpPath, cleaned, "utf-8");
42325
- if (stat) await fs$1.chmod(tmpPath, stat.mode);
42326
- await fs$1.rename(tmpPath, sessionFile);
42332
+ const stat = await fsPromises.stat(sessionFile).catch(() => null);
42333
+ await fsPromises.writeFile(backupPath, content, "utf-8");
42334
+ if (stat) await fsPromises.chmod(backupPath, stat.mode);
42335
+ await fsPromises.writeFile(tmpPath, cleaned, "utf-8");
42336
+ if (stat) await fsPromises.chmod(tmpPath, stat.mode);
42337
+ await fsPromises.rename(tmpPath, sessionFile);
42327
42338
  } catch (err) {
42328
42339
  try {
42329
- await fs$1.unlink(tmpPath);
42340
+ await fsPromises.unlink(tmpPath);
42330
42341
  } catch (cleanupErr) {
42331
42342
  params.warn?.(`session file repair cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : "unknown error"} (${path.basename(tmpPath)})`);
42332
42343
  }
@@ -43599,7 +43610,7 @@ async function prewarmSessionFile(sessionFile) {
43599
43610
  if (!isSessionManagerCacheEnabled()) return;
43600
43611
  if (isSessionManagerCached(sessionFile)) return;
43601
43612
  try {
43602
- const handle = await fs$1.open(sessionFile, "r");
43613
+ const handle = await fsPromises.open(sessionFile, "r");
43603
43614
  try {
43604
43615
  const buffer = Buffer$1.alloc(4096);
43605
43616
  await handle.read(buffer, 0, buffer.length, 0);
@@ -43739,7 +43750,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43739
43750
  } catch (err) {
43740
43751
  return fail(describeUnknownError(err));
43741
43752
  }
43742
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
43753
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
43743
43754
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
43744
43755
  const sandbox = await resolveSandboxContext({
43745
43756
  config: params.config,
@@ -43747,7 +43758,7 @@ async function compactEmbeddedPiSessionDirect(params) {
43747
43758
  workspaceDir: resolvedWorkspace
43748
43759
  });
43749
43760
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
43750
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
43761
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
43751
43762
  await ensureSessionHeader({
43752
43763
  sessionFile: params.sessionFile,
43753
43764
  sessionId: params.sessionId,
@@ -44072,12 +44083,12 @@ function getQueuedFileWriter(writers, filePath) {
44072
44083
  const existing = writers.get(filePath);
44073
44084
  if (existing) return existing;
44074
44085
  const dir = path.dirname(filePath);
44075
- const ready = fs$1.mkdir(dir, { recursive: true }).catch(() => void 0);
44086
+ const ready = fsPromises.mkdir(dir, { recursive: true }).catch(() => void 0);
44076
44087
  let queue = Promise.resolve();
44077
44088
  const writer = {
44078
44089
  filePath,
44079
44090
  write: (line) => {
44080
- queue = queue.then(() => ready).then(() => fs$1.appendFile(filePath, line, "utf8")).catch(() => void 0);
44091
+ queue = queue.then(() => ready).then(() => fsPromises.appendFile(filePath, line, "utf8")).catch(() => void 0);
44081
44092
  }
44082
44093
  };
44083
44094
  writers.set(filePath, writer);
@@ -47168,7 +47179,7 @@ Use the message tool with buttons:
47168
47179
  */
47169
47180
  async function readSessionFile(sessionFile) {
47170
47181
  try {
47171
- return await fs$1.readFile(sessionFile, "utf-8");
47182
+ return await fsPromises.readFile(sessionFile, "utf-8");
47172
47183
  } catch {
47173
47184
  return null;
47174
47185
  }
@@ -47177,8 +47188,8 @@ async function writeAtomically(sessionFile, text) {
47177
47188
  const dir = path.dirname(sessionFile);
47178
47189
  const base = path.basename(sessionFile);
47179
47190
  const tmp = path.join(dir, `.${base}.prune-${process.pid}-${Date.now()}.tmp`);
47180
- await fs$1.writeFile(tmp, text, "utf-8");
47181
- await fs$1.rename(tmp, sessionFile);
47191
+ await fsPromises.writeFile(tmp, text, "utf-8");
47192
+ await fsPromises.rename(tmp, sessionFile);
47182
47193
  }
47183
47194
  /**
47184
47195
  * Remove empty assistant JSONL entries from the session file.
@@ -47280,7 +47291,7 @@ function isInPoisonRange(version) {
47280
47291
  */
47281
47292
  async function checkSessionPoison(sessionFile) {
47282
47293
  try {
47283
- const firstLine = (await fs$1.readFile(sessionFile, "utf-8")).split("\n")[0];
47294
+ const firstLine = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n")[0];
47284
47295
  if (!firstLine) return null;
47285
47296
  const header = JSON.parse(firstLine);
47286
47297
  if (header.type !== "session") return null;
@@ -47298,7 +47309,7 @@ async function checkSessionPoison(sessionFile) {
47298
47309
  */
47299
47310
  async function archivePoisonedSession(sessionFile) {
47300
47311
  const archiveName = `${sessionFile}.archived-poison.${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
47301
- await fs$1.rename(sessionFile, archiveName);
47312
+ await fsPromises.rename(sessionFile, archiveName);
47302
47313
  return archiveName;
47303
47314
  }
47304
47315
  /**
@@ -47307,14 +47318,14 @@ async function archivePoisonedSession(sessionFile) {
47307
47318
  */
47308
47319
  async function stampSessionVersion(sessionFile) {
47309
47320
  try {
47310
- const lines = (await fs$1.readFile(sessionFile, "utf-8")).split("\n");
47321
+ const lines = (await fsPromises.readFile(sessionFile, "utf-8")).split("\n");
47311
47322
  if (lines.length === 0) return;
47312
47323
  const header = JSON.parse(lines[0]);
47313
47324
  if (header.type !== "session") return;
47314
47325
  if (header.symiVersion === VERSION) return;
47315
47326
  header.symiVersion = VERSION;
47316
47327
  lines[0] = JSON.stringify(header);
47317
- await fs$1.writeFile(sessionFile, lines.join("\n"), "utf-8");
47328
+ await fsPromises.writeFile(sessionFile, lines.join("\n"), "utf-8");
47318
47329
  } catch {}
47319
47330
  }
47320
47331
  /**
@@ -47543,7 +47554,7 @@ async function prepareSessionManagerForRun(params) {
47543
47554
  return;
47544
47555
  }
47545
47556
  if (params.hadSessionFile && header && !hasAssistant) {
47546
- await fs$1.writeFile(params.sessionFile, "", "utf-8");
47557
+ await fsPromises.writeFile(params.sessionFile, "", "utf-8");
47547
47558
  sm.fileEntries = [header];
47548
47559
  sm.byId?.clear?.();
47549
47560
  sm.labelsById?.clear?.();
@@ -48101,7 +48112,7 @@ async function runEmbeddedAttempt(params) {
48101
48112
  const prevCwd = process.cwd();
48102
48113
  const runAbortController = new AbortController();
48103
48114
  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"}`);
48104
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
48115
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
48105
48116
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
48106
48117
  const sandbox = await resolveSandboxContext({
48107
48118
  config: params.config,
@@ -48109,7 +48120,7 @@ async function runEmbeddedAttempt(params) {
48109
48120
  workspaceDir: resolvedWorkspace
48110
48121
  });
48111
48122
  const effectiveWorkspace = sandbox?.enabled ? sandbox.workspaceAccess === "rw" ? resolvedWorkspace : sandbox.workspaceDir : resolvedWorkspace;
48112
- await fs$1.mkdir(effectiveWorkspace, { recursive: true });
48123
+ await fsPromises.mkdir(effectiveWorkspace, { recursive: true });
48113
48124
  let restoreSkillEnv;
48114
48125
  process.chdir(effectiveWorkspace);
48115
48126
  try {
@@ -48318,7 +48329,7 @@ async function runEmbeddedAttempt(params) {
48318
48329
  sessionFile: params.sessionFile,
48319
48330
  warn: (message) => log$7.warn(message)
48320
48331
  });
48321
- const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
48332
+ const hadSessionFile = await fsPromises.stat(params.sessionFile).then(() => true).catch(() => false);
48322
48333
  const transcriptPolicy = resolveTranscriptPolicy({
48323
48334
  modelApi: params.model?.api,
48324
48335
  provider: params.provider,
@@ -49410,7 +49421,7 @@ async function runEmbeddedPiAgent(params) {
49410
49421
  }
49411
49422
  runLoopIterations += 1;
49412
49423
  attemptedThinking.add(thinkLevel);
49413
- await fs$1.mkdir(resolvedWorkspace, { recursive: true });
49424
+ await fsPromises.mkdir(resolvedWorkspace, { recursive: true });
49414
49425
  const prompt = provider === "anthropic" ? scrubAnthropicRefusalMagic(params.prompt) : params.prompt;
49415
49426
  const attempt = await runEmbeddedAttempt({
49416
49427
  sessionId: params.sessionId,