@symerian/symi 3.5.25 → 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 (254) 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 +4 -4
  17. package/dist/bundled/session-memory/handler.js +4 -4
  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/{chrome-OTJg3QKn.js → chrome-CmQwGAuL.js} +7 -7
  27. package/dist/{cli-BafqEuaj.js → cli-DHG9iZJi.js} +6 -6
  28. package/dist/{cli-CadU09SC.js → cli-qf0qK7oi.js} +45 -45
  29. package/dist/{client-yVTJ5jx5.js → client-BOd5o3Kp.js} +9 -1
  30. package/dist/{client-Cs9Bh-G0.js → client-DiPa71im.js} +10 -2
  31. package/dist/{command-registry-CLm8TAH3.js → command-registry-DBbzZvh6.js} +11 -11
  32. package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
  33. package/dist/{completion-cli-Dd56ibFZ.js → completion-cli-Ddfrnilx.js} +12 -12
  34. package/dist/{completion-cli-DOBXkVwG.js → completion-cli-DoQrkCAd.js} +2 -2
  35. package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
  36. package/dist/{config-cli-BgHYqFH1.js → config-cli-9a5qBcdo.js} +1 -1
  37. package/dist/{config-cli-GwUJEapt.js → config-cli-JVGYyfYA.js} +4 -4
  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-5md67tCP.js → configure-Bqz2Hvnf.js} +14 -14
  41. package/dist/{configure-DmzM0S7L.js → configure-ryB8EvyP.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 +152 -0
  45. package/dist/control-ui/index.html +42 -0
  46. package/dist/control-ui/js/symframe-modes.js +65 -0
  47. package/dist/control-ui/js/symframe.js +139 -0
  48. package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
  49. package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
  50. package/dist/{cron-cli-BNBs3zue.js → cron-cli-DsGkkt1s.js} +3 -3
  51. package/dist/{cron-cli-CE9bV9Et.js → cron-cli-pZ_7Wzhj.js} +7 -7
  52. package/dist/{daemon-cli-BYiG4GOU.js → daemon-cli-BDzcfcu_.js} +11 -11
  53. package/dist/{daemon-cli-DDqeG2nd.js → daemon-cli-dbAPTgGm.js} +2 -2
  54. package/dist/daemon-cli.js +9 -1
  55. package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
  56. package/dist/{deliver-BiWlR84Y.js → deliver-B04yNX82.js} +4 -4
  57. package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
  58. package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
  59. package/dist/{devices-cli-Bhr6jGtH.js → devices-cli-BIZbo_Pt.js} +6 -6
  60. package/dist/{devices-cli-BJ3rVWOw.js → devices-cli-CIAuYH4P.js} +2 -2
  61. package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
  62. package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
  63. package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
  64. package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
  65. package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
  66. package/dist/{doctor-completion-k0HiL05o.js → doctor-completion-Bk55g4MP.js} +1 -1
  67. package/dist/{doctor-completion-BpUGRguQ.js → doctor-completion-eh7aImCx.js} +2 -2
  68. package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
  69. package/dist/entry.js +1 -1
  70. package/dist/{exec-approvals-cli-CzvIqBUd.js → exec-approvals-cli-B2UY9dZC.js} +13 -13
  71. package/dist/{exec-approvals-cli-Cau1vPQI.js → exec-approvals-cli-BiXeyPPz.js} +4 -4
  72. package/dist/extensionAPI.js +2 -2
  73. package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
  74. package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
  75. package/dist/{gateway-cli-DgmGygc6.js → gateway-cli-BGMVOW2G.js} +16 -16
  76. package/dist/{gateway-cli-D1d5YAt0.js → gateway-cli-BwPy7u0B.js} +98 -98
  77. package/dist/{gateway-rpc-BTGT1SuZ.js → gateway-rpc-DmFOiGIJ.js} +1 -1
  78. package/dist/{gateway-rpc-Kv0-8W2E.js → gateway-rpc-DpRnrv_i.js} +1 -1
  79. package/dist/{glass-ui-ws-BH9WH_VN.js → glass-ui-ws-CwOiILiY.js} +67 -67
  80. package/dist/{glass-ui-ws-Dl45d7eU.js → glass-ui-ws-Z-W33_mF.js} +13 -13
  81. package/dist/{health-DpE9GWGn.js → health-Bc1wmAO5.js} +4 -4
  82. package/dist/{health-znS85U-F.js → health-Dkwuq8ta.js} +1 -1
  83. package/dist/{hooks-cli-Cb9BzCOY.js → hooks-cli-Bn6x6Jnj.js} +7 -7
  84. package/dist/{hooks-cli-D7xxbEwI.js → hooks-cli-DOjHV2fF.js} +59 -59
  85. package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
  86. package/dist/index.js +52 -52
  87. package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
  88. package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
  89. package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
  90. package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
  91. package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
  92. package/dist/llm-slug-generator.js +4 -4
  93. package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
  94. package/dist/{logs-cli-LiAjkog2.js → logs-cli-CJLJ745C.js} +3 -3
  95. package/dist/{logs-cli-DvIVuW0d.js → logs-cli-CYFlhj51.js} +7 -7
  96. package/dist/{manager-V4UCf0Av.js → manager-BHddoe4T.js} +1 -1
  97. package/dist/{manager-CceVgXHV.js → manager-DH00nlW8.js} +1 -1
  98. package/dist/{manager-CoCX7L5u.js → manager-DuWp0CTD.js} +15 -15
  99. package/dist/{manager-Cv4xI8sP.js → manager-F0-SHT1B.js} +1 -1
  100. package/dist/{memory-A2D5e8dL.js → memory-C02Znuee.js} +2 -2
  101. package/dist/{memory-cli-1zjVJITN.js → memory-cli-083UJtVJ.js} +2 -2
  102. package/dist/{memory-cli-D8Z_5-Nz.js → memory-cli-BnBKckEk.js} +12 -12
  103. package/dist/{memory-B067LTL9.js → memory-fFc7GGPZ.js} +5 -5
  104. package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
  105. package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
  106. package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
  107. package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
  108. package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
  109. package/dist/{models-BYev6YAG.js → models-Bh_frCup.js} +3 -3
  110. package/dist/{models-cli-Fa5r1QYP.js → models-cli-BhBu4Dwm.js} +9 -9
  111. package/dist/{models-cli-C979SN3Z.js → models-cli-DVdb_TUS.js} +55 -55
  112. package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
  113. package/dist/{node-cli-DGybtex_.js → node-cli-B0ePfMUr.js} +27 -27
  114. package/dist/{node-cli-Cv7x1gGu.js → node-cli-CBW_ECu_.js} +1 -1
  115. package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
  116. package/dist/{nodes-cli-DaHOBbd4.js → nodes-cli-CJ0gxF5n.js} +3 -3
  117. package/dist/{nodes-cli-C-mEw2av.js → nodes-cli-L0gy-26E.js} +10 -10
  118. package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
  119. package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
  120. package/dist/{onboard-D-m6WTZl.js → onboard-BSxqEQfo.js} +3 -3
  121. package/dist/{onboard-CotuAZi6.js → onboard-D6GZ2t-L.js} +15 -15
  122. package/dist/{onboard-channels-Z-Jkrk5-.js → onboard-channels-BkR3MKMp.js} +1 -1
  123. package/dist/{onboard-channels-DSyynpou.js → onboard-channels-DVS9vciR.js} +4 -4
  124. package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
  125. package/dist/{onboard-helpers-CLXJ8zp0.js → onboard-helpers-CJlheOSJ.js} +8 -8
  126. package/dist/{onboard-helpers-Dhr98nj8.js → onboard-helpers-t7tI9KSA.js} +1 -1
  127. package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
  128. package/dist/{onboard-remote-BYBai0w3.js → onboard-remote-CVZ8l58S.js} +1 -1
  129. package/dist/{onboard-remote-DZdMxd1Q.js → onboard-remote-DH3bPYbE.js} +1 -1
  130. package/dist/{onboard-skills-2SUv-W7i.js → onboard-skills-Bjf7kWvg.js} +1 -1
  131. package/dist/{onboard-skills-BxJlS1Bk.js → onboard-skills-MgcaLiE6.js} +3 -3
  132. package/dist/{onboarding-BckHLQMV.js → onboarding-CrCGoZ4H.js} +7 -7
  133. package/dist/{onboarding-BnoGiOh3.js → onboarding-D-mzwQ_f.js} +12 -12
  134. package/dist/{onboarding.finalize-CbH_ShIW.js → onboarding.finalize-BYzduVFA.js} +9 -9
  135. package/dist/{onboarding.finalize-g86Q4433.js → onboarding.finalize-DBFL76p0.js} +31 -31
  136. package/dist/{onboarding.gateway-config-CEXjbEM0.js → onboarding.gateway-config-BCDgsFl8.js} +8 -8
  137. package/dist/{onboarding.gateway-config-sNSeEykB.js → onboarding.gateway-config-xWUSbtoY.js} +3 -3
  138. package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
  139. package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
  140. package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
  141. package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
  142. package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
  143. package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
  144. package/dist/{pi-embedded-B9rtlNMc.js → pi-embedded-DGnpyHm-.js} +50 -7
  145. package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
  146. package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
  147. package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
  148. package/dist/{plugin-registry-CS4WgHbu.js → plugin-registry-B74FBx4U.js} +1 -1
  149. package/dist/{plugin-registry-AsC9gydF.js → plugin-registry-KP94aK4z.js} +3 -3
  150. package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
  151. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +5 -1
  152. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +7 -2
  153. package/dist/{plugins-cli-CbByGz8z.js → plugins-cli-B4ljapU5.js} +54 -54
  154. package/dist/{plugins-cli-BY42hyHP.js → plugins-cli-Cmf3kRf5.js} +7 -7
  155. package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
  156. package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
  157. package/dist/{program-P9F1DxBa.js → program-CGuYYumL.js} +12 -12
  158. package/dist/{program-context-CiyK6MfV.js → program-context-BzqGUxMS.js} +40 -40
  159. package/dist/{prompt-select-styled-DaNQ_GgB.js → prompt-select-styled-BVkRteee.js} +38 -38
  160. package/dist/{prompt-select-styled-B2ah467m.js → prompt-select-styled-b752FPLG.js} +7 -7
  161. package/dist/{provider-auth-helpers-Bgb_Bfp9.js → provider-auth-helpers-BKveYcEH.js} +1 -1
  162. package/dist/{provider-auth-helpers-D2FDvwT5.js → provider-auth-helpers-C6GjAO-s.js} +6 -6
  163. package/dist/{push-apns-va-DRu4U.js → push-apns-CbbWM63o.js} +4 -4
  164. package/dist/{push-apns-DnSCjFu7.js → push-apns-HNg0rTkI.js} +1 -1
  165. package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
  166. package/dist/{pw-ai-DY_6l11g.js → pw-ai-DLsdzdgc.js} +1 -1
  167. package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
  168. package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
  169. package/dist/{register.agent-BuEcmVg0.js → register.agent-DbPYGG3u.js} +12 -12
  170. package/dist/{register.agent-BqdQ0s30.js → register.agent-DhS2lmWo.js} +67 -67
  171. package/dist/{register.configure-YDKJ-KQg.js → register.configure-B0M15y31.js} +14 -14
  172. package/dist/{register.configure-Dhwi-4FG.js → register.configure-ChjzXxh8.js} +70 -70
  173. package/dist/{register.maintenance-BiGvpEj-.js → register.maintenance-bzLNOqch.js} +13 -13
  174. package/dist/{register.maintenance-iMjNw9uy.js → register.maintenance-frHWf6Xs.js} +67 -67
  175. package/dist/{register.message-BIuLbESM.js → register.message-Bfukmte_.js} +7 -7
  176. package/dist/{register.message-Ao_b9s2g.js → register.message-DWB4eVII.js} +47 -47
  177. package/dist/{register.onboard-ymhSAezZ.js → register.onboard-4P8ud4Sw.js} +25 -25
  178. package/dist/{register.onboard-C4vIASed.js → register.onboard-CDsSVoFI.js} +6 -6
  179. package/dist/{register.setup-D-Jt2e1d.js → register.setup-Bp8rYeRx.js} +6 -6
  180. package/dist/{register.setup-CKs9mqtD.js → register.setup-D0I7sEGc.js} +28 -28
  181. package/dist/{register.status-health-sessions-U-azRmpb.js → register.status-health-sessions-69Gigo_H.js} +41 -41
  182. package/dist/{register.status-health-sessions-BY9hMD1s.js → register.status-health-sessions-DE2db_Uo.js} +8 -8
  183. package/dist/{register.subclis-Cibmeapc.js → register.subclis-QXO75pUm.js} +20 -20
  184. package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
  185. package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
  186. package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
  187. package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
  188. package/dist/{rpc-BnAKPQDB.js → rpc-BBtNUyxN.js} +1 -1
  189. package/dist/{rpc-DjqFrbOc.js → rpc-DTqyJZKO.js} +1 -1
  190. package/dist/{run-main-BhEQjKtM.js → run-main-MD8Z8ydF.js} +20 -20
  191. package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
  192. package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
  193. package/dist/{security-cli-CS-ZT1LE.js → security-cli-DZ-6QDRB.js} +3 -3
  194. package/dist/{security-cli-JKsf9SIu.js → security-cli-iJpHPABF.js} +29 -29
  195. package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
  196. package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
  197. package/dist/{server-methods-B2tykucj.js → server-methods-DHWxmfIu.js} +67 -61
  198. package/dist/{server-methods-CWxr5b-w.js → server-methods-DTkVQH8Q.js} +18 -12
  199. package/dist/{server-node-events-ClDEcUTJ.js → server-node-events-C0smPxrR.js} +8 -8
  200. package/dist/{server-node-events-BKqszk_a.js → server-node-events-DHSiqnRS.js} +48 -48
  201. package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
  202. package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
  203. package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
  204. package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
  205. package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
  206. package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
  207. package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
  208. package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
  209. package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
  210. package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
  211. package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
  212. package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
  213. package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
  214. package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
  215. package/dist/{status-ojZB_Lrf.js → status-BEZotN01.js} +5 -5
  216. package/dist/{status-DPGFZPpp.js → status-DUbs9rVu.js} +3 -3
  217. package/dist/{status-DHBVIMyL.js → status-ISN-LC9F.js} +23 -23
  218. package/dist/{status-K1k4g3Ai.js → status-OTYFx93W.js} +1 -1
  219. package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
  220. package/dist/{subagent-registry-BOt7g9hn.js → subagent-registry-CVhLz4p3.js} +43 -8
  221. package/dist/{symframe-cli-CrUtJw_7.js → symframe-cli-BSAQ05fb.js} +22 -6
  222. package/dist/{symframe-cli-CX3dINPw.js → symframe-cli-CPE5nxuJ.js} +28 -12
  223. package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
  224. package/dist/{synthesis-Bc2QkGvt.js → synthesis-C1mZnGqD.js} +2 -2
  225. package/dist/{synthesis-yl24Ovw4.js → synthesis-CDPVZw2P.js} +4 -4
  226. package/dist/{synthesis-DmqicCsT.js → synthesis-DkHCk0El.js} +45 -45
  227. package/dist/{synthesis-BIQLrbys.js → synthesis-RhT991Ni.js} +6 -6
  228. package/dist/{system-cli-CvN-Wq9U.js → system-cli-Dy6_0Qp7.js} +3 -3
  229. package/dist/{system-cli-DUHzCGfK.js → system-cli-nWJwLo85.js} +7 -7
  230. package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
  231. package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
  232. package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
  233. package/dist/{tui-DCqVZ6sC.js → tui-ZL7IGA7l.js} +7 -7
  234. package/dist/{tui-cli-DqvgN5ng.js → tui-cli-B-DKpOxE.js} +3 -3
  235. package/dist/{tui-cli-CI-P3sei.js → tui-cli-CEpMtmhP.js} +19 -19
  236. package/dist/{tui-BxgdImL_.js → tui-h57L-YTX.js} +2 -2
  237. package/dist/{unified-runner-BV5TdNFv.js → unified-runner-Cppo8O8z.js} +57 -14
  238. package/dist/{unified-runner-CznU7Ad0.js → unified-runner-CsadjpQa.js} +139 -104
  239. package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
  240. package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
  241. package/dist/{update-cli-DBoIBDNe.js → update-cli-48-Nah-Y.js} +77 -77
  242. package/dist/{update-cli-Dn6QQZLd.js → update-cli-D9g9s187.js} +14 -14
  243. package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
  244. package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
  245. package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
  246. package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
  247. package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
  248. package/extensions/memory-core/package.json +1 -1
  249. package/extensions/msteams/CHANGELOG.md +6 -0
  250. package/extensions/msteams/package.json +1 -1
  251. package/extensions/open-prose/package.json +1 -1
  252. package/extensions/outlook/package.json +1 -1
  253. package/extensions/slack/package.json +1 -1
  254. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { i as isPathInside } from "./legacy-names-BQ9vKISY.js";
2
2
  import { i as hasErrnoCode } from "./errors-bI7Tdx75.js";
3
3
  import path from "node:path";
4
- import fs from "node:fs/promises";
4
+ import fsPromises from "node:fs/promises";
5
5
 
6
6
  //#region src/security/skill-scanner.ts
7
7
  const SCANNABLE_EXTENSIONS = new Set([
@@ -154,7 +154,7 @@ async function walkDirWithLimit(dirPath, maxFiles) {
154
154
  while (stack.length > 0 && files.length < maxFiles) {
155
155
  const currentDir = stack.pop();
156
156
  if (!currentDir) break;
157
- const entries = await fs.readdir(currentDir, { withFileTypes: true });
157
+ const entries = await fsPromises.readdir(currentDir, { withFileTypes: true });
158
158
  for (const entry of entries) {
159
159
  if (files.length >= maxFiles) break;
160
160
  if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
@@ -176,7 +176,7 @@ async function resolveForcedFiles(params) {
176
176
  if (seen.has(includePath)) continue;
177
177
  let st = null;
178
178
  try {
179
- st = await fs.stat(includePath);
179
+ st = await fsPromises.stat(includePath);
180
180
  } catch (err) {
181
181
  if (hasErrnoCode(err, "ENOENT")) continue;
182
182
  throw err;
@@ -208,14 +208,14 @@ async function collectScannableFiles(dirPath, opts) {
208
208
  async function readScannableSource(filePath, maxFileBytes) {
209
209
  let st = null;
210
210
  try {
211
- st = await fs.stat(filePath);
211
+ st = await fsPromises.stat(filePath);
212
212
  } catch (err) {
213
213
  if (hasErrnoCode(err, "ENOENT")) return null;
214
214
  throw err;
215
215
  }
216
216
  if (!st?.isFile() || st.size > maxFileBytes) return null;
217
217
  try {
218
- return await fs.readFile(filePath, "utf-8");
218
+ return await fsPromises.readFile(filePath, "utf-8");
219
219
  } catch (err) {
220
220
  if (hasErrnoCode(err, "ENOENT")) return null;
221
221
  throw err;
@@ -1,13 +1,13 @@
1
1
  import { h as resolveUserPath, t as CONFIG_DIR } from "./utils-CTPsqyE_.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
3
- import { i as normalizeSkillFilter, n as resolveSymiPackageRootSync } from "./symi-root-BQ0IpoW2.js";
3
+ import { i as normalizeSkillFilter, n as resolveSymiPackageRootSync } from "./symi-root-DeCVdZB4.js";
4
4
  import { d as resolveEnableState, f as resolveMemorySlotDecision, h as isDangerousHostEnvVarName, n as loadPluginManifestRegistry, u as normalizePluginsConfig } from "./manifest-registry-D1MLZEjS.js";
5
5
  import { a as resolveSymiManifestBlock, c as resolveSymiManifestRequires, d as hasBinary, f as isConfigPathTruthyWithDefaults, i as parseSymiManifestInstallBase, l as parseFrontmatterBlock, n as normalizeStringList, o as resolveSymiManifestInstall, p as resolveRuntimePlatform, r as parseFrontmatterBool, s as resolveSymiManifestOs, t as getFrontmatterString, u as evaluateRuntimeRequires } from "./frontmatter-B_jqcova.js";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs";
9
9
  import os from "node:os";
10
- import fs$1 from "node:fs/promises";
10
+ import fsPromises from "node:fs/promises";
11
11
  import { formatSkillsForPrompt, loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
12
12
 
13
13
  //#region src/agents/skills/frontmatter.ts
@@ -392,7 +392,7 @@ async function assertNoSymlinkEscape(relative, root, options) {
392
392
  const isLast = idx === parts.length - 1;
393
393
  current = path.join(current, part);
394
394
  try {
395
- if ((await fs$1.lstat(current)).isSymbolicLink()) {
395
+ if ((await fsPromises.lstat(current)).isSymbolicLink()) {
396
396
  if (options?.allowFinalSymlink && isLast) return;
397
397
  const target = await tryRealpath(current);
398
398
  if (!isPathInside(rootReal, target)) throw new Error(`Symlink escapes sandbox root (${shortPath(rootReal)}): ${shortPath(current)}`);
@@ -406,7 +406,7 @@ async function assertNoSymlinkEscape(relative, root, options) {
406
406
  }
407
407
  async function tryRealpath(value) {
408
408
  try {
409
- return await fs$1.realpath(value);
409
+ return await fsPromises.realpath(value);
410
410
  } catch {
411
411
  return path.resolve(value);
412
412
  }
@@ -4,9 +4,9 @@ import { v as shortenHomePath } from "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
6
6
  import "./exec-DuYbft0z.js";
7
- import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-DOrZjOnW.js";
8
- import "./model-selection-7wdmO-Iw.js";
9
- import { i as loadConfig } from "./config-B4jkreCN.js";
7
+ import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-Bnsyyeci.js";
8
+ import "./model-selection-CCTzD29o.js";
9
+ import { i as loadConfig } from "./config-BngIfn5l.js";
10
10
  import "./boolean-CbZoNRMn.js";
11
11
  import "./env-BRnPI9sO.js";
12
12
  import "./shell-env-Dc3iU7HK.js";
@@ -236,7 +236,7 @@ function registerSkillsCli(program) {
236
236
  try {
237
237
  const config = loadConfig();
238
238
  const workspaceDir = resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config));
239
- const { buildWorkspaceSkillStatus } = await import("./skills-status-BKX1PjCc.js").then((n) => n.n);
239
+ const { buildWorkspaceSkillStatus } = await import("./skills-status-DLnCHUZ2.js").then((n) => n.n);
240
240
  const report = buildWorkspaceSkillStatus(workspaceDir, { config });
241
241
  defaultRuntime.log(formatSkillsList(report, opts));
242
242
  } catch (err) {
@@ -248,7 +248,7 @@ function registerSkillsCli(program) {
248
248
  try {
249
249
  const config = loadConfig();
250
250
  const workspaceDir = resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config));
251
- const { buildWorkspaceSkillStatus } = await import("./skills-status-BKX1PjCc.js").then((n) => n.n);
251
+ const { buildWorkspaceSkillStatus } = await import("./skills-status-DLnCHUZ2.js").then((n) => n.n);
252
252
  const report = buildWorkspaceSkillStatus(workspaceDir, { config });
253
253
  defaultRuntime.log(formatSkillInfo(report, name, opts));
254
254
  } catch (err) {
@@ -260,7 +260,7 @@ function registerSkillsCli(program) {
260
260
  try {
261
261
  const config = loadConfig();
262
262
  const workspaceDir = resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config));
263
- const { buildWorkspaceSkillStatus } = await import("./skills-status-BKX1PjCc.js").then((n) => n.n);
263
+ const { buildWorkspaceSkillStatus } = await import("./skills-status-DLnCHUZ2.js").then((n) => n.n);
264
264
  const report = buildWorkspaceSkillStatus(workspaceDir, { config });
265
265
  defaultRuntime.log(formatSkillsCheck(report, opts));
266
266
  } catch (err) {
@@ -272,7 +272,7 @@ function registerSkillsCli(program) {
272
272
  try {
273
273
  const config = loadConfig();
274
274
  const workspaceDir = resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config));
275
- const { buildWorkspaceSkillStatus } = await import("./skills-status-BKX1PjCc.js").then((n) => n.n);
275
+ const { buildWorkspaceSkillStatus } = await import("./skills-status-DLnCHUZ2.js").then((n) => n.n);
276
276
  const report = buildWorkspaceSkillStatus(workspaceDir, { config });
277
277
  defaultRuntime.log(formatSkillsList(report, {}));
278
278
  } catch (err) {
@@ -1,12 +1,12 @@
1
1
  import { h as resolveUserPath, p as resolveConfigDir, s as ensureDir } from "./utils-CTPsqyE_.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-DuYbft0z.js";
3
3
  import { d as hasBinary } from "./frontmatter-B_jqcova.js";
4
- import { i as loadWorkspaceSkillEntries, t as resolveSkillsInstallPreferences, x as resolveSkillKey } from "./skills-BwDmcZdt.js";
4
+ import { i as loadWorkspaceSkillEntries, t as resolveSkillsInstallPreferences, x as resolveSkillKey } from "./skills-CYcBtLGH.js";
5
5
  import { t as fetchWithSsrFGuard } from "./fetch-guard-JHxT9355.js";
6
6
  import { t as resolveBrewExecutable } from "./brew-DD55iLUe.js";
7
7
  import { t as isWithinDir } from "./path-safety-CkXjT453.js";
8
- import { a as extractArchive$1, d as resolveArchiveOutputPath, f as stripArchivePath, p as validateArchiveEntryPath, r as safePathSegmentHashed, u as isWindowsDrivePath } from "./install-safe-path-B2JrFspY.js";
9
- import { t as scanDirectoryWithSummary } from "./skill-scanner-BCgVcIwi.js";
8
+ import { a as extractArchive$1, d as resolveArchiveOutputPath, f as stripArchivePath, p as validateArchiveEntryPath, r as safePathSegmentHashed, u as isWindowsDrivePath } from "./install-safe-path-BrpA09f2.js";
9
+ import { t as scanDirectoryWithSummary } from "./skill-scanner-CIlHPszT.js";
10
10
  import path from "node:path";
11
11
  import fs from "node:fs";
12
12
  import { pipeline } from "node:stream/promises";
@@ -1,8 +1,8 @@
1
1
  import { h as resolveUserPath, t as CONFIG_DIR } from "./utils-CTPsqyE_.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
3
- import { i as loadWorkspaceSkillEntries, s as resolvePluginSkillDirs } from "./skills-BwDmcZdt.js";
4
- import { a as upsertPendingPairingRequest, c as writeJsonAtomic, i as resolvePairingPaths, n as verifyPairingToken, o as createAsyncLock, r as pruneExpiredPending, s as readJsonFile, t as generatePairingToken } from "./pairing-token-Dcy37-4s.js";
5
- import { t as listAgentWorkspaceDirs } from "./workspace-dirs-jKFQf7of.js";
3
+ import { i as loadWorkspaceSkillEntries, s as resolvePluginSkillDirs } from "./skills-CYcBtLGH.js";
4
+ import { a as upsertPendingPairingRequest, c as writeJsonAtomic, i as resolvePairingPaths, n as verifyPairingToken, o as createAsyncLock, r as pruneExpiredPending, s as readJsonFile, t as generatePairingToken } from "./pairing-token-B703A1U3.js";
5
+ import { t as listAgentWorkspaceDirs } from "./workspace-dirs-DCICLTHx.js";
6
6
  import { randomUUID } from "node:crypto";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { t as CONFIG_DIR } from "./utils-CTPsqyE_.js";
3
3
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
4
4
  import { d as hasBinary } from "./frontmatter-B_jqcova.js";
5
- import { _ as isBundledSkillAllowed, b as resolveSkillConfig, c as resolveBundledSkillsDir, i as loadWorkspaceSkillEntries, t as resolveSkillsInstallPreferences, v as isConfigPathTruthy, y as resolveBundledAllowlist } from "./skills-BwDmcZdt.js";
5
+ import { _ as isBundledSkillAllowed, b as resolveSkillConfig, c as resolveBundledSkillsDir, i as loadWorkspaceSkillEntries, t as resolveSkillsInstallPreferences, v as isConfigPathTruthy, y as resolveBundledAllowlist } from "./skills-CYcBtLGH.js";
6
6
  import { t as evaluateEntryMetadataRequirementsForCurrentPlatform } from "./entry-status-DnvpZhUd.js";
7
7
  import path from "node:path";
8
8
  import { loadSkillsFromDir } from "@mariozechner/pi-coding-agent";
@@ -1,17 +1,17 @@
1
1
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
2
2
  import { n as redactSensitiveText } from "./redact-B3O-RBO1.js";
3
3
  import { s as resolveSessionTranscriptsDirForAgent } from "./paths-BtvQ7JvU.js";
4
- import { a as hashText } from "./internal-DVCddhhN.js";
4
+ import { a as hashText } from "./internal-csqU78gW.js";
5
5
  import { createRequire } from "node:module";
6
6
  import path from "node:path";
7
- import fs from "node:fs/promises";
7
+ import fsPromises from "node:fs/promises";
8
8
 
9
9
  //#region src/memory/session-files.ts
10
10
  const log = createSubsystemLogger("memory");
11
11
  async function listSessionFilesForAgent(agentId) {
12
12
  const dir = resolveSessionTranscriptsDirForAgent(agentId);
13
13
  try {
14
- return (await fs.readdir(dir, { withFileTypes: true })).filter((entry) => entry.isFile()).map((entry) => entry.name).filter((name) => name.endsWith(".jsonl")).map((name) => path.join(dir, name));
14
+ return (await fsPromises.readdir(dir, { withFileTypes: true })).filter((entry) => entry.isFile()).map((entry) => entry.name).filter((name) => name.endsWith(".jsonl")).map((name) => path.join(dir, name));
15
15
  } catch {
16
16
  return [];
17
17
  }
@@ -41,8 +41,8 @@ function extractSessionText(content) {
41
41
  }
42
42
  async function buildSessionEntry(absPath) {
43
43
  try {
44
- const stat = await fs.stat(absPath);
45
- const lines = (await fs.readFile(absPath, "utf-8")).split("\n");
44
+ const stat = await fsPromises.stat(absPath);
45
+ const lines = (await fsPromises.readFile(absPath, "utf-8")).split("\n");
46
46
  const collected = [];
47
47
  const lineMap = [];
48
48
  for (let jsonlIdx = 0; jsonlIdx < lines.length; jsonlIdx++) {
@@ -8,13 +8,13 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-C-Jte08L.js";
8
8
  import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, m as resolveConfiguredModelRef, w as DEFAULT_PROVIDER } from "./model-selection-CMx1evaF.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-g3ssrjuX.js";
10
10
  import { N as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-D7TcU4qN.js";
11
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-C2urR5Fj.js";
11
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DTshgdlW.js";
12
12
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-Dn6VXn4p.js";
13
13
  import { n as listChannelPlugins } from "./plugins-BsEhWvLn.js";
14
14
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-FeJ1M0mP.js";
15
15
  import { i as formatPortDiagnostics, n as inspectPortUsage } from "./ports-uA7P2qIK.js";
16
16
  import { c as resolveStorePath } from "./paths-DtiEyjsC.js";
17
- import { t as getMemorySearchManager } from "./memory-A2D5e8dL.js";
17
+ import { t as getMemorySearchManager } from "./memory-C02Znuee.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-CxLpEQOX.js";
19
19
  import { t as getRemoteSkillEligibility } from "./skills-remote-DSGpkPJE.js";
20
20
  import { _ as peekSystemEvents, b as formatChannelAllowFrom, d as formatUsageReportLines, n as sha256HexPrefix, o as readRestartSentinel, s as summarizeRestartSentinel, u as loadProviderUsageSummary, v as buildChannelSummary, y as buildChannelAccountSnapshot } from "./redact-identifier-BOxAUdff.js";
@@ -23,13 +23,13 @@ import { r as formatDurationPrecise } from "./format-duration-CIjmjQST.js";
23
23
  import { n as withProgress } from "./progress-CI19Xh3z.js";
24
24
  import { t as resolveChannelDefaultAccountId } from "./helpers-CBCZwlBW.js";
25
25
  import { t as collectChannelStatusIssues } from "./channels-status-issues-BTvrA4nx.js";
26
- import { C as normalizeControlUiBasePath, g as resolveControlUiLinks } from "./onboard-helpers-Dhr98nj8.js";
26
+ import { C as normalizeControlUiBasePath, g as resolveControlUiLinks } from "./onboard-helpers-t7tI9KSA.js";
27
27
  import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-DYpU1ajf.js";
28
28
  import { t as formatRuntimeStatusWithDetails } from "./runtime-status-BgZqic8M.js";
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-D2oNwzue.js";
30
30
  import { t as renderTable } from "./table-D0JXlEhQ.js";
31
- import { l as probeGateway, o as resolveGatewayProbeAuth$1, t as runSecurityAudit } from "./audit-CPloCzEZ.js";
32
- import { t as formatHealthChannelLines } from "./health-znS85U-F.js";
31
+ import { l as probeGateway, o as resolveGatewayProbeAuth$1, t as runSecurityAudit } from "./audit-DyncRBKq.js";
32
+ import { t as formatHealthChannelLines } from "./health-Dkwuq8ta.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-DLOnLuop.js";
34
34
  import { t as resolveNodeService } from "./node-service-CZlyWmxa.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-BcXs5iuf.js";
@@ -1,7 +1,7 @@
1
- import { o as createPluginLoaderLogger, s as loadSymiPlugins } from "./unified-runner-CznU7Ad0.js";
1
+ import { o as createPluginLoaderLogger, s as loadSymiPlugins } from "./unified-runner-CsadjpQa.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-CHbO_DkH.js";
3
- import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-DOrZjOnW.js";
4
- import { i as loadConfig } from "./config-B4jkreCN.js";
3
+ import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-Bnsyyeci.js";
4
+ import { i as loadConfig } from "./config-BngIfn5l.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -2,41 +2,41 @@ import { A as isRich, j as theme, x as info } from "./registry-Sbac4a4z.js";
2
2
  import { u as resolveGatewayPort } from "./paths-By0XjHBk.js";
3
3
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
4
4
  import { x as parseAgentSessionKey } from "./session-key-DUSb7CCb.js";
5
- import { t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
5
+ import { t as resolveSymiPackageRoot } from "./symi-root-DeCVdZB4.js";
6
6
  import { n as runExec } from "./exec-DuYbft0z.js";
7
- import { c as resolveAgentWorkspaceDir } from "./agent-scope-DOrZjOnW.js";
8
- import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, m as resolveConfiguredModelRef, w as DEFAULT_PROVIDER } from "./model-selection-7wdmO-Iw.js";
9
- import { N as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-B4jkreCN.js";
7
+ import { c as resolveAgentWorkspaceDir } from "./agent-scope-Bnsyyeci.js";
8
+ import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, m as resolveConfiguredModelRef, w as DEFAULT_PROVIDER } from "./model-selection-CCTzD29o.js";
9
+ import { N as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-BngIfn5l.js";
10
10
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-DpKBMIvx.js";
11
- import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-gxLM5ahL.js";
12
- import { H as resolveMainSessionKey, R as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-Dxf5Kjig.js";
11
+ import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-CB_Iu83U.js";
12
+ import { H as resolveMainSessionKey, R as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-BCc3THTm.js";
13
13
  import { n as listChannelPlugins } from "./plugins-CF5skkHh.js";
14
14
  import { c as resolveStorePath } from "./paths-BtvQ7JvU.js";
15
- import { A as sha256HexPrefix, D as buildChannelAccountSnapshot, E as buildChannelSummary, O as formatChannelAllowFrom, T as peekSystemEvents, _ as loadProviderUsageSummary, l as resolveSessionModelRef, m as summarizeRestartSentinel, n as classifySessionKey, p as readRestartSentinel, r as listAgentsForGateway, v as formatUsageReportLines, x as lookupContextTokens } from "./session-utils-Cs1jlD-q.js";
16
- import { t as getMemorySearchManager } from "./memory-B067LTL9.js";
17
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-xdEE97oU.js";
15
+ import { A as sha256HexPrefix, D as buildChannelAccountSnapshot, E as buildChannelSummary, O as formatChannelAllowFrom, T as peekSystemEvents, _ as loadProviderUsageSummary, l as resolveSessionModelRef, m as summarizeRestartSentinel, n as classifySessionKey, p as readRestartSentinel, r as listAgentsForGateway, v as formatUsageReportLines, x as lookupContextTokens } from "./session-utils-CJhcRx3E.js";
16
+ import { t as getMemorySearchManager } from "./memory-fFc7GGPZ.js";
17
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-xUpyZDH4.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-D4GQsWlP.js";
19
- import { t as getRemoteSkillEligibility } from "./skills-remote-bz71Bstn.js";
19
+ import { t as getRemoteSkillEligibility } from "./skills-remote-BcRQTDsZ.js";
20
20
  import { r as formatDurationPrecise } from "./format-duration-CIjmjQST.js";
21
21
  import { n as withProgress } from "./progress-swt2y17x.js";
22
- import { t as buildWorkspaceSkillStatus } from "./skills-status-BKX1PjCc.js";
22
+ import { t as buildWorkspaceSkillStatus } from "./skills-status-DLnCHUZ2.js";
23
23
  import { t as resolveChannelDefaultAccountId } from "./helpers-G6zuddmF.js";
24
24
  import { t as collectChannelStatusIssues } from "./channels-status-issues-DLIzUsjR.js";
25
- import { C as normalizeControlUiBasePath, g as resolveControlUiLinks } from "./onboard-helpers-CLXJ8zp0.js";
26
- import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-e6MzlLCd.js";
25
+ import { C as normalizeControlUiBasePath, g as resolveControlUiLinks } from "./onboard-helpers-CJlheOSJ.js";
26
+ import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-CRZoXO_n.js";
27
27
  import { t as formatRuntimeStatusWithDetails } from "./runtime-status-DV2uMNRb.js";
28
- import { t as readLastGatewayErrorLine } from "./diagnostics-DlZODdRf.js";
28
+ import { t as readLastGatewayErrorLine } from "./diagnostics-CYkqD5lP.js";
29
29
  import { t as renderTable } from "./table-0A3xKJVC.js";
30
- import { l as probeGateway, o as resolveGatewayProbeAuth$1, t as runSecurityAudit } from "./audit-Ce-u6aaR.js";
31
- import { t as formatHealthChannelLines } from "./health-DpE9GWGn.js";
32
- import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-BCL_K7kx.js";
33
- import { t as resolveNodeService } from "./node-service-BH08wY5j.js";
30
+ import { l as probeGateway, o as resolveGatewayProbeAuth$1, t as runSecurityAudit } from "./audit-CuwXq_EA.js";
31
+ import { t as formatHealthChannelLines } from "./health-Bc1wmAO5.js";
32
+ import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-u6Jgr1cz.js";
33
+ import { t as resolveNodeService } from "./node-service-Cc18m-uk.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-CZeGyu83.js";
35
- import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, r as getUpdateCheckResult, t as formatUpdateAvailableHint } from "./status.update-DGJi0OLl.js";
35
+ import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, r as getUpdateCheckResult, t as formatUpdateAvailableHint } from "./status.update-CKfyV6zw.js";
36
36
  import path from "node:path";
37
37
  import fs from "node:fs";
38
38
  import os from "node:os";
39
- import fs$1 from "node:fs/promises";
39
+ import fsPromises from "node:fs/promises";
40
40
  import { spawnSync } from "node:child_process";
41
41
 
42
42
  //#region src/commands/gateway-presence.ts
@@ -125,7 +125,7 @@ function resolveOsSummary() {
125
125
  //#region src/commands/status-all/agents.ts
126
126
  async function fileExists$1(p) {
127
127
  try {
128
- await fs$1.access(p);
128
+ await fsPromises.access(p);
129
129
  return true;
130
130
  } catch {
131
131
  return false;
@@ -490,7 +490,7 @@ async function buildChannelsTable(cfg, opts) {
490
490
  //#endregion
491
491
  //#region src/commands/status-all/gateway.ts
492
492
  async function readFileTailLines(filePath, maxLines) {
493
- const raw = await fs$1.readFile(filePath, "utf8").catch(() => "");
493
+ const raw = await fsPromises.readFile(filePath, "utf8").catch(() => "");
494
494
  if (!raw.trim()) return [];
495
495
  const lines = raw.replace(/\r/g, "").split("\n");
496
496
  return lines.slice(Math.max(0, lines.length - maxLines)).map((line) => line.trimEnd()).filter((line) => line.trim().length > 0);
@@ -1256,7 +1256,7 @@ function resolveGatewayProbeAuth(cfg) {
1256
1256
  //#region src/commands/status.agent-local.ts
1257
1257
  async function fileExists(p) {
1258
1258
  try {
1259
- await fs$1.access(p);
1259
+ await fsPromises.access(p);
1260
1260
  return true;
1261
1261
  } catch {
1262
1262
  return false;
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-C-Jte08L.js";
3
3
  import { i as loadConfig } from "./config-D7TcU4qN.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-BOt7g9hn.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-CVhLz4p3.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -1,7 +1,7 @@
1
1
  import { t as formatCliCommand } from "./command-format-BzjsXBTi.js";
2
- import { t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
3
- import { N as VERSION } from "./config-B4jkreCN.js";
4
- import { n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BCL_K7kx.js";
2
+ import { t as resolveSymiPackageRoot } from "./symi-root-DeCVdZB4.js";
3
+ import { N as VERSION } from "./config-BngIfn5l.js";
4
+ import { n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-u6Jgr1cz.js";
5
5
 
6
6
  //#region src/commands/status.update.ts
7
7
  async function getUpdateCheckResult(params) {
@@ -20,8 +20,8 @@ import { a as resolveSkillsPromptForRun, d as resolveSandboxInputPath, h as appl
20
20
  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-CVLmi8rz.js";
21
21
  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-D7TcU4qN.js";
22
22
  import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell } from "./shell-env-CTYaxUs_.js";
23
- import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-yVTJ5jx5.js";
24
- import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-C2urR5Fj.js";
23
+ import { Ht as SESSION_LABEL_MAX_LENGTH } from "./client-BOd5o3Kp.js";
24
+ import { a as randomIdempotencyKey, d as resolveLeastPrivilegeOperatorScopesForMethod, n as callGateway, r as callGatewayLeastPrivilege } from "./call-DTshgdlW.js";
25
25
  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-DXToSaWK.js";
26
26
  import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage, r as hasInterSessionUserProvenance } from "./input-provenance-BdV0rbga.js";
27
27
  import { A as DEFAULT_RESET_TRIGGERS, B as resolveGroupSessionKey, D as resolveSessionResetPolicy, E as resolveChannelResetConfig, F as resolveMainSessionKey, G as deliveryContextKey, J as normalizeSessionDeliveryFields, K as mergeDeliveryContext, L as deriveSessionMetaPatch, O as resolveSessionResetType, T as evaluateSessionFreshness, U as resolveSessionLockMaxHoldFromTimeout, V as acquireSessionWriteLock, W as deliveryContextFromSession, _ as capArrayByJsonBytes, a as resolveAndPersistSessionFile, c as recordSessionMetaFromInbound, d as updateSessionStore, f as updateSessionStoreEntry, g as archiveSessionTranscripts, j as resolveFreshSessionTotalTokens, k as resolveThreadFlag, m as resolveCacheTtlMs$1, o as loadSessionStore, p as isCacheEnabled, q as normalizeDeliveryContext, r as appendAssistantMessageToSessionTranscript, s as readSessionUpdatedAt, t as extractDeliveryInfo, u as updateLastRoute, w as resolveSessionKey } from "./sessions-Dn6VXn4p.js";
@@ -49,8 +49,8 @@ import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsX
49
49
  import { i as resolveApiKeyForProvider, n as getCustomProviderApiKey, o as resolveEnvApiKey, r as requireApiKey, s as resolveModelAuthMode, t as getApiKeyForModel } from "./model-auth-Byr7Gic_.js";
50
50
  import { b as OLLAMA_NATIVE_BASE_URL, c as normalizeGoogleModelId, t as ensureSymiModelsJson, x as createOllamaStreamFn } from "./models-config-CiR_RUxw.js";
51
51
  import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-DV3KhOhL.js";
52
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-A2D5e8dL.js";
53
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-CceVgXHV.js";
52
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-C02Znuee.js";
53
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-DH00nlW8.js";
54
54
  import { f as runTasksWithConcurrency } from "./internal-D3mEiuyB.js";
55
55
  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-B2lBXhR0.js";
56
56
  import { n as resolveMarkdownTableMode } from "./markdown-tables-BEdkErjm.js";
@@ -83,7 +83,7 @@ import { t as emitSymframePush } from "./symframe-broadcast-BVxModY5.js";
83
83
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-CmU8iVio.js";
84
84
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-BVJ4-d9c.js";
85
85
  import { t as parseTimeoutMs } from "./parse-timeout-widuTpq9.js";
86
- import { n as registerMemoryCli } from "./memory-cli-1zjVJITN.js";
86
+ import { n as registerMemoryCli } from "./memory-cli-083UJtVJ.js";
87
87
  import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-CLREUzzB.js";
88
88
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-06k__URR.js";
89
89
  import { createRequire } from "node:module";
@@ -15427,6 +15427,12 @@ function buildAgentSystemPrompt(params) {
15427
15427
  " - `recall` — re-summon a recently-released card (id optional → most-recent).",
15428
15428
  " - `pin` — persist a card across reload + /new (user-curated; the user can also pin from the UI).",
15429
15429
  " - `unpin` — remove the pin; does NOT drop the card.",
15430
+ "Panel modes (Stage D — `action: \"setMode\"` with `mode` and optional `focusedId`):",
15431
+ " - `ambient` (default) — substrate + cards + AWAITING all visible. Normal multi-task posture.",
15432
+ " - `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.",
15433
+ " - `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.",
15434
+ " - `quiet` — substrate only, cards + AWAITING hidden. Use when you're thinking and have nothing actionable to surface yet.",
15435
+ "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.",
15430
15436
  "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.",
15431
15437
  "",
15432
15438
  ...compactMode ? [] : [
@@ -21049,7 +21055,14 @@ const ARTIFACT_ACTIONS = [
21049
21055
  "release",
21050
21056
  "recall",
21051
21057
  "pin",
21052
- "unpin"
21058
+ "unpin",
21059
+ "setMode"
21060
+ ];
21061
+ const PANEL_MODES = [
21062
+ "ambient",
21063
+ "focus",
21064
+ "awaiting",
21065
+ "quiet"
21053
21066
  ];
21054
21067
  /**
21055
21068
  * Stage A: intent vocabulary added as orthogonal metadata to renderer type.
@@ -21097,7 +21110,9 @@ const DisplayArtifactSchema = Type.Object({
21097
21110
  email: Type.Optional(EmailFieldsSchema),
21098
21111
  actions: Type.Optional(Type.Array(ActionSchema)),
21099
21112
  sticky: Type.Optional(Type.Boolean()),
21100
- force: Type.Optional(Type.Boolean())
21113
+ force: Type.Optional(Type.Boolean()),
21114
+ mode: Type.Optional(stringEnum(PANEL_MODES)),
21115
+ focusedId: Type.Optional(Type.String())
21101
21116
  });
21102
21117
  function genCardId() {
21103
21118
  return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
@@ -21106,12 +21121,32 @@ function createDisplayArtifactTool() {
21106
21121
  return {
21107
21122
  label: "Display Artifact",
21108
21123
  name: "display_artifact",
21109
- 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.",
21124
+ 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.",
21110
21125
  parameters: DisplayArtifactSchema,
21111
21126
  execute: async (_toolCallId, args) => {
21112
21127
  const params = args;
21113
21128
  const actionRaw = readStringParam(params, "action");
21114
21129
  const action = ARTIFACT_ACTIONS.includes(actionRaw ?? "") ? actionRaw : "add";
21130
+ if (action === "setMode") {
21131
+ const modeRaw = readStringParam(params, "mode");
21132
+ if (!modeRaw || !PANEL_MODES.includes(modeRaw)) return jsonResult({
21133
+ ok: false,
21134
+ error: `setMode requires \`mode\` ∈ {${PANEL_MODES.join(" | ")}}`
21135
+ });
21136
+ const mode = modeRaw;
21137
+ const focusedId = readStringParam(params, "focusedId");
21138
+ emitSymframePush({
21139
+ action: "setMode",
21140
+ mode,
21141
+ focusedId: focusedId || void 0
21142
+ });
21143
+ return jsonResult({
21144
+ ok: true,
21145
+ action,
21146
+ mode,
21147
+ focusedId
21148
+ });
21149
+ }
21115
21150
  const id = readStringParam(params, "id") || (action === "add" ? genCardId() : void 0);
21116
21151
  if (action !== "add" && action !== "recall" && !id) return jsonResult({
21117
21152
  ok: false,
@@ -5,18 +5,18 @@ import "./model-selection-CMx1evaF.js";
5
5
  import "./manifest-registry-CVLmi8rz.js";
6
6
  import "./config-D7TcU4qN.js";
7
7
  import "./shell-env-CTYaxUs_.js";
8
- import "./client-yVTJ5jx5.js";
9
- import "./call-C2urR5Fj.js";
8
+ import "./client-BOd5o3Kp.js";
9
+ import "./call-DTshgdlW.js";
10
10
  import "./message-channel-DXToSaWK.js";
11
11
  import "./pairing-token-B-OTYROz.js";
12
12
  import { t as formatDocsLink } from "./links-Dnmd-RS-.js";
13
13
  import "./progress-CI19Xh3z.js";
14
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-Kv0-8W2E.js";
14
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DpRnrv_i.js";
15
15
  import fs from "node:fs/promises";
16
16
 
17
17
  //#region src/cli/symframe-cli.ts
18
18
  function registerSymframeCli(program) {
19
- addGatewayClientOptions(program.command("symframe").description("Push cards to the Glass UI symframe (right-column dynamic display)").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/symframe", "docs.symi.ai/cli/symframe")}\n`).command("push").description("Push (add/update/remove) a card to the symframe").option("--action <add|update|remove|dwell|release|recall|pin|unpin>", "Action (default: add). Stage-C verbs (dwell|release|recall|pin|unpin) are id-only — no card body.", "add").option("--id <id>", "Card id (required for update/remove; auto-generated for add)").option("--type <type>", "Renderer type — text | markdown | code | email-draft | pdf | audio | video", "text").option("--intent <intent>", "Card intent (mental-state slot) — holding | weighing | producing | awaiting | drafted | reference").option("--title <title>", "Card title (header text)").option("--body <body>", "Card body text (code source if --type=code)").option("--file <path>", "Read body from file (overrides --body)").option("--language <lang>", "Language hint for --type=code (e.g. ts, py, sh)").option("--url <url>", "Media URL for --type=pdf|audio|video").option("--mime <type>", "MIME type for --type=audio|video (e.g. audio/mpeg)").option("--data <json>", "Extra structured fields merged into the card (e.g. email-draft uses { email: { from, to, subject, body } })").option("--sticky", "Anchor at the bottom of the stack (no dismiss button)", false).option("--force", "Required to update or remove a sticky card (use sparingly)", false).option("--json", "Output JSON", false)).action(async (opts) => {
19
+ addGatewayClientOptions(program.command("symframe").description("Push cards to the Glass UI symframe (right-column dynamic display)").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/symframe", "docs.symi.ai/cli/symframe")}\n`).command("push").description("Push (add/update/remove) a card to the symframe").option("--action <add|update|remove|dwell|release|recall|pin|unpin|setMode>", "Action (default: add). Stage-C verbs (dwell|release|recall|pin|unpin) are id-only — no card body. Stage-D verb (setMode) needs --mode.", "add").option("--id <id>", "Card id (required for update/remove; auto-generated for add)").option("--type <type>", "Renderer type — text | markdown | code | email-draft | pdf | audio | video", "text").option("--intent <intent>", "Card intent (mental-state slot) — holding | weighing | producing | awaiting | drafted | reference").option("--title <title>", "Card title (header text)").option("--body <body>", "Card body text (code source if --type=code)").option("--file <path>", "Read body from file (overrides --body)").option("--language <lang>", "Language hint for --type=code (e.g. ts, py, sh)").option("--url <url>", "Media URL for --type=pdf|audio|video").option("--mime <type>", "MIME type for --type=audio|video (e.g. audio/mpeg)").option("--data <json>", "Extra structured fields merged into the card (e.g. email-draft uses { email: { from, to, subject, body } })").option("--sticky", "Anchor at the bottom of the stack (no dismiss button)", false).option("--force", "Required to update or remove a sticky card (use sparingly)", false).option("--mode <ambient|focus|awaiting|quiet>", "Panel posture for --action=setMode").option("--focused-id <id>", "Optional card id to halo when --mode=focus").option("--json", "Output JSON", false)).action(async (opts) => {
20
20
  try {
21
21
  const action = (opts.action ?? "add").trim();
22
22
  if (!new Set([
@@ -27,13 +27,29 @@ function registerSymframeCli(program) {
27
27
  "release",
28
28
  "recall",
29
29
  "pin",
30
- "unpin"
31
- ]).has(action)) throw new Error(`--action must be one of: add | update | remove | dwell | release | recall | pin | unpin (got '${action}')`);
30
+ "unpin",
31
+ "setMode"
32
+ ]).has(action)) throw new Error(`--action must be one of: add | update | remove | dwell | release | recall | pin | unpin | setMode (got '${action}')`);
32
33
  let bodyText = opts.body;
33
34
  if (opts.file) bodyText = await fs.readFile(opts.file, "utf8");
34
35
  const params = { action };
35
36
  if (opts.id) params.id = opts.id;
36
37
  if (opts.force) params.force = true;
38
+ if (action === "setMode") {
39
+ const VALID_MODES = new Set([
40
+ "ambient",
41
+ "focus",
42
+ "awaiting",
43
+ "quiet"
44
+ ]);
45
+ if (!opts.mode || !VALID_MODES.has(opts.mode)) throw new Error("--mode is required for setMode and must be one of: ambient | focus | awaiting | quiet");
46
+ params.mode = opts.mode;
47
+ if (opts.focusedId) params.focusedId = opts.focusedId;
48
+ const result = await callGatewayFromCli("chat.symframe.push", opts, params, { expectFinal: false });
49
+ if (opts.json) defaultRuntime.log(JSON.stringify(result ?? { ok: true }, null, 2));
50
+ else defaultRuntime.log("ok");
51
+ return;
52
+ }
37
53
  const ID_ONLY_VERBS = new Set([
38
54
  "remove",
39
55
  "dwell",
@@ -3,25 +3,25 @@ import "./paths-By0XjHBk.js";
3
3
  import "./utils-CTPsqyE_.js";
4
4
  import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
- import "./agent-scope-DOrZjOnW.js";
7
- import "./model-selection-7wdmO-Iw.js";
8
- import "./config-B4jkreCN.js";
6
+ import "./agent-scope-Bnsyyeci.js";
7
+ import "./model-selection-CCTzD29o.js";
8
+ import "./config-BngIfn5l.js";
9
9
  import "./boolean-CbZoNRMn.js";
10
10
  import "./env-BRnPI9sO.js";
11
11
  import "./shell-env-Dc3iU7HK.js";
12
12
  import "./manifest-registry-D1MLZEjS.js";
13
13
  import "./message-channel-DgjXWzf-.js";
14
- import "./client-Cs9Bh-G0.js";
15
- import "./call-xdEE97oU.js";
16
- import "./pairing-token-Dcy37-4s.js";
14
+ import "./client-DiPa71im.js";
15
+ import "./call-xUpyZDH4.js";
16
+ import "./pairing-token-B703A1U3.js";
17
17
  import { t as formatDocsLink } from "./links-Bqr0FxXx.js";
18
18
  import "./progress-swt2y17x.js";
19
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-BTGT1SuZ.js";
20
- import fs from "node:fs/promises";
19
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DmFOiGIJ.js";
20
+ import fsPromises from "node:fs/promises";
21
21
 
22
22
  //#region src/cli/symframe-cli.ts
23
23
  function registerSymframeCli(program) {
24
- addGatewayClientOptions(program.command("symframe").description("Push cards to the Glass UI symframe (right-column dynamic display)").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/symframe", "docs.symi.ai/cli/symframe")}\n`).command("push").description("Push (add/update/remove) a card to the symframe").option("--action <add|update|remove|dwell|release|recall|pin|unpin>", "Action (default: add). Stage-C verbs (dwell|release|recall|pin|unpin) are id-only — no card body.", "add").option("--id <id>", "Card id (required for update/remove; auto-generated for add)").option("--type <type>", "Renderer type — text | markdown | code | email-draft | pdf | audio | video", "text").option("--intent <intent>", "Card intent (mental-state slot) — holding | weighing | producing | awaiting | drafted | reference").option("--title <title>", "Card title (header text)").option("--body <body>", "Card body text (code source if --type=code)").option("--file <path>", "Read body from file (overrides --body)").option("--language <lang>", "Language hint for --type=code (e.g. ts, py, sh)").option("--url <url>", "Media URL for --type=pdf|audio|video").option("--mime <type>", "MIME type for --type=audio|video (e.g. audio/mpeg)").option("--data <json>", "Extra structured fields merged into the card (e.g. email-draft uses { email: { from, to, subject, body } })").option("--sticky", "Anchor at the bottom of the stack (no dismiss button)", false).option("--force", "Required to update or remove a sticky card (use sparingly)", false).option("--json", "Output JSON", false)).action(async (opts) => {
24
+ addGatewayClientOptions(program.command("symframe").description("Push cards to the Glass UI symframe (right-column dynamic display)").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/symframe", "docs.symi.ai/cli/symframe")}\n`).command("push").description("Push (add/update/remove) a card to the symframe").option("--action <add|update|remove|dwell|release|recall|pin|unpin|setMode>", "Action (default: add). Stage-C verbs (dwell|release|recall|pin|unpin) are id-only — no card body. Stage-D verb (setMode) needs --mode.", "add").option("--id <id>", "Card id (required for update/remove; auto-generated for add)").option("--type <type>", "Renderer type — text | markdown | code | email-draft | pdf | audio | video", "text").option("--intent <intent>", "Card intent (mental-state slot) — holding | weighing | producing | awaiting | drafted | reference").option("--title <title>", "Card title (header text)").option("--body <body>", "Card body text (code source if --type=code)").option("--file <path>", "Read body from file (overrides --body)").option("--language <lang>", "Language hint for --type=code (e.g. ts, py, sh)").option("--url <url>", "Media URL for --type=pdf|audio|video").option("--mime <type>", "MIME type for --type=audio|video (e.g. audio/mpeg)").option("--data <json>", "Extra structured fields merged into the card (e.g. email-draft uses { email: { from, to, subject, body } })").option("--sticky", "Anchor at the bottom of the stack (no dismiss button)", false).option("--force", "Required to update or remove a sticky card (use sparingly)", false).option("--mode <ambient|focus|awaiting|quiet>", "Panel posture for --action=setMode").option("--focused-id <id>", "Optional card id to halo when --mode=focus").option("--json", "Output JSON", false)).action(async (opts) => {
25
25
  try {
26
26
  const action = (opts.action ?? "add").trim();
27
27
  if (!new Set([
@@ -32,13 +32,29 @@ function registerSymframeCli(program) {
32
32
  "release",
33
33
  "recall",
34
34
  "pin",
35
- "unpin"
36
- ]).has(action)) throw new Error(`--action must be one of: add | update | remove | dwell | release | recall | pin | unpin (got '${action}')`);
35
+ "unpin",
36
+ "setMode"
37
+ ]).has(action)) throw new Error(`--action must be one of: add | update | remove | dwell | release | recall | pin | unpin | setMode (got '${action}')`);
37
38
  let bodyText = opts.body;
38
- if (opts.file) bodyText = await fs.readFile(opts.file, "utf8");
39
+ if (opts.file) bodyText = await fsPromises.readFile(opts.file, "utf8");
39
40
  const params = { action };
40
41
  if (opts.id) params.id = opts.id;
41
42
  if (opts.force) params.force = true;
43
+ if (action === "setMode") {
44
+ const VALID_MODES = new Set([
45
+ "ambient",
46
+ "focus",
47
+ "awaiting",
48
+ "quiet"
49
+ ]);
50
+ if (!opts.mode || !VALID_MODES.has(opts.mode)) throw new Error("--mode is required for setMode and must be one of: ambient | focus | awaiting | quiet");
51
+ params.mode = opts.mode;
52
+ if (opts.focusedId) params.focusedId = opts.focusedId;
53
+ const result = await callGatewayFromCli("chat.symframe.push", opts, params, { expectFinal: false });
54
+ if (opts.json) defaultRuntime.log(JSON.stringify(result ?? { ok: true }, null, 2));
55
+ else defaultRuntime.log("ok");
56
+ return;
57
+ }
42
58
  const ID_ONLY_VERBS = new Set([
43
59
  "remove",
44
60
  "dwell",