@symerian/symi 3.5.19 → 3.5.21

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 (261) hide show
  1. package/dist/{agent-D0Z4r5fr.js → agent-DgVWcnlD.js} +1 -1
  2. package/dist/{agent-DCDT-MPE.js → agent-NT0EKnK_.js} +18 -18
  3. package/dist/{agent-scope-DOrZjOnW.js → agent-scope-Bnsyyeci.js} +18 -18
  4. package/dist/{agents-CdkBeP0d.js → agents-Dlcpc1K3.js} +3 -3
  5. package/dist/{agents.config-B7sNDvhz.js → agents.config-DA0ISLi7.js} +1 -1
  6. package/dist/{audit-B7deV4Lp.js → audit-CPloCzEZ.js} +2 -2
  7. package/dist/{audit-BCStg-Hv.js → audit-CXIXYDRx.js} +20 -20
  8. package/dist/{auth-choice-BIGcxSzP.js → auth-choice--DymOp5O.js} +2 -2
  9. package/dist/{auth-choice-B3DU-aBr.js → auth-choice-BtXIQPTU.js} +11 -11
  10. package/dist/{auth-profiles-Ce7R_25e.js → auth-profiles-D5nYBj_Z.js} +2 -2
  11. package/dist/{auth-token-Cr28IDKY.js → auth-token-fgnCQEHT.js} +3 -3
  12. package/dist/{banner-ChNdzPjD.js → banner-CY_9VW7E.js} +1 -1
  13. package/dist/{browser-cli-C9xaKW8l.js → browser-cli-C5VVk6C9.js} +3 -3
  14. package/dist/{browser-cli-BTg8SVs-.js → browser-cli-DOTM7UBC.js} +9 -9
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +4 -4
  17. package/dist/bundled/session-memory/handler.js +4 -4
  18. package/dist/{call-BccaLPi8.js → call-Bpjj5p7I.js} +9 -9
  19. package/dist/{call-DZg43vv8.js → call-C2urR5Fj.js} +1 -1
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-CUptVX8c.js → channel-options-XRJiHUm5.js} +1 -1
  22. package/dist/{channel-options-LLmAnD_L.js → channel-options-rFgJaKzJ.js} +1 -1
  23. package/dist/{channels-cli-xoromnio.js → channels-cli-CQ4M05oy.js} +57 -57
  24. package/dist/{channels-cli-B0OQvVUL.js → channels-cli-QMHCRAb5.js} +9 -9
  25. package/dist/{chrome-DJChpTwP.js → chrome-38OnGyuN.js} +2 -2
  26. package/dist/{chrome-CmQwGAuL.js → chrome-3jl2ulOE.js} +4 -4
  27. package/dist/{chrome-DNssqQJs.js → chrome-OTJg3QKn.js} +4 -4
  28. package/dist/{cli-C7v-sID8.js → cli-B-uoiYP2.js} +45 -45
  29. package/dist/{cli-CMNR7ULk.js → cli-BafqEuaj.js} +6 -6
  30. package/dist/{client-k0MT6NBw.js → client-CTrfpKT3.js} +7 -2
  31. package/dist/{client-DCxeV1bw.js → client-yVTJ5jx5.js} +6 -1
  32. package/dist/{command-registry-CXcvXjUR.js → command-registry-CLm8TAH3.js} +11 -11
  33. package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
  34. package/dist/{completion-cli-DJ1YCeSg.js → completion-cli-Cn_81QBb.js} +12 -12
  35. package/dist/{completion-cli-B1Fg6Lmg.js → completion-cli-DOBXkVwG.js} +2 -2
  36. package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
  37. package/dist/{config-cli-D5DlWt6T.js → config-cli-B1cPkJ4p.js} +4 -4
  38. package/dist/{config-cli-CQ1FAvY_.js → config-cli-BgHYqFH1.js} +1 -1
  39. package/dist/{config-guard-BRm3RiOi.js → config-guard-DStz4_V2.js} +6 -6
  40. package/dist/{config-validation-Cdyg1BZB.js → config-validation-Dxj9LRzr.js} +1 -1
  41. package/dist/{configure-bhJB2Dti.js → configure-C7zmSgvC.js} +14 -14
  42. package/dist/{configure-DG1lf0Ld.js → configure-DmzM0S7L.js} +6 -6
  43. package/dist/{consolidate-DymnvvYm.js → consolidate-CO32_TEx.js} +6 -6
  44. package/dist/{control-service-D8kKOts5.js → control-service-CUreKVeY.js} +4 -4
  45. package/dist/control-ui/css/style.css +478 -80
  46. package/dist/control-ui/index.html +54 -127
  47. package/dist/control-ui/js/render.js +11 -227
  48. package/dist/control-ui/js/scheduling.js +85 -224
  49. package/dist/control-ui/js/subagents.js +78 -394
  50. package/dist/control-ui/js/symframe-awaiting.js +301 -0
  51. package/dist/control-ui/js/symframe-pin-store.js +104 -0
  52. package/dist/control-ui/js/symframe-substrate.js +395 -0
  53. package/dist/control-ui/js/symframe.js +244 -6
  54. package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
  55. package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
  56. package/dist/{cron-cli-8RaBr1CM.js → cron-cli-BNBs3zue.js} +3 -3
  57. package/dist/{cron-cli-fW3wtftG.js → cron-cli-otPeKxmi.js} +7 -7
  58. package/dist/{daemon-cli-Y6clFgva.js → daemon-cli-DDqeG2nd.js} +2 -2
  59. package/dist/{daemon-cli-0EiZTQ2A.js → daemon-cli-qDdMg615.js} +11 -11
  60. package/dist/daemon-cli.js +6 -1
  61. package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
  62. package/dist/{deliver-B04yNX82.js → deliver-BiWlR84Y.js} +4 -4
  63. package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
  64. package/dist/{deliver-q23ar_Pm.js → deliver-f3cIWxXT.js} +4 -4
  65. package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
  66. package/dist/{devices-cli-C2gQTsB0.js → devices-cli-BJ3rVWOw.js} +2 -2
  67. package/dist/{devices-cli-DfiSkZ7k.js → devices-cli-DDPwF2Nx.js} +6 -6
  68. package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
  69. package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
  70. package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
  71. package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
  72. package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
  73. package/dist/{doctor-completion-CfF0J8fs.js → doctor-completion-CL7MyXlo.js} +2 -2
  74. package/dist/{doctor-completion-ScxFfN93.js → doctor-completion-k0HiL05o.js} +1 -1
  75. package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
  76. package/dist/entry.js +1 -1
  77. package/dist/{exec-approvals-cli-Cl-vWA1q.js → exec-approvals-cli-Cau1vPQI.js} +4 -4
  78. package/dist/{exec-approvals-cli-BaKWIf56.js → exec-approvals-cli-DsBoQu5H.js} +13 -13
  79. package/dist/extensionAPI.js +4 -4
  80. package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
  81. package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
  82. package/dist/{gateway-cli-kq5EWlnF.js → gateway-cli-DG_2YZ8B.js} +98 -98
  83. package/dist/{gateway-cli-CK-5nguV.js → gateway-cli-DgmGygc6.js} +16 -16
  84. package/dist/{gateway-rpc-Bzg_TTKP.js → gateway-rpc-Kv0-8W2E.js} +1 -1
  85. package/dist/{gateway-rpc-D12UaJS5.js → gateway-rpc-gaoD882s.js} +1 -1
  86. package/dist/{glass-ui-ws-B6p0iPsO.js → glass-ui-ws-Bof7krDJ.js} +67 -67
  87. package/dist/{glass-ui-ws-CVr0_1gT.js → glass-ui-ws-Dl45d7eU.js} +13 -13
  88. package/dist/{health-CPU9rQGj.js → health-CMbUI4aN.js} +4 -4
  89. package/dist/{health-CJb2CYtg.js → health-znS85U-F.js} +1 -1
  90. package/dist/{hooks-cli-DbgVZaP4.js → hooks-cli-Cb9BzCOY.js} +7 -7
  91. package/dist/{hooks-cli-13HCu5Xs.js → hooks-cli-Cgjor7F-.js} +59 -59
  92. package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
  93. package/dist/index.js +52 -52
  94. package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
  95. package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
  96. package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
  97. package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
  98. package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
  99. package/dist/llm-slug-generator.js +4 -4
  100. package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
  101. package/dist/{logs-cli-R16VTptK.js → logs-cli-Kr145PO_.js} +7 -7
  102. package/dist/{logs-cli-CQeK5fn7.js → logs-cli-LiAjkog2.js} +3 -3
  103. package/dist/{manager-CxFs8Z_F.js → manager-CceVgXHV.js} +1 -1
  104. package/dist/{manager-B2SWSuad.js → manager-Cv4xI8sP.js} +1 -1
  105. package/dist/{manager-CHLdCC6u.js → manager-DG6PODgu.js} +15 -15
  106. package/dist/{manager-BhEbaYDa.js → manager-V4UCf0Av.js} +1 -1
  107. package/dist/{memory-DFpqcIst.js → memory-A2D5e8dL.js} +2 -2
  108. package/dist/{memory-DavRjdTi.js → memory-BFnx3v3_.js} +5 -5
  109. package/dist/{memory-cli-DZnq3S6s.js → memory-cli-1zjVJITN.js} +2 -2
  110. package/dist/{memory-cli-B-Cp1Sb1.js → memory-cli-CHNghdrm.js} +12 -12
  111. package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
  112. package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
  113. package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
  114. package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
  115. package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
  116. package/dist/{models-Cht7Mzvs.js → models-BYev6YAG.js} +3 -3
  117. package/dist/{models-cli-B_motPDX.js → models-cli-BbK8HMKa.js} +55 -55
  118. package/dist/{models-cli-DXswzgUR.js → models-cli-Fa5r1QYP.js} +9 -9
  119. package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
  120. package/dist/{node-cli-D-gsjRXY.js → node-cli-BPnBosC4.js} +27 -27
  121. package/dist/{node-cli-VmKhIXuP.js → node-cli-Cv7x1gGu.js} +1 -1
  122. package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
  123. package/dist/{nodes-cli-BMvxQGCp.js → nodes-cli-CN_m6PO5.js} +10 -10
  124. package/dist/{nodes-cli-D199d74o.js → nodes-cli-DaHOBbd4.js} +3 -3
  125. package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
  126. package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
  127. package/dist/{onboard-DFJcbABp.js → onboard-B2IcTMv-.js} +15 -15
  128. package/dist/{onboard-CdRA8BRG.js → onboard-D-m6WTZl.js} +3 -3
  129. package/dist/{onboard-channels-fadyQGBK.js → onboard-channels-Z-Jkrk5-.js} +1 -1
  130. package/dist/{onboard-channels-Ca7ZFQ2Y.js → onboard-channels-wfGO5Zlh.js} +4 -4
  131. package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
  132. package/dist/{onboard-helpers-CQBpac8h.js → onboard-helpers-BKejzolA.js} +8 -8
  133. package/dist/{onboard-helpers-BcLPSb5N.js → onboard-helpers-Dhr98nj8.js} +1 -1
  134. package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
  135. package/dist/{onboard-remote-Bo3tpC9N.js → onboard-remote-DZdMxd1Q.js} +1 -1
  136. package/dist/{onboard-remote-BWK5Ths4.js → onboard-remote-y3ZmP90U.js} +1 -1
  137. package/dist/{onboard-skills-BLl8HPJO.js → onboard-skills-2SUv-W7i.js} +1 -1
  138. package/dist/{onboard-skills-DvacccqZ.js → onboard-skills-BFhHfrt9.js} +3 -3
  139. package/dist/{onboarding-ojb2rFkA.js → onboarding-BckHLQMV.js} +7 -7
  140. package/dist/{onboarding-BywueA1d.js → onboarding-DqlPV372.js} +12 -12
  141. package/dist/{onboarding.finalize-DdxBQpUU.js → onboarding.finalize-Bwjv3jew.js} +31 -31
  142. package/dist/{onboarding.finalize-DHvlZi9G.js → onboarding.finalize-CbH_ShIW.js} +9 -9
  143. package/dist/{onboarding.gateway-config-DPBNWNV6.js → onboarding.gateway-config-CiRo9EMt.js} +8 -8
  144. package/dist/{onboarding.gateway-config-ZK9517uR.js → onboarding.gateway-config-sNSeEykB.js} +3 -3
  145. package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
  146. package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
  147. package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
  148. package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
  149. package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
  150. package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
  151. package/dist/{pi-embedded-DJE9TMwq.js → pi-embedded-B9rtlNMc.js} +32 -16
  152. package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
  153. package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
  154. package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
  155. package/dist/{plugin-registry-tG7NXc3Y.js → plugin-registry-B43UosQh.js} +3 -3
  156. package/dist/{plugin-registry-Tlmjr-LX.js → plugin-registry-CS4WgHbu.js} +1 -1
  157. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -1
  158. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +18 -6
  159. package/dist/{plugins-cli-CRKD8aho.js → plugins-cli-BV2wbjfI.js} +54 -54
  160. package/dist/{plugins-cli-Cm0G_-Y5.js → plugins-cli-BY42hyHP.js} +7 -7
  161. package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
  162. package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
  163. package/dist/{program-DEmAlwmD.js → program-P9F1DxBa.js} +12 -12
  164. package/dist/{program-context-DRCRbDpu.js → program-context-BmXxHUKe.js} +40 -40
  165. package/dist/{prompt-select-styled-pomsR-zf.js → prompt-select-styled-B2ah467m.js} +7 -7
  166. package/dist/{prompt-select-styled-B41Tx9aC.js → prompt-select-styled-BlQZX6pK.js} +38 -38
  167. package/dist/{provider-auth-helpers-rKWs_r7a.js → provider-auth-helpers-Bgb_Bfp9.js} +1 -1
  168. package/dist/{provider-auth-helpers-CdQwOam7.js → provider-auth-helpers-WLwb6tL4.js} +6 -6
  169. package/dist/{push-apns-eCM0qmrY.js → push-apns-CBGvXev_.js} +4 -4
  170. package/dist/{push-apns-CZPUHftn.js → push-apns-DnSCjFu7.js} +1 -1
  171. package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
  172. package/dist/{pw-ai-v__CyAlM.js → pw-ai-DOAsQ5NX.js} +1 -1
  173. package/dist/{pw-ai-DLsdzdgc.js → pw-ai-DY_6l11g.js} +1 -1
  174. package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
  175. package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
  176. package/dist/{register.agent-BQPvYYdn.js → register.agent-BuEcmVg0.js} +12 -12
  177. package/dist/{register.agent-N1hoqMFR.js → register.agent-CXdTiqyP.js} +67 -67
  178. package/dist/{register.configure-BHHZ44xB.js → register.configure-DVcn-gCO.js} +70 -70
  179. package/dist/{register.configure-BAc3P4Z-.js → register.configure-YDKJ-KQg.js} +14 -14
  180. package/dist/{register.maintenance-lX0a3Hzl.js → register.maintenance-BiGvpEj-.js} +13 -13
  181. package/dist/{register.maintenance-DDgy5Iyy.js → register.maintenance-cpspl8D6.js} +67 -67
  182. package/dist/{register.message-Br-IH_0z.js → register.message-BIuLbESM.js} +7 -7
  183. package/dist/{register.message-B4lDhHpE.js → register.message-BjcYy5UG.js} +47 -47
  184. package/dist/{register.onboard-B-GoYJIc.js → register.onboard-C4vIASed.js} +6 -6
  185. package/dist/{register.onboard-Bv0s2_KV.js → register.onboard-D4RN92s2.js} +25 -25
  186. package/dist/{register.setup-DQ6KLkAI.js → register.setup-BvoXF0xl.js} +28 -28
  187. package/dist/{register.setup-4lNdC98i.js → register.setup-D-Jt2e1d.js} +6 -6
  188. package/dist/{register.status-health-sessions-Cg7bK5K2.js → register.status-health-sessions-BY9hMD1s.js} +8 -8
  189. package/dist/{register.status-health-sessions-ByGn71_M.js → register.status-health-sessions-DjDvCXBn.js} +41 -41
  190. package/dist/{register.subclis-FMlcLBX0.js → register.subclis-Cibmeapc.js} +20 -20
  191. package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
  192. package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
  193. package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
  194. package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
  195. package/dist/{rpc-Dk1Az_d8.js → rpc-BnAKPQDB.js} +1 -1
  196. package/dist/{rpc-JAmDaTYt.js → rpc-CwxSZZOx.js} +1 -1
  197. package/dist/{run-main-DSyeVDsT.js → run-main-BhEQjKtM.js} +20 -20
  198. package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
  199. package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
  200. package/dist/{security-cli-DmgGLP83.js → security-cli-CS-ZT1LE.js} +3 -3
  201. package/dist/{security-cli-D47LQbpf.js → security-cli-DJd7Fcdy.js} +29 -29
  202. package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
  203. package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
  204. package/dist/{server-methods-DGBBt49x.js → server-methods-CWxr5b-w.js} +19 -13
  205. package/dist/{server-methods-BkHB2MOW.js → server-methods-DfVfzYqq.js} +68 -62
  206. package/dist/{server-node-events-C186LRm0.js → server-node-events-B0yC6hi1.js} +48 -48
  207. package/dist/{server-node-events-D-Akk3uq.js → server-node-events-ClDEcUTJ.js} +8 -8
  208. package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
  209. package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
  210. package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
  211. package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
  212. package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
  213. package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
  214. package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
  215. package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
  216. package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
  217. package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
  218. package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
  219. package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
  220. package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
  221. package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
  222. package/dist/{status-CFgCSaDq.js → status-BWxLtb3D.js} +23 -23
  223. package/dist/{status-poPDyC8O.js → status-Doq8T1zj.js} +3 -3
  224. package/dist/{status-Bahhq7OQ.js → status-K1k4g3Ai.js} +1 -1
  225. package/dist/{status-D9LC5P_Y.js → status-ojZB_Lrf.js} +5 -5
  226. package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
  227. package/dist/{subagent-registry-V2o45tIn.js → subagent-registry-BOt7g9hn.js} +21 -10
  228. package/dist/{symframe-cli-bxdpivve.js → symframe-cli-CrUtJw_7.js} +31 -7
  229. package/dist/{symframe-cli-ppdMo15M.js → symframe-cli-D1CtN3pf.js} +37 -13
  230. package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
  231. package/dist/{synthesis-B2EyHFXy.js → synthesis-BIQLrbys.js} +6 -6
  232. package/dist/{synthesis-BlJyO1E_.js → synthesis-Bc2QkGvt.js} +4 -4
  233. package/dist/{synthesis-CPSq83PP.js → synthesis-VZNnlUTf.js} +45 -45
  234. package/dist/{synthesis-C2WbvLOI.js → synthesis-yl24Ovw4.js} +4 -4
  235. package/dist/{system-cli-nPyjUPBH.js → system-cli-CvN-Wq9U.js} +3 -3
  236. package/dist/{system-cli-BroqLjZ6.js → system-cli-r7WJj0Xh.js} +7 -7
  237. package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
  238. package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
  239. package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
  240. package/dist/{tui-Bp9k5skv.js → tui-BxgdImL_.js} +2 -2
  241. package/dist/{tui-DzROrE20.js → tui-J7Jxp-FF.js} +7 -7
  242. package/dist/{tui-cli-BHBF8O-3.js → tui-cli-DR48dU_C.js} +19 -19
  243. package/dist/{tui-cli-Dv4hBFdc.js → tui-cli-DqvgN5ng.js} +3 -3
  244. package/dist/{unified-runner-CIQIkbvi.js → unified-runner-BV5TdNFv.js} +32 -16
  245. package/dist/{unified-runner-CduaBH_0.js → unified-runner-DXjH-prv.js} +117 -106
  246. package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
  247. package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
  248. package/dist/{update-cli-WcLxjBiY.js → update-cli-CKpjWtlv.js} +77 -77
  249. package/dist/{update-cli-BKnHBe8a.js → update-cli-Dn6QQZLd.js} +14 -14
  250. package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
  251. package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
  252. package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
  253. package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
  254. package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
  255. package/extensions/memory-core/package.json +1 -1
  256. package/extensions/msteams/CHANGELOG.md +12 -0
  257. package/extensions/msteams/package.json +1 -1
  258. package/extensions/open-prose/package.json +1 -1
  259. package/extensions/outlook/package.json +1 -1
  260. package/extensions/slack/package.json +1 -1
  261. package/package.json +1 -1
@@ -20,7 +20,6 @@
20
20
  drop a real hljs theme CSS at `glass-ui/vendor/highlight.css` (e.g.,
21
21
  github-dark.min.css from highlight.js) and re-add the link.
22
22
  -->
23
-
24
23
  </head>
25
24
  <body>
26
25
  <!-- Animated background -->
@@ -192,145 +191,68 @@
192
191
  </aside>
193
192
 
194
193
  <!-- Symframe — dynamic display panel ("window into the agent's mind") -->
194
+ <!-- Stage B (3.5.20): reasoning panel removed; its content now flows -->
195
+ <!-- to .symframe-substrate which sits BEHIND the foreground cards via -->
196
+ <!-- a single CSS grid cell + z-index. The agent's reasoning becomes -->
197
+ <!-- the ambient texture of the panel rather than one card among three. -->
195
198
  <aside class="metrics-col metrics-right symframe" id="symframe">
196
199
  <div class="symframe-header">
197
200
  <div class="symframe-header-row">
198
201
  <span class="symframe-title">SYMFRAME</span>
199
- <span class="symframe-count" id="symframe-count">3 cards</span>
202
+ <span class="reasoning-live-dot" id="reasoning-live-dot"></span>
203
+ <span class="symframe-count" id="symframe-count">2 cards</span>
200
204
  </div>
201
205
  <div class="symframe-sub">window into the agent's mind</div>
202
206
  </div>
203
- <div class="symframe-cards" id="symframe-cards">
204
- <!-- Subagents Panel -->
205
- <div class="glass-panel symframe-card subagents-panel" id="subagents-panel">
206
- <div class="panel-label">
207
- SUBAGENTS
208
- <span class="subagents-count" id="subagents-count"></span>
209
- </div>
210
-
211
- <!-- Quick Deploy Section -->
212
- <div class="quick-deploy-section">
213
- <div class="quick-deploy-label">QUICK DEPLOY</div>
214
- <div class="quick-deploy-grid">
215
- <button class="quick-deploy-btn" data-agent="research" title="Research Agent">
216
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
217
- <circle cx="11" cy="11" r="8" />
218
- <path d="M21 21l-4.35-4.35" />
219
- </svg>
220
- <span>Research</span>
221
- </button>
222
- <button class="quick-deploy-btn" data-agent="review" title="Code Review Agent">
223
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
224
- <polyline points="16 18 22 12 16 6" />
225
- <polyline points="8 6 2 12 8 18" />
226
- </svg>
227
- <span>Review</span>
228
- </button>
229
- <button class="quick-deploy-btn" data-agent="writer" title="Writer Agent">
230
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
231
- <path d="M12 19l7-7 3 3-7 7-3-3z" />
232
- <path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z" />
233
- </svg>
234
- <span>Writer</span>
235
- </button>
236
- <button class="quick-deploy-btn" data-agent="analyst" title="Analyst Agent">
237
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
238
- <line x1="18" y1="20" x2="18" y2="10" />
239
- <line x1="12" y1="20" x2="12" y2="4" />
240
- <line x1="6" y1="20" x2="6" y2="14" />
241
- </svg>
242
- <span>Analyst</span>
243
- </button>
244
- </div>
245
- </div>
246
-
247
- <!-- Staging Prompt Box -->
248
- <div class="staging-box" id="staging-box">
249
- <div class="staging-chips" id="staging-chips">
250
- <span class="staging-empty">Select agents above</span>
251
- </div>
252
- <button class="staging-deploy-btn" id="staging-deploy-btn" disabled>
253
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
254
- <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" />
255
- </svg>
256
- Deploy
257
- </button>
258
- </div>
259
-
260
- <!-- Active Subagents list -->
261
- <div class="subagents-active-label">ACTIVE</div>
262
- <div class="subagents-list" id="subagents-list">
263
- <div class="subagents-empty" id="subagents-empty">
264
- <div class="subagents-empty-icon">
265
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
266
- <circle cx="12" cy="12" r="3" />
267
- <path
268
- d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"
269
- />
270
- </svg>
271
- </div>
272
- <div class="subagents-empty-text">No active subagents</div>
273
- </div>
274
- </div>
275
-
276
- <!-- Custom Spawn button -->
277
- <button class="subagent-spawn-btn" id="subagent-spawn-btn" title="Spawn a custom subagent">
278
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
279
- <circle cx="12" cy="12" r="10" />
280
- <path d="M12 8v8M8 12h8" />
281
- </svg>
282
- <span>Custom Subagent</span>
283
- </button>
284
- </div>
285
-
286
- <!-- Reasoning Panel -->
287
- <div class="glass-panel symframe-card reasoning-panel" id="reasoning-panel">
288
- <div class="panel-label">
289
- REASONING
290
- <span class="reasoning-live-dot" id="reasoning-live-dot"></span>
291
- </div>
292
- <div class="reasoning-feed" id="reasoning-feed">
293
- <div class="reasoning-empty" id="reasoning-empty">
294
- <div class="reasoning-empty-icon">
295
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
296
- <circle cx="12" cy="12" r="3" />
297
- <path
298
- d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"
299
- />
300
- </svg>
301
- </div>
302
- <div class="reasoning-empty-text">No reasoning yet</div>
303
- </div>
304
- </div>
207
+ <div class="symframe-stack">
208
+ <div class="symframe-substrate" id="symframe-substrate"></div>
209
+ <div class="symframe-cards" id="symframe-cards">
210
+ <!-- Stage C (3.5.21): SUBAGENTS + SCHEDULING panel blocks removed. -->
211
+ <!-- Their content is now rendered in the AWAITING footer below; -->
212
+ <!-- modals (subagent-modal-overlay, schedule-modal-overlay) remain -->
213
+ <!-- in their original positions further down in this file. -->
214
+ <!-- The cards container is now exclusively for foreground -->
215
+ <!-- intent-typed artifact cards pushed via display_artifact / RPC. -->
216
+ </div>
217
+ <!-- /.symframe-cards -->
305
218
  </div>
306
-
307
- <!-- Scheduling Panel -->
308
- <div class="glass-panel symframe-card scheduling-panel" id="scheduling-panel">
309
- <div class="panel-label">
310
- SCHEDULING
311
- <span class="schedule-count" id="schedule-count"></span>
312
- </div>
313
- <div class="schedule-list" id="schedule-list">
314
- <div class="schedule-empty" id="schedule-empty">
315
- <div class="schedule-empty-icon">
316
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
317
- <circle cx="12" cy="12" r="10" />
318
- <polyline points="12 6 12 12 16 14" />
319
- </svg>
320
- </div>
321
- <div class="schedule-empty-text">No scheduled tasks</div>
322
- </div>
323
- </div>
324
- <button class="schedule-add-btn" id="schedule-add-btn" title="Add a scheduled task">
219
+ <!-- /.symframe-stack -->
220
+
221
+ <!-- AWAITING surface (Stage C): always-present footer that merges -->
222
+ <!-- in-flight sub-agents + scheduled cron jobs into a single -->
223
+ <!-- "things that aren't done yet" list, sorted by in-flight-first -->
224
+ <!-- then ETA. Click a sub-agent → existing subagent modal; click -->
225
+ <!-- a schedule → existing schedule modal; [+ Add] opens an add menu. -->
226
+ <div class="symframe-awaiting" id="symframe-awaiting" hidden>
227
+ <div class="awaiting-header">
228
+ <span class="awaiting-title">AWAITING</span>
229
+ <span class="awaiting-count" id="awaiting-count"></span>
230
+ </div>
231
+ <div class="awaiting-list" id="awaiting-list"></div>
232
+ <button
233
+ class="awaiting-add-btn"
234
+ id="awaiting-add-btn"
235
+ title="Spawn subagent or add scheduled task"
236
+ aria-haspopup="menu"
237
+ aria-expanded="false"
238
+ >
325
239
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
326
240
  <circle cx="12" cy="12" r="10" />
327
241
  <path d="M12 8v8M8 12h8" />
328
242
  </svg>
329
- <span>Add Schedule</span>
243
+ <span>Add</span>
330
244
  </button>
245
+ <div class="awaiting-add-menu" id="awaiting-add-menu" hidden role="menu">
246
+ <button type="button" class="awaiting-add-item" data-add="subagent" role="menuitem">
247
+ <span class="awaiting-add-glyph">◆</span>
248
+ <span>Spawn subagent</span>
249
+ </button>
250
+ <button type="button" class="awaiting-add-item" data-add="schedule" role="menuitem">
251
+ <span class="awaiting-add-glyph">⏱</span>
252
+ <span>Add scheduled task</span>
253
+ </button>
254
+ </div>
331
255
  </div>
332
- </div>
333
-
334
256
  </aside>
335
257
 
336
258
  <!-- Response waterfall area -->
@@ -797,7 +719,9 @@
797
719
  autocomplete="off"
798
720
  spellcheck="false"
799
721
  />
800
- <button class="history-search-clear" id="history-search-clear" title="Clear" hidden>✕</button>
722
+ <button class="history-search-clear" id="history-search-clear" title="Clear" hidden>
723
+
724
+ </button>
801
725
  </div>
802
726
  <div class="history-drawer-body" id="history-drawer-body">
803
727
  <div class="history-loading">Loading sessions…</div>
@@ -1059,6 +983,9 @@
1059
983
  <script src="js/scheduling.js"></script>
1060
984
  <script src="js/models.js"></script>
1061
985
  <script src="js/slash-autocomplete.js"></script>
986
+ <script src="js/symframe-pin-store.js"></script>
1062
987
  <script src="js/symframe.js"></script>
988
+ <script src="js/symframe-substrate.js"></script>
989
+ <script src="js/symframe-awaiting.js"></script>
1063
990
  </body>
1064
991
  </html>
@@ -535,233 +535,17 @@ function formatTime(ts) {
535
535
  // Expose renderBlock for use in app.js streaming finalization
536
536
  window.renderBlock = renderBlock;
537
537
 
538
- // ── Reasoning Panel append a block ─────────────────────────────────
539
- window.appendToReasoningPanel = function (block) {
540
- const feed = document.getElementById("reasoning-feed");
541
- if (!feed) {
542
- return;
543
- }
544
-
545
- // Remove empty-state placeholder on first real entry
546
- const empty = document.getElementById("reasoning-empty");
547
- if (empty) {
548
- empty.remove();
549
- }
550
-
551
- const entry = document.createElement("div");
552
- entry.className = "reasoning-entry";
553
-
554
- switch (block.type) {
555
- // ── Narration text (agent step descriptions routed here) ────────
556
- case "text": {
557
- const text = (block.text ?? "").trim();
558
- if (!text) {
559
- return;
560
- }
561
- entry.innerHTML = `
562
- <div class="reasoning-entry-header">
563
- <span class="reasoning-entry-badge badge-narration">✦ NOTE</span>
564
- <span class="reasoning-entry-name">${escHtml(String(text).split("\n")[0].slice(0, 60))}${text.length > 60 ? "…" : ""}</span>
565
- </div>
566
- `;
567
- break;
568
- }
569
-
570
- // ── Thinking block ──────────────────────────────────────────────
571
- case "thinking": {
572
- const text = (block.thinking ?? "").trim();
573
- if (!text) {
574
- return;
575
- }
576
- entry.innerHTML = `
577
- <div class="reasoning-entry-header">
578
- <span class="reasoning-entry-badge badge-think">◈ THINK</span>
579
- <span class="reasoning-entry-name">${escHtml(String(text).split("\n")[0].slice(0, 60))}${text.length > 60 ? "…" : ""}</span>
580
- </div>
581
- <div class="reasoning-think-body">${escHtml(text)}</div>
582
- `;
583
- break;
584
- }
585
-
586
- // ── Tool call (Anthropic: tool_use, Ollama/OpenAI: toolCall) ────
587
- case "tool_use":
588
- case "toolCall": {
589
- const name = block.name ?? "tool";
590
- const inputData = block.input ?? block.arguments ?? {};
591
- const inputJson = inputData ? JSON.stringify(inputData, null, 2) : "{}";
592
- // One-line preview: first key=value pair
593
- let preview = "";
594
- try {
595
- const obj = typeof inputData === "string" ? JSON.parse(inputData) : inputData;
596
- const keys = Object.keys(obj ?? {});
597
- if (keys.length) {
598
- const val = String(obj[keys[0]]).slice(0, 50);
599
- preview = `${keys[0]}: ${val}${val.length >= 50 ? "…" : ""}`;
600
- }
601
- } catch {
602
- /* ignore */
603
- }
604
- entry.innerHTML = `
605
- <div class="reasoning-entry-header">
606
- <span class="reasoning-entry-badge badge-tool">${escHtml(toolIcon(name))} TOOL</span>
607
- <span class="reasoning-entry-name">${escHtml(formatToolName(name))}</span>
608
- </div>
609
- ${preview ? `<div class="reasoning-tool-preview">${escHtml(preview)}</div>` : ""}
610
- <div class="reasoning-tool-detail">${escHtml(inputJson)}</div>
611
- `;
612
- // Toggle expand on click
613
- entry.style.cursor = "pointer";
614
- entry.addEventListener("click", () => entry.classList.toggle("expanded"));
615
- break;
616
- }
617
-
618
- // ── Tool result ─────────────────────────────────────────────────
619
- case "tool_result": {
620
- const content = Array.isArray(block.content)
621
- ? block.content.map((b) => b.text ?? "").join("\n")
622
- : String(block.content ?? "");
623
- const chars = content.length;
624
- const isError = block.is_error === true;
625
- entry.innerHTML = `
626
- <div class="reasoning-entry-header">
627
- <span class="reasoning-entry-badge badge-result">${isError ? "⚠ ERROR" : "↩ RESULT"}</span>
628
- <span class="reasoning-entry-name">${chars} chars</span>
629
- </div>
630
- <div class="reasoning-result-meta">${escHtml(content.slice(0, 80))}${chars > 80 ? "…" : ""}</div>
631
- `;
632
- break;
633
- }
634
-
635
- default:
636
- return; // unknown block — skip
637
- }
638
-
639
- feed.appendChild(entry);
640
- feed.scrollTop = feed.scrollHeight;
641
- };
642
-
643
- // ── Reasoning Panel — run separator ──────────────────────────────────
644
- window.injectReasoningRunSeparator = function () {
645
- const feed = document.getElementById("reasoning-feed");
646
- if (!feed) {
647
- return;
648
- }
649
- const empty = document.getElementById("reasoning-empty");
650
- if (empty) {
651
- empty.remove();
652
- }
653
- const now = new Date();
654
- const hhmm = now.toLocaleTimeString("en-US", {
655
- hour: "2-digit",
656
- minute: "2-digit",
657
- hour12: false,
658
- });
659
- const sep = document.createElement("div");
660
- sep.className = "reasoning-run-sep";
661
- sep.innerHTML = `<span class="reasoning-run-sep-label">RUN · ${hhmm}</span>`;
662
- feed.appendChild(sep);
663
- feed.scrollTop = feed.scrollHeight;
664
- };
665
-
666
- // ── Reasoning Panel — clear ───────────────────────────────────────────
667
- window.clearReasoningPanel = function () {
668
- const feed = document.getElementById("reasoning-feed");
669
- if (!feed) {
670
- return;
671
- }
672
- feed.innerHTML = `
673
- <div class="reasoning-empty" id="reasoning-empty">
674
- <div class="reasoning-empty-icon">
675
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
676
- <circle cx="12" cy="12" r="3"/>
677
- <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/>
678
- </svg>
679
- </div>
680
- <div class="reasoning-empty-text">No reasoning yet</div>
681
- </div>`;
682
- };
683
-
684
- // ── Reasoning Panel — live thinking update (streaming) ───────────────
685
- // Called repeatedly during a run to accumulate thinking text in real-time.
686
- // Creates a single "live" entry and updates it in-place until finalized.
687
- let _liveThinkEntry = null;
688
- let _liveThinkBody = null;
689
- let _liveThinkBuffer = "";
690
-
691
- window.openLiveThinking = function () {
692
- const feed = document.getElementById("reasoning-feed");
693
- if (!feed) {
694
- return;
695
- }
696
- const empty = document.getElementById("reasoning-empty");
697
- if (empty) {
698
- empty.remove();
699
- }
700
- _liveThinkBuffer = "";
701
- const entry = document.createElement("div");
702
- entry.className = "reasoning-entry";
703
- entry.id = "reasoning-live-think";
704
- entry.innerHTML = `
705
- <div class="reasoning-entry-header">
706
- <span class="reasoning-entry-badge badge-think">◈ THINK</span>
707
- <span class="reasoning-entry-name" id="reasoning-live-name">…</span>
708
- </div>
709
- <div class="reasoning-think-body" id="reasoning-live-body"></div>
710
- `;
711
- feed.appendChild(entry);
712
- _liveThinkEntry = entry;
713
- _liveThinkBody = entry.querySelector("#reasoning-live-body");
714
- feed.scrollTop = feed.scrollHeight;
715
- };
716
-
717
- window.updateLiveThinking = function (text) {
718
- if (!_liveThinkBody) {
719
- window.openLiveThinking();
720
- }
721
- _liveThinkBuffer += text;
722
- if (_liveThinkBody) {
723
- _liveThinkBody.textContent = _liveThinkBuffer;
724
- const feed = document.getElementById("reasoning-feed");
725
- if (feed) {
726
- feed.scrollTop = feed.scrollHeight;
727
- }
728
- }
729
- // Update name preview
730
- const nameEl = _liveThinkEntry?.querySelector("#reasoning-live-name");
731
- if (nameEl) {
732
- const firstLine = _liveThinkBuffer.split("\n")[0].slice(0, 60);
733
- nameEl.textContent = firstLine + (_liveThinkBuffer.length > 60 ? "…" : "");
734
- }
735
- };
736
-
737
- window.closeLiveThinking = function () {
738
- if (_liveThinkEntry) {
739
- _liveThinkEntry.removeAttribute("id");
740
- _liveThinkEntry = null;
741
- _liveThinkBody = null;
742
- _liveThinkBuffer = "";
743
- }
744
- };
745
-
746
- // ── Extract thinking text from a content array (for streaming deltas) ─
747
- window.extractThinkingText = function (content) {
748
- if (!content) {
749
- return "";
750
- }
751
- if (typeof content === "string") {
752
- return "";
753
- }
754
- if (Array.isArray(content)) {
755
- return content
756
- .filter((b) => b?.type === "thinking")
757
- .map((b) => b.thinking ?? "")
758
- .join("");
759
- }
760
- if (content?.content) {
761
- return window.extractThinkingText(content.content);
762
- }
763
- return "";
764
- };
538
+ // ── Reasoning helpers moved to glass-ui/js/symframe-substrate.js ──────
539
+ // Stage B of the Dynamic Glass Panel arc (3.5.20): the six window
540
+ // globals previously defined here — appendToReasoningPanel,
541
+ // injectReasoningRunSeparator, clearReasoningPanel, openLiveThinking,
542
+ // updateLiveThinking, closeLiveThinking, extractThinkingText — now
543
+ // live in symframe-substrate.js, which routes them to the ambient
544
+ // substrate behind the foreground cards instead of the now-removed
545
+ // reasoning panel card. app.js call sites are unchanged; they bind to
546
+ // the same names. See ~/Documents/dynamic-glass-panel.md §5 Stage B.
547
+ //
548
+ // Original implementations preserved in git history at b80e4fa4e^.
765
549
 
766
550
  // ── Main render function — builds a full message element ──────────────
767
551
  window.renderMessage = function (message) {