@symerian/symi 3.5.17 → 3.5.18

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 (367) hide show
  1. package/dist/{agent-RWZSPbLw.js → agent-C5i1IOSH.js} +4 -4
  2. package/dist/{agent-Za31LZ2H.js → agent-DAgNFk7s.js} +6 -6
  3. package/dist/{agents-CulBOE6L.js → agents-D6vcHu1f.js} +10 -10
  4. package/dist/{audit-B1fVD2bA.js → audit-BkXjUIB4.js} +7 -7
  5. package/dist/{audit-BQnxE5w6.js → audit-KLVrIL2o.js} +7 -7
  6. package/dist/{auth-choice-B8n3tJtT.js → auth-choice-BAWjJhdA.js} +6 -6
  7. package/dist/{auth-choice-C8ElO44A.js → auth-choice-CYIdNu5I.js} +6 -6
  8. package/dist/{auth-choice-options-DmXqtnP9.js → auth-choice-options-2Kq8GdIR.js} +1 -1
  9. package/dist/{auth-choice-options-od_KpHe8.js → auth-choice-options-DpwzCJa5.js} +1 -1
  10. package/dist/{auth-choice-prompt-BnvC700A.js → auth-choice-prompt-BAFfYZeR.js} +1 -1
  11. package/dist/{auth-choice-prompt-kt2FcieM.js → auth-choice-prompt-D6A5uuj3.js} +1 -1
  12. package/dist/{banner-B91SPus6.js → banner-fe7EgXbN.js} +1 -1
  13. package/dist/{bonjour-discovery-CyLfNUkJ.js → bonjour-discovery-CWTnBKX8.js} +1 -1
  14. package/dist/{bonjour-discovery-DuObXMh2.js → bonjour-discovery-XbH0AYJ4.js} +1 -1
  15. package/dist/{browser-cli-BvOz7txM.js → browser-cli-T0M4dRjm.js} +7 -7
  16. package/dist/{browser-cli-CXDzGAN7.js → browser-cli-djgni0MZ.js} +7 -7
  17. package/dist/build-info.json +3 -3
  18. package/dist/bundled/boot-md/handler.js +4 -4
  19. package/dist/bundled/session-memory/handler.js +4 -4
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-CsyyC4uc.js → channel-options-D6G_F3eF.js} +2 -2
  22. package/dist/{channel-options-1G5HGFpn.js → channel-options-EXtSsJf6.js} +2 -2
  23. package/dist/{channels-cli-R3TK9Jwf.js → channels-cli-Cqq_mzfB.js} +40 -40
  24. package/dist/{channels-cli-aF7d6Af9.js → channels-cli-JOUMlq_F.js} +41 -41
  25. package/dist/{chrome-3jl2ulOE.js → chrome-DNssqQJs.js} +7 -7
  26. package/dist/{chrome-CmQwGAuL.js → chrome-OTJg3QKn.js} +7 -7
  27. package/dist/{clack-prompter-_kEnSVz4.js → clack-prompter-BMQT37oC.js} +4 -4
  28. package/dist/{clack-prompter-v9MYo-5u.js → clack-prompter-BpcKjPIh.js} +4 -4
  29. package/dist/{cli-Bguq-s8o.js → cli-B8UZj63C.js} +22 -22
  30. package/dist/{cli-CFaH6TRI.js → cli-mps-KWqp.js} +23 -23
  31. package/dist/{command-registry-Bmzf59Qv.js → command-registry-BamL-8ni.js} +11 -11
  32. package/dist/{completion-cli-CtUZzw-P.js → completion-cli-BE3hVsai.js} +1 -1
  33. package/dist/{completion-cli-BM4kZs0m.js → completion-cli-CcPYX9ML.js} +3 -3
  34. package/dist/{config-cli-Cvylxp-R.js → config-cli-BQtaSYis.js} +2 -2
  35. package/dist/{config-cli-D6vpEtzB.js → config-cli-thmRhEXK.js} +2 -2
  36. package/dist/{config-guard-D58THqAB.js → config-guard-BRm3RiOi.js} +6 -6
  37. package/dist/{config-guard-CLfXzB_z.js → config-guard-CCLLHbZ3.js} +1 -1
  38. package/dist/{configure-BMRfSJ5h.js → configure-BYjDOt22.js} +21 -21
  39. package/dist/{configure-DRDyxmMR.js → configure-CldmyPrd.js} +21 -21
  40. package/dist/{control-service-DPzhv357.js → control-service-CG6l_Yap.js} +2 -2
  41. package/dist/{control-service-DOGU9T2P.js → control-service-D8kKOts5.js} +2 -2
  42. package/dist/{cron-cli-DlxcZT7g.js → cron-cli-CULf3dmR.js} +4 -4
  43. package/dist/{cron-cli-DVEdIAaa.js → cron-cli-DKsbgF-x.js} +4 -4
  44. package/dist/{daemon-cli-DqJhEk3T.js → daemon-cli-BNjzVjLA.js} +12 -12
  45. package/dist/{daemon-cli-6ZV3jmTp.js → daemon-cli-C5WZasB0.js} +12 -12
  46. package/dist/{daemon-runtime-DaJ4Tf2a.js → daemon-runtime-AkgOtHR6.js} +1 -1
  47. package/dist/{daemon-runtime-7YBz5otm.js → daemon-runtime-DlQla_dA.js} +1 -1
  48. package/dist/{deliver-B04yNX82.js → deliver-BiWlR84Y.js} +4 -4
  49. package/dist/{deliver-0nDhDdKd.js → deliver-DIK2emIV.js} +1 -1
  50. package/dist/{deliver-C81eqdrP.js → deliver-lTZLIQqf.js} +1 -1
  51. package/dist/{deliver-f3cIWxXT.js → deliver-q23ar_Pm.js} +4 -4
  52. package/dist/{devices-cli-C4rLpzkl.js → devices-cli-CZKVVOJl.js} +2 -2
  53. package/dist/{devices-cli-C6EdHL_5.js → devices-cli-rR11xT7v.js} +2 -2
  54. package/dist/{diagnostics-BZH08r5U.js → diagnostics-D2oNwzue.js} +1 -1
  55. package/dist/{diagnostics-CdawaB0U.js → diagnostics-DlZODdRf.js} +1 -1
  56. package/dist/{directory-cli-BQrGwwjf.js → directory-cli-Bm5QYEo-.js} +5 -5
  57. package/dist/{directory-cli-FR_KoYon.js → directory-cli-DAGG_z_L.js} +5 -5
  58. package/dist/{dns-cli-CH2QMf70.js → dns-cli-CubLq4j9.js} +3 -3
  59. package/dist/{dns-cli-Cua_RGWw.js → dns-cli-yj_xgcmZ.js} +3 -3
  60. package/dist/{docs-cli-DwrSCuWF.js → docs-cli-ABJdcZAr.js} +2 -2
  61. package/dist/{docs-cli-9yu6OeWj.js → docs-cli-PS8m1er7.js} +2 -2
  62. package/dist/{doctor-completion-Df7Hv_IA.js → doctor-completion-BNg17v6i.js} +2 -2
  63. package/dist/{doctor-completion-Do20Q4ZM.js → doctor-completion-XdRobzWG.js} +2 -2
  64. package/dist/{doctor-config-flow-CKJlpwtv.js → doctor-config-flow-BIBJeoRl.js} +3 -3
  65. package/dist/{doctor-config-flow-CcwEh3WQ.js → doctor-config-flow-C52W1uUK.js} +3 -3
  66. package/dist/{enable-BI6rQ1Fb.js → enable-B8TbkmWU.js} +1 -1
  67. package/dist/{enable-xfczksnk.js → enable-BIMBTSRy.js} +1 -1
  68. package/dist/entry.js +1 -1
  69. package/dist/{exec-approvals-cli-Ca54uWdL.js → exec-approvals-cli-C4HEY0eG.js} +8 -8
  70. package/dist/{exec-approvals-cli-bu1S7v6i.js → exec-approvals-cli-DS6ZEPKH.js} +8 -8
  71. package/dist/extensionAPI.js +4 -4
  72. package/dist/{gateway-cli-CKlpsjYJ.js → gateway-cli-CAc-uivv.js} +77 -69
  73. package/dist/{gateway-cli-CwuURJSh.js → gateway-cli-CGXvamVN.js} +80 -72
  74. package/dist/{gateway-rpc-vivTzTCq.js → gateway-rpc-BmYtSmmM.js} +1 -1
  75. package/dist/{gateway-rpc-DMSsr0Xn.js → gateway-rpc-DJ2ZjQmX.js} +1 -1
  76. package/dist/{glass-ui-ws-Bzs3ALoN.js → glass-ui-ws-Bha2cLkY.js} +50 -50
  77. package/dist/{glass-ui-ws-C88aJslb.js → glass-ui-ws-DCCEkdBr.js} +48 -48
  78. package/dist/{health-D0jGdk53.js → health-Ba5X7a38.js} +3 -3
  79. package/dist/{health--v-C6lSf.js → health-Ct-lDCmK.js} +3 -3
  80. package/dist/{hooks-cli-CZ_pSdXS.js → hooks-cli-D2iAnwfW.js} +28 -28
  81. package/dist/{hooks-cli-CrZvzan1.js → hooks-cli-DUL_PDOH.js} +29 -29
  82. package/dist/{hooks-status-CQ33gaVT.js → hooks-status-CvKe3Bfk.js} +2 -2
  83. package/dist/{hooks-status-B5vDwm19.js → hooks-status-DoeoPJbZ.js} +1 -1
  84. package/dist/index.js +34 -34
  85. package/dist/{inspect-D_lN8pwg.js → inspect-CGKsaVZ4.js} +1 -1
  86. package/dist/{inspect-C3_zr-N9.js → inspect-CRa8Af7f.js} +1 -1
  87. package/dist/{install-safe-path-BBe6qFNr.js → install-safe-path-B2JrFspY.js} +1 -1
  88. package/dist/{install-safe-path-79R0iPyC.js → install-safe-path-BdxXJux8.js} +1 -1
  89. package/dist/{installs-Bb1phV9x.js → installs-D890uIIW.js} +3 -3
  90. package/dist/{installs-BVJQl3Tj.js → installs-Dunp9UFl.js} +3 -3
  91. package/dist/{lifecycle-core-O50xtu5c.js → lifecycle-core-YmWzkN43.js} +5 -5
  92. package/dist/{lifecycle-core-DdbL6ELJ.js → lifecycle-core-wFwnK_mD.js} +5 -5
  93. package/dist/llm-slug-generator.js +4 -4
  94. package/dist/{logs-cli-Dde2Dp2w.js → logs-cli-CgMlVSvI.js} +4 -4
  95. package/dist/{logs-cli-vIxaNVmF.js → logs-cli-N1bMTcij.js} +4 -4
  96. package/dist/{manager--GmDbwza.js → manager-B8q57Pg2.js} +1 -1
  97. package/dist/{manager-B-wPs7cb.js → manager-BAcrpGcR.js} +1 -1
  98. package/dist/{manager-BMA3iRMq.js → manager-BUyQ1gFU.js} +1 -1
  99. package/dist/{manager-S5d36_EM.js → manager-BcWElKHq.js} +1 -1
  100. package/dist/{memory-BcdI7NSs.js → memory-By9GyX8z.js} +3 -3
  101. package/dist/{memory-DBx1wEvf.js → memory-CHSa0jVf.js} +3 -3
  102. package/dist/{memory-cli-jNf_SaXU.js → memory-cli-JTWldzg5.js} +6 -6
  103. package/dist/{memory-cli-CQSVrNAK.js → memory-cli-e5KEX6Ql.js} +6 -6
  104. package/dist/{model-picker-DN-co6Oy.js → model-picker-Cf6UgQEh.js} +1 -1
  105. package/dist/{model-picker-CS_h9RHv.js → model-picker-DvP8ViSf.js} +1 -1
  106. package/dist/{models-cli-CiL6wDtk.js → models-cli-B-u1KOUo.js} +35 -35
  107. package/dist/{models-cli-6tdy2DaI.js → models-cli-DJnRAEsb.js} +32 -32
  108. package/dist/{models-BgZWEpSL.js → models-dVS6tcNK.js} +12 -12
  109. package/dist/{node-cli-BTXwMEJE.js → node-cli-BqvgYrlJ.js} +17 -17
  110. package/dist/{node-cli-ClniLggz.js → node-cli-CKuOdw5j.js} +17 -17
  111. package/dist/{node-service-CfHbECCi.js → node-service-BH08wY5j.js} +1 -1
  112. package/dist/{node-service-D44noKnR.js → node-service-CZlyWmxa.js} +1 -1
  113. package/dist/{nodes-cli-DrhMUDXx.js → nodes-cli-BrV7Xpf_.js} +7 -7
  114. package/dist/{nodes-cli-DLaX4pgX.js → nodes-cli-C6kDpXS_.js} +7 -7
  115. package/dist/{note-Cltpxj6i.js → note-BIAQpZxi.js} +1 -1
  116. package/dist/{note-ytwb4wwn.js → note-D9FXI2qW.js} +1 -1
  117. package/dist/{npm-registry-spec-CONWlhd6.js → npm-registry-spec-BPgK9EL7.js} +1 -1
  118. package/dist/{npm-registry-spec-DPqOMFd9.js → npm-registry-spec-DTqn-NXZ.js} +1 -1
  119. package/dist/{onboard-DFbgAa-t.js → onboard-BoKwKol7.js} +17 -17
  120. package/dist/{onboard-3FdfkbGm.js → onboard-CHOoD7jN.js} +17 -17
  121. package/dist/{onboard-channels-DeRg97iI.js → onboard-channels-C4_2V9uU.js} +7 -7
  122. package/dist/{onboard-channels-BN00--TD.js → onboard-channels-CfzUCh7p.js} +7 -7
  123. package/dist/{onboard-custom-BCcuL4Uq.js → onboard-custom-BcRYreNG.js} +2 -2
  124. package/dist/{onboard-custom-C-wfNtOM.js → onboard-custom-CfKvdcJ5.js} +2 -2
  125. package/dist/{onboard-helpers-Cv6fL8Vq.js → onboard-helpers-DI-HmD7F.js} +2 -2
  126. package/dist/{onboard-helpers-CAAZ0RDq.js → onboard-helpers-Dpb3-BZm.js} +2 -2
  127. package/dist/{onboard-hooks-D5-mtFUY.js → onboard-hooks-2SCajRKc.js} +2 -2
  128. package/dist/{onboard-hooks-CxJRzS5z.js → onboard-hooks-BpyxMXOj.js} +2 -2
  129. package/dist/{onboard-remote-pucDu-pH.js → onboard-remote-B8wiom2Y.js} +3 -3
  130. package/dist/{onboard-remote-CXRFa8AU.js → onboard-remote-Bs5NP5sK.js} +3 -3
  131. package/dist/{onboard-skills-BVTCfqlg.js → onboard-skills-B6CZay_w.js} +3 -3
  132. package/dist/{onboard-skills-C_93kjju.js → onboard-skills-BaprraLV.js} +2 -2
  133. package/dist/{onboarding-BigIUHoh.js → onboarding-B2BOb2RZ.js} +15 -15
  134. package/dist/{onboarding-fq_-89Jc.js → onboarding-DsxU2nSf.js} +15 -15
  135. package/dist/{onboarding.finalize-C2Dt95Rn.js → onboarding.finalize-BE7BU0jr.js} +21 -21
  136. package/dist/{onboarding.finalize-BGDBP9G7.js → onboarding.finalize-C-kW49Ut.js} +23 -23
  137. package/dist/{onboarding.gateway-config-eFJnSC-S.js → onboarding.gateway-config-Bs46b6Gz.js} +3 -3
  138. package/dist/{onboarding.gateway-config-wB3ShGU4.js → onboarding.gateway-config-DqFBlQ06.js} +3 -3
  139. package/dist/{openai-model-default-CKfNKTZD.js → openai-model-default-BkuuK-Di.js} +1 -1
  140. package/dist/{openai-model-default-ChdgeMqX.js → openai-model-default-Cx6qbnBw.js} +1 -1
  141. package/dist/{pairing-cli-D7_UlTsI.js → pairing-cli-CC0YyYGs.js} +2 -2
  142. package/dist/{pairing-cli-UgiAsygW.js → pairing-cli-Rsae0KnN.js} +2 -2
  143. package/dist/{path-env-BAyW1s3c.js → path-env-BY88zbPR.js} +1 -1
  144. package/dist/{path-env-C1hgM8gP.js → path-env-SUrcTSJ-.js} +1 -1
  145. package/dist/{pi-embedded-BAgVs8XC.js → pi-embedded-DEoacZlB.js} +145 -14
  146. package/dist/{pi-embedded-helpers-BBiyNXkS.js → pi-embedded-helpers-BQjRftRI.js} +1 -1
  147. package/dist/{pi-embedded-helpers-CDzBxa-P.js → pi-embedded-helpers-D-OFjhdI.js} +1 -1
  148. package/dist/{pi-tools.policy-CU8U7--z.js → pi-tools.policy-BeD_scvO.js} +1 -1
  149. package/dist/{pi-tools.policy-WaLKhqJQ.js → pi-tools.policy-CIw6PZ9e.js} +1 -1
  150. package/dist/{plugin-auto-enable-Bt2sVz8w.js → plugin-auto-enable-DJBhDIMq.js} +2 -2
  151. package/dist/{plugin-auto-enable-PBDcVF_-.js → plugin-auto-enable-DaR6Z6BC.js} +2 -2
  152. package/dist/{plugin-registry-2DU3g0AT.js → plugin-registry-D1BIaht5.js} +1 -1
  153. package/dist/{plugin-registry-CubHLj0v.js → plugin-registry-DeslTmEa.js} +1 -1
  154. package/dist/plugin-sdk/agents/tools/display-artifact-tool.d.ts +2 -0
  155. package/dist/plugin-sdk/index.js +6 -6
  156. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +8 -0
  157. package/dist/{plugins-cli-CIYGRkKI.js → plugins-cli-DJIjgG5p.js} +29 -29
  158. package/dist/{plugins-cli-Dpj76E3-.js → plugins-cli-tWL29ean.js} +30 -30
  159. package/dist/{program-FBDhJLrg.js → program-C_ecACg4.js} +32 -32
  160. package/dist/{program-context-CZYb4zB2.js → program-context-DhXsfGWA.js} +41 -41
  161. package/dist/{prompt-select-styled-DQyZ6VHH.js → prompt-select-styled-5mNa_JDe.js} +27 -27
  162. package/dist/{prompt-select-styled-C3LUG3Be.js → prompt-select-styled-B0UbChI2.js} +26 -26
  163. package/dist/{provider-auth-helpers-B_gA1eP9.js → provider-auth-helpers-BikwPxIZ.js} +6 -6
  164. package/dist/{provider-auth-helpers-LpT83BSS.js → provider-auth-helpers-c3gQEsiU.js} +6 -6
  165. package/dist/{push-apns-CLngpXwL.js → push-apns-COFa30nz.js} +1 -1
  166. package/dist/{push-apns-BWeNJb15.js → push-apns-DAYwWXpM.js} +1 -1
  167. package/dist/{pw-ai-DLsdzdgc.js → pw-ai-DY_6l11g.js} +1 -1
  168. package/dist/{pw-ai-DOAsQ5NX.js → pw-ai-v__CyAlM.js} +1 -1
  169. package/dist/{register.agent-pWEv9TC7.js → register.agent-B6pZEY8i.js} +47 -47
  170. package/dist/{register.agent-Dz24Zz7t.js → register.agent-D_zWbLp4.js} +50 -50
  171. package/dist/{register.configure-DQWtFNGt.js → register.configure-qpAPaUf1.js} +57 -57
  172. package/dist/{register.configure-BMLA-3Mt.js → register.configure-z9G70eYJ.js} +55 -55
  173. package/dist/{register.maintenance-81d4KKmA.js → register.maintenance-DLaTTsm9.js} +50 -50
  174. package/dist/{register.maintenance-FWHasNw7.js → register.maintenance-Ds0ujl3V.js} +50 -50
  175. package/dist/{register.message-vUwGF3E9.js → register.message-0N5-oUQ2.js} +28 -28
  176. package/dist/{register.message-C-p-GZ8z.js → register.message-ChR97uym.js} +26 -26
  177. package/dist/{register.onboard-COyX1xSR.js → register.onboard-B7mbI-9F.js} +23 -23
  178. package/dist/{register.onboard-BjPPudfS.js → register.onboard-D5S1tP0K.js} +23 -23
  179. package/dist/{register.setup-C_ds_5fl.js → register.setup-CJ9hldNi.js} +23 -23
  180. package/dist/{register.setup-DDMtRxcF.js → register.setup-CaA-JN2n.js} +23 -23
  181. package/dist/{register.status-health-sessions-Dn2gy0gi.js → register.status-health-sessions-BUgIBm_S.js} +29 -29
  182. package/dist/{register.status-health-sessions-C9Zdn1ai.js → register.status-health-sessions-CkZTuaL-.js} +29 -29
  183. package/dist/{register.subclis-B16w8wxz.js → register.subclis-Ca8FmJFy.js} +30 -30
  184. package/dist/{resolve-route-D0NrCHnr.js → resolve-route-BVJ4-d9c.js} +1 -1
  185. package/dist/{resolve-route-CnTdHVgw.js → resolve-route-C1IIA6kH.js} +1 -1
  186. package/dist/{routes-DIyAmLYR.js → routes-ivqbutvM.js} +1 -1
  187. package/dist/{routes-CPMVuvoz.js → routes-wLkmjLj9.js} +1 -1
  188. package/dist/{rpc-KjYXUeLD.js → rpc-BWgqz86j.js} +1 -1
  189. package/dist/{rpc-DP3AhcZq.js → rpc-D4d4nLSU.js} +1 -1
  190. package/dist/{run-main-CUMiBvgm.js → run-main-DMrkCeK2.js} +46 -46
  191. package/dist/{sandbox-61-kshSF.js → sandbox-BkznAPKO.js} +2 -2
  192. package/dist/{sandbox-J92UBQK8.js → sandbox-DjKcZavm.js} +2 -2
  193. package/dist/{sandbox-cli-D9v0jhBb.js → sandbox-cli-Bb9cBtBH.js} +5 -5
  194. package/dist/{sandbox-cli-DJgF-r8G.js → sandbox-cli-DmgpJLlJ.js} +5 -5
  195. package/dist/{security-cli-hTCYStCU.js → security-cli-C_KMIhS2.js} +9 -9
  196. package/dist/{security-cli-CGLnA_ni.js → security-cli-McZcuPWz.js} +9 -9
  197. package/dist/{server-context-SbbjNkPL.js → server-context-ChcbJgNo.js} +3 -3
  198. package/dist/{server-context-D-82OTsT.js → server-context-DrAh6Cgw.js} +3 -3
  199. package/dist/{server-methods-D_zGEWNK.js → server-methods-BygKI0kw.js} +32 -29
  200. package/dist/{server-methods-C3_JU-DI.js → server-methods-szCGOyyf.js} +31 -28
  201. package/dist/{server-node-events-CRYzL3TY.js → server-node-events-CbR5rq2-.js} +25 -25
  202. package/dist/{server-node-events-CW5ilXPN.js → server-node-events-y9KRPn6N.js} +27 -27
  203. package/dist/{service-Ccv3Zi5_.js → service-DYpU1ajf.js} +1 -1
  204. package/dist/{service-BF50XyKr.js → service-e6MzlLCd.js} +1 -1
  205. package/dist/{shared-BmjlTHYU.js → shared-1xPo9ygd.js} +1 -1
  206. package/dist/{shared-BJRsBGGr.js → shared-Dl4ZrOve.js} +1 -1
  207. package/dist/{skills-cli-BZF5mcG5.js → skills-cli-B-7TY-vS.js} +6 -6
  208. package/dist/{skills-cli-C9F-zLWe.js → skills-cli-jQ-M3ToK.js} +2 -2
  209. package/dist/{skills-install-QOHQrX6P.js → skills-install-CZE8W7lV.js} +4 -4
  210. package/dist/{skills-install-X12kifP1.js → skills-install-Dwzsjoc8.js} +4 -4
  211. package/dist/{skills-status-6LVKpabC.js → skills-status-BKX1PjCc.js} +1 -1
  212. package/dist/{status-C_K3wapX.js → status-BZ9FL5l4.js} +1 -1
  213. package/dist/{status-DbIBRkrV.js → status-Cthysi1v.js} +16 -16
  214. package/dist/{status-NK8EUhIy.js → status-lqzeb_Td.js} +1 -1
  215. package/dist/{status-1ACP62Xm.js → status-uRIajsvi.js} +15 -15
  216. package/dist/{status.update-CdTtmVpp.js → status.update-DGJi0OLl.js} +1 -1
  217. package/dist/{status.update-_3qHPt0O.js → status.update-DW6VHYmK.js} +1 -1
  218. package/dist/{subagent-registry-SZbZfkbr.js → subagent-registry-DwvGle7T.js} +144 -21
  219. package/dist/symframe-broadcast-BVxModY5.js +22 -0
  220. package/dist/symframe-broadcast-CXo2qoxy.js +22 -0
  221. package/dist/{symframe-cli-DLbhzXNU.js → symframe-cli-0tRARGnc.js} +3 -3
  222. package/dist/{symframe-cli-OqTUw6Mt.js → symframe-cli-D00zI8yK.js} +3 -3
  223. package/dist/{synthesis-BLRsy_PZ.js → synthesis-BKLx13A_.js} +22 -22
  224. package/dist/{synthesis-CG0rRaLA.js → synthesis-CzKaWpzb.js} +4 -4
  225. package/dist/{synthesis-CA2zGGNE.js → synthesis-DwAlX75N.js} +23 -23
  226. package/dist/{synthesis-CUbz4CaL.js → synthesis-P09ozKOL.js} +4 -4
  227. package/dist/{system-cli-CYgTroZA.js → system-cli-D18NNk54.js} +3 -3
  228. package/dist/{system-cli-BoxTfo1R.js → system-cli-OzNqTgb2.js} +3 -3
  229. package/dist/{systemd-hints-DmDUq9JT.js → systemd-hints-BoFy3-m1.js} +4 -4
  230. package/dist/{systemd-hints-bP8dBJ78.js → systemd-hints-CsrzMCTD.js} +4 -4
  231. package/dist/{systemd-linger-DjoQVcOq.js → systemd-linger-BzYk7A6M.js} +2 -2
  232. package/dist/{systemd-linger-BBxRNFXz.js → systemd-linger-CctFkWNE.js} +2 -2
  233. package/dist/{tui-BdtfeKft.js → tui-CDovUd2Z.js} +1 -1
  234. package/dist/{tui-cli-CcSS08na.js → tui-cli--wAWyd-U.js} +7 -7
  235. package/dist/{tui-cli-_WzJLbOA.js → tui-cli-COLpBx2w.js} +7 -7
  236. package/dist/{tui-CO7OA9ZO.js → tui-mmN0hLk6.js} +1 -1
  237. package/dist/{unified-runner-B0cMr4If.js → unified-runner-CSqDmSWt.js} +145 -22
  238. package/dist/{unified-runner-ChkYfsxy.js → unified-runner-CuhQvmLZ.js} +145 -14
  239. package/dist/{update-BDo7wxMf.js → update-B7qKOIqP.js} +1 -1
  240. package/dist/{update-check-oEbS0voJ.js → update-check-BCL_K7kx.js} +1 -1
  241. package/dist/{update-check-A86nJKtZ.js → update-check-DLOnLuop.js} +1 -1
  242. package/dist/{update-cli-BhI88CVk.js → update-cli-BsfG48ZS.js} +59 -59
  243. package/dist/{update-cli-jxM3sFLP.js → update-cli-Df_HQi-p.js} +59 -59
  244. package/dist/{update-runner-DHi359Tb.js → update-runner-BLV8SI96.js} +2 -2
  245. package/dist/{update-runner-CQMv-ibM.js → update-runner-Cext3X8r.js} +2 -2
  246. package/dist/{update-CcacbR32.js → update-yYduAjKd.js} +1 -1
  247. package/dist/{webhooks-cli-BUWSS_ve.js → webhooks-cli-CkSbVFZl.js} +2 -2
  248. package/dist/{webhooks-cli-BrDeMswO.js → webhooks-cli-D5k-Y2A8.js} +2 -2
  249. package/dist/{with-timeout-B0ZJa7f2.js → with-timeout-B9GM8DPj.js} +1 -1
  250. package/dist/{with-timeout-GbJ1Yzsh.js → with-timeout-DPR4A2dx.js} +1 -1
  251. package/package.json +1 -1
  252. /package/dist/{agents.config-DK6nN-Qh.js → agents.config-B7sNDvhz.js} +0 -0
  253. /package/dist/{agents.config-Cyc_RegL.js → agents.config-CqfMQEiy.js} +0 -0
  254. /package/dist/{argv-Bl0th4dq.js → argv-D6PT4jl6.js} +0 -0
  255. /package/dist/{auth-choice-legacy-BZWIpO92.js → auth-choice-legacy-CsL_9IlL.js} +0 -0
  256. /package/dist/{auth-choice-legacy-iEyARXI2.js → auth-choice-legacy-D9d98wkI.js} +0 -0
  257. /package/dist/{auth-token-DyhvQgv4.js → auth-token-Cr28IDKY.js} +0 -0
  258. /package/dist/{auth-token-lPWiklDD.js → auth-token-YTHu2ftn.js} +0 -0
  259. /package/dist/{bindings-c7qLJdIA.js → bindings-BRZBH7eX.js} +0 -0
  260. /package/dist/{bindings-BAOPW5eK.js → bindings-DIhsYGa_.js} +0 -0
  261. /package/dist/{brew-B4FH-mEH.js → brew-Clk21D21.js} +0 -0
  262. /package/dist/{brew-CI00FKf8.js → brew-DD55iLUe.js} +0 -0
  263. /package/dist/{catalog-BaM8d1-T.js → catalog-BQgWCFTH.js} +0 -0
  264. /package/dist/{catalog-BnLcGVie.js → catalog-BptA-dUv.js} +0 -0
  265. /package/dist/{channel-selection-BrFl0vVK.js → channel-selection-CmU8iVio.js} +0 -0
  266. /package/dist/{channel-selection-DjrS6oiz.js → channel-selection-H1qOf0q-.js} +0 -0
  267. /package/dist/{channels-status-issues-BwbA2OBt.js → channels-status-issues-BTvrA4nx.js} +0 -0
  268. /package/dist/{channels-status-issues-iWQDGUQe.js → channels-status-issues-DLIzUsjR.js} +0 -0
  269. /package/dist/{cli-utils-Ca0KE-dW.js → cli-utils-CuyGL3rq.js} +0 -0
  270. /package/dist/{cli-utils-CbnnSB38.js → cli-utils-DXfA5936.js} +0 -0
  271. /package/dist/{clipboard-BSTxQ2tO.js → clipboard-BGveOWXP.js} +0 -0
  272. /package/dist/{clipboard-CHn5r7Kj.js → clipboard-v8OffNHk.js} +0 -0
  273. /package/dist/{command-options-DgcCGXMQ.js → command-options-BFvvecvU.js} +0 -0
  274. /package/dist/{command-options-Vxb4M7Aj.js → command-options-DDDwkB9t.js} +0 -0
  275. /package/dist/{config-validation-DQ-lm2Qx.js → config-validation-Cdyg1BZB.js} +0 -0
  276. /package/dist/{config-validation-DhsYEtLL.js → config-validation-CeEJcuMJ.js} +0 -0
  277. /package/dist/{consolidate-BoM9cz9L.js → consolidate-BNTNdxdL.js} +0 -0
  278. /package/dist/{consolidate-nNhnUpNj.js → consolidate-DymnvvYm.js} +0 -0
  279. /package/dist/{control-ui-assets-CnX0W3vy.js → control-ui-assets-CJQ97d4u.js} +0 -0
  280. /package/dist/{control-ui-assets-DfBRXG5y.js → control-ui-assets-Dnz69KRU.js} +0 -0
  281. /package/dist/{cost-cli-CmfkZsmZ.js → cost-cli-BfcKmCc4.js} +0 -0
  282. /package/dist/{cost-cli-C9LvOtGz.js → cost-cli-DWiVCOCx.js} +0 -0
  283. /package/dist/{delivery-queue-CIwn40ej.js → delivery-queue-B2oigbh4.js} +0 -0
  284. /package/dist/{delivery-queue-duM0RT18.js → delivery-queue-OAc7hsIs.js} +0 -0
  285. /package/dist/{deps-D5me2CAW.js → deps-Bf9dt2UO.js} +0 -0
  286. /package/dist/{dm-policy-shared-EuuPwRNE.js → dm-policy-shared-BtrdvOIT.js} +0 -0
  287. /package/dist/{dm-policy-shared-BUwZ6Ajx.js → dm-policy-shared-CeFt0nch.js} +0 -0
  288. /package/dist/{entry-status-D0BSpWt_.js → entry-status-DnvpZhUd.js} +0 -0
  289. /package/dist/{format-BFJAwjeA.js → format-CZeGyu83.js} +0 -0
  290. /package/dist/{gmail-setup-utils-_TEJA4pL.js → gmail-setup-utils-BYBwPfuu.js} +0 -0
  291. /package/dist/{gmail-setup-utils-DJgxyDTX.js → gmail-setup-utils-CGaQ7-Vb.js} +0 -0
  292. /package/dist/{health-format-Li703vy6.js → health-format-6tfMqkNX.js} +0 -0
  293. /package/dist/{health-format-Dp4xmTKn.js → health-format-Bxg84_f4.js} +0 -0
  294. /package/dist/{help-format-8IYCRvx1.js → help-format-7hFcsqss.js} +0 -0
  295. /package/dist/{help-format-BTNd5kFC.js → help-format-Dbp8yEhl.js} +0 -0
  296. /package/dist/{helpers-DGBa5iKd.js → helpers-B_p8ul9t.js} +0 -0
  297. /package/dist/{helpers-CoScWBmD.js → helpers-CBCZwlBW.js} +0 -0
  298. /package/dist/{helpers-lLtg0Hgi.js → helpers-CKQ7JYPP.js} +0 -0
  299. /package/dist/{helpers-BnXDQL2q.js → helpers-G6zuddmF.js} +0 -0
  300. /package/dist/{ipv4-CCdAVmwu.js → ipv4-C_NtZ3JP.js} +0 -0
  301. /package/dist/{ipv4-DFUXU3PT.js → ipv4-qGjACkoi.js} +0 -0
  302. /package/dist/{links-CQZxjjCO.js → links-Bqr0FxXx.js} +0 -0
  303. /package/dist/{links-B9CbwY46.js → links-Dnmd-RS-.js} +0 -0
  304. /package/dist/{logging-CLWZ3KQI.js → logging-BWknayJl.js} +0 -0
  305. /package/dist/{logging-BmJ5ky59.js → logging-DDnP1BTp.js} +0 -0
  306. /package/dist/{logging-BRejMykf.js → logging-Ev3fNJEG.js} +0 -0
  307. /package/dist/{logging-uD67RPtO.js → logging-UO6tk8Em.js} +0 -0
  308. /package/dist/{model-BMFj7NXy.js → model-MUMSB_7d.js} +0 -0
  309. /package/dist/{model-param-b-DieX_ZxM.js → model-param-b-BQFczpbd.js} +0 -0
  310. /package/dist/{onboard-config-B9Iy9-4f.js → onboard-config-DrMJycgG.js} +0 -0
  311. /package/dist/{onboard-config-DwsP5yz1.js → onboard-config-yFJq4mEu.js} +0 -0
  312. /package/dist/{outbound-send-deps-DpyxnI3f.js → outbound-send-deps--SpwgFhS.js} +0 -0
  313. /package/dist/{outbound-send-deps-JQjmNLPx.js → outbound-send-deps-BCyarBRf.js} +0 -0
  314. /package/dist/{parse-log-line-BQPvB6cZ.js → parse-log-line-DfH8ycNl.js} +0 -0
  315. /package/dist/{parse-log-line-Cg7e_EO6.js → parse-log-line-Vp8N7lak.js} +0 -0
  316. /package/dist/{parse-port-CLBKavYE.js → parse-port-Bi7Gqqv0.js} +0 -0
  317. /package/dist/{parse-port-dzRz6QnZ.js → parse-port-CMRD6fhd.js} +0 -0
  318. /package/dist/{parse-timeout-CuYdP9TL.js → parse-timeout-DmEcHIsV.js} +0 -0
  319. /package/dist/{parse-timeout-DUdeaMqF.js → parse-timeout-widuTpq9.js} +0 -0
  320. /package/dist/{path-safety-ZDtSDPro.js → path-safety-CV-2z0JS.js} +0 -0
  321. /package/dist/{path-safety-cWA8NpOb.js → path-safety-CkXjT453.js} +0 -0
  322. /package/dist/{plugins-allowlist-C5r7biDp.js → plugins-allowlist-CAXiY1du.js} +0 -0
  323. /package/dist/{plugins-allowlist-CD4oIJNk.js → plugins-allowlist-DV-EyqWq.js} +0 -0
  324. /package/dist/{ports-C2swmreL.js → ports-gFlaMWtN.js} +0 -0
  325. /package/dist/{ports-BE4iY9ho.js → ports-r7LBic2V.js} +0 -0
  326. /package/dist/{program-context-CGKRxOBU.js → program-context-B_0V80zV.js} +0 -0
  327. /package/dist/{progress-BOQ0hkeM.js → progress-CI19Xh3z.js} +0 -0
  328. /package/dist/{progress-DQTvTiEg.js → progress-swt2y17x.js} +0 -0
  329. /package/dist/{prompt-style-CzRuIYtp.js → prompt-style-CZGg35Py.js} +0 -0
  330. /package/dist/{prompt-style-pphr4yLK.js → prompt-style-olk5zI5k.js} +0 -0
  331. /package/dist/{prompts-B98rp78m.js → prompts-CNzp9M83.js} +0 -0
  332. /package/dist/{prompts-CqJkfsHC.js → prompts-D4yOwSll.js} +0 -0
  333. /package/dist/{pw-ai-DQZa9DUQ.js → pw-ai-BiBvIJzd.js} +0 -0
  334. /package/dist/{pw-ai-DBAtSFTB.js → pw-ai-C0Jie9u9.js} +0 -0
  335. /package/dist/{qmd-manager-C1levE0a.js → qmd-manager-4tXuJfLY.js} +0 -0
  336. /package/dist/{qmd-manager-CR71XjjR.js → qmd-manager-C8-M4Pru.js} +0 -0
  337. /package/dist/{qr-cli-DHpiebkG.js → qr-cli-1sCVaPcF.js} +0 -0
  338. /package/dist/{qr-cli-D2A-IU0Y.js → qr-cli-BnNm-DMY.js} +0 -0
  339. /package/dist/{replies-_DV8VSSj.js → replies-CLREUzzB.js} +0 -0
  340. /package/dist/{replies-C5CBlnFS.js → replies-CbXXjn9X.js} +0 -0
  341. /package/dist/{runtime-guard-Bgv3O9s4.js → runtime-guard-CWA00ZXa.js} +0 -0
  342. /package/dist/{runtime-guard-ofQGcCUc.js → runtime-guard-LRRZ73eX.js} +0 -0
  343. /package/dist/{runtime-status-B-PXkhrX.js → runtime-status-BgZqic8M.js} +0 -0
  344. /package/dist/{runtime-status-Zb9OQ0VK.js → runtime-status-DV2uMNRb.js} +0 -0
  345. /package/dist/{session-dirs-BsQ-g02q.js → session-dirs-C9E2G0yZ.js} +0 -0
  346. /package/dist/{session-dirs-DpiMgw4q.js → session-dirs-pNE-WE2a.js} +0 -0
  347. /package/dist/{sessions-BSmT7vGX.js → sessions-C2vCAjTZ.js} +0 -0
  348. /package/dist/{shared-Ck6cf10x.js → shared-COtpr3Ad.js} +0 -0
  349. /package/dist/{shared-Crfo8y70.js → shared-DHJR5_SP.js} +0 -0
  350. /package/dist/{skill-scanner-EhsZUzzk.js → skill-scanner-BC3PyNso.js} +0 -0
  351. /package/dist/{skill-scanner-D5p8L-xO.js → skill-scanner-BCgVcIwi.js} +0 -0
  352. /package/dist/{status-DtyqId3v.js → status-Bah7VY4i.js} +0 -0
  353. /package/dist/{status-dOhj12u0.js → status-BzmfZaEV.js} +0 -0
  354. /package/dist/{system-run-command-2oJPKfVr.js → system-run-command-CYEDiFm7.js} +0 -0
  355. /package/dist/{system-run-command-D_OmCQOL.js → system-run-command-olPQqEUJ.js} +0 -0
  356. /package/dist/{systemd-Dtydk5-z.js → systemd-CNnW7Chw.js} +0 -0
  357. /package/dist/{systemd-Dic80Qni.js → systemd-CUIM0n5P.js} +0 -0
  358. /package/dist/{table-Ds5CZCyv.js → table-0A3xKJVC.js} +0 -0
  359. /package/dist/{table-Dm8jYqmW.js → table-D0JXlEhQ.js} +0 -0
  360. /package/dist/{tool-loop-detection-2Mxxm8YE.js → tool-loop-detection-BFFEnLXH.js} +0 -0
  361. /package/dist/{tool-loop-detection-Bk07vuCX.js → tool-loop-detection-CyaMgdb1.js} +0 -0
  362. /package/dist/{widearea-dns-BwIBBqZo.js → widearea-dns-CKKGWxWC.js} +0 -0
  363. /package/dist/{widearea-dns-DA_m7oeT.js → widearea-dns-DHO-Mc6G.js} +0 -0
  364. /package/dist/{workspace-DD9pYbiv.js → workspace-BEOJvHML.js} +0 -0
  365. /package/dist/{workspace-Wkr6wXcS.js → workspace-dN7eNg6n.js} +0 -0
  366. /package/dist/{wsl-Ci3VOaSK.js → wsl-CglTdtlb.js} +0 -0
  367. /package/dist/{wsl-S50RbgL8.js → wsl-DMA0sTvh.js} +0 -0
@@ -6,7 +6,7 @@ import { t as GatewayClient, zt as PROTOCOL_VERSION } from "./client-CdiymIXS.js
6
6
  import { i as ensureExplicitGatewayAuth, o as resolveExplicitGatewayAuth, t as buildGatewayConnectionDetails } from "./call-A18kwyah.js";
7
7
  import { f as GATEWAY_CLIENT_CAPS, h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DXToSaWK.js";
8
8
  import { C as stripLeadingInboundMetadata } from "./sessions-Dn6VXn4p.js";
9
- import { y as formatRawAssistantErrorForUi } from "./pi-embedded-helpers-BBiyNXkS.js";
9
+ import { y as formatRawAssistantErrorForUi } from "./pi-embedded-helpers-BQjRftRI.js";
10
10
  import { c as normalizeUsageDisplay, r as listThinkingLevelLabels, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-BZDIJMl_.js";
11
11
  import { n as listChatCommands, r as listChatCommandsForConfig } from "./commands-registry-D8LQ9fss.js";
12
12
  import { n as resolveToolDisplay, t as formatToolDetail } from "./tool-display-DxbOx1Kx.js";
@@ -13,13 +13,13 @@ import "./message-channel-DXToSaWK.js";
13
13
  import "./pairing-token-B-OTYROz.js";
14
14
  import "./sessions-Dn6VXn4p.js";
15
15
  import "./plugins-BsEhWvLn.js";
16
- import "./pi-embedded-helpers-BBiyNXkS.js";
17
- import "./sandbox-J92UBQK8.js";
16
+ import "./pi-embedded-helpers-BQjRftRI.js";
17
+ import "./sandbox-DjKcZavm.js";
18
18
  import "./chrome-D1eO2jfe.js";
19
19
  import "./tailscale-FeJ1M0mP.js";
20
20
  import "./auth-pHRwjgkx.js";
21
- import "./server-context-D-82OTsT.js";
22
- import "./routes-CPMVuvoz.js";
21
+ import "./server-context-DrAh6Cgw.js";
22
+ import "./routes-wLkmjLj9.js";
23
23
  import "./redact-Dj3r1_tS.js";
24
24
  import "./errors-BmdGLmRC.js";
25
25
  import "./fs-safe-D0xrTzGw.js";
@@ -34,9 +34,9 @@ import "./thinking-BZDIJMl_.js";
34
34
  import "./commands-BiW8npr7.js";
35
35
  import "./commands-registry-D8LQ9fss.js";
36
36
  import "./tool-display-DxbOx1Kx.js";
37
- import { t as parseTimeoutMs } from "./parse-timeout-DUdeaMqF.js";
38
- import { t as formatDocsLink } from "./links-B9CbwY46.js";
39
- import { t as runTui } from "./tui-BdtfeKft.js";
37
+ import { t as parseTimeoutMs } from "./parse-timeout-widuTpq9.js";
38
+ import { t as formatDocsLink } from "./links-Dnmd-RS-.js";
39
+ import { t as runTui } from "./tui-CDovUd2Z.js";
40
40
 
41
41
  //#region src/cli/tui-cli.ts
42
42
  function registerTuiCli(program) {
@@ -5,20 +5,20 @@ import { f as defaultRuntime } from "./subsystem-CHbO_DkH.js";
5
5
  import "./exec-DuYbft0z.js";
6
6
  import "./agent-scope-DOrZjOnW.js";
7
7
  import "./model-selection-7wdmO-Iw.js";
8
- import "./pi-embedded-helpers-CDzBxa-P.js";
8
+ import "./pi-embedded-helpers-D-OFjhdI.js";
9
9
  import "./config-B4jkreCN.js";
10
10
  import "./boolean-CbZoNRMn.js";
11
11
  import "./env-BRnPI9sO.js";
12
12
  import "./shell-env-Dc3iU7HK.js";
13
13
  import "./manifest-registry-D1MLZEjS.js";
14
- import "./sandbox-61-kshSF.js";
14
+ import "./sandbox-BkznAPKO.js";
15
15
  import "./chrome-DJChpTwP.js";
16
16
  import "./tailscale-DpKBMIvx.js";
17
17
  import "./auth-Bkx-QuRN.js";
18
- import "./server-context-SbbjNkPL.js";
18
+ import "./server-context-ChcbJgNo.js";
19
19
  import "./frontmatter-B_jqcova.js";
20
20
  import "./skills-BwDmcZdt.js";
21
- import "./routes-DIyAmLYR.js";
21
+ import "./routes-ivqbutvM.js";
22
22
  import "./redact-B3O-RBO1.js";
23
23
  import "./errors-bI7Tdx75.js";
24
24
  import "./fs-safe-BdejYjW8.js";
@@ -39,9 +39,9 @@ import "./client-DDqXo-cF.js";
39
39
  import "./call-PpGwcPn-.js";
40
40
  import "./pairing-token-Dcy37-4s.js";
41
41
  import "./tool-display-DFOL6UQ9.js";
42
- import { t as parseTimeoutMs } from "./parse-timeout-CuYdP9TL.js";
43
- import { t as formatDocsLink } from "./links-CQZxjjCO.js";
44
- import { t as runTui } from "./tui-CO7OA9ZO.js";
42
+ import { t as parseTimeoutMs } from "./parse-timeout-DmEcHIsV.js";
43
+ import { t as formatDocsLink } from "./links-Bqr0FxXx.js";
44
+ import { t as runTui } from "./tui-mmN0hLk6.js";
45
45
 
46
46
  //#region src/cli/tui-cli.ts
47
47
  function registerTuiCli(program) {
@@ -1,7 +1,7 @@
1
1
  import { l as stripAnsi, u as visibleWidth } from "./subsystem-CHbO_DkH.js";
2
2
  import { o as normalizeAgentId, r as buildAgentMainSessionKey, s as normalizeMainKey, x as parseAgentSessionKey } from "./session-key-DUSb7CCb.js";
3
3
  import { l as resolveDefaultAgentId } from "./agent-scope-DOrZjOnW.js";
4
- import { y as formatRawAssistantErrorForUi } from "./pi-embedded-helpers-CDzBxa-P.js";
4
+ import { y as formatRawAssistantErrorForUi } from "./pi-embedded-helpers-D-OFjhdI.js";
5
5
  import { N as VERSION, i as loadConfig } from "./config-B4jkreCN.js";
6
6
  import { k as stripLeadingInboundMetadata } from "./sessions-Dxf5Kjig.js";
7
7
  import { f as GATEWAY_CLIENT_CAPS, h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-DgjXWzf-.js";
@@ -13,19 +13,19 @@ import { C as DEFAULT_MODEL, S as DEFAULT_CONTEXT_TOKENS, _ as resolveModelRefFr
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-CDzBxa-P.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
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";
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-61-kshSF.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
24
  import { T as DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "./chrome-DJChpTwP.js";
25
- import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-SbbjNkPL.js";
25
+ import { i as resolveBrowserConfig, m as resolveBrowserControlAuth } from "./server-context-ChcbJgNo.js";
26
26
  import { l as parseFrontmatterBlock } from "./frontmatter-B_jqcova.js";
27
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-DIyAmLYR.js";
28
+ import { n as getMediaDir, r as saveMediaBuffer } from "./routes-ivqbutvM.js";
29
29
  import { n as formatErrorMessage, r as formatUncaughtError, t as extractErrorCode } from "./errors-bI7Tdx75.js";
30
30
  import { i as resolveExistingPathsWithinRoot, r as DEFAULT_UPLOAD_DIR } from "./paths-DObzwe08.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-DOZRI5XH.js";
@@ -42,7 +42,7 @@ import { i as normalizeInputProvenance, n as applyInputProvenanceToUserMessage,
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-C81eqdrP.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";
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
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";
@@ -50,10 +50,10 @@ import { b as OLLAMA_NATIVE_BASE_URL, c as normalizeGoogleModelId, t as ensureSy
50
50
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-Db8XJVGL.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
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-GbJ1Yzsh.js";
53
+ import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-DPR4A2dx.js";
54
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-DBx1wEvf.js";
56
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-S5d36_EM.js";
55
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-CHSa0jVf.js";
56
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-BcWElKHq.js";
57
57
  import { f as runTasksWithConcurrency } from "./internal-DVCddhhN.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";
@@ -80,15 +80,16 @@ import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-po
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-DOGU9T2P.js";
83
+ import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-D8kKOts5.js";
84
84
  import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normalizeCronStaggerMs } from "./stagger-DQs772BN.js";
85
- import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-DjrS6oiz.js";
86
- import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-CnTdHVgw.js";
87
- import { t as parseTimeoutMs } from "./parse-timeout-CuYdP9TL.js";
88
- import { n as registerMemoryCli } from "./memory-cli-jNf_SaXU.js";
89
- import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-C5CBlnFS.js";
90
- import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-WaLKhqJQ.js";
91
- import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-BMFj7NXy.js";
85
+ import { t as emitSymframePush } from "./symframe-broadcast-CXo2qoxy.js";
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";
88
+ import { t as parseTimeoutMs } from "./parse-timeout-DmEcHIsV.js";
89
+ import { n as registerMemoryCli } from "./memory-cli-JTWldzg5.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-CIw6PZ9e.js";
92
+ import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-MUMSB_7d.js";
92
93
  import { createRequire } from "node:module";
93
94
  import process$1 from "node:process";
94
95
  import { fileURLToPath } from "node:url";
@@ -4677,6 +4678,12 @@ function buildAgentSystemPrompt(params) {
4677
4678
  " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
4678
4679
  " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
4679
4680
  "",
4681
+ "## Symframe (artifact display)",
4682
+ "When you produce content that doesn't fit naturally in chat — long-form drafts, structured documents, generated emails, code blocks the user will copy, file links, audio/video — call the `display_artifact` tool instead of pasting into your reply.",
4683
+ "The card appears at the top of the user's right-column symframe panel; chat stays clean for the conversation.",
4684
+ "Types: `text` · `markdown` · `code` (use `language` for hljs hint) · `email-draft` (use `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (the last three take `url` + optional `mimeType`).",
4685
+ "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email — shown in your panel above.\"). Don't repeat the full content in chat.",
4686
+ "",
4680
4687
  ...compactMode ? [] : [
4681
4688
  "## Tool Call Style",
4682
4689
  "Default: do not narrate routine, low-risk tool calls (just call the tool).",
@@ -4922,7 +4929,7 @@ async function recordLoopOutcome(args) {
4922
4929
  if (!args.ctx?.sessionKey) return;
4923
4930
  try {
4924
4931
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-DnkpMfCl.js").then((n) => n.n);
4925
- const { recordToolCallOutcome } = await import("./tool-loop-detection-2Mxxm8YE.js");
4932
+ const { recordToolCallOutcome } = await import("./tool-loop-detection-BFFEnLXH.js");
4926
4933
  recordToolCallOutcome(getDiagnosticSessionState({
4927
4934
  sessionKey: args.ctx.sessionKey,
4928
4935
  sessionId: args.ctx?.agentId
@@ -4944,7 +4951,7 @@ async function runBeforeToolCallHook(args) {
4944
4951
  if (args.ctx?.sessionKey) {
4945
4952
  const { getDiagnosticSessionState } = await import("./diagnostic-session-state-DnkpMfCl.js").then((n) => n.n);
4946
4953
  const { logToolLoopAction } = await import("./diagnostic-DbT9t0Sh.js").then((n) => n.n);
4947
- const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-2Mxxm8YE.js");
4954
+ const { detectToolCallLoop, recordToolCall } = await import("./tool-loop-detection-BFFEnLXH.js");
4948
4955
  const sessionState = getDiagnosticSessionState({
4949
4956
  sessionKey: args.ctx.sessionKey,
4950
4957
  sessionId: args.ctx?.agentId
@@ -5808,7 +5815,7 @@ async function routeReply(params) {
5808
5815
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
5809
5816
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
5810
5817
  try {
5811
- const { deliverOutboundPayloads } = await import("./deliver-C81eqdrP.js").then((n) => n.n);
5818
+ const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
5812
5819
  return {
5813
5820
  ok: true,
5814
5821
  messageId: (await deliverOutboundPayloads({
@@ -25901,6 +25908,121 @@ Use jobId as the canonical identifier; id is accepted for compatibility. Use con
25901
25908
  };
25902
25909
  }
25903
25910
 
25911
+ //#endregion
25912
+ //#region src/agents/tools/display-artifact-tool.ts
25913
+ const ARTIFACT_TYPES = [
25914
+ "text",
25915
+ "markdown",
25916
+ "code",
25917
+ "email-draft",
25918
+ "pdf",
25919
+ "audio",
25920
+ "video"
25921
+ ];
25922
+ const ARTIFACT_ACTIONS = [
25923
+ "add",
25924
+ "update",
25925
+ "remove"
25926
+ ];
25927
+ const ActionSchema = Type.Object({
25928
+ label: Type.String(),
25929
+ kind: Type.Optional(stringEnum(["primary", "secondary"])),
25930
+ rpc: Type.Optional(Type.String()),
25931
+ params: Type.Optional(Type.Record(Type.String(), Type.Unknown()))
25932
+ });
25933
+ const EmailFieldsSchema = Type.Object({
25934
+ from: Type.Optional(Type.String()),
25935
+ to: Type.Optional(Type.String()),
25936
+ cc: Type.Optional(Type.String()),
25937
+ bcc: Type.Optional(Type.String()),
25938
+ subject: Type.Optional(Type.String()),
25939
+ body: Type.Optional(Type.String())
25940
+ });
25941
+ const DisplayArtifactSchema = Type.Object({
25942
+ action: Type.Optional(stringEnum(ARTIFACT_ACTIONS)),
25943
+ id: Type.Optional(Type.String()),
25944
+ type: Type.Optional(stringEnum(ARTIFACT_TYPES)),
25945
+ title: Type.Optional(Type.String()),
25946
+ body: Type.Optional(Type.String()),
25947
+ language: Type.Optional(Type.String()),
25948
+ url: Type.Optional(Type.String()),
25949
+ mimeType: Type.Optional(Type.String()),
25950
+ downloadName: Type.Optional(Type.String()),
25951
+ poster: Type.Optional(Type.String()),
25952
+ email: Type.Optional(EmailFieldsSchema),
25953
+ actions: Type.Optional(Type.Array(ActionSchema)),
25954
+ sticky: Type.Optional(Type.Boolean())
25955
+ });
25956
+ function genCardId() {
25957
+ return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
25958
+ }
25959
+ function createDisplayArtifactTool() {
25960
+ return {
25961
+ label: "Display Artifact",
25962
+ name: "display_artifact",
25963
+ description: "Push a card into the Glass UI symframe (right-column dynamic display). Use for content that doesn't belong in chat — drafts, generated documents, code snippets the user will copy, structured data, file links. Types: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise the card, or action=remove to dismiss.",
25964
+ parameters: DisplayArtifactSchema,
25965
+ execute: async (_toolCallId, args) => {
25966
+ const params = args;
25967
+ const actionRaw = readStringParam(params, "action");
25968
+ const action = actionRaw === "update" || actionRaw === "remove" ? actionRaw : "add";
25969
+ const id = readStringParam(params, "id") || (action === "add" ? genCardId() : void 0);
25970
+ if (action !== "add" && !id) return jsonResult({
25971
+ ok: false,
25972
+ error: `${action} requires an id`
25973
+ });
25974
+ if (action === "remove") {
25975
+ emitSymframePush({
25976
+ action,
25977
+ id
25978
+ });
25979
+ return jsonResult({
25980
+ ok: true,
25981
+ action,
25982
+ id
25983
+ });
25984
+ }
25985
+ const card = { id };
25986
+ for (const key of [
25987
+ "type",
25988
+ "title",
25989
+ "body",
25990
+ "language",
25991
+ "url",
25992
+ "mimeType",
25993
+ "downloadName",
25994
+ "poster",
25995
+ "email",
25996
+ "actions",
25997
+ "sticky"
25998
+ ]) {
25999
+ const value = params[key];
26000
+ if (value !== void 0 && value !== null) card[key] = value;
26001
+ }
26002
+ if (action === "add") {
26003
+ const hasContent = typeof card.title === "string" ? Boolean(card.title.trim()) : false;
26004
+ const hasBody = typeof card.body === "string" ? Boolean(card.body.trim()) : false;
26005
+ const hasUrl = typeof card.url === "string" && Boolean(card.url.trim());
26006
+ const hasEmail = card.email && typeof card.email === "object";
26007
+ if (!hasContent && !hasBody && !hasUrl && !hasEmail) return jsonResult({
26008
+ ok: false,
26009
+ error: "add requires at least title, body, url, or email"
26010
+ });
26011
+ }
26012
+ emitSymframePush({
26013
+ action,
26014
+ id,
26015
+ card
26016
+ });
26017
+ return jsonResult({
26018
+ ok: true,
26019
+ action,
26020
+ id
26021
+ });
26022
+ }
26023
+ };
26024
+ }
26025
+
25904
26026
  //#endregion
25905
26027
  //#region src/agents/tools/gateway-tool.ts
25906
26028
  const DEFAULT_UPDATE_TIMEOUT_MS = 20 * 6e4;
@@ -32746,6 +32868,7 @@ function createSymiTools(options) {
32746
32868
  allowHostControl: options?.allowHostBrowserControl
32747
32869
  }),
32748
32870
  createCanvasTool({ config: options?.config }),
32871
+ createDisplayArtifactTool(),
32749
32872
  createNodesTool({
32750
32873
  agentSessionKey: options?.agentSessionKey,
32751
32874
  config: options?.config
@@ -33288,7 +33411,7 @@ async function deliverSessionMaintenanceWarning(params) {
33288
33411
  return;
33289
33412
  }
33290
33413
  try {
33291
- const { deliverOutboundPayloads } = await import("./deliver-C81eqdrP.js").then((n) => n.n);
33414
+ const { deliverOutboundPayloads } = await import("./deliver-lTZLIQqf.js").then((n) => n.n);
33292
33415
  await deliverOutboundPayloads({
33293
33416
  cfg: params.cfg,
33294
33417
  channel,
@@ -39416,7 +39539,7 @@ async function registerSlackMonitorSlashCommands(params) {
39416
39539
  const channelName = channelInfo?.name;
39417
39540
  const roomLabel = channelName ? `#${channelName}` : `#${command.channel_id}`;
39418
39541
  const [{ resolveAgentRoute }, { finalizeInboundContext }, { dispatchReplyWithDispatcher }] = await Promise.all([
39419
- import("./resolve-route-CnTdHVgw.js").then((n) => n.r),
39542
+ import("./resolve-route-C1IIA6kH.js").then((n) => n.r),
39420
39543
  import("./inbound-context-B7Rvs8pK.js").then((n) => n.n),
39421
39544
  Promise.resolve().then(() => provider_dispatcher_exports)
39422
39545
  ]);
@@ -39477,7 +39600,7 @@ async function registerSlackMonitorSlashCommands(params) {
39477
39600
  });
39478
39601
  const deliverSlashPayloads = async (replies) => {
39479
39602
  const [{ deliverSlackSlashReplies }, { resolveChunkMode }, { resolveMarkdownTableMode }] = await Promise.all([
39480
- import("./replies-C5CBlnFS.js").then((n) => n.r),
39603
+ import("./replies-CbXXjn9X.js").then((n) => n.r),
39481
39604
  import("./chunk-BxfKjCUx.js").then((n) => n.s),
39482
39605
  import("./markdown-tables-CS1Tvb3z.js").then((n) => n.t)
39483
39606
  ]);
@@ -9,12 +9,12 @@ import { _ as resolveAuthProfileDisplayLabel, a as markAuthProfileFailure, c as
9
9
  import { n as resolveCliName, t as formatCliCommand } from "./command-format-BrrHNE8r.js";
10
10
  import { _ as DEFAULT_MODEL, c as normalizeProviderId, d as resolveDefaultModelForAgent, f as resolveModelRefFromString, g as DEFAULT_CONTEXT_TOKENS, h as getProviderAdapter, i as findNormalizedProviderValue, m as resolveThinkingDefault, n as buildConfiguredAllowlistKeys, o as modelKey, p as resolveSubagentSpawnModelSelection, r as buildModelAliasIndex, s as normalizeModelRef$1, t as buildAllowedModelSet, u as resolveConfiguredModelRef, v as DEFAULT_PROVIDER } from "./model-selection-BqshlIZc.js";
11
11
  import { n as saveJsonFile, t as loadJsonFile } from "./json-file-CZ3ssFR9.js";
12
- import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-B04yNX82.js";
12
+ import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-BiWlR84Y.js";
13
13
  import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, T as VERSION, _ as resetConfigOverrides, b as getConfigValueAtPath, c as loadConfig, d as writeConfigFile, f as validateConfigObjectWithPlugins, g as getConfigOverrides, h as validateJsonSchemaValue, i as isBlockedHostnameOrIp, l as readConfigFileSnapshot, o as normalizeHostname, p as parseDurationMs, t as SsrFBlockedError, u as resolveConfigSnapshotHash, v as setConfigOverride, w as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, x as parseConfigPath, y as unsetConfigOverride } from "./ssrf-DNhyFMRW.js";
14
14
  import { t as parseBooleanValue } from "./boolean-BsqeuxE6.js";
15
15
  import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-B1lDWz4t.js";
16
16
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverSymiPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-BGJu2aC-.js";
17
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CmQwGAuL.js";
17
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-OTJg3QKn.js";
18
18
  import { l as parseFrontmatterBlock } from "./frontmatter-CJEX1BrH.js";
19
19
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-Dm4gX4Tl.js";
20
20
  import { n as redactToolDetail } from "./redact-CSGZUFxa.js";
@@ -31,7 +31,7 @@ import { t as emitSessionTranscriptUpdate } from "./transcript-events-ChU6IQwp.j
31
31
  import { n as isSilentReplyText, t as SILENT_REPLY_TOKEN } from "./tokens-D_vCJSzF.js";
32
32
  import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-BALvP9wI.js";
33
33
  import { n as getDiagnosticSessionState } from "./diagnostic-session-state-BDfanaOY.js";
34
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-B-wPs7cb.js";
34
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-BAcrpGcR.js";
35
35
  import { r as resolveCopilotApiToken, t as DEFAULT_COPILOT_API_BASE_URL } from "./github-copilot-token-uhEBNQfj.js";
36
36
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-DCGR3yfh.js";
37
37
  import { a as resolveEffectiveMessagesConfig, i as resolveAckReaction, o as resolveHumanDelayConfig, r as resolveResponsePrefixTemplate, t as createReplyPrefixOptions } from "./reply-prefix-D0NzzC4I.js";
@@ -58,7 +58,7 @@ import crypto, { X509Certificate, createHash, createHmac, randomBytes, randomUUI
58
58
  import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
59
59
  import AjvPkg from "ajv";
60
60
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
61
- import { WebSocket as WebSocket$1 } from "ws";
61
+ import { WebSocket } from "ws";
62
62
  import { Buffer as Buffer$1 } from "node:buffer";
63
63
  import { BedrockClient, ListFoundationModelsCommand } from "@aws-sdk/client-bedrock";
64
64
  import { createJiti } from "jiti";
@@ -4460,7 +4460,7 @@ async function getMemorySearchManager(params) {
4460
4460
  const wrapper = new FallbackMemoryManager({
4461
4461
  primary,
4462
4462
  fallbackFactory: async () => {
4463
- const { MemoryIndexManager } = await import("./manager-B-wPs7cb.js").then((n) => n.t);
4463
+ const { MemoryIndexManager } = await import("./manager-BAcrpGcR.js").then((n) => n.t);
4464
4464
  return await MemoryIndexManager.get(params);
4465
4465
  }
4466
4466
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -4473,7 +4473,7 @@ async function getMemorySearchManager(params) {
4473
4473
  }
4474
4474
  }
4475
4475
  try {
4476
- const { MemoryIndexManager } = await import("./manager-B-wPs7cb.js").then((n) => n.t);
4476
+ const { MemoryIndexManager } = await import("./manager-BAcrpGcR.js").then((n) => n.t);
4477
4477
  return { manager: await MemoryIndexManager.get(params) };
4478
4478
  } catch (err) {
4479
4479
  return {
@@ -7447,6 +7447,12 @@ function buildAgentSystemPrompt(params) {
7447
7447
  " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
7448
7448
  " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
7449
7449
  "",
7450
+ "## Symframe (artifact display)",
7451
+ "When you produce content that doesn't fit naturally in chat — long-form drafts, structured documents, generated emails, code blocks the user will copy, file links, audio/video — call the `display_artifact` tool instead of pasting into your reply.",
7452
+ "The card appears at the top of the user's right-column symframe panel; chat stays clean for the conversation.",
7453
+ "Types: `text` · `markdown` · `code` (use `language` for hljs hint) · `email-draft` (use `email: { from?, to, cc?, bcc?, subject, body }`) · `pdf` · `audio` · `video` (the last three take `url` + optional `mimeType`).",
7454
+ "After pushing, briefly tell the user what's in the panel (e.g. \"Drafted the email — shown in your panel above.\"). Don't repeat the full content in chat.",
7455
+ "",
7450
7456
  ...compactMode ? [] : [
7451
7457
  "## Tool Call Style",
7452
7458
  "Default: do not narrate routine, low-risk tool calls (just call the tool).",
@@ -9654,7 +9660,7 @@ var GatewayClient = class {
9654
9660
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
9655
9661
  });
9656
9662
  }
9657
- this.ws = new WebSocket$1(url, wsOptions);
9663
+ this.ws = new WebSocket(url, wsOptions);
9658
9664
  this.ws.on("open", () => {
9659
9665
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
9660
9666
  const tlsError = this.validateTlsFingerprint();
@@ -9873,7 +9879,7 @@ var GatewayClient = class {
9873
9879
  return null;
9874
9880
  }
9875
9881
  async request(method, params, opts) {
9876
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
9882
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
9877
9883
  const id = randomUUID();
9878
9884
  const frame = {
9879
9885
  type: "req",
@@ -10259,7 +10265,7 @@ function randomIdempotencyKey() {
10259
10265
  //#endregion
10260
10266
  //#region src/infra/agent-events.ts
10261
10267
  const seqByRun = /* @__PURE__ */ new Map();
10262
- const listeners = /* @__PURE__ */ new Set();
10268
+ const listeners$1 = /* @__PURE__ */ new Set();
10263
10269
  const runContextById = /* @__PURE__ */ new Map();
10264
10270
  function registerAgentRunContext(runId, context) {
10265
10271
  if (!runId) return;
@@ -10285,13 +10291,13 @@ function emitAgentEvent(event) {
10285
10291
  seq: nextSeq,
10286
10292
  ts: Date.now()
10287
10293
  };
10288
- for (const listener of listeners) try {
10294
+ for (const listener of listeners$1) try {
10289
10295
  listener(enriched);
10290
10296
  } catch {}
10291
10297
  }
10292
10298
  function onAgentEvent(listener) {
10293
- listeners.add(listener);
10294
- return () => listeners.delete(listener);
10299
+ listeners$1.add(listener);
10300
+ return () => listeners$1.delete(listener);
10295
10301
  }
10296
10302
 
10297
10303
  //#endregion
@@ -10836,7 +10842,7 @@ async function routeReply(params) {
10836
10842
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
10837
10843
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
10838
10844
  try {
10839
- const { deliverOutboundPayloads } = await import("./deliver-B04yNX82.js").then((n) => n.n);
10845
+ const { deliverOutboundPayloads } = await import("./deliver-BiWlR84Y.js").then((n) => n.n);
10840
10846
  return {
10841
10847
  ok: true,
10842
10848
  messageId: (await deliverOutboundPayloads({
@@ -37001,6 +37007,130 @@ Use jobId as the canonical identifier; id is accepted for compatibility. Use con
37001
37007
  };
37002
37008
  }
37003
37009
 
37010
+ //#endregion
37011
+ //#region src/infra/symframe-broadcast.ts
37012
+ const listeners = /* @__PURE__ */ new Set();
37013
+ function emitSymframePush(payload) {
37014
+ for (const listener of listeners) try {
37015
+ listener(payload);
37016
+ } catch {}
37017
+ }
37018
+
37019
+ //#endregion
37020
+ //#region src/agents/tools/display-artifact-tool.ts
37021
+ const ARTIFACT_TYPES = [
37022
+ "text",
37023
+ "markdown",
37024
+ "code",
37025
+ "email-draft",
37026
+ "pdf",
37027
+ "audio",
37028
+ "video"
37029
+ ];
37030
+ const ARTIFACT_ACTIONS = [
37031
+ "add",
37032
+ "update",
37033
+ "remove"
37034
+ ];
37035
+ const ActionSchema = Type.Object({
37036
+ label: Type.String(),
37037
+ kind: Type.Optional(stringEnum(["primary", "secondary"])),
37038
+ rpc: Type.Optional(Type.String()),
37039
+ params: Type.Optional(Type.Record(Type.String(), Type.Unknown()))
37040
+ });
37041
+ const EmailFieldsSchema = Type.Object({
37042
+ from: Type.Optional(Type.String()),
37043
+ to: Type.Optional(Type.String()),
37044
+ cc: Type.Optional(Type.String()),
37045
+ bcc: Type.Optional(Type.String()),
37046
+ subject: Type.Optional(Type.String()),
37047
+ body: Type.Optional(Type.String())
37048
+ });
37049
+ const DisplayArtifactSchema = Type.Object({
37050
+ action: Type.Optional(stringEnum(ARTIFACT_ACTIONS)),
37051
+ id: Type.Optional(Type.String()),
37052
+ type: Type.Optional(stringEnum(ARTIFACT_TYPES)),
37053
+ title: Type.Optional(Type.String()),
37054
+ body: Type.Optional(Type.String()),
37055
+ language: Type.Optional(Type.String()),
37056
+ url: Type.Optional(Type.String()),
37057
+ mimeType: Type.Optional(Type.String()),
37058
+ downloadName: Type.Optional(Type.String()),
37059
+ poster: Type.Optional(Type.String()),
37060
+ email: Type.Optional(EmailFieldsSchema),
37061
+ actions: Type.Optional(Type.Array(ActionSchema)),
37062
+ sticky: Type.Optional(Type.Boolean())
37063
+ });
37064
+ function genCardId() {
37065
+ return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
37066
+ }
37067
+ function createDisplayArtifactTool() {
37068
+ return {
37069
+ label: "Display Artifact",
37070
+ name: "display_artifact",
37071
+ description: "Push a card into the Glass UI symframe (right-column dynamic display). Use for content that doesn't belong in chat — drafts, generated documents, code snippets the user will copy, structured data, file links. Types: text | markdown | code | email-draft | pdf | audio | video. Returns the card id; pass action=update with the same id to revise the card, or action=remove to dismiss.",
37072
+ parameters: DisplayArtifactSchema,
37073
+ execute: async (_toolCallId, args) => {
37074
+ const params = args;
37075
+ const actionRaw = readStringParam(params, "action");
37076
+ const action = actionRaw === "update" || actionRaw === "remove" ? actionRaw : "add";
37077
+ const id = readStringParam(params, "id") || (action === "add" ? genCardId() : void 0);
37078
+ if (action !== "add" && !id) return jsonResult({
37079
+ ok: false,
37080
+ error: `${action} requires an id`
37081
+ });
37082
+ if (action === "remove") {
37083
+ emitSymframePush({
37084
+ action,
37085
+ id
37086
+ });
37087
+ return jsonResult({
37088
+ ok: true,
37089
+ action,
37090
+ id
37091
+ });
37092
+ }
37093
+ const card = { id };
37094
+ for (const key of [
37095
+ "type",
37096
+ "title",
37097
+ "body",
37098
+ "language",
37099
+ "url",
37100
+ "mimeType",
37101
+ "downloadName",
37102
+ "poster",
37103
+ "email",
37104
+ "actions",
37105
+ "sticky"
37106
+ ]) {
37107
+ const value = params[key];
37108
+ if (value !== void 0 && value !== null) card[key] = value;
37109
+ }
37110
+ if (action === "add") {
37111
+ const hasContent = typeof card.title === "string" ? Boolean(card.title.trim()) : false;
37112
+ const hasBody = typeof card.body === "string" ? Boolean(card.body.trim()) : false;
37113
+ const hasUrl = typeof card.url === "string" && Boolean(card.url.trim());
37114
+ const hasEmail = card.email && typeof card.email === "object";
37115
+ if (!hasContent && !hasBody && !hasUrl && !hasEmail) return jsonResult({
37116
+ ok: false,
37117
+ error: "add requires at least title, body, url, or email"
37118
+ });
37119
+ }
37120
+ emitSymframePush({
37121
+ action,
37122
+ id,
37123
+ card
37124
+ });
37125
+ return jsonResult({
37126
+ ok: true,
37127
+ action,
37128
+ id
37129
+ });
37130
+ }
37131
+ };
37132
+ }
37133
+
37004
37134
  //#endregion
37005
37135
  //#region src/infra/restart-sentinel.ts
37006
37136
  const SENTINEL_FILENAME = "restart-sentinel.json";
@@ -44062,6 +44192,7 @@ function createSymiTools(options) {
44062
44192
  allowHostControl: options?.allowHostBrowserControl
44063
44193
  }),
44064
44194
  createCanvasTool({ config: options?.config }),
44195
+ createDisplayArtifactTool(),
44065
44196
  createNodesTool({
44066
44197
  agentSessionKey: options?.agentSessionKey,
44067
44198
  config: options?.config
@@ -44604,7 +44735,7 @@ async function deliverSessionMaintenanceWarning(params) {
44604
44735
  return;
44605
44736
  }
44606
44737
  try {
44607
- const { deliverOutboundPayloads } = await import("./deliver-B04yNX82.js").then((n) => n.n);
44738
+ const { deliverOutboundPayloads } = await import("./deliver-BiWlR84Y.js").then((n) => n.n);
44608
44739
  await deliverOutboundPayloads({
44609
44740
  cfg: params.cfg,
44610
44741
  channel,