@symerian/symi 2.7.0 → 2.7.2

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 (313) hide show
  1. package/dist/{accounts-Cd816n6l.js → accounts-DDuIpcln.js} +7 -7
  2. package/dist/{accounts-mN_EcgxC.js → accounts-DyJN4_vR.js} +1 -1
  3. package/dist/{accounts-CokRskCl.js → accounts-bK-Yqdwx.js} +1 -1
  4. package/dist/{acp-cli-COzlJi3B.js → acp-cli-B2f0qBiM.js} +6 -6
  5. package/dist/{acp-cli-BLUeUUA5.js → acp-cli-D-9rzaOI.js} +2 -2
  6. package/dist/{agent-scope-BRwEc2pG.js → agent-scope-CgUHAtCo.js} +18 -18
  7. package/dist/{agents-Cu2bthAX.js → agents-Z8ruJPz2.js} +5 -5
  8. package/dist/{agents.config-Dib8Uo2P.js → agents.config-B9BZoM2m.js} +2 -2
  9. package/dist/{agents.config-5PTwsijs.js → agents.config-C951ocyh.js} +1 -1
  10. package/dist/{api-key-rotation-CEr3lKih.js → api-key-rotation-CzuPlV2t.js} +1 -1
  11. package/dist/{audio-preflight-mj-z_vQ6.js → audio-preflight-CIiS5cfP.js} +28 -28
  12. package/dist/{audio-preflight-DD18zIZd.js → audio-preflight-HILy3i0m.js} +4 -4
  13. package/dist/{audit-Djfdh06o.js → audit-BgdM9XZl.js} +23 -23
  14. package/dist/{audit-BjI_Yyr5.js → audit-xSagQWH8.js} +2 -2
  15. package/dist/{auth-choice-CmSUU3t8.js → auth-choice-BmYi6pBy.js} +8 -8
  16. package/dist/{auth-choice-5gul6jy2.js → auth-choice-D_VfXxhG.js} +2 -2
  17. package/dist/{auth-token-83A2btbE.js → auth-token-Cay2jwzn.js} +1 -1
  18. package/dist/{banner-B4vQpMIJ.js → banner-Bucr6qZ5.js} +1 -1
  19. package/dist/{bindings-ChzePa8q.js → bindings-DFaVVCsf.js} +1 -1
  20. package/dist/{browser-cli-kDUw45Y0.js → browser-cli-Bc_JVdTj.js} +3 -3
  21. package/dist/{browser-cli-BTD0NlrA.js → browser-cli-Dr0yx7-7.js} +9 -9
  22. package/dist/build-info.json +3 -3
  23. package/dist/bundled/boot-md/handler.js +1 -1
  24. package/dist/bundled/session-memory/handler.js +1 -1
  25. package/dist/{call-tmHtVCkn.js → call-CX0cs106.js} +9 -9
  26. package/dist/{call-DKi-hnaF.js → call-DeCQ2DhS.js} +1 -1
  27. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  28. package/dist/{channel-options-DVf4CJIu.js → channel-options-BMDryXHq.js} +1 -1
  29. package/dist/{channel-options-DsWGc55A.js → channel-options-z8-WeZyO.js} +2 -2
  30. package/dist/{channel-selection-DaJDux-Q.js → channel-selection-V2xDgw16.js} +1 -1
  31. package/dist/{channel-web-vGC-WJXi.js → channel-web-D_YxZAHT.js} +17 -17
  32. package/dist/{channels-cli-CSv05N3q.js → channels-cli-397NgC51.js} +7 -7
  33. package/dist/{channels-cli-COayA28A.js → channels-cli-CV7_JUru.js} +76 -76
  34. package/dist/{channels-status-issues-B_PI3nEE.js → channels-status-issues-CJ0Vb_9z.js} +1 -1
  35. package/dist/{chrome-BxwUEWrH.js → chrome-CiOKaTN-.js} +7 -7
  36. package/dist/{chrome-CSJzpT9Z.js → chrome-DU2ZysN3.js} +2 -2
  37. package/dist/cli/daemon-cli.js +1 -1
  38. package/dist/{cli-B-g79xPe.js → cli-4XU7pNlM.js} +4 -4
  39. package/dist/{cli-DJjOxip6.js → cli-Dq95udFO.js} +63 -63
  40. package/dist/{client-Bj_vTpri.js → client-B8xmq-Pw.js} +14 -2
  41. package/dist/{client-T3qcxXru.js → client-qUlxXXVJ.js} +13 -1
  42. package/dist/{command-registry-BvpLfzl7.js → command-registry-yRiaU4-n.js} +10 -10
  43. package/dist/{commands-CtocZ4Lg.js → commands-BNLCWX6e.js} +1 -1
  44. package/dist/{commands-registry-BZ0ZSQpM.js → commands-registry-BT0-zzs3.js} +3 -3
  45. package/dist/{completion-cli-CfRZ-7QF.js → completion-cli-DrQai9KM.js} +2 -2
  46. package/dist/{completion-cli-DtQcXg1N.js → completion-cli-_aqxDQoz.js} +12 -12
  47. package/dist/{config-tNauHpdq.js → config-Dz95lSBW.js} +2 -2
  48. package/dist/{config-cli-DL2RdfLM.js → config-cli-CMymzmrI.js} +1 -1
  49. package/dist/{config-cli-D9Z78raJ.js → config-cli-EdmbBExA.js} +4 -4
  50. package/dist/{config-guard-4oRmpR0a.js → config-guard-CEkSg4hl.js} +12 -12
  51. package/dist/{config-validation-BoDWiwe3.js → config-validation-HDVDlMSV.js} +1 -1
  52. package/dist/{configure-jDpF8lmx.js → configure-DRMAIBBf.js} +15 -15
  53. package/dist/{configure-Dq4f8WPa.js → configure-DkFujfiY.js} +6 -6
  54. package/dist/{control-service-BBnhN7aZ.js → control-service-BYKXzY4f.js} +4 -4
  55. package/dist/control-ui/css/style.css +128 -0
  56. package/dist/control-ui/js/history.js +233 -85
  57. package/dist/{control-ui-assets-6n-YayeS.js → control-ui-assets-B7moDVHX.js} +1 -1
  58. package/dist/{cron-cli-D165ecaj.js → cron-cli-BHxfvWeT.js} +10 -10
  59. package/dist/{cron-cli-QCTdVZuP.js → cron-cli-DacyI1Pw.js} +3 -3
  60. package/dist/{daemon-cli-BccZzUb0.js → daemon-cli-BLhFbih0.js} +11 -11
  61. package/dist/{daemon-cli-DhJYEAoL.js → daemon-cli-BxKtiouf.js} +2 -2
  62. package/dist/daemon-cli.js +12 -0
  63. package/dist/{daemon-runtime-u01h46bE.js → daemon-runtime-mE1b-Q48.js} +10 -10
  64. package/dist/{deliver-BYdNAEqj.js → deliver-B4KZ6-oZ.js} +7 -7
  65. package/dist/{deliver-DtuY4Wgl.js → deliver-D6IcPfbt.js} +1 -1
  66. package/dist/{devices-cli-BNG-fvdl.js → devices-cli-1kiO08aL.js} +2 -2
  67. package/dist/{devices-cli-D0N71nqX.js → devices-cli-B8Q8AzbX.js} +6 -6
  68. package/dist/{diagnostics-BrUo0gqs.js → diagnostics-BRwihzJG.js} +5 -5
  69. package/dist/{directory-cli-aj7aXIBM.js → directory-cli-KgsAVTA0.js} +7 -7
  70. package/dist/{dm-policy-shared-epgkayyq.js → dm-policy-shared-DlDAGtZL.js} +2 -2
  71. package/dist/{dns-cli-Dit09wbu.js → dns-cli-Cwr92Aiq.js} +3 -3
  72. package/dist/{dock-BYiRZSgZ.js → dock-BhS32F6E.js} +4 -4
  73. package/dist/{docs-cli-CyWGMA-e.js → docs-cli-qE-blOLC.js} +1 -1
  74. package/dist/{doctor-completion-Ccb83Wl5.js → doctor-completion-BbrsQOW-.js} +2 -2
  75. package/dist/{doctor-completion-oQemZItC.js → doctor-completion-Cx-AR_dB.js} +1 -1
  76. package/dist/{doctor-config-flow-BXmHd2bb.js → doctor-config-flow-iIzSEQxb.js} +10 -10
  77. package/dist/entry.js +1 -1
  78. package/dist/{exec-approvals-cli-CmndFjEA.js → exec-approvals-cli-BRx2oxs5.js} +4 -4
  79. package/dist/{exec-approvals-cli-CZ-iTtNO.js → exec-approvals-cli-Cj6Z-vxL.js} +13 -13
  80. package/dist/extensionAPI.js +6 -6
  81. package/dist/{fs-safe-CTDvb1DF.js → fs-safe-CUjO1ca2.js} +6 -6
  82. package/dist/{gateway-cli-C1zPKZ7B.js → gateway-cli-C7JTXqby.js} +269 -175
  83. package/dist/{gateway-cli-zbVm1MBQ.js → gateway-cli-CaaX65eF.js} +169 -75
  84. package/dist/{gateway-rpc-BMdVa3QV.js → gateway-rpc-BWTK7g8B.js} +1 -1
  85. package/dist/{gateway-rpc-B1Wzoj99.js → gateway-rpc-WM-HXUbl.js} +1 -1
  86. package/dist/{glass-ui-ws-D3tAmqKX.js → glass-ui-ws-BI81Lh6Z.js} +83 -83
  87. package/dist/{glass-ui-ws-CvUFd4C6.js → glass-ui-ws-jAbqZVc9.js} +11 -11
  88. package/dist/{health-o847FIt1.js → health-B1nih5LD.js} +13 -13
  89. package/dist/{health-DQEqLYg1.js → health-CsTxt66a.js} +2 -2
  90. package/dist/{hooks-cli-sYjbF4I6.js → hooks-cli-BhxMFkKe.js} +77 -77
  91. package/dist/{hooks-cli-D_UW9fc8.js → hooks-cli-CIlvtt2M.js} +5 -5
  92. package/dist/{image-lCS3o9xj.js → image-BWmcNF8N.js} +3 -3
  93. package/dist/{image-lp19FlzF.js → image-D7Fl08gG.js} +1 -1
  94. package/dist/{image-ops-DYbDWaIA.js → image-ops-1OJMSAUX.js} +10 -10
  95. package/dist/index.js +73 -73
  96. package/dist/{inspect-CNYyHVfH.js → inspect-CvbbCuoa.js} +4 -4
  97. package/dist/{install-safe-path-D3mg1DMG.js → install-safe-path-D3Uz77u7.js} +11 -11
  98. package/dist/{installs-CYTVYWH_.js → installs-DQcRVF1U.js} +10 -10
  99. package/dist/{ir-Dt4hOzxG.js → ir-DZam9q5M.js} +6 -6
  100. package/dist/{lifecycle-core-DxmxQdhS.js → lifecycle-core-C4HzGXA1.js} +5 -5
  101. package/dist/llm-slug-generator.js +1 -1
  102. package/dist/{local-roots-BBeKX7PX.js → local-roots-aAFLQGkY.js} +2 -2
  103. package/dist/{login-CnjdNmGD.js → login-DODfJ3Dn.js} +3 -3
  104. package/dist/{login-qr-DUf6CM0M.js → login-qr-CBRxijIg.js} +5 -5
  105. package/dist/{logs-cli-DtlrLf7u.js → logs-cli-BZV7dq_U.js} +3 -3
  106. package/dist/{logs-cli-BVd6h2-Q.js → logs-cli-DyCcDkRs.js} +7 -7
  107. package/dist/{manager-C1CfGzZ2.js → manager-D4LJSRyZ.js} +13 -13
  108. package/dist/{markdown-tables-ZwP14ydw.js → markdown-tables-CEbN0fEm.js} +1 -1
  109. package/dist/{memory-cli-DhkRAIdT.js → memory-cli-DDumUksr.js} +14 -14
  110. package/dist/{model-catalog-CvbwxWuC.js → model-catalog-8Son0J4O.js} +4 -4
  111. package/dist/{model-picker-C2MqloOs.js → model-picker-CAm2Bftd.js} +3 -3
  112. package/dist/{model-selection-X1oLh3CE.js → model-selection-CyFvYcRt.js} +9 -9
  113. package/dist/{model-CeeOcylL.js → model-tWhwnFf8.js} +1 -1
  114. package/dist/{models-Zol34e73.js → models-DhMe2rzL.js} +3 -3
  115. package/dist/{models-cli-DnMUzr15.js → models-cli-DKM5sCQM.js} +72 -72
  116. package/dist/{models-cli-BzcEA9oa.js → models-cli-Dewg24W2.js} +6 -6
  117. package/dist/{models-config-CEMioDUi.js → models-config-CFFjJPe7.js} +7 -7
  118. package/dist/{node-cli-BVJid4L_.js → node-cli-4eMRkmrw.js} +28 -28
  119. package/dist/{node-cli-eHn9-YfJ.js → node-cli-Dfs0UmnJ.js} +1 -1
  120. package/dist/{node-service-CXzMs782.js → node-service-CD47Qpf1.js} +1 -1
  121. package/dist/{nodes-cli-Ct4M7JOe.js → nodes-cli-BKb61OjH.js} +3 -3
  122. package/dist/{nodes-cli-BN2Nslim.js → nodes-cli-DxfP9DIz.js} +10 -10
  123. package/dist/{nodes-screen-Cd49cSPb.js → nodes-screen-8Bq7DiSa.js} +4 -4
  124. package/dist/{npm-registry-spec-DchndI6P.js → npm-registry-spec-C0CPT3vr.js} +9 -9
  125. package/dist/{onboard-CSseK0Co.js → onboard-C6XtdirM.js} +13 -13
  126. package/dist/{onboard-CxOT_xD4.js → onboard-CVfE-Bjj.js} +3 -3
  127. package/dist/{onboard-channels-D-lh_Vh1.js → onboard-channels-8ynJSZL6.js} +1 -1
  128. package/dist/{onboard-channels-CUlITipG.js → onboard-channels-ChxtmhFY.js} +5 -5
  129. package/dist/{onboard-custom-DTcLdtA9.js → onboard-custom-XiomtQr7.js} +3 -3
  130. package/dist/{onboard-helpers-CdPNw25E.js → onboard-helpers-CueJ7O_B.js} +8 -8
  131. package/dist/{onboard-helpers-BBtPmJEe.js → onboard-helpers-PpGrZIGw.js} +1 -1
  132. package/dist/{onboard-hooks-C_2_jpWg.js → onboard-hooks-C3ok8kqB.js} +1 -1
  133. package/dist/{onboard-remote-v6QMnyJD.js → onboard-remote-Cd9kIiSG.js} +1 -1
  134. package/dist/{onboard-remote-D-B4EiOE.js → onboard-remote-DCdpB2HH.js} +1 -1
  135. package/dist/{onboard-skills-BDCzVjxb.js → onboard-skills-CC2CV5Er.js} +1 -1
  136. package/dist/{onboard-skills-CQtkRP20.js → onboard-skills-DRICcBwa.js} +4 -4
  137. package/dist/{onboarding-Dn5agNG_.js → onboarding-Dg6nx_ph.js} +13 -13
  138. package/dist/{onboarding-DktESmTv.js → onboarding-fN3GGyiv.js} +7 -7
  139. package/dist/{onboarding.finalize-Bm-1Kdnh.js → onboarding.finalize--MZAe4B0.js} +10 -10
  140. package/dist/{onboarding.finalize-CTIZ1zvV.js → onboarding.finalize-CBE2mBQQ.js} +75 -75
  141. package/dist/{onboarding.gateway-config-CwnQkyO0.js → onboarding.gateway-config-DTWQ-Bqq.js} +14 -14
  142. package/dist/{onboarding.gateway-config-B9zGPfCl.js → onboarding.gateway-config-Dj68bVBt.js} +3 -3
  143. package/dist/{openai-model-default-4kBA1_78.js → openai-model-default-WqcGxyFM.js} +2 -2
  144. package/dist/{outbound-attachment-Qfh5dlsg.js → outbound-attachment-Bw-c5Cdp.js} +2 -2
  145. package/dist/{outbound-_Ir3M05f.js → outbound-wnv03tb3.js} +4 -4
  146. package/dist/{pairing-cli-C8UXBJ_A.js → pairing-cli-DSM82gJG.js} +8 -8
  147. package/dist/{pairing-labels-Dxb898X5.js → pairing-labels-DyXoD1DS.js} +1 -1
  148. package/dist/{pairing-store-B8ktu-6j.js → pairing-store-CK726Dzq.js} +2 -2
  149. package/dist/{pairing-token-AV-MMfVE.js → pairing-token-CX3NN_qj.js} +7 -7
  150. package/dist/{paths-CT6jsi4E.js → paths-BBm9fwuG.js} +1 -1
  151. package/dist/{pi-auth-json-FpfHyEcu.js → pi-auth-json-zHckislA.js} +5 -5
  152. package/dist/{pi-embedded-CYDMb5q0.js → pi-embedded-BzS693I1.js} +28 -16
  153. package/dist/{pi-embedded-helpers-Bs4eMaNo.js → pi-embedded-helpers-BgdB5kvy.js} +6 -6
  154. package/dist/{pi-embedded-helpers-Dij3O6ox.js → pi-embedded-helpers-DXAoe1Bx.js} +4 -4
  155. package/dist/{pi-tools.policy-BBxnqCay.js → pi-tools.policy-DRWb_Cax.js} +4 -4
  156. package/dist/{plugin-auto-enable-DwIrzVOA.js → plugin-auto-enable-CP0nONRL.js} +2 -2
  157. package/dist/{plugin-registry-CJGPW1-k.js → plugin-registry-Bzz7mUyl.js} +1 -1
  158. package/dist/{plugin-registry-d0oZLl6y.js → plugin-registry-SUa2FFIj.js} +3 -3
  159. package/dist/plugin-sdk/{channel-web-Dm-CzA1O.js → channel-web-DRabhx1e.js} +1 -1
  160. package/dist/plugin-sdk/gateway/protocol/index.d.ts +13 -2
  161. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +11 -0
  162. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +4 -1
  163. package/dist/plugin-sdk/index.js +2 -2
  164. package/dist/plugin-sdk/{reply-4HEU7aDS.js → reply-Cw3shPk2.js} +14 -2
  165. package/dist/plugin-sdk/{web-Cclb7FTq.js → web-CH43nBP0.js} +2 -2
  166. package/dist/{plugins-BAyxWQSz.js → plugins-DKDeQZF0.js} +2 -2
  167. package/dist/{plugins-cli-CL0tzkMo.js → plugins-cli-DwtoU3xk.js} +5 -5
  168. package/dist/{plugins-cli-BWgjIJQL.js → plugins-cli-qG50__1A.js} +72 -72
  169. package/dist/{ports-OZQlocB7.js → ports-BOmtxoTv.js} +2 -2
  170. package/dist/{ports-u9lWy2Jt.js → ports-DtW62rqS.js} +1 -1
  171. package/dist/{program-BHjH97Q_.js → program-BDspObZY.js} +10 -10
  172. package/dist/{program-context-CXZHSZ4D.js → program-context-BqUFQnhR.js} +39 -39
  173. package/dist/{prompt-select-styled-BUFEoSlM.js → prompt-select-styled-C7DydfxH.js} +38 -38
  174. package/dist/{prompt-select-styled-D8LXSUR7.js → prompt-select-styled-CRUuzDrg.js} +6 -6
  175. package/dist/{provider-auth-helpers-BFHctF2f.js → provider-auth-helpers-CEYCb2mJ.js} +1 -1
  176. package/dist/{provider-auth-helpers-CeAbh3lv.js → provider-auth-helpers-D60nbSLq.js} +5 -5
  177. package/dist/{push-apns-BylbQyP9.js → push-apns-B5txhDVi.js} +1 -1
  178. package/dist/{push-apns-DqFdzIkc.js → push-apns-CoG1P_P0.js} +4 -4
  179. package/dist/{pw-ai-BO5cSmwD.js → pw-ai-CANiWpMA.js} +1 -1
  180. package/dist/{pw-ai-CfrnAHwA.js → pw-ai-DQohWnzT.js} +7 -7
  181. package/dist/{qmd-manager-DUNbG4Qr.js → qmd-manager-CCUK1xoc.js} +18 -18
  182. package/dist/{qr-cli-BZYa2gvF.js → qr-cli-CejYwqsj.js} +3 -3
  183. package/dist/{register.agent-DxAqRAt3.js → register.agent-BY_Df_Me.js} +9 -9
  184. package/dist/{register.agent-bzSGKS-l.js → register.agent-CopGIf9e.js} +82 -82
  185. package/dist/{register.configure-WS1nlSp8.js → register.configure-Bu_XKu7Z.js} +11 -11
  186. package/dist/register.configure-CoYQhQBT.js +148 -0
  187. package/dist/{register.maintenance-B1QcUr38.js → register.maintenance-4Q3E_gqv.js} +85 -85
  188. package/dist/{register.maintenance-D_qMTrgD.js → register.maintenance-DhnICgeT.js} +11 -11
  189. package/dist/{register.message-zu3HGGff.js → register.message-DZCCEK01.js} +5 -5
  190. package/dist/{register.message-CJF8gLAN.js → register.message-dd1xYBZT.js} +64 -64
  191. package/dist/{register.onboard-CswoaT7q.js → register.onboard-Bfz-EJGb.js} +75 -75
  192. package/dist/{register.onboard-9dwNqCe6.js → register.onboard-e8L_UxR4.js} +7 -7
  193. package/dist/{register.setup-CvomtGGu.js → register.setup-C5CZKKAB.js} +78 -78
  194. package/dist/{register.setup-TcjUu6HC.js → register.setup-DuU3Ywi-.js} +7 -7
  195. package/dist/{register.status-health-sessions-CM1SX81r.js → register.status-health-sessions-Dvj4mlom.js} +7 -7
  196. package/dist/{register.status-health-sessions-CQMvbwr6.js → register.status-health-sessions-jeiqtgl7.js} +76 -76
  197. package/dist/{register.subclis-CVQASXaL.js → register.subclis-DD6G0dov.js} +20 -20
  198. package/dist/{replies-Dy92jzrz.js → replies-BMqtgBhh.js} +1 -1
  199. package/dist/{reply-CpNWtuU4.js → reply-XaXqDK9F.js} +139 -139
  200. package/dist/{reply-prefix-BLOOs1aW.js → reply-prefix-CE2YmmsD.js} +1 -1
  201. package/dist/{resolve-route-BcnaXYvh.js → resolve-route-BMoTaVAH.js} +2 -2
  202. package/dist/{routes-CVwRcA9D.js → routes-BAZTZNuQ.js} +8 -8
  203. package/dist/{rpc-CZFfee1J.js → rpc-N1nf_c1A.js} +1 -1
  204. package/dist/{rpc-D0FiEinj.js → rpc-QHo-8pCM.js} +1 -1
  205. package/dist/{run-main-Dq6tfDry.js → run-main-BrUOBCsG.js} +17 -17
  206. package/dist/{runner-Ct0suQrd.js → runner-BS9gGL5i.js} +1 -1
  207. package/dist/{runner-BAVs-p6Z.js → runner-DRv0uCK_.js} +20 -20
  208. package/dist/{sandbox-HZ_uilsn.js → sandbox-B6N8cV4d.js} +18 -18
  209. package/dist/{sandbox-cli-wZtiyo8g.js → sandbox-cli-DwzaNjIJ.js} +20 -20
  210. package/dist/{security-cli-BESmRIrl.js → security-cli-B-4J6enu.js} +36 -36
  211. package/dist/{security-cli-CG1uSlRK.js → security-cli-CSMUEGPK.js} +3 -3
  212. package/dist/{send-DsSI8z3F.js → send-9SapUCg7.js} +6 -6
  213. package/dist/{send-DT-5buW5.js → send-B3RdXvjC.js} +6 -6
  214. package/dist/{send-JWV62VbW.js → send-Bm4ULEzh.js} +6 -6
  215. package/dist/{send-BVBCh27_.js → send-CQVnyJyF.js} +13 -13
  216. package/dist/{send-CXFTeD_J.js → send-DVm0du0_.js} +4 -4
  217. package/dist/{server-context-VlF1_hYj.js → server-context-CCBZN8a0.js} +5 -5
  218. package/dist/{server-methods-B0pdetGJ.js → server-methods-0ksPFnev.js} +441 -124
  219. package/dist/{server-methods-IBEaQXPX.js → server-methods-Bu1RjLe6.js} +484 -167
  220. package/dist/{server-node-events-CyDj7Txd.js → server-node-events-DCbzFyQF.js} +5 -5
  221. package/dist/{server-node-events-BACmfyjo.js → server-node-events-DZAN3hWE.js} +64 -64
  222. package/dist/{service-D80PyJxB.js → service-osK70kTZ.js} +15 -15
  223. package/dist/{session-6Qyc4cBQ.js → session-DsJGtM7g.js} +2 -2
  224. package/dist/{session-dirs-DPzjjra2.js → session-dirs-Dgz7kkUM.js} +2 -2
  225. package/dist/{sessions-jTAGYjWl.js → sessions-Cpgnq0pA.js} +13 -13
  226. package/dist/{shared-BfhtOZAz.js → shared-73T9fyuK.js} +3 -3
  227. package/dist/{shared-BV7WhIkY.js → shared-DnmJ0ABB.js} +1 -1
  228. package/dist/{skill-commands-ZXbEITKi.js → skill-commands-Cxw-jNxU.js} +5 -5
  229. package/dist/{skill-scanner-w3DJvw1Q.js → skill-scanner-hMtQbWPV.js} +5 -5
  230. package/dist/{skills-DqQUtOph.js → skills-6jdJQ5ZL.js} +4 -4
  231. package/dist/{skills-cli-D3lePXkf.js → skills-cli-DXkx4vNV.js} +7 -7
  232. package/dist/{skills-install-HGYidhrv.js → skills-install-CWVdJkLn.js} +3 -3
  233. package/dist/{skills-status-Cjsh8we0.js → skills-status-C3ptXwnh.js} +1 -1
  234. package/dist/{sqlite-BV5ILFtC.js → sqlite-Dx3J_aSE.js} +12 -12
  235. package/dist/{status-DzHL-eVu.js → status-CiHkFbIh.js} +3 -3
  236. package/dist/{status-nzJEZmNT.js → status-DOTlXdcN.js} +25 -25
  237. package/dist/{status-DUeTrQSz.js → status-IWqSLXLR.js} +1 -1
  238. package/dist/{status-BJtbD-cG.js → status-qkmUAeWo.js} +5 -5
  239. package/dist/{status.update-TlYwuzTa.js → status.update-CG0ciGaf.js} +3 -3
  240. package/dist/{store-DvtcmOKj.js → store-r1DJSDq-.js} +5 -5
  241. package/dist/{subagent-registry-CzS4CfnV.js → subagent-registry-DCoU9xIE.js} +5 -5
  242. package/dist/{symi-root-MF6_6SCS.js → symi-root-CrGJbkzf.js} +2 -2
  243. package/dist/{system-cli-C2yhGP4C.js → system-cli-DY7ov1OT.js} +7 -7
  244. package/dist/{system-cli-Z7uzO8qd.js → system-cli-LFURKpwS.js} +3 -3
  245. package/dist/{systemd-CevHlgD4.js → systemd-DT6SbCim.js} +5 -5
  246. package/dist/{systemd-hints-DmgRnw1L.js → systemd-hints-xYZbFny_.js} +6 -6
  247. package/dist/{systemd-linger-ScxQ1_H4.js → systemd-linger-DCskIKcx.js} +1 -1
  248. package/dist/{tables-C38rzF6E.js → tables-BEzT0Da4.js} +1 -1
  249. package/dist/{target-errors-CCz79CmV.js → target-errors-7AvoVa10.js} +4 -4
  250. package/dist/{tool-images-B-pqX3nX.js → tool-images-DvUBlqjX.js} +1 -1
  251. package/dist/{tui-D2MOx3Kx.js → tui-BH7JwqvB.js} +7 -7
  252. package/dist/{tui-DrATGNms.js → tui-C_5HG495.js} +2 -2
  253. package/dist/{tui-cli-D19-MCXt.js → tui-cli-B65PKZMj.js} +3 -3
  254. package/dist/{tui-cli-B2ii7u23.js → tui-cli-CJnfmuxq.js} +28 -28
  255. package/dist/{unified-runner-BtO3UQSd.js → unified-runner-CApgXtVC.js} +14 -2
  256. package/dist/{update-Don6XTH9.js → update-Ya0e-JnM.js} +3 -3
  257. package/dist/{update-check-DCo5RtKp.js → update-check-7EzEjSzb.js} +5 -5
  258. package/dist/{update-cli-gKtjyXlD.js → update-cli-D5_jTEJv.js} +95 -95
  259. package/dist/{update-cli-DRODEMSI.js → update-cli-Dxb3pUyu.js} +12 -12
  260. package/dist/{update-runner-JcdOHr71.js → update-runner-BhVsdpxm.js} +1 -1
  261. package/dist/{update-runner-AsKAxe31.js → update-runner-FhW6n-Nv.js} +15 -15
  262. package/dist/{web-BIzWZFiN.js → web-ConlA_Ch.js} +4 -4
  263. package/dist/{web-DGo16lWn.js → web-CthDLVSz.js} +1 -1
  264. package/dist/{web-DKwOxo8E.js → web-Db_-ahjX.js} +6 -6
  265. package/dist/web-Dpb_tv_j.js +110 -0
  266. package/dist/{webhooks-cli-DbnQ2BVE.js → webhooks-cli-BRxe4uCg.js} +4 -4
  267. package/dist/{whatsapp-actions-CqXxtCoj.js → whatsapp-actions-ChO_shrk.js} +15 -15
  268. package/dist/{with-timeout-Cm5EhxG_.js → with-timeout-CtVdu_1U.js} +1 -1
  269. package/dist/{workspace-dirs-DKu48umx.js → workspace-dirs-GpkFi6Kw.js} +1 -1
  270. package/dist/{wsl-xNOi_Ch8.js → wsl-q8spwrME.js} +2 -2
  271. package/extensions/bluebubbles/package.json +1 -1
  272. package/extensions/copilot-proxy/package.json +1 -1
  273. package/extensions/diagnostics-otel/package.json +1 -1
  274. package/extensions/discord/package.json +1 -1
  275. package/extensions/feishu/package.json +1 -1
  276. package/extensions/google-antigravity-auth/package.json +1 -1
  277. package/extensions/google-gemini-cli-auth/package.json +1 -1
  278. package/extensions/googlechat/package.json +1 -1
  279. package/extensions/imessage/package.json +1 -1
  280. package/extensions/irc/package.json +1 -1
  281. package/extensions/learning-loop/package.json +1 -1
  282. package/extensions/line/package.json +1 -1
  283. package/extensions/llm-task/package.json +1 -1
  284. package/extensions/matrix/CHANGELOG.md +12 -0
  285. package/extensions/matrix/package.json +1 -1
  286. package/extensions/mattermost/package.json +1 -1
  287. package/extensions/memory-core/package.json +1 -1
  288. package/extensions/memory-lancedb/package.json +1 -1
  289. package/extensions/minimax-portal-auth/package.json +1 -1
  290. package/extensions/msteams/CHANGELOG.md +12 -0
  291. package/extensions/msteams/package.json +1 -1
  292. package/extensions/nextcloud-talk/package.json +1 -1
  293. package/extensions/nostr/CHANGELOG.md +12 -0
  294. package/extensions/nostr/package.json +1 -1
  295. package/extensions/open-prose/package.json +1 -1
  296. package/extensions/outlook/package.json +1 -1
  297. package/extensions/pipeline/package.json +1 -1
  298. package/extensions/signal/package.json +1 -1
  299. package/extensions/slack/package.json +1 -1
  300. package/extensions/telegram/package.json +1 -1
  301. package/extensions/tlon/package.json +1 -1
  302. package/extensions/twitch/CHANGELOG.md +12 -0
  303. package/extensions/twitch/package.json +1 -1
  304. package/extensions/voice-call/CHANGELOG.md +12 -0
  305. package/extensions/voice-call/package.json +1 -1
  306. package/extensions/whatsapp/package.json +1 -1
  307. package/extensions/zalo/CHANGELOG.md +12 -0
  308. package/extensions/zalo/package.json +1 -1
  309. package/extensions/zalouser/CHANGELOG.md +12 -0
  310. package/extensions/zalouser/package.json +1 -1
  311. package/package.json +1 -1
  312. package/dist/register.configure-Boyfir72.js +0 -148
  313. package/dist/web-sefqR11J.js +0 -110
@@ -2,32 +2,32 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
3
3
  import { S as shortenHomePath, y as resolveUserPath } from "./utils-B-0b9bGM.js";
4
4
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
5
- import { At as ensureAuthProfileStore } from "./model-selection-X1oLh3CE.js";
5
+ import { At as ensureAuthProfileStore } from "./model-selection-CyFvYcRt.js";
6
6
  import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
7
- import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } from "./config-tNauHpdq.js";
7
+ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } from "./config-Dz95lSBW.js";
8
8
  import { a as findTailscaleBinary } from "./tailscale-D5dKabOc.js";
9
- import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-BAyxWQSz.js";
9
+ import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-DKDeQZF0.js";
10
10
  import { n as withProgress } from "./progress-jIePzvGA.js";
11
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-CdPNw25E.js";
11
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-CueJ7O_B.js";
12
12
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-CnkMpSXt.js";
13
13
  import { t as note$1 } from "./note-DQ9BvHF2.js";
14
14
  import { t as WizardCancelledError } from "./prompts-CfOu9uZi.js";
15
15
  import { t as createClackPrompter } from "./clack-prompter-DMuVyYP2.js";
16
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-CUlITipG.js";
17
- import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-u01h46bE.js";
18
- import { t as resolveGatewayService } from "./service-D80PyJxB.js";
19
- import { r as healthCommand } from "./health-o847FIt1.js";
20
- import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-6n-YayeS.js";
16
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-ChxtmhFY.js";
17
+ import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-mE1b-Q48.js";
18
+ import { t as resolveGatewayService } from "./service-osK70kTZ.js";
19
+ import { r as healthCommand } from "./health-B1nih5LD.js";
20
+ import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-B7moDVHX.js";
21
21
  import { n as logConfigUpdated } from "./logging-KpicI3yD.js";
22
22
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-Cn6U3t8O.js";
23
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-CmSUU3t8.js";
24
- import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-C2MqloOs.js";
25
- import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-ScxQ1_H4.js";
26
- import { a as promptCustomApiConfig } from "./onboard-custom-DTcLdtA9.js";
23
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-BmYi6pBy.js";
24
+ import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-CAm2Bftd.js";
25
+ import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-DCskIKcx.js";
26
+ import { a as promptCustomApiConfig } from "./onboard-custom-XiomtQr7.js";
27
27
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-CjlyK5jc.js";
28
28
  import { t as formatHealthCheckFailure } from "./health-format-DRCaak6L.js";
29
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-v6QMnyJD.js";
30
- import { n as setupSkills } from "./onboard-skills-CQtkRP20.js";
29
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-Cd9kIiSG.js";
30
+ import { n as setupSkills } from "./onboard-skills-DRICcBwa.js";
31
31
  import { confirm, intro, outro, select, text } from "@clack/prompts";
32
32
 
33
33
  //#region src/commands/configure.shared.ts
@@ -6,26 +6,26 @@ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } fr
6
6
  import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
7
7
  import { a as findTailscaleBinary } from "./tailscale-CbbvYNVw.js";
8
8
  import { n as withProgress } from "./progress-BAHiAaDW.js";
9
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-BBtPmJEe.js";
9
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-PpGrZIGw.js";
10
10
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-DwCXob2h.js";
11
11
  import { t as note$1 } from "./note-DDecZomM.js";
12
12
  import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
13
13
  import { t as createClackPrompter } from "./clack-prompter-B1aVoXd5.js";
14
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-D-lh_Vh1.js";
14
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-8ynJSZL6.js";
15
15
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CVFg-ZmT.js";
16
16
  import { t as resolveGatewayService } from "./service-Cm9j9WzQ.js";
17
- import { r as healthCommand } from "./health-DQEqLYg1.js";
17
+ import { r as healthCommand } from "./health-CsTxt66a.js";
18
18
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BseSWee1.js";
19
19
  import { n as logConfigUpdated } from "./logging-BGewRZy0.js";
20
20
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-DVcYPG2v.js";
21
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-5gul6jy2.js";
21
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-D_VfXxhG.js";
22
22
  import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-Casgrpw3.js";
23
23
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-DA_LW52P.js";
24
24
  import { a as promptCustomApiConfig } from "./onboard-custom-CQOMQkfS.js";
25
25
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-B-xy96ST.js";
26
26
  import { t as formatHealthCheckFailure } from "./health-format-CzgUHmmX.js";
27
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-D-B4EiOE.js";
28
- import { n as setupSkills } from "./onboard-skills-BDCzVjxb.js";
27
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-DCdpB2HH.js";
28
+ import { n as setupSkills } from "./onboard-skills-CC2CV5Er.js";
29
29
  import { confirm, intro, outro, select, text } from "@clack/prompts";
30
30
 
31
31
  //#region src/commands/configure.shared.ts
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-D9vIQve0.js";
3
- import { i as loadConfig } from "./config-tNauHpdq.js";
4
- import { x as ensureChromeExtensionRelayServer } from "./chrome-CSJzpT9Z.js";
5
- import { a as resolveProfile, i as resolveBrowserConfig, n as listKnownProfileNames, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-VlF1_hYj.js";
3
+ import { i as loadConfig } from "./config-Dz95lSBW.js";
4
+ import { x as ensureChromeExtensionRelayServer } from "./chrome-DU2ZysN3.js";
5
+ import { a as resolveProfile, i as resolveBrowserConfig, n as listKnownProfileNames, p as ensureBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-CCBZN8a0.js";
6
6
 
7
7
  //#region src/browser/server-lifecycle.ts
8
8
  async function ensureExtensionRelayForProfiles(params) {
@@ -80,7 +80,7 @@ async function stopBrowserControlService() {
80
80
  });
81
81
  state = null;
82
82
  try {
83
- await (await import("./pw-ai-CfrnAHwA.js")).closePlaywrightBrowserConnection();
83
+ await (await import("./pw-ai-DQohWnzT.js")).closePlaywrightBrowserConnection();
84
84
  } catch {}
85
85
  }
86
86
 
@@ -5374,3 +5374,131 @@ body {
5374
5374
  opacity: 0.7;
5375
5375
  font-family: inherit;
5376
5376
  }
5377
+
5378
+ /* ═══════════════════════════════════════════════════════════════════════
5379
+ 2.7.1 — History modal rework: CURRENT/PAST/ARCHIVED badges, favourite
5380
+ star, two-stage delete button, section headings.
5381
+ ═══════════════════════════════════════════════════════════════════════ */
5382
+
5383
+ /* Section heading above a group of rows */
5384
+ .history-section-heading {
5385
+ font-family: var(--font-mono);
5386
+ font-size: 10px;
5387
+ font-weight: 700;
5388
+ letter-spacing: 0.15em;
5389
+ color: rgba(255, 255, 255, 0.35);
5390
+ padding: 12px 14px 6px;
5391
+ text-transform: uppercase;
5392
+ }
5393
+
5394
+ /* Row accent for CURRENT (green, as per "live is exactly one") */
5395
+ .history-session-item.history-session-current {
5396
+ border-left: 2px solid var(--accent-green, #10b981);
5397
+ background: rgba(16, 185, 129, 0.04);
5398
+ }
5399
+
5400
+ .history-session-header {
5401
+ display: flex;
5402
+ align-items: center;
5403
+ gap: 8px;
5404
+ margin-bottom: 4px;
5405
+ }
5406
+
5407
+ /* Badges — CURRENT (green), PAST (cyan), ARCHIVED (violet) */
5408
+ .history-session-badge.badge-current {
5409
+ background: rgba(16, 185, 129, 0.15);
5410
+ color: rgba(16, 185, 129, 1);
5411
+ border: 1px solid rgba(16, 185, 129, 0.3);
5412
+ }
5413
+ .history-session-badge.badge-past {
5414
+ background: rgba(0, 212, 255, 0.12);
5415
+ color: var(--accent-cyan);
5416
+ border: 1px solid rgba(0, 212, 255, 0.25);
5417
+ }
5418
+ .history-session-badge.badge-archived {
5419
+ background: rgba(139, 92, 246, 0.1);
5420
+ color: rgba(139, 92, 246, 0.7);
5421
+ border: 1px solid rgba(139, 92, 246, 0.2);
5422
+ }
5423
+
5424
+ /* Favourite star */
5425
+ .history-fav-btn {
5426
+ background: transparent;
5427
+ border: none;
5428
+ padding: 0 4px;
5429
+ font-size: 18px;
5430
+ line-height: 1;
5431
+ cursor: pointer;
5432
+ color: rgba(255, 255, 255, 0.25);
5433
+ transition: color 0.15s;
5434
+ }
5435
+ .history-fav-btn:hover {
5436
+ color: rgba(255, 215, 0, 0.6);
5437
+ }
5438
+ .history-fav-btn.active {
5439
+ color: rgba(255, 215, 0, 0.95);
5440
+ }
5441
+
5442
+ /* Row actions row */
5443
+ .history-session-actions {
5444
+ display: flex;
5445
+ gap: 8px;
5446
+ margin-top: 8px;
5447
+ }
5448
+ .history-session-actions .history-load-btn {
5449
+ margin-top: 0;
5450
+ flex: 1;
5451
+ }
5452
+ .history-session-actions .history-delete-btn {
5453
+ margin-top: 0;
5454
+ padding: 5px 14px;
5455
+ height: 28px;
5456
+ background: rgba(239, 68, 68, 0.06);
5457
+ border: 1px solid rgba(239, 68, 68, 0.2);
5458
+ border-radius: 6px;
5459
+ color: rgba(239, 68, 68, 0.75);
5460
+ font-family: var(--font-mono);
5461
+ font-size: 10px;
5462
+ font-weight: 600;
5463
+ letter-spacing: 0.08em;
5464
+ cursor: pointer;
5465
+ transition: all 0.15s;
5466
+ }
5467
+ .history-session-actions .history-delete-btn:hover {
5468
+ background: rgba(239, 68, 68, 0.12);
5469
+ color: rgba(239, 68, 68, 1);
5470
+ }
5471
+ .history-session-actions .history-delete-btn.armed {
5472
+ background: rgba(239, 68, 68, 0.2);
5473
+ color: rgba(255, 255, 255, 1);
5474
+ border-color: rgba(239, 68, 68, 0.6);
5475
+ animation: delete-armed-pulse 1s ease-in-out infinite;
5476
+ }
5477
+ .history-session-actions .history-delete-btn:disabled {
5478
+ opacity: 0.5;
5479
+ cursor: wait;
5480
+ }
5481
+
5482
+ @keyframes delete-armed-pulse {
5483
+ 0%,
5484
+ 100% {
5485
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4);
5486
+ }
5487
+ 50% {
5488
+ box-shadow: 0 0 0 4px rgba(239, 68, 68, 0);
5489
+ }
5490
+ }
5491
+
5492
+ /* Informational footer for the CURRENT row (replaces action buttons). */
5493
+ .history-session-current-note {
5494
+ margin-top: 8px;
5495
+ padding: 6px 10px;
5496
+ font-family: var(--font-mono);
5497
+ font-size: 10px;
5498
+ letter-spacing: 0.05em;
5499
+ color: rgba(16, 185, 129, 0.75);
5500
+ background: rgba(16, 185, 129, 0.05);
5501
+ border: 1px dashed rgba(16, 185, 129, 0.2);
5502
+ border-radius: 4px;
5503
+ text-align: center;
5504
+ }
@@ -1,5 +1,7 @@
1
1
  // ── Session History Browser ────────────────────────────────────────────
2
- // Provides the history drawer: list past sessions, browse archived transcripts.
2
+ // Provides the history drawer: list past sessions, browse archived
3
+ // transcripts, favourite/delete/load. Exactly one row is ever CURRENT;
4
+ // all others are loadable past sessions.
3
5
  // ─────────────────────────────────────────────────────────────────────────────
4
6
 
5
7
  "use strict";
@@ -15,7 +17,8 @@
15
17
 
16
18
  let isOpen = false;
17
19
  let toastTimer = null;
18
- let __viewingFile = null; // filename of the currently viewed archive
20
+ let __viewingFile = null;
21
+ const DELETE_CONFIRM_MS = 5000;
19
22
 
20
23
  // ── Open / close ──────────────────────────────────────────────────────
21
24
  function openDrawer() {
@@ -48,10 +51,15 @@
48
51
  drawerBody.innerHTML = '<div class="history-loading">Loading sessions…</div>';
49
52
  __viewingFile = null;
50
53
 
54
+ const currentKey = window.SESSION_KEY ?? "agent:main:main";
55
+ const url = "/api/sessions?currentKey=" + encodeURIComponent(currentKey);
56
+
51
57
  let sessions;
52
58
  try {
53
- const res = await fetch("/api/sessions");
54
- sessions = await res.json();
59
+ const res = await fetch(url);
60
+ const payload = await res.json();
61
+ // Response shape: { sessions: [...] } (2.7.1+)
62
+ sessions = Array.isArray(payload?.sessions) ? payload.sessions : [];
55
63
  } catch {
56
64
  drawerBody.innerHTML = '<div class="history-empty">Failed to load sessions.</div>';
57
65
  return;
@@ -62,52 +70,216 @@
62
70
  return;
63
71
  }
64
72
 
73
+ // Group rows: CURRENT / FAVOURITES / RECENT
74
+ const current = sessions.filter((s) => s.kind === "current");
75
+ const favourites = sessions.filter((s) => s.kind !== "current" && s.favorited);
76
+ const recent = sessions.filter((s) => s.kind !== "current" && !s.favorited);
77
+
65
78
  drawerBody.innerHTML = "";
66
- for (const s of sessions) {
67
- const item = document.createElement("div");
68
- item.className = "history-session-item";
69
-
70
- const when = s.archivedAt
71
- ? formatTimestamp(s.archivedAt)
72
- : s.mtime
73
- ? formatTimestamp(s.mtime) + " (active)"
74
- : "Unknown";
75
-
76
- const badge = s.isArchived
77
- ? `<span class="history-session-badge archived">ARCHIVED</span>`
78
- : `<span class="history-session-badge live">LIVE</span>`;
79
-
80
- const preview = s.preview
81
- ? escHtml(s.preview) + (s.preview.length >= 80 ? "" : "")
82
- : '<em style="opacity:0.5">No messages</em>';
83
-
84
- item.innerHTML = `
85
- <div>${badge}</div>
86
- <div class="history-session-meta">
87
- <span class="history-session-date">${escHtml(when)}</span>
88
- <span class="history-session-count">${s.msgCount} msgs · ${fmtSize(s.size)}</span>
89
- </div>
90
- <div class="history-session-preview">${preview}</div>
91
- `;
92
-
93
- item.addEventListener("click", () => loadTranscript(s.file, when));
94
-
95
- // "Load Session" button for archived sessions
96
- if (s.isArchived) {
97
- const loadBtn = document.createElement("button");
98
- loadBtn.className = "history-load-btn";
99
- loadBtn.textContent = "Load Session";
100
- loadBtn.addEventListener("click", (e) => {
101
- e.stopPropagation(); // don't open the transcript viewer
102
- void restoreSession(s.file);
103
- });
104
- item.appendChild(loadBtn);
79
+
80
+ if (current.length > 0) {
81
+ drawerBody.appendChild(renderSection("CURRENT", current));
82
+ }
83
+ if (favourites.length > 0) {
84
+ drawerBody.appendChild(renderSection("★ FAVOURITES", favourites));
85
+ }
86
+ if (recent.length > 0) {
87
+ drawerBody.appendChild(renderSection("RECENT", recent));
88
+ }
89
+ }
90
+
91
+ function renderSection(title, rows) {
92
+ const section = document.createElement("section");
93
+ section.className = "history-section";
94
+ const heading = document.createElement("div");
95
+ heading.className = "history-section-heading";
96
+ heading.textContent = title;
97
+ section.appendChild(heading);
98
+ for (const row of rows) {
99
+ section.appendChild(renderRow(row));
100
+ }
101
+ return section;
102
+ }
103
+
104
+ function renderRow(row) {
105
+ const item = document.createElement("div");
106
+ item.className = "history-session-item history-session-" + row.kind;
107
+
108
+ const badge = BADGE[row.kind] ?? BADGE.past;
109
+ const when = formatTimestamp(row.lastActivity);
110
+ const preview = row.preview
111
+ ? escHtml(row.preview) + (row.preview.length >= 80 ? "" : "")
112
+ : '<em style="opacity:0.5">No messages</em>';
113
+
114
+ // Current-session footer is informational — no buttons needed.
115
+ const footerHtml =
116
+ row.kind === "current"
117
+ ? `<div class="history-session-current-note">◉ You're chatting in this session right now</div>`
118
+ : `<footer class="history-session-actions">
119
+ ${row.canLoad ? `<button class="history-load-btn">Load Session</button>` : ""}
120
+ ${row.canDelete ? `<button class="history-delete-btn">Delete</button>` : ""}
121
+ </footer>`;
122
+
123
+ item.innerHTML = `
124
+ <header class="history-session-header">
125
+ <button class="history-fav-btn ${row.favorited ? "active" : ""}"
126
+ aria-pressed="${row.favorited ? "true" : "false"}"
127
+ aria-label="${row.favorited ? "Unfavourite" : "Favourite"} session"
128
+ title="${row.favorited ? "Unfavourite" : "Favourite"}">★</button>
129
+ <span class="history-session-badge ${badge.className}">${badge.label}</span>
130
+ <span class="history-session-date">${escHtml(when)}</span>
131
+ </header>
132
+ <div class="history-session-meta">
133
+ <span class="history-session-count">${row.msgCount} msgs · ${fmtSize(row.size)}</span>
134
+ </div>
135
+ <div class="history-session-preview">${preview}</div>
136
+ ${footerHtml}
137
+ `;
138
+
139
+ // Body-click behaviour varies by kind:
140
+ // - CURRENT: close the drawer (user is already viewing this session
141
+ // in the main feed — no point opening a transcript preview).
142
+ // - PAST / ARCHIVED: open the transcript viewer.
143
+ item.addEventListener("click", (e) => {
144
+ const target = e.target;
145
+ if (target instanceof Element && target.closest("button")) {
146
+ return; // button click handled below
105
147
  }
148
+ if (row.kind === "current") {
149
+ closeDrawer();
150
+ return;
151
+ }
152
+ void loadTranscript(row.file, when);
153
+ });
154
+
155
+ const favBtn = item.querySelector(".history-fav-btn");
156
+ favBtn?.addEventListener("click", async (e) => {
157
+ e.stopPropagation();
158
+ await toggleFavorite(row, favBtn);
159
+ });
160
+
161
+ const loadBtn = item.querySelector(".history-load-btn");
162
+ loadBtn?.addEventListener("click", async (e) => {
163
+ e.stopPropagation();
164
+ await loadRow(row);
165
+ });
166
+
167
+ const deleteBtn = item.querySelector(".history-delete-btn");
168
+ if (deleteBtn instanceof HTMLButtonElement) {
169
+ wireTwoStageDelete(deleteBtn, () => deleteRow(row));
170
+ }
171
+
172
+ return item;
173
+ }
174
+
175
+ const BADGE = {
176
+ current: { label: "CURRENT", className: "badge-current" },
177
+ past: { label: "PAST", className: "badge-past" },
178
+ archived: { label: "ARCHIVED", className: "badge-archived" },
179
+ };
180
+
181
+ // ── Actions ───────────────────────────────────────────────────────────
106
182
 
107
- drawerBody.appendChild(item);
183
+ async function toggleFavorite(row, favBtn) {
184
+ if (!window.gateway?.connected) {
185
+ return;
186
+ }
187
+ const next = !row.favorited;
188
+ try {
189
+ await window.gateway.rpc("sessions.favoriteFile", {
190
+ file: row.file,
191
+ favorited: next,
192
+ });
193
+ row.favorited = next;
194
+ favBtn.classList.toggle("active", next);
195
+ favBtn.setAttribute("aria-pressed", next ? "true" : "false");
196
+ // Re-render to move the row between FAVOURITES and RECENT sections.
197
+ void loadSessionList();
198
+ } catch (err) {
199
+ console.warn("[history] favorite toggle failed", err);
108
200
  }
109
201
  }
110
202
 
203
+ async function loadRow(row) {
204
+ if (!window.gateway?.connected) {
205
+ alert("Gateway not connected.");
206
+ return;
207
+ }
208
+ drawerBody.innerHTML = '<div class="history-loading">Loading session…</div>';
209
+ try {
210
+ await window.gateway.rpc("sessions.adoptFile", {
211
+ key: window.SESSION_KEY,
212
+ targetFile: row.file,
213
+ });
214
+ closeDrawer();
215
+ if (typeof window.reloadSession === "function") {
216
+ window.reloadSession();
217
+ }
218
+ } catch (err) {
219
+ drawerBody.innerHTML =
220
+ '<div class="history-empty">Load failed: ' +
221
+ escHtml(err?.message ?? String(err)) +
222
+ "</div>";
223
+ }
224
+ }
225
+
226
+ async function deleteRow(row) {
227
+ if (!window.gateway?.connected) {
228
+ return;
229
+ }
230
+ try {
231
+ if (row.kind === "past" && row.sessionKey) {
232
+ // Archives the transcript via `sessions.delete` — the file becomes
233
+ // an ARCHIVED row in the next list refresh. Reversible.
234
+ await window.gateway.rpc("sessions.delete", {
235
+ key: row.sessionKey,
236
+ deleteTranscript: true,
237
+ });
238
+ } else {
239
+ // Archived files (or orphan live files): permanent deletion.
240
+ await window.gateway.rpc("sessions.deleteFile", { file: row.file });
241
+ }
242
+ await loadSessionList();
243
+ } catch (err) {
244
+ console.warn("[history] delete failed", err);
245
+ alert("Delete failed: " + (err?.message ?? String(err)));
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Wire a Delete button as a two-stage confirm. First click arms it with
251
+ * "Really delete?" for DELETE_CONFIRM_MS; second click within the window
252
+ * runs the action. Auto-reverts if the user walks away.
253
+ */
254
+ function wireTwoStageDelete(btn, run) {
255
+ let armed = false;
256
+ let armTimer = null;
257
+ const originalLabel = btn.textContent;
258
+ btn.addEventListener("click", (e) => {
259
+ e.stopPropagation();
260
+ if (!armed) {
261
+ armed = true;
262
+ btn.textContent = "Really delete?";
263
+ btn.classList.add("armed");
264
+ if (armTimer) {
265
+ clearTimeout(armTimer);
266
+ }
267
+ armTimer = setTimeout(() => {
268
+ armed = false;
269
+ btn.textContent = originalLabel;
270
+ btn.classList.remove("armed");
271
+ }, DELETE_CONFIRM_MS);
272
+ return;
273
+ }
274
+ clearTimeout(armTimer);
275
+ armed = false;
276
+ btn.disabled = true;
277
+ btn.textContent = "Deleting…";
278
+ btn.classList.remove("armed");
279
+ void run();
280
+ });
281
+ }
282
+
111
283
  // ── Transcript viewer ─────────────────────────────────────────────────
112
284
  async function loadTranscript(file, label) {
113
285
  __viewingFile = file;
@@ -125,7 +297,6 @@
125
297
 
126
298
  drawerBody.innerHTML = "";
127
299
 
128
- // Banner
129
300
  const banner = document.createElement("div");
130
301
  banner.className = "archive-banner";
131
302
  banner.innerHTML = `
@@ -135,7 +306,6 @@
135
306
  drawerBody.appendChild(banner);
136
307
  drawerBody.querySelector("#archive-back-btn").addEventListener("click", loadSessionList);
137
308
 
138
- // Messages container
139
309
  const container = document.createElement("div");
140
310
  container.className = "history-transcript";
141
311
 
@@ -146,13 +316,11 @@
146
316
  for (const msg of relevant) {
147
317
  const el = document.createElement("div");
148
318
  el.className = `history-msg ${msg.role}`;
149
-
150
319
  const roleLabel = msg.role === "user" ? "YOU" : "SYMI";
151
320
  const text = extractMsgText(msg);
152
321
  if (!text.trim()) {
153
322
  continue;
154
323
  }
155
-
156
324
  el.innerHTML = `
157
325
  <div class="history-msg-role ${msg.role}">${roleLabel}</div>
158
326
  <div class="history-msg-text">${escHtml(text)}</div>
@@ -178,31 +346,6 @@
178
346
  openDrawer();
179
347
  });
180
348
 
181
- // ── Session restore ────────────────────────────────────────────────────
182
- async function restoreSession(file) {
183
- if (!window.gateway?.connected) {
184
- alert("Gateway not connected.");
185
- return;
186
- }
187
-
188
- drawerBody.innerHTML = '<div class="history-loading">Restoring session…</div>';
189
-
190
- try {
191
- await window.gateway.rpc("sessions.restore", {
192
- key: window.SESSION_KEY,
193
- targetFile: file,
194
- });
195
-
196
- // Close drawer and reload the chat with the restored session
197
- closeDrawer();
198
- if (typeof window.reloadSession === "function") {
199
- window.reloadSession();
200
- }
201
- } catch (err) {
202
- drawerBody.innerHTML = `<div class="history-empty">Restore failed: ${escHtml(err.message)}</div>`;
203
- }
204
- }
205
-
206
349
  // ── Helpers ───────────────────────────────────────────────────────────
207
350
  function extractMsgText(msg) {
208
351
  if (typeof msg.content === "string") {
@@ -227,22 +370,27 @@
227
370
  }
228
371
 
229
372
  function formatTimestamp(iso) {
230
- try {
231
- const d = new Date(iso);
232
- return d.toLocaleString("en-US", {
233
- month: "short",
234
- day: "numeric",
235
- year: "numeric",
236
- hour: "2-digit",
237
- minute: "2-digit",
238
- hour12: true,
239
- });
240
- } catch {
241
- return iso;
373
+ if (!iso) {
374
+ return "Unknown";
242
375
  }
376
+ const d = new Date(iso);
377
+ if (Number.isNaN(d.getTime())) {
378
+ return "Unknown";
379
+ }
380
+ return d.toLocaleString("en-US", {
381
+ month: "short",
382
+ day: "numeric",
383
+ year: "numeric",
384
+ hour: "2-digit",
385
+ minute: "2-digit",
386
+ hour12: true,
387
+ });
243
388
  }
244
389
 
245
390
  function fmtSize(bytes) {
391
+ if (typeof bytes !== "number" || !Number.isFinite(bytes) || bytes < 0) {
392
+ return "0B";
393
+ }
246
394
  if (bytes < 1024) {
247
395
  return `${bytes}B`;
248
396
  }
@@ -1,4 +1,4 @@
1
- import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-MF6_6SCS.js";
1
+ import { n as resolveSymiPackageRootSync, t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
2
2
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { fileURLToPath } from "node:url";