wednesdayai 0.4.12-dev.1174 → 0.4.12-dev.1175

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 (425) hide show
  1. package/dist/{agent-scope-ez_yCRWW.js → agent-scope-DaYoimRo.js} +2 -2
  2. package/dist/{agent-turn-enqueue-D1nv4YZT.js → agent-turn-enqueue-D3OacNZ7.js} +5 -5
  3. package/dist/{agent-turn-enqueue-CGR6KnRF.js → agent-turn-enqueue-DlijraxI.js} +5 -5
  4. package/dist/{agent-turn-execute-DG-XBEzo.js → agent-turn-execute-D9y1nb9j.js} +25 -25
  5. package/dist/{agent-turn-recovery-adapter-BmYuc2HR.js → agent-turn-recovery-adapter-C1sYrukh.js} +1 -1
  6. package/dist/{agent-turn-recovery-adapter-CWfaZiYO.js → agent-turn-recovery-adapter-CRwMOJ0y.js} +1 -1
  7. package/dist/{agent-turn-runner-9UOoR8nB.js → agent-turn-runner-BkvAWgm5.js} +1 -1
  8. package/dist/{agent-turn-runner-B7l__Cn7.js → agent-turn-runner-CZilDjoa.js} +4 -4
  9. package/dist/{agent-turn-runner-BCA-hN8_.js → agent-turn-runner-D17nO0vK.js} +6 -6
  10. package/dist/{agent-turn-runner-DYpDj75r.js → agent-turn-runner-R4hdi0oG.js} +1 -1
  11. package/dist/{agents-CeISpt9i.js → agents-DUg4W-SG.js} +4 -4
  12. package/dist/{agents.config-1rfTU-i6.js → agents.config-D3XyRezX.js} +1 -1
  13. package/dist/{agents.config-DoubFhjD.js → agents.config-Swbya-Pq.js} +1 -1
  14. package/dist/{api-key-rotation-BTtiZLSZ.js → api-key-rotation-CFBqEjJo.js} +2 -2
  15. package/dist/{audio-preflight-CX77fr7Q.js → audio-preflight-BG_idLWC.js} +7 -7
  16. package/dist/{audio-preflight-BrScMi8D.js → audio-preflight-CyoX7lif.js} +3 -3
  17. package/dist/{audio-preflight-N8z3s_Gh.js → audio-preflight-IAvClu-y.js} +27 -27
  18. package/dist/{audio-preflight-BFnhZTiN.js → audio-preflight-L_bozm5I.js} +7 -7
  19. package/dist/{audio-transcription-runner-CXFOJH46.js → audio-transcription-runner-6owLZL6w.js} +1 -1
  20. package/dist/{audio-transcription-runner-CMZ73qnQ.js → audio-transcription-runner-BZ0WMm-A.js} +1 -1
  21. package/dist/{audio-transcription-runner-Dge9gicn.js → audio-transcription-runner-DO37G4ea.js} +12 -12
  22. package/dist/{audio-transcription-runner-CjXlkLIZ.js → audio-transcription-runner-bFGf0wS2.js} +1 -1
  23. package/dist/{audit-DX4_NbKs.js → audit-DFnuH0dg.js} +3 -3
  24. package/dist/{audit-D9fNwx9g.js → audit-DalWx_VS.js} +3 -3
  25. package/dist/{auth-choice-D0-qF7g3.js → auth-choice-Fycq8-Jh.js} +1 -1
  26. package/dist/{auth-choice-CMGPsiAV.js → auth-choice-mbH2rH0a.js} +1 -1
  27. package/dist/{banner-Ce8Alexq.js → banner-BL_UFbyh.js} +1 -1
  28. package/dist/build-info.json +3 -3
  29. package/dist/bundled/boot-md/handler.js +58 -58
  30. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  31. package/dist/bundled/command-logger/handler.js +1 -1
  32. package/dist/bundled/session-journal/handler.js +58 -58
  33. package/dist/bundled/session-memory/handler.js +58 -58
  34. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  35. package/dist/{channel-activity-B_m-yRgD.js → channel-activity-osbmoIZV.js} +3 -3
  36. package/dist/{channel-options-D2zssWbx.js → channel-options-BJeMNZ2z.js} +1 -1
  37. package/dist/{channel-options-BL4-_Nb6.js → channel-options-PGV2u3V8.js} +1 -1
  38. package/dist/{channels-cli-WyPIpdB3.js → channels-cli-B9GKYvOB.js} +23 -23
  39. package/dist/{channels-cli-92tVTFkA.js → channels-cli-D3UU8fh7.js} +23 -23
  40. package/dist/{chat-content-NmNmcdgz.js → chat-content-D9t717tu.js} +15 -15
  41. package/dist/{plugin-sdk/chrome-6h5M_drY.js → chrome-Cb_eHwXe.js} +6 -6
  42. package/dist/{chunk-D4RJ_uMT.js → chunk-BGAIfwvG.js} +3 -3
  43. package/dist/{cli-UrpPMNLJ.js → cli-7ScLvN1y.js} +19 -19
  44. package/dist/{cli-BvsRRobB.js → cli-BE5Lpp_L.js} +19 -19
  45. package/dist/{command-queue-BjD14OVw.js → command-queue-BliAnsWZ.js} +1 -1
  46. package/dist/{command-queue-Udie2QZL.js → command-queue-Blj57uZh.js} +1 -1
  47. package/dist/{command-queue-BaBGQ6Tk.js → command-queue-BruTLOuq.js} +1 -1
  48. package/dist/{command-queue-19xosMJv.js → command-queue-arMRWvX5.js} +1 -1
  49. package/dist/{command-registry-CL4p9rtn.js → command-registry-BrjTTVbD.js} +9 -9
  50. package/dist/{commands-registry-Db991DqO.js → commands-registry-CHyanyMK.js} +2 -2
  51. package/dist/{completion-cli-CkO04yTw.js → completion-cli-DtYdt-iy.js} +2 -2
  52. package/dist/{completion-cli-BqDaTiFn.js → completion-cli-ieBlszFx.js} +1 -1
  53. package/dist/{config-cli-BEVbYqLv.js → config-cli-CIV8QVm5.js} +1 -1
  54. package/dist/{config-cli-D71FhE4k.js → config-cli-Cvn6fRPi.js} +1 -1
  55. package/dist/{configure-Dp1JprEc.js → configure-BnhcZRaY.js} +3 -3
  56. package/dist/{configure-c_Lnp1Uq.js → configure-DgjBIUlf.js} +3 -3
  57. package/dist/contracts/fixtures/exec-allowlist-glob-parity.json +1900 -0
  58. package/dist/contracts/fixtures/exec-allowlist-shell-parser-parity.json +82 -0
  59. package/dist/contracts/fixtures/exec-wrapper-resolution-parity.json +39 -0
  60. package/dist/contracts/fixtures/system-run-approval-binding-contract.json +115 -0
  61. package/dist/contracts/fixtures/system-run-approval-mismatch-contract.json +67 -0
  62. package/dist/contracts/fixtures/system-run-command-contract.json +75 -0
  63. package/dist/contracts/gateway-protocol.schema.json +11201 -0
  64. package/dist/contracts/host-env-security-policy.json +23 -0
  65. package/dist/contracts/tool-display.json +209 -0
  66. package/dist/control-ui/assets/{dreams-DyJGnA3V.js → dreams-BeGc2kwu.js} +2 -2
  67. package/dist/control-ui/assets/{dreams-DyJGnA3V.js.map → dreams-BeGc2kwu.js.map} +1 -1
  68. package/dist/control-ui/assets/{index-BWhuyic4.js → index-BksXaS0u.js} +4 -4
  69. package/dist/control-ui/assets/{index-BWhuyic4.js.map → index-BksXaS0u.js.map} +1 -1
  70. package/dist/control-ui/assets/{learning-gaEy5zTj.js → learning-BORaiTQ4.js} +2 -2
  71. package/dist/control-ui/assets/{learning-gaEy5zTj.js.map → learning-BORaiTQ4.js.map} +1 -1
  72. package/dist/control-ui/assets/{view-chat-DnpkK2I4.js → view-chat-ByDyhnLw.js} +3 -3
  73. package/dist/control-ui/assets/view-chat-ByDyhnLw.js.map +1 -0
  74. package/dist/control-ui/index.html +1 -1
  75. package/dist/{deliver-DAI1adKs.js → deliver-B1z53DPr.js} +15 -15
  76. package/dist/{deliver-fMeD54AN.js → deliver-B8pV5x4F.js} +1 -1
  77. package/dist/{deliver-vQgJXP3a.js → deliver-Bsa8j_b2.js} +1 -1
  78. package/dist/{diagnostic-DcoTwECF.js → diagnostic-C5HIkG1L.js} +1 -1
  79. package/dist/{diagnostic-BkeVFvxm.js → diagnostic-C6bNcgBl.js} +1 -1
  80. package/dist/{diagnostic-C_RvUjQr.js → diagnostic-DHSjiKQ1.js} +5 -5
  81. package/dist/{diagnostic-BrdaDAl1.js → diagnostic-f8CKHXWb.js} +1 -1
  82. package/dist/{dm-policy-shared-mzjs7x7B.js → dm-policy-shared-BPje-Gef.js} +1 -1
  83. package/dist/{doctor-completion-D_S3gRPw.js → doctor-completion-CDYnb5Li.js} +1 -1
  84. package/dist/{doctor-completion-C7v-vtOs.js → doctor-completion-D8S1Gcv_.js} +1 -1
  85. package/dist/entry.js +2 -2
  86. package/dist/{plugin-sdk/errors-CJaXhYu_.js → errors-CCOle-CH.js} +1 -1
  87. package/dist/extensionAPI.js +9 -9
  88. package/dist/{fetch-tnHh82H6.js → fetch-CJta9EH3.js} +7 -7
  89. package/dist/{fetch-guard-dN5KnF8S.js → fetch-guard-CnaMeBGo.js} +3 -3
  90. package/dist/{frontmatter-Cw_6jMAR.js → frontmatter-DlRD-Jnx.js} +3 -3
  91. package/dist/{fs-safe-BK5ALzKD.js → fs-safe-DpdLT3fB.js} +3 -3
  92. package/dist/{gateway-cli-Dxb4Gwqw.js → gateway-cli-Czm__nCw.js} +36 -36
  93. package/dist/{gateway-cli-ChAJ5p3l.js → gateway-cli-DFkGKHPz.js} +36 -36
  94. package/dist/{health-CBvZJPs-.js → health-C4nj3qDh.js} +2 -2
  95. package/dist/{health-CZOplUoN.js → health-CsmwdVjS.js} +2 -2
  96. package/dist/{hooks-cli-bOAZo5-T.js → hooks-cli-BxKP7DWo.js} +20 -20
  97. package/dist/{hooks-cli-JNEqk2N5.js → hooks-cli-CBA8b6Jx.js} +20 -20
  98. package/dist/{image-ops-CuPvFH5f.js → image-ops-YU6OONEl.js} +1 -1
  99. package/dist/index.js +23 -23
  100. package/dist/{ir-DOH31kN0.js → ir-BdHn6F6Y.js} +5 -5
  101. package/dist/{legacy-names-CghFcfry.js → legacy-names-me5dD9PP.js} +1 -1
  102. package/dist/llm-slug-generator.js +58 -58
  103. package/dist/{logger-J4xjy-6D.js → logger-BrQxLcMY.js} +1 -1
  104. package/dist/{manager-CIZ0QuW4.js → manager-CZtmiXmJ.js} +1 -1
  105. package/dist/{manager-C11jMqdP.js → manager-DHjF2k7q.js} +1 -1
  106. package/dist/{manager-IxqSjOcT.js → manager-xwMosvyt.js} +7 -7
  107. package/dist/{markdown-tables-DEH9aHSk.js → markdown-tables-BVgH365V.js} +2 -2
  108. package/dist/{model-selection-B6rLSrkD.js → model-selection-CYypdqr8.js} +8 -8
  109. package/dist/{models-BZTi0-Av.js → models-C11KMgT3.js} +1 -1
  110. package/dist/{models-cli-C6pcyGP0.js → models-cli-CS5xlygz.js} +19 -19
  111. package/dist/{models-cli-CHJdg1GH.js → models-cli-CgzMzfqd.js} +20 -20
  112. package/dist/{models-config-Df_i5tBU.js → models-config-D7vsT5RL.js} +2 -2
  113. package/dist/{node-cli-B1KRe4Re.js → node-cli-BBPVlqRt.js} +3 -3
  114. package/dist/{node-cli-B4wiZvXi.js → node-cli-COviNlfz.js} +3 -3
  115. package/dist/{npm-resolution-BeDz0VXP.js → npm-resolution-BAWPPxLj.js} +1 -1
  116. package/dist/{npm-resolution-CRPU_qG0.js → npm-resolution-DL9wKF5C.js} +1 -1
  117. package/dist/{onboard-D7q9o-kX.js → onboard-Cdnr5pbQ.js} +2 -2
  118. package/dist/{onboard-GbkABVzs.js → onboard-CzGG7bBK.js} +2 -2
  119. package/dist/{onboard-channels-4euYqK_2.js → onboard-channels-DmtDypI4.js} +1 -1
  120. package/dist/{onboard-channels-CBMg79WQ.js → onboard-channels-WOq5lCir.js} +1 -1
  121. package/dist/{onboarding-B6S8wiFp.js → onboarding-Cbrb9jSx.js} +3 -3
  122. package/dist/{onboarding-njkAuIOt.js → onboarding-CbwGAlGd.js} +3 -3
  123. package/dist/{onboarding.finalize-BXrmNNec.js → onboarding.finalize-B6I_Y9qX.js} +25 -25
  124. package/dist/{onboarding.finalize-7ydpZuiQ.js → onboarding.finalize-CJ3dB3I0.js} +24 -24
  125. package/dist/{operator-commands-CXUDftkm.js → operator-commands-C4Gcuhg-.js} +2 -2
  126. package/dist/{operator-commands-AI_6qsLV.js → operator-commands-CngQsW9K.js} +2 -2
  127. package/dist/{outbound-attachment-DrRWLp4N.js → outbound-attachment-C_QOYkXN.js} +2 -2
  128. package/dist/{outbound-message-hooks-BOFfMSWB.js → outbound-message-hooks-BYTh0d2Q.js} +5 -5
  129. package/dist/{path-alias-guards-E9ntDORB.js → path-alias-guards-BdGLz9X0.js} +1 -1
  130. package/dist/{pi-embedded-DF56GWP4.js → pi-embedded-BtqsPDuE.js} +93 -93
  131. package/dist/{pi-embedded-Dq-8v_vv.js → pi-embedded-cc9FvjV6.js} +13 -13
  132. package/dist/{pi-embedded-helpers-DWuNGG5B.js → pi-embedded-helpers-CeARdxZ4.js} +1 -1
  133. package/dist/{pi-embedded-helpers-D3LTDPt-.js → pi-embedded-helpers-c6iwL0n8.js} +1 -1
  134. package/dist/{pi-embedded-recovery-adapter-C9mqXAE4.js → pi-embedded-recovery-adapter-DAAP7Ng_.js} +8 -8
  135. package/dist/{pi-embedded-recovery-adapter-Dre9XcLC.js → pi-embedded-recovery-adapter-DLjgUR_v.js} +8 -8
  136. package/dist/{pi-embedded-utils-D4NJagYx.js → pi-embedded-utils-BDLhcc6D.js} +2 -2
  137. package/dist/{pi-embedded-utils-DDN2WVHB.js → pi-embedded-utils-C-iiawNt.js} +774 -774
  138. package/dist/{pi-embedded-utils-C6H8K_cB.js → pi-embedded-utils-CRBOXmug.js} +2 -2
  139. package/dist/{pi-embedded-utils-PDR8tE9V.js → pi-embedded-utils-DKfjTsdf.js} +771 -771
  140. package/dist/{pi-model-discovery-Q3FR2RL1.js → pi-model-discovery-fTAJjO1L.js} +1 -1
  141. package/dist/{pi-tools.policy-BfrO_apc.js → pi-tools.policy-C9f_wjtC.js} +1 -1
  142. package/dist/{plugin-registry-DtnX7b5x.js → plugin-registry-BECIMVHq.js} +1 -1
  143. package/dist/{plugin-registry-CqCTO-kS.js → plugin-registry-CFC70oKP.js} +1 -1
  144. package/dist/plugin-sdk/{agent-scope-DwEowelt.js → agent-scope-CmUceI3o.js} +2 -2
  145. package/dist/plugin-sdk/agent-turn-execute-C_3Brt73.js +64 -0
  146. package/dist/plugin-sdk/{agent-turn-execute-CKVBhvuo.js → agent-turn-execute-onUUd_KD.js} +9 -9
  147. package/dist/plugin-sdk/{agent-turn-runner-axy9sTny.js → agent-turn-runner-C930JKZP.js} +7 -7
  148. package/dist/plugin-sdk/{agent-turn-runner-D2Xr338Q.js → agent-turn-runner-CEj9Tjm7.js} +1 -1
  149. package/dist/plugin-sdk/{agent-turn-runner-Bg8CXi4k.js → agent-turn-runner-DXlm3lec.js} +5 -5
  150. package/dist/plugin-sdk/{api-key-rotation-3YQyVYAQ.js → api-key-rotation-Blcbk26b.js} +2 -2
  151. package/dist/plugin-sdk/{audio-preflight-9SX0UOe_.js → audio-preflight-CuFzia3L.js} +24 -24
  152. package/dist/plugin-sdk/{audio-preflight-Cs6EigEw.js → audio-preflight-D9IYdErG.js} +1 -1
  153. package/dist/plugin-sdk/{audio-preflight-Bcrf-bW6.js → audio-preflight-vTFe6q-M.js} +4 -4
  154. package/dist/plugin-sdk/{audio-transcription-runner-CLADOHlh.js → audio-transcription-runner-DnMuGAf7.js} +12 -12
  155. package/dist/plugin-sdk/{audio-transcription-runner-B9MfMCVk.js → audio-transcription-runner-DyH5GOod.js} +1 -1
  156. package/dist/plugin-sdk/{auth-profiles-KcyRCyRL.js → auth-profiles-DvGaIYBp.js} +4 -4
  157. package/dist/plugin-sdk/{channel-activity-QWsFdGMF.js → channel-activity-BNntj0sz.js} +3 -3
  158. package/dist/{chrome-BfmRwZxF.js → plugin-sdk/chrome-DAcffzTv.js} +6 -6
  159. package/dist/plugin-sdk/{chunk-BPGs9hLM.js → chunk-CB29xLjR.js} +4 -4
  160. package/dist/plugin-sdk/{command-detection-_1QhGGDZ.js → command-detection-CjmqWw-8.js} +17 -17
  161. package/dist/plugin-sdk/{command-queue-CMyCOfkf.js → command-queue-7xFpkFB4.js} +1 -1
  162. package/dist/plugin-sdk/{command-queue-BeK7Bnsy.js → command-queue-Bqd6dM-B.js} +2 -2
  163. package/dist/plugin-sdk/{command-queue-CYztAHyV.js → command-queue-Dpyshmne.js} +2 -2
  164. package/dist/plugin-sdk/{commands-registry-B5q9mz7p.js → commands-registry-BZTehR7c.js} +3 -3
  165. package/dist/plugin-sdk/{deliver-C9GFYFwr.js → deliver-BmSCC8Nm.js} +14 -14
  166. package/dist/plugin-sdk/deliver-CnjfNTO5.js +35 -0
  167. package/dist/plugin-sdk/{diagnostic-Bm0F_zC6.js → diagnostic-BcenGjZ8.js} +7 -7
  168. package/dist/plugin-sdk/{diagnostic-CBMpEaKc.js → diagnostic-CZpVJpZB.js} +1 -1
  169. package/dist/plugin-sdk/{diagnostic-DVSBbYft.js → diagnostic-CdCSstlW.js} +1 -1
  170. package/dist/plugin-sdk/{diagnostic-session-state-Cg64nmPa.js → diagnostic-session-state-dyqcrTJE.js} +1 -1
  171. package/dist/{errors-uYqFFTaE.js → plugin-sdk/errors-EN4sbefW.js} +1 -1
  172. package/dist/plugin-sdk/{fetch-CmfHUeho.js → fetch-DDl2SO8L.js} +7 -7
  173. package/dist/plugin-sdk/{fetch-CapPbb6b.js → fetch-DvjOi3Bg.js} +1 -1
  174. package/dist/plugin-sdk/{fetch-guard-DNDzAy-f.js → fetch-guard-BUwz-C-T.js} +4 -4
  175. package/dist/plugin-sdk/{fetch-timeout-CQvBE4GN.js → fetch-timeout-CDvdvjfF.js} +1 -1
  176. package/dist/plugin-sdk/{fs-safe-B5q3Ro0t.js → fs-safe-BhD_zSpP.js} +3 -3
  177. package/dist/plugin-sdk/{image-ops-lNv6k6vi.js → image-ops-oGMLXQr2.js} +1 -1
  178. package/dist/plugin-sdk/{inbound-context-DlgSXWxE.js → inbound-context-CDZUuUm4.js} +1 -1
  179. package/dist/plugin-sdk/index.js +10 -10
  180. package/dist/plugin-sdk/{ir-CIRTCy8w.js → ir-C_MOC-vU.js} +5 -5
  181. package/dist/plugin-sdk/{logger-DyKgSZpY.js → logger-D3WPxGxp.js} +1 -1
  182. package/dist/plugin-sdk/{manager-DezDkdCy.js → manager-Bs-09War.js} +7 -7
  183. package/dist/plugin-sdk/manager-xQmOf1Pz.js +16 -0
  184. package/dist/plugin-sdk/{markdown-tables-C17EKYDj.js → markdown-tables-RlKAskrC.js} +3 -3
  185. package/dist/plugin-sdk/{models-config-bevplTXy.js → models-config-wfxyfUFC.js} +2 -2
  186. package/dist/plugin-sdk/{outbound-attachment-BTZBl0BQ.js → outbound-attachment-CQUbh_6X.js} +2 -2
  187. package/dist/plugin-sdk/{outbound-message-hooks-BiHoftNO.js → outbound-message-hooks-CoMngdyX.js} +4 -4
  188. package/dist/plugin-sdk/{path-alias-guards-BCIRwyTT.js → path-alias-guards-DXmARbM6.js} +1 -1
  189. package/dist/plugin-sdk/{pi-embedded-helpers-D5vYvfne.js → pi-embedded-helpers-XjTbpDko.js} +13 -13
  190. package/dist/plugin-sdk/{pi-embedded-utils-BIgpx_Sh.js → pi-embedded-utils-BrlKlUXp.js} +774 -774
  191. package/dist/plugin-sdk/{pi-embedded-utils-e-q8-JFO.js → pi-embedded-utils-_riPl28d.js} +771 -771
  192. package/dist/plugin-sdk/{pi-model-discovery-BauIBkM-.js → pi-model-discovery-BgyO4v3b.js} +2 -2
  193. package/dist/plugin-sdk/provider-dispatcher-jGfaQgV0.js +64 -0
  194. package/dist/plugin-sdk/{provider-dispatcher-8XbARSbn.js → provider-dispatcher-vpQA65Tf.js} +9 -9
  195. package/dist/plugin-sdk/provider-image-BAbdpevG.js +25 -0
  196. package/dist/plugin-sdk/{provider-image-84Twf1oC.js → provider-image-BkyM8Zjc.js} +2 -2
  197. package/dist/plugin-sdk/{provider-image-CGUNh9dU.js → provider-image-D14lkjIZ.js} +6 -6
  198. package/dist/plugin-sdk/{provider-image-DbhnBOnk.js → provider-image-DogfVTJ8.js} +1 -1
  199. package/dist/plugin-sdk/provider-media-understanding.js +635 -635
  200. package/dist/plugin-sdk/{proxy-We8Qk8es.js → proxy-DE-LalZN.js} +2 -2
  201. package/dist/plugin-sdk/{proxy-env-DazXaKjU.js → proxy-env-Ba9DYbzf.js} +1 -1
  202. package/dist/{proxy-fetch-g109vqdt.js → plugin-sdk/proxy-fetch-COwQOlkE.js} +1 -1
  203. package/dist/plugin-sdk/{pw-ai-DMALp-EA.js → pw-ai-DcuiP3bX.js} +10 -10
  204. package/dist/plugin-sdk/{qmd-manager-CeD3efQC.js → qmd-manager-JFgckZ9C.js} +8 -8
  205. package/dist/plugin-sdk/{query-expansion-DNxL2kIG.js → query-expansion-BMOkTgUN.js} +2 -2
  206. package/dist/plugin-sdk/{recorder-aLKvue8c.js → recorder-B6DJORsj.js} +2 -2
  207. package/dist/{redact-BuV55JkU.js → plugin-sdk/redact-DHoeX993.js} +1 -1
  208. package/dist/plugin-sdk/{registry-CNxKf-6l.js → registry-D46Eo_gR.js} +6 -6
  209. package/dist/plugin-sdk/replies-CxnVssGn.js +27 -0
  210. package/dist/plugin-sdk/{replies-Bn2KjHze.js → replies-SaiHUB2a.js} +5 -5
  211. package/dist/plugin-sdk/{reply-directives-Dhb6LX3H.js → reply-directives-CzL86-wn.js} +2 -2
  212. package/dist/plugin-sdk/{reply-prefix-Dtmltov4.js → reply-prefix-Dq2Dc3lQ.js} +2 -2
  213. package/dist/plugin-sdk/{resolve-route-Da2G3VJp.js → resolve-route-C76hE7K6.js} +5 -5
  214. package/dist/plugin-sdk/{runs-QDbpaInY.js → runs-C_S0Rg2x.js} +2 -2
  215. package/dist/plugin-sdk/{runs-CKGX5Ci-.js → runs-DVgO4heP.js} +3 -3
  216. package/dist/plugin-sdk/{runs-BUqaDFBv.js → runs-dzOkVO1r.js} +9 -9
  217. package/dist/plugin-sdk/runs-hhkT-Pu0.js +27 -0
  218. package/dist/plugin-sdk/send-75sbzivz.js +25 -0
  219. package/dist/plugin-sdk/{send-Cvfh_nG7.js → send-B7zV4PSu.js} +1 -1
  220. package/dist/plugin-sdk/{send-Db5LNxYs.js → send-BI5IMfB5.js} +6 -6
  221. package/dist/plugin-sdk/{send-BVzWcBy5.js → send-C7OqiGNp.js} +9 -9
  222. package/dist/plugin-sdk/{send-B1ypiz3E.js → send-COZJjnPC.js} +8 -8
  223. package/dist/plugin-sdk/{send-B_I3QAOo.js → send-Cp0gA4Zx.js} +2 -2
  224. package/dist/plugin-sdk/send-DCoWZ-wD.js +24 -0
  225. package/dist/plugin-sdk/{send-DFhnhE3E.js → send-DaE7rS6w.js} +15 -15
  226. package/dist/plugin-sdk/send-DoSJiyl0.js +28 -0
  227. package/dist/plugin-sdk/{send-DsyNNw-J.js → send-DoeYN0mC.js} +7 -7
  228. package/dist/plugin-sdk/send-eyv7E0iM.js +23 -0
  229. package/dist/plugin-sdk/{send-BK4rIfoM.js → send-ylWqbS33.js} +20 -20
  230. package/dist/plugin-sdk/{session-meta-BboAJH-H.js → session-meta-hJUj4uSt.js} +2 -2
  231. package/dist/plugin-sdk/{sessions-CFMEF10g.js → sessions-BjzSL3zz.js} +4 -4
  232. package/dist/plugin-sdk/{skill-commands-CUnQmtx_.js → skill-commands-BL6wIWPZ.js} +5 -5
  233. package/dist/plugin-sdk/{skills-CmNwG5iX.js → skills-C-DXtUSu.js} +6 -6
  234. package/dist/plugin-sdk/src/compat/legacy-names.d.ts +0 -2
  235. package/dist/plugin-sdk/{store-BEgp7Nmc.js → store-BoQjejeB.js} +2 -2
  236. package/dist/plugin-sdk/{subagent-registry-CA10R0tL.js → subagent-registry-CXLib8ms.js} +9 -9
  237. package/dist/plugin-sdk/subagent-registry-DuwmHKYB.js +64 -0
  238. package/dist/plugin-sdk/{subsystem-C4zZI3bH.js → subsystem-P3MeMKnQ.js} +4 -4
  239. package/dist/plugin-sdk/{tables-3_j0k1TJ.js → tables-C_tnkpn8.js} +1 -1
  240. package/dist/plugin-sdk/testing.js +57 -57
  241. package/dist/plugin-sdk/{tokens-C7h_latl.js → tokens-CaPkWfh4.js} +1 -1
  242. package/dist/plugin-sdk/{tool-loop-detection-D71m0Vho.js → tool-loop-detection-Cl-kndb5.js} +1 -1
  243. package/dist/plugin-sdk/{tools-luXJzZk9.js → tools-Dm2qtHJb.js} +103 -103
  244. package/dist/plugin-sdk/{user-run-recording-WSU2BYNz.js → user-run-recording-DDem6310.js} +3 -3
  245. package/dist/{plugins-cli-D_NyzZW9.js → plugins-cli-CHAMuJiy.js} +20 -20
  246. package/dist/{plugins-cli-Dxbk35Pf.js → plugins-cli-uLyWiyfa.js} +20 -20
  247. package/dist/{program-HEyVqD3B.js → program-DocIX_WP.js} +25 -25
  248. package/dist/{program-context-B3a2W_At.js → program-context-ghNGm6SO.js} +22 -22
  249. package/dist/{prompt-select-styled-ppIYbe0d.js → prompt-select-styled-CVA15SCA.js} +7 -7
  250. package/dist/{prompt-select-styled-DxJ_77zX.js → prompt-select-styled-Jj__DnBz.js} +7 -7
  251. package/dist/{provider-image-D2hzUTN-.js → provider-image-BZgdxPq1.js} +1 -1
  252. package/dist/{provider-image-W-EYGKal.js → provider-image-CO8Im1dF.js} +1 -1
  253. package/dist/{provider-image-BQo_C53r.js → provider-image-DEcMOAkN.js} +6 -6
  254. package/dist/{provider-image-C5oNU-mN.js → provider-image-DHrkLyp5.js} +1 -1
  255. package/dist/{proxy-CrSpy5Aw.js → proxy-DaAwoyLn.js} +1 -1
  256. package/dist/{proxy-env-CkmgXJsh.js → proxy-env-DbK61KfJ.js} +1 -1
  257. package/dist/{plugin-sdk/proxy-fetch-BU0BahZR.js → proxy-fetch-DfICXirF.js} +1 -1
  258. package/dist/{push-apns-0_fkHAov.js → push-apns-DqtlZlll.js} +2 -2
  259. package/dist/{push-apns-Q_O_wdrq.js → push-apns-yvl7zEo_.js} +2 -2
  260. package/dist/{pw-ai-BPQOM9d3.js → pw-ai-BPTONp50.js} +12 -12
  261. package/dist/{pw-ai-g0HGDwyD.js → pw-ai-C882FHgv.js} +1 -1
  262. package/dist/{pw-ai-CQb0ItA6.js → pw-ai-CMCRUmcp.js} +1 -1
  263. package/dist/{qmd-manager-DSh3OKQh.js → qmd-manager-BwE9yS9R.js} +10 -10
  264. package/dist/{query-expansion-DRXSu_5k.js → query-expansion-D98bVcfg.js} +2 -2
  265. package/dist/{recorder-B2sCWV53.js → recorder-DsunFllM.js} +2 -2
  266. package/dist/{recovery-adapter-DSbvfwKK.js → recovery-adapter-B-DNoAV7.js} +2 -2
  267. package/dist/{recovery-adapter-DzYVoKTi.js → recovery-adapter-BdkQZ5xP.js} +1 -1
  268. package/dist/{recovery-adapter-D2B0pdqt.js → recovery-adapter-Cw1aphPL.js} +1 -1
  269. package/dist/{recovery-adapter-Dbqn5-Ld.js → recovery-adapter-b0A2gCDb.js} +2 -2
  270. package/dist/{plugin-sdk/redact-D8RbIpnX.js → redact-CO0RqVMz.js} +1 -1
  271. package/dist/{register.agent-Dvyk092H.js → register.agent-BCtQaeAD.js} +23 -23
  272. package/dist/{register.agent-CIkPzPIt.js → register.agent-DiJrH1EW.js} +22 -22
  273. package/dist/{register.configure-VjupqY_R.js → register.configure-CKJuc-FW.js} +23 -23
  274. package/dist/{register.configure-Dxh-ApMg.js → register.configure-CnYaSpsS.js} +23 -23
  275. package/dist/{register.maintenance-C1KbQnjw.js → register.maintenance-BKzga0qj.js} +25 -25
  276. package/dist/{register.maintenance-C1FvEYFo.js → register.maintenance-DEvh6R2o.js} +26 -26
  277. package/dist/{register.message-DuawBdND.js → register.message-D8fkEFVf.js} +20 -20
  278. package/dist/{register.message-CjifjFu6.js → register.message-DGTEL1Tg.js} +20 -20
  279. package/dist/{register.onboard-CnJKqb2s.js → register.onboard-DO_YKp1H.js} +2 -2
  280. package/dist/{register.onboard-DfdNM6nf.js → register.onboard-s6AEVhmF.js} +2 -2
  281. package/dist/{register.setup-7alWtjkk.js → register.setup-CycXBQ5H.js} +2 -2
  282. package/dist/{register.setup-C260nghY.js → register.setup-RxsGp9kI.js} +2 -2
  283. package/dist/{register.status-health-sessions-Czz7gqp8.js → register.status-health-sessions-C28EqpUJ.js} +22 -22
  284. package/dist/{register.status-health-sessions-BIEvR55M.js → register.status-health-sessions-Dy5cWRyV.js} +22 -22
  285. package/dist/{register.subclis-DN08tV-5.js → register.subclis-DZTKquk1.js} +14 -14
  286. package/dist/{replies-BoFYf1NE.js → replies-pB9HCyld.js} +5 -5
  287. package/dist/{reply-1aF-zc2T.js → reply-BHMxE3FN.js} +25 -25
  288. package/dist/{reply-directives-n4Mln5AE.js → reply-directives-mulrKdb0.js} +2 -2
  289. package/dist/{reply-prefix-V5rU-Ogg.js → reply-prefix-JmOFNTVH.js} +1 -1
  290. package/dist/{resolve-route-BngsdZ6k.js → resolve-route-5h1UlQhK.js} +5 -5
  291. package/dist/{run-main-BsZAEVZ5.js → run-main-NacHjhY5.js} +32 -32
  292. package/dist/{runs-oIgi8P4h.js → runs-CYEm5TJX.js} +8 -8
  293. package/dist/{runs-C3-u7s1g.js → runs-D8DE3b2G.js} +3 -3
  294. package/dist/{runs-in5L_R4G.js → runs-DQRmuc7m.js} +3 -3
  295. package/dist/{runs-ofBpkveN.js → runs-Dar4NRlC.js} +2 -2
  296. package/dist/{sandbox-CcBc35AL.js → sandbox-DImUNfT6.js} +1 -1
  297. package/dist/{sandbox-3ud815rQ.js → sandbox-IQVarb3R.js} +1 -1
  298. package/dist/{sandbox-cli-CV303sXF.js → sandbox-cli-jux3JAUv.js} +2 -2
  299. package/dist/{sandbox-cli-y1YLmtIG.js → sandbox-cli-vK_IbZ7g.js} +2 -2
  300. package/dist/{security-cli-C5ohfdvr.js → security-cli-CgNKpzFC.js} +4 -4
  301. package/dist/{security-cli-D3yFlQil.js → security-cli-lO9CX8Q7.js} +4 -4
  302. package/dist/{send-DilOCNDN.js → send-Bcmcrt2M.js} +6 -6
  303. package/dist/{send-DdEIcwHx.js → send-CaxLshmb.js} +6 -6
  304. package/dist/{send-D2tQPHO7.js → send-LdGFidPd.js} +8 -8
  305. package/dist/{send-D-tKRd8o.js → send-Mi8tGyhy.js} +1 -1
  306. package/dist/{send-C97GBhca.js → send-i_w4A0N2.js} +7 -7
  307. package/dist/{send-DoQpIePE.js → send-mGol3d2c.js} +14 -14
  308. package/dist/{send-BEE1BnRA.js → send-sMH1V3Sw.js} +1 -1
  309. package/dist/{send-BOcxolws.js → send-tEYUiTsj.js} +1 -1
  310. package/dist/{server-Cr0QDgYg.js → server-Dh1QTQlN.js} +4 -4
  311. package/dist/{server-CbDmKru3.js → server-Dxfm7PDB.js} +4 -4
  312. package/dist/{server-context-x_Yc_cB-.js → server-context-BjhpRV63.js} +2 -2
  313. package/dist/{server-context-D3IMy5Rv.js → server-context-CZ63266A.js} +2 -2
  314. package/dist/{server-lifecycle-Dzud4-7r.js → server-lifecycle-AqEdJ1wp.js} +1 -1
  315. package/dist/{server-lifecycle-5fAZqcCy.js → server-lifecycle-DDZU3yQb.js} +1 -1
  316. package/dist/{server-node-events-BRy30ma1.js → server-node-events-A-ituIx7.js} +20 -20
  317. package/dist/{server-node-events-GH1Awj_Q.js → server-node-events-BS4V5O0S.js} +20 -20
  318. package/dist/{session-meta-BLOPTIxD.js → session-meta-CmQ6a7H5.js} +1 -1
  319. package/dist/{sessions-C5DXJtST.js → sessions-O_3lxXA0.js} +5 -5
  320. package/dist/{sessions-CEQobvUe.js → sessions-ZdGPevHF.js} +4 -4
  321. package/dist/{sessions-gabXodxw.js → sessions-hUEeaw8A.js} +6 -6
  322. package/dist/{skill-commands-ChNj_H99.js → skill-commands-XRDXSro6.js} +4 -4
  323. package/dist/{skills-CmbQ0fIv.js → skills-CXVcffYI.js} +6 -6
  324. package/dist/{status-C9t6NXa3.js → status-CwC6LEvw.js} +12 -12
  325. package/dist/{status-Cgv7sNQU.js → status-OoTZ_mew.js} +11 -11
  326. package/dist/{store-DG0uKhvC.js → store-CYs-lya8.js} +2 -2
  327. package/dist/{subsystem-BZy3aWdW.js → subsystem-Bv4j-uIg.js} +4 -4
  328. package/dist/{tables-DBO90jPO.js → tables-BbGV4Ys1.js} +1 -1
  329. package/dist/{task-pipeline-boot-D_Q-Z3Tk.js → task-pipeline-boot-DEe8WVFc.js} +20 -20
  330. package/dist/{task-pipeline-boot-BNJRr9SO.js → task-pipeline-boot-XjghdkEd.js} +20 -20
  331. package/dist/{task-runlog-retention-BPvb24QJ.js → task-runlog-retention-BKyctiVN.js} +2 -2
  332. package/dist/{task-runlog-retention-DrtczU4J.js → task-runlog-retention-Bv-px28-.js} +2 -2
  333. package/dist/{tokens-PMai9bNL.js → tokens-BdntrBR4.js} +1 -1
  334. package/dist/{tool-display-O8K8tb6x.js → tool-display-Be5WKjsE.js} +771 -771
  335. package/dist/{tool-display-Dk3JW0Ct.js → tool-display-DxbucAuJ.js} +771 -771
  336. package/dist/{tool-loop-detection-BqyMjpvr.js → tool-loop-detection-CdZfb_CR.js} +1 -1
  337. package/dist/{tui-CdAIxcTX.js → tui-BiGaEWBY.js} +2 -2
  338. package/dist/{tui-YI4hws2d.js → tui-Cu_G2qk6.js} +2 -2
  339. package/dist/{tui-cli-Dotp4yT2.js → tui-cli-Djttqsgd.js} +5 -5
  340. package/dist/{tui-cli-CNMgnji6.js → tui-cli-DzqGmVJQ.js} +5 -5
  341. package/dist/{update-cli-BONiUAKL.js → update-cli-7dDrlmba.js} +25 -25
  342. package/dist/{update-cli-ZC-mfH25.js → update-cli-BQGqU6zr.js} +26 -26
  343. package/dist/{update-runner-6S-MXY8y.js → update-runner-CRC7Pxtt.js} +1 -1
  344. package/dist/{update-runner-C4LHSUFx.js → update-runner-cWr2HWPJ.js} +1 -1
  345. package/dist/{user-run-recording-Ca_Bvent.js → user-run-recording-Dr98Mjnd.js} +2 -2
  346. package/dist/{validation-cli-DRizSViW.js → validation-cli-BDe3W7c8.js} +20 -20
  347. package/dist/{validation-cli-B6el9VI8.js → validation-cli-DeB3Uixv.js} +20 -20
  348. package/dist/{with-timeout-ak8zsXdP.js → with-timeout-CmaTPlEB.js} +2 -2
  349. package/dist/{with-timeout-CJdMNAfe.js → with-timeout-DX2PSy5q.js} +2 -2
  350. package/dist/{workspace-BDA8ECad.js → workspace-yHh5Lf7Z.js} +2 -2
  351. package/extensions/acpx/package.json +1 -1
  352. package/extensions/anthropic/package.json +1 -1
  353. package/extensions/bifrost/package.json +1 -1
  354. package/extensions/bluebubbles/package.json +1 -1
  355. package/extensions/copilot-proxy/package.json +1 -1
  356. package/extensions/deepgram/package.json +1 -1
  357. package/extensions/deepinfra/package.json +1 -1
  358. package/extensions/diagnostics-otel/package.json +1 -1
  359. package/extensions/diffs/package.json +1 -1
  360. package/extensions/discord/package.json +1 -1
  361. package/extensions/dream-cycle/package.json +1 -1
  362. package/extensions/elevenlabs/package.json +1 -1
  363. package/extensions/feishu/package.json +1 -1
  364. package/extensions/gemini-search/package.json +1 -1
  365. package/extensions/google/package.json +1 -1
  366. package/extensions/google-gemini-cli-auth/package.json +1 -1
  367. package/extensions/googlechat/package.json +1 -1
  368. package/extensions/grok-search/package.json +1 -1
  369. package/extensions/groq/package.json +1 -1
  370. package/extensions/imessage/package.json +1 -1
  371. package/extensions/irc/package.json +1 -1
  372. package/extensions/kimi-search/package.json +1 -1
  373. package/extensions/learning-core/package.json +1 -1
  374. package/extensions/line/package.json +1 -1
  375. package/extensions/llm-task/package.json +1 -1
  376. package/extensions/lobster/package.json +1 -1
  377. package/extensions/matrix/CHANGELOG.md +1 -1
  378. package/extensions/matrix/package.json +1 -1
  379. package/extensions/mattermost/package.json +1 -1
  380. package/extensions/memory-core/package.json +1 -1
  381. package/extensions/memory-lancedb/package.json +1 -1
  382. package/extensions/minimax/package.json +1 -1
  383. package/extensions/minimax-portal-auth/package.json +1 -1
  384. package/extensions/mistral/package.json +1 -1
  385. package/extensions/moonshot/package.json +1 -1
  386. package/extensions/msteams/CHANGELOG.md +1 -1
  387. package/extensions/msteams/package.json +1 -1
  388. package/extensions/nextcloud-talk/package.json +1 -1
  389. package/extensions/nostr/CHANGELOG.md +1 -1
  390. package/extensions/nostr/package.json +1 -1
  391. package/extensions/open-prose/package.json +1 -1
  392. package/extensions/openai/package.json +1 -1
  393. package/extensions/openai-realtime/package.json +1 -1
  394. package/extensions/openrouter/package.json +1 -1
  395. package/extensions/perplexity-search/package.json +1 -1
  396. package/extensions/searxng-search/package.json +1 -1
  397. package/extensions/signal/package.json +1 -1
  398. package/extensions/slack/package.json +1 -1
  399. package/extensions/synology-chat/package.json +1 -1
  400. package/extensions/telegram/package.json +1 -1
  401. package/extensions/tlon/package.json +1 -1
  402. package/extensions/twitch/CHANGELOG.md +1 -1
  403. package/extensions/twitch/package.json +1 -1
  404. package/extensions/voice-call/CHANGELOG.md +1 -1
  405. package/extensions/voice-call/package.json +1 -1
  406. package/extensions/whatsapp/package.json +1 -1
  407. package/extensions/zai/package.json +1 -1
  408. package/extensions/zalo/CHANGELOG.md +1 -1
  409. package/extensions/zalo/package.json +1 -1
  410. package/extensions/zalouser/CHANGELOG.md +1 -1
  411. package/extensions/zalouser/package.json +1 -1
  412. package/package.json +8 -27
  413. package/dist/control-ui/assets/view-chat-DnpkK2I4.js.map +0 -1
  414. package/dist/plugin-sdk/agent-turn-execute-DSwfm-5A.js +0 -64
  415. package/dist/plugin-sdk/deliver-DPfI8dVE.js +0 -35
  416. package/dist/plugin-sdk/manager-kaQT8tJ5.js +0 -16
  417. package/dist/plugin-sdk/provider-dispatcher-KIIUM3C0.js +0 -64
  418. package/dist/plugin-sdk/provider-image-C27j179m.js +0 -25
  419. package/dist/plugin-sdk/replies-DwzpmAcj.js +0 -27
  420. package/dist/plugin-sdk/runs-Bmc10baa.js +0 -27
  421. package/dist/plugin-sdk/send-BIBwmNzL.js +0 -24
  422. package/dist/plugin-sdk/send-BT778N_7.js +0 -23
  423. package/dist/plugin-sdk/send-CjyyJFep.js +0 -25
  424. package/dist/plugin-sdk/send-DfPCoIXV.js +0 -28
  425. package/dist/plugin-sdk/subagent-registry-C2UoQKQd.js +0 -64
@@ -1,4 +1,4 @@
1
- import{D as e,k as t}from"./view-agents-DNhyzEgf.js";import{n,r}from"./view-chat-DnpkK2I4.js";import{I as i}from"./view-cron-BOjGaH8V.js";function a(e){switch(e){case`applied`:return`chip-ok`;case`rejected`:return`chip-danger`;case`quarantined`:return`chip-warn`;default:return``}}function o(o){return t`
1
+ import{D as e,k as t}from"./view-agents-DNhyzEgf.js";import{n,r}from"./view-chat-ByDyhnLw.js";import{I as i}from"./view-cron-BOjGaH8V.js";function a(e){switch(e){case`applied`:return`chip-ok`;case`rejected`:return`chip-danger`;case`quarantined`:return`chip-warn`;default:return``}}function o(o){return t`
2
2
  <div class="proposals-sub-view" data-test-id="proposals-view">
3
3
  <div class="bulk-actions" data-test-id="bulk-actions">
4
4
  <button
@@ -145,4 +145,4 @@ import{D as e,k as t}from"./view-agents-DNhyzEgf.js";import{n,r}from"./view-chat
145
145
  ${n.subView===`lessons`?c(n):e}
146
146
  </div>
147
147
  `}export{l as renderLearning};
148
- //# sourceMappingURL=learning-gaEy5zTj.js.map
148
+ //# sourceMappingURL=learning-BORaiTQ4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"learning-gaEy5zTj.js","names":[],"sources":["../../../ui/src/ui/views/learning.ts"],"sourcesContent":["import type { TemplateResult } from \"lit\";\nimport { html, nothing } from \"lit\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { t } from \"../../i18n/index.ts\";\nimport type {\n LearningProposalRow,\n LearningLessonRow,\n LearningOverview,\n LearningProposalDetail,\n} from \"../controllers/learning.ts\";\nimport { toSanitizedMarkdownHtml } from \"../markdown.ts\";\n\nexport type LearningSubView = \"proposals\" | \"lessons\";\n\nexport type LearningProps = {\n subView: LearningSubView;\n loading: boolean;\n error: string | null;\n busy: boolean;\n overview: LearningOverview | null;\n proposals: LearningProposalRow[];\n lessons: LearningLessonRow[];\n selectedProposal: LearningProposalDetail | null;\n pendingApplyId: string | null;\n onSelectSubView: (v: LearningSubView) => void;\n onOpenProposal: (id: string) => void;\n onDecide: (id: string, action: \"reject\" | \"quarantine\") => void;\n onRequestApply: (id: string) => void;\n onConfirmApply: (id: string) => void;\n onCancelApply: () => void;\n onOpenLesson: (id: string) => void;\n searchQuery?: string;\n onSearch?: (query: string) => void;\n selectedProposalIds?: string[];\n onToggleProposal?: (id: string) => void;\n onBulkDecide?: (action: \"apply\" | \"reject\") => void;\n};\n\nfunction statusChipClass(status: string): string {\n switch (status) {\n case \"applied\":\n return \"chip-ok\";\n case \"rejected\":\n return \"chip-danger\";\n case \"quarantined\":\n return \"chip-warn\";\n default:\n return \"\";\n }\n}\n\nfunction renderProposals(props: LearningProps): import(\"lit\").TemplateResult {\n return html`\n <div class=\"proposals-sub-view\" data-test-id=\"proposals-view\">\n <div class=\"bulk-actions\" data-test-id=\"bulk-actions\">\n <button\n type=\"button\"\n data-test-id=\"bulk-approve\"\n ?disabled=${props.busy}\n @click=${() => props.onBulkDecide?.(\"apply\")}\n >\n ${t(\"learning.proposals.bulkApprove\")}\n </button>\n <button\n type=\"button\"\n data-test-id=\"bulk-reject\"\n ?disabled=${props.busy}\n @click=${() => props.onBulkDecide?.(\"reject\")}\n >\n ${t(\"learning.proposals.bulkReject\")}\n </button>\n </div>\n <div class=\"proposals-list\">\n ${props.proposals.map(\n (proposal) => html`\n <div\n class=\"proposal-row\"\n data-test-id=\"proposal-row\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => props.onOpenProposal(proposal.id)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onOpenProposal(proposal.id);\n }\n }}\n >\n <input\n type=\"checkbox\"\n data-test-id=\"proposal-select\"\n aria-label=${proposal.title}\n .checked=${props.selectedProposalIds?.includes(proposal.id) === true}\n @click=${(e: Event) => e.stopPropagation()}\n @change=${(e: Event) => {\n e.stopPropagation();\n props.onToggleProposal?.(proposal.id);\n }}\n />\n <span class=${`chip ${statusChipClass(proposal.status)}`}>${proposal.status}</span>\n <span class=\"proposal-title\">${proposal.title}</span>\n ${proposal.scopeLabel ? html`<span class=\"scope-label\">${proposal.scopeLabel.workspaceLabel}</span>` : nothing}\n ${proposal.findingCount !== undefined ? html`<span class=\"chip\">${proposal.findingCount} findings</span>` : nothing}\n ${\n props.pendingApplyId === proposal.id\n ? html`\n <button type=\"button\" data-test-id=\"confirm-apply\" ?disabled=${props.busy} @click=${(\n e: Event,\n ) => {\n e.stopPropagation();\n props.onConfirmApply(proposal.id);\n }}>\n ${t(\"learning.proposals.confirmApply\")}\n </button>\n <button type=\"button\" data-test-id=\"cancel-apply\" ?disabled=${props.busy} @click=${(\n e: Event,\n ) => {\n e.stopPropagation();\n props.onCancelApply();\n }}>\n ${t(\"learning.proposals.cancelApply\")}\n </button>\n `\n : html`\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onRequestApply(proposal.id);\n }}>\n ${t(\"learning.proposals.apply\")}\n </button>\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onDecide(proposal.id, \"reject\");\n }}>\n ${t(\"learning.proposals.reject\")}\n </button>\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onDecide(proposal.id, \"quarantine\");\n }}>\n ${t(\"learning.proposals.quarantine\")}\n </button>\n `\n }\n </div>\n `,\n )}\n </div>\n\n ${\n props.selectedProposal\n ? html`\n <div class=\"proposal-detail\" data-test-id=\"proposal-detail\">\n <div class=\"proposal-preview-label\">${t(\"learning.proposals.preview\")}</div>\n <div\n class=\"proposal-body\"\n data-test-id=\"proposal-preview\"\n >\n ${unsafeHTML(toSanitizedMarkdownHtml(props.selectedProposal.body))}\n </div>\n </div>\n `\n : nothing\n }\n </div>\n `;\n}\n\n// Mirrors isLessonActive in extensions/learning-core/src/lesson-record.ts. The gateway projects the\n// default list through listActiveLessons, so labelling any row with an invalidAt as \"inactive\"\n// contradicts the classification the operator was just served for future-dated windows.\nfunction isLessonActiveAt(\n lesson: { validFrom?: string; invalidAt?: string },\n now: string,\n): boolean {\n if (lesson.validFrom && lesson.validFrom > now) {\n return false;\n }\n return !lesson.invalidAt || lesson.invalidAt > now;\n}\n\nfunction renderLessons(props: LearningProps): TemplateResult {\n const nowIso = new Date().toISOString();\n const search = html`\n <label class=\"lesson-search\">\n <span>${t(\"learning.lessons.search\")}</span>\n <input\n type=\"search\"\n data-test-id=\"lesson-search\"\n placeholder=${t(\"learning.lessons.search\")}\n .value=${props.searchQuery ?? \"\"}\n @input=${(event: Event) => {\n const target = event.target as HTMLInputElement;\n props.onSearch?.(target.value);\n }}\n />\n </label>\n `;\n if (!props.lessons.length) {\n return html`\n ${search}\n <div class=\"empty-state\">${t(\"learning.lessons.empty\")}</div>\n `;\n }\n return html`\n ${search}\n <div class=\"lessons-sub-view\" data-test-id=\"lessons-view\">\n <div class=\"lessons-list\">\n ${props.lessons.map(\n (lesson) => html`\n <div\n class=\"lesson-row\"\n data-test-id=\"lesson-row\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => props.onOpenLesson(lesson.id)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onOpenLesson(lesson.id);\n }\n }}\n >\n <span class=\"chip chip-kind\">${lesson.kind}</span>\n <span class=\"chip chip-record-kind\" data-test-id=\"lesson-record-kind\">${t(`learning.lessons.recordKind.${lesson.recordKind ?? \"lesson\"}`)}</span>\n <span class=\"chip chip-durability\" data-test-id=\"lesson-durability\">${t(`learning.lessons.durability.${lesson.durability ?? \"decaying\"}`)}</span>\n <span class=\"chip chip-validity\" data-test-id=\"lesson-validity\"\n >${isLessonActiveAt(lesson, nowIso) ? t(\"learning.lessons.active\") : t(\"learning.lessons.inactive\")}</span>\n <span class=\"lesson-text\">${lesson.text}</span>\n ${lesson.scopeLabel ? html`<span class=\"scope-label\">${lesson.scopeLabel.workspaceLabel}</span>` : nothing}\n ${\n lesson.confidence !== undefined\n ? html`<span class=\"chip\">${Math.round(lesson.confidence * 100)}%</span>`\n : nothing\n }\n ${lesson.occurrences !== undefined ? html`<span class=\"chip\">${lesson.occurrences}×</span>` : nothing}\n ${\n lesson.distinctSessions !== undefined\n ? html`<span class=\"chip\">${lesson.distinctSessions} sessions</span>`\n : nothing\n }\n ${\n lesson.sessionId\n ? html`<a\n class=\"session-jump\"\n data-test-id=\"session-jump\"\n href=${`#session/${lesson.sessionId}`}\n title=${t(\"learning.lessons.jump\")}\n aria-label=${t(\"learning.lessons.jump\")}\n @click=${(event: Event) => event.stopPropagation()}\n >${lesson.sessionId}</a>`\n : nothing\n }\n </div>\n `,\n )}\n </div>\n </div>\n `;\n}\n\nexport function renderLearning(props: LearningProps): import(\"lit\").TemplateResult {\n return html`\n <div class=\"learning-view\">\n <div class=\"tab-bar\">\n <button\n @click=${() => props.onSelectSubView(\"proposals\")}\n class=${props.subView === \"proposals\" ? \"tab-btn tab-btn--active\" : \"tab-btn\"}\n >\n ${t(\"learning.tabs.proposals\")}\n </button>\n <button\n @click=${() => props.onSelectSubView(\"lessons\")}\n class=${props.subView === \"lessons\" ? \"tab-btn tab-btn--active\" : \"tab-btn\"}\n >\n ${t(\"learning.tabs.lessons\")}\n </button>\n </div>\n\n ${props.error ? html`<div class=\"error-banner\">${props.error}</div>` : nothing} ${\n props.loading ? html`<div class=\"loading\">${t(\"learning.loading\")}</div>` : nothing\n }\n ${props.subView === \"proposals\" ? renderProposals(props) : nothing}\n ${props.subView === \"lessons\" ? renderLessons(props) : nothing}\n </div>\n `;\n}\n"],"mappings":"0IAsCA,SAAS,EAAgB,EAAwB,CAC/C,OAAQ,EAAR,CACE,IAAK,UACH,MAAO,UACT,IAAK,WACH,MAAO,cACT,IAAK,cACH,MAAO,YACT,QACE,MAAO,EACX,CACF,CAEA,SAAS,EAAgB,EAAoD,CAC3E,MAAO,EAAI;;;;;;sBAMS,EAAM,KAAK;uBACR,EAAM,eAAe,OAAO,EAAE;;YAE3C,EAAE,gCAAgC,EAAE;;;;;sBAK1B,EAAM,KAAK;uBACR,EAAM,eAAe,QAAQ,EAAE;;YAE5C,EAAE,+BAA+B,EAAE;;;;UAIrC,EAAM,UAAU,IACf,GAAa,CAAI;;;;;;2BAMC,EAAM,eAAe,EAAS,EAAE,EAAE;yBACrC,GAAyB,EAC/B,EAAM,MAAQ,SAAW,EAAM,MAAQ,OACzC,EAAM,eAAe,EACrB,EAAM,eAAe,EAAS,EAAE,EAEpC,EAAE;;;;;6BAKa,EAAS,MAAM;2BACjB,EAAM,qBAAqB,SAAS,EAAS,EAAE,IAAM,GAAK;yBAC3D,GAAa,EAAE,gBAAgB,EAAE;0BAChC,GAAa,CACtB,EAAE,gBAAgB,EAClB,EAAM,mBAAmB,EAAS,EAAE,CACtC,EAAE;;4BAEU,QAAQ,EAAgB,EAAS,MAAM,IAAI,GAAG,EAAS,OAAO;6CAC7C,EAAS,MAAM;gBAC5C,EAAS,WAAa,CAAI,6BAA6B,EAAS,WAAW,eAAe,SAAW,EAAQ;gBAC7G,EAAS,eAAiB,IAAA,GAAgF,EAApE,CAAI,sBAAsB,EAAS,aAAa,kBAA4B;gBAElH,EAAM,iBAAmB,EAAS,GAC9B,CAAI;mFAC2D,EAAM,KAAK,UACxE,GACG,CACH,EAAE,gBAAgB,EAClB,EAAM,eAAe,EAAS,EAAE,CAClC,EAAE;wBACE,EAAE,iCAAiC,EAAE;;kFAEqB,EAAM,KAAK,UACvE,GACG,CACH,EAAE,gBAAgB,EAClB,EAAM,cAAc,CACtB,EAAE;wBACE,EAAE,gCAAgC,EAAE;;oBAGxC,CAAI;sDAC8B,EAAM,KAAK,UAAW,GAAa,CACnE,EAAE,gBAAgB,EAClB,EAAM,eAAe,EAAS,EAAE,CAClC,EAAE;wBACE,EAAE,0BAA0B,EAAE;;sDAEA,EAAM,KAAK,UAAW,GAAa,CACnE,EAAE,gBAAgB,EAClB,EAAM,SAAS,EAAS,GAAI,QAAQ,CACtC,EAAE;wBACE,EAAE,2BAA2B,EAAE;;sDAED,EAAM,KAAK,UAAW,GAAa,CACnE,EAAE,gBAAgB,EAClB,EAAM,SAAS,EAAS,GAAI,YAAY,CAC1C,EAAE;wBACE,EAAE,+BAA+B,EAAE;;oBAG5C;;WAGP,EAAE;;;QAIF,EAAM,iBACF,CAAI;;oDAEoC,EAAE,4BAA4B,EAAE;;;;;kBAKlE,EAAW,EAAwB,EAAM,iBAAiB,IAAI,CAAC,EAAE;;;YAIvE,EACL;;GAGP,CAKA,SAAS,EACP,EACA,EACS,CAIT,OAHI,EAAO,WAAa,EAAO,UAAY,EAClC,GAEF,CAAC,EAAO,WAAa,EAAO,UAAY,CACjD,CAEA,SAAS,EAAc,EAAsC,CAC3D,IAAM,EAAS,IAAI,KAAK,CAAA,CAAE,YAAY,EAChC,EAAS,CAAI;;cAEP,EAAE,yBAAyB,EAAE;;;;sBAIrB,EAAE,yBAAyB,EAAE;iBAClC,EAAM,aAAe,GAAG;iBACvB,GAAiB,CACzB,IAAM,EAAS,EAAM,OACrB,EAAM,WAAW,EAAO,KAAK,CAC/B,EAAE;;;IAUR,OANK,EAAM,QAAQ,OAMZ,CAAI;MACP,EAAO;;;UAGH,EAAM,QAAQ,IACb,GAAW,CAAI;;;;;;2BAMG,EAAM,aAAa,EAAO,EAAE,EAAE;yBACjC,GAAyB,EAC/B,EAAM,MAAQ,SAAW,EAAM,MAAQ,OACzC,EAAM,eAAe,EACrB,EAAM,aAAa,EAAO,EAAE,EAEhC,EAAE;;6CAE6B,EAAO,KAAK;sFAC6B,EAAE,+BAA+B,EAAO,YAAc,UAAU,EAAE;oFACpE,EAAE,+BAA+B,EAAO,YAAc,YAAY,EAAE;;mBAErI,EAAiB,EAAQ,CAAM,EAAI,EAAE,yBAAyB,EAAI,EAAE,2BAA2B,EAAE;0CAC1E,EAAO,KAAK;gBACtC,EAAO,WAAa,CAAI,6BAA6B,EAAO,WAAW,eAAe,SAAW,EAAQ;gBAEzG,EAAO,aAAe,IAAA,GAElB,EADA,CAAI,sBAAsB,KAAK,MAAM,EAAO,WAAa,GAAG,EAAE,UAEnE;gBACC,EAAO,cAAgB,IAAA,GAAqE,EAAzD,CAAI,sBAAsB,EAAO,YAAY,UAAoB;gBAEpG,EAAO,mBAAqB,IAAA,GAExB,EADA,CAAI,sBAAsB,EAAO,iBAAiB,kBAEvD;gBAEC,EAAO,UACH,CAAI;;;8BAGM,YAAY,EAAO,YAAY;+BAC9B,EAAE,uBAAuB,EAAE;oCACtB,EAAE,uBAAuB,EAAE;gCAC9B,GAAiB,EAAM,gBAAgB,EAAE;wBAClD,EAAO,UAAU,MACrB,EACL;;WAGP,EAAE;;;IAxDC,CAAI;QACP,EAAO;iCACkB,EAAE,wBAAwB,EAAE;KA0D7D,CAEA,SAAgB,EAAe,EAAoD,CACjF,MAAO,EAAI;;;;uBAIY,EAAM,gBAAgB,WAAW,EAAE;kBAC1C,EAAM,UAAY,YAAc,0BAA4B,UAAU;;YAE5E,EAAE,yBAAyB,EAAE;;;uBAGhB,EAAM,gBAAgB,SAAS,EAAE;kBACxC,EAAM,UAAY,UAAY,0BAA4B,UAAU;;YAE1E,EAAE,uBAAuB,EAAE;;;;QAI/B,EAAM,MAAQ,CAAI,6BAA6B,EAAM,MAAM,QAAU,EAAQ,GAC7E,EAAM,QAAU,CAAI,wBAAwB,EAAE,kBAAkB,EAAE,QAAU,EAC7E;QACC,EAAM,UAAY,YAAc,EAAgB,CAAK,EAAI,EAAQ;QACjE,EAAM,UAAY,UAAY,EAAc,CAAK,EAAI,EAAQ;;GAGrE"}
1
+ {"version":3,"file":"learning-BORaiTQ4.js","names":[],"sources":["../../../ui/src/ui/views/learning.ts"],"sourcesContent":["import type { TemplateResult } from \"lit\";\nimport { html, nothing } from \"lit\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { t } from \"../../i18n/index.ts\";\nimport type {\n LearningProposalRow,\n LearningLessonRow,\n LearningOverview,\n LearningProposalDetail,\n} from \"../controllers/learning.ts\";\nimport { toSanitizedMarkdownHtml } from \"../markdown.ts\";\n\nexport type LearningSubView = \"proposals\" | \"lessons\";\n\nexport type LearningProps = {\n subView: LearningSubView;\n loading: boolean;\n error: string | null;\n busy: boolean;\n overview: LearningOverview | null;\n proposals: LearningProposalRow[];\n lessons: LearningLessonRow[];\n selectedProposal: LearningProposalDetail | null;\n pendingApplyId: string | null;\n onSelectSubView: (v: LearningSubView) => void;\n onOpenProposal: (id: string) => void;\n onDecide: (id: string, action: \"reject\" | \"quarantine\") => void;\n onRequestApply: (id: string) => void;\n onConfirmApply: (id: string) => void;\n onCancelApply: () => void;\n onOpenLesson: (id: string) => void;\n searchQuery?: string;\n onSearch?: (query: string) => void;\n selectedProposalIds?: string[];\n onToggleProposal?: (id: string) => void;\n onBulkDecide?: (action: \"apply\" | \"reject\") => void;\n};\n\nfunction statusChipClass(status: string): string {\n switch (status) {\n case \"applied\":\n return \"chip-ok\";\n case \"rejected\":\n return \"chip-danger\";\n case \"quarantined\":\n return \"chip-warn\";\n default:\n return \"\";\n }\n}\n\nfunction renderProposals(props: LearningProps): import(\"lit\").TemplateResult {\n return html`\n <div class=\"proposals-sub-view\" data-test-id=\"proposals-view\">\n <div class=\"bulk-actions\" data-test-id=\"bulk-actions\">\n <button\n type=\"button\"\n data-test-id=\"bulk-approve\"\n ?disabled=${props.busy}\n @click=${() => props.onBulkDecide?.(\"apply\")}\n >\n ${t(\"learning.proposals.bulkApprove\")}\n </button>\n <button\n type=\"button\"\n data-test-id=\"bulk-reject\"\n ?disabled=${props.busy}\n @click=${() => props.onBulkDecide?.(\"reject\")}\n >\n ${t(\"learning.proposals.bulkReject\")}\n </button>\n </div>\n <div class=\"proposals-list\">\n ${props.proposals.map(\n (proposal) => html`\n <div\n class=\"proposal-row\"\n data-test-id=\"proposal-row\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => props.onOpenProposal(proposal.id)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onOpenProposal(proposal.id);\n }\n }}\n >\n <input\n type=\"checkbox\"\n data-test-id=\"proposal-select\"\n aria-label=${proposal.title}\n .checked=${props.selectedProposalIds?.includes(proposal.id) === true}\n @click=${(e: Event) => e.stopPropagation()}\n @change=${(e: Event) => {\n e.stopPropagation();\n props.onToggleProposal?.(proposal.id);\n }}\n />\n <span class=${`chip ${statusChipClass(proposal.status)}`}>${proposal.status}</span>\n <span class=\"proposal-title\">${proposal.title}</span>\n ${proposal.scopeLabel ? html`<span class=\"scope-label\">${proposal.scopeLabel.workspaceLabel}</span>` : nothing}\n ${proposal.findingCount !== undefined ? html`<span class=\"chip\">${proposal.findingCount} findings</span>` : nothing}\n ${\n props.pendingApplyId === proposal.id\n ? html`\n <button type=\"button\" data-test-id=\"confirm-apply\" ?disabled=${props.busy} @click=${(\n e: Event,\n ) => {\n e.stopPropagation();\n props.onConfirmApply(proposal.id);\n }}>\n ${t(\"learning.proposals.confirmApply\")}\n </button>\n <button type=\"button\" data-test-id=\"cancel-apply\" ?disabled=${props.busy} @click=${(\n e: Event,\n ) => {\n e.stopPropagation();\n props.onCancelApply();\n }}>\n ${t(\"learning.proposals.cancelApply\")}\n </button>\n `\n : html`\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onRequestApply(proposal.id);\n }}>\n ${t(\"learning.proposals.apply\")}\n </button>\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onDecide(proposal.id, \"reject\");\n }}>\n ${t(\"learning.proposals.reject\")}\n </button>\n <button type=\"button\" ?disabled=${props.busy} @click=${(e: Event) => {\n e.stopPropagation();\n props.onDecide(proposal.id, \"quarantine\");\n }}>\n ${t(\"learning.proposals.quarantine\")}\n </button>\n `\n }\n </div>\n `,\n )}\n </div>\n\n ${\n props.selectedProposal\n ? html`\n <div class=\"proposal-detail\" data-test-id=\"proposal-detail\">\n <div class=\"proposal-preview-label\">${t(\"learning.proposals.preview\")}</div>\n <div\n class=\"proposal-body\"\n data-test-id=\"proposal-preview\"\n >\n ${unsafeHTML(toSanitizedMarkdownHtml(props.selectedProposal.body))}\n </div>\n </div>\n `\n : nothing\n }\n </div>\n `;\n}\n\n// Mirrors isLessonActive in extensions/learning-core/src/lesson-record.ts. The gateway projects the\n// default list through listActiveLessons, so labelling any row with an invalidAt as \"inactive\"\n// contradicts the classification the operator was just served for future-dated windows.\nfunction isLessonActiveAt(\n lesson: { validFrom?: string; invalidAt?: string },\n now: string,\n): boolean {\n if (lesson.validFrom && lesson.validFrom > now) {\n return false;\n }\n return !lesson.invalidAt || lesson.invalidAt > now;\n}\n\nfunction renderLessons(props: LearningProps): TemplateResult {\n const nowIso = new Date().toISOString();\n const search = html`\n <label class=\"lesson-search\">\n <span>${t(\"learning.lessons.search\")}</span>\n <input\n type=\"search\"\n data-test-id=\"lesson-search\"\n placeholder=${t(\"learning.lessons.search\")}\n .value=${props.searchQuery ?? \"\"}\n @input=${(event: Event) => {\n const target = event.target as HTMLInputElement;\n props.onSearch?.(target.value);\n }}\n />\n </label>\n `;\n if (!props.lessons.length) {\n return html`\n ${search}\n <div class=\"empty-state\">${t(\"learning.lessons.empty\")}</div>\n `;\n }\n return html`\n ${search}\n <div class=\"lessons-sub-view\" data-test-id=\"lessons-view\">\n <div class=\"lessons-list\">\n ${props.lessons.map(\n (lesson) => html`\n <div\n class=\"lesson-row\"\n data-test-id=\"lesson-row\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => props.onOpenLesson(lesson.id)}\n @keydown=${(event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onOpenLesson(lesson.id);\n }\n }}\n >\n <span class=\"chip chip-kind\">${lesson.kind}</span>\n <span class=\"chip chip-record-kind\" data-test-id=\"lesson-record-kind\">${t(`learning.lessons.recordKind.${lesson.recordKind ?? \"lesson\"}`)}</span>\n <span class=\"chip chip-durability\" data-test-id=\"lesson-durability\">${t(`learning.lessons.durability.${lesson.durability ?? \"decaying\"}`)}</span>\n <span class=\"chip chip-validity\" data-test-id=\"lesson-validity\"\n >${isLessonActiveAt(lesson, nowIso) ? t(\"learning.lessons.active\") : t(\"learning.lessons.inactive\")}</span>\n <span class=\"lesson-text\">${lesson.text}</span>\n ${lesson.scopeLabel ? html`<span class=\"scope-label\">${lesson.scopeLabel.workspaceLabel}</span>` : nothing}\n ${\n lesson.confidence !== undefined\n ? html`<span class=\"chip\">${Math.round(lesson.confidence * 100)}%</span>`\n : nothing\n }\n ${lesson.occurrences !== undefined ? html`<span class=\"chip\">${lesson.occurrences}×</span>` : nothing}\n ${\n lesson.distinctSessions !== undefined\n ? html`<span class=\"chip\">${lesson.distinctSessions} sessions</span>`\n : nothing\n }\n ${\n lesson.sessionId\n ? html`<a\n class=\"session-jump\"\n data-test-id=\"session-jump\"\n href=${`#session/${lesson.sessionId}`}\n title=${t(\"learning.lessons.jump\")}\n aria-label=${t(\"learning.lessons.jump\")}\n @click=${(event: Event) => event.stopPropagation()}\n >${lesson.sessionId}</a>`\n : nothing\n }\n </div>\n `,\n )}\n </div>\n </div>\n `;\n}\n\nexport function renderLearning(props: LearningProps): import(\"lit\").TemplateResult {\n return html`\n <div class=\"learning-view\">\n <div class=\"tab-bar\">\n <button\n @click=${() => props.onSelectSubView(\"proposals\")}\n class=${props.subView === \"proposals\" ? \"tab-btn tab-btn--active\" : \"tab-btn\"}\n >\n ${t(\"learning.tabs.proposals\")}\n </button>\n <button\n @click=${() => props.onSelectSubView(\"lessons\")}\n class=${props.subView === \"lessons\" ? \"tab-btn tab-btn--active\" : \"tab-btn\"}\n >\n ${t(\"learning.tabs.lessons\")}\n </button>\n </div>\n\n ${props.error ? html`<div class=\"error-banner\">${props.error}</div>` : nothing} ${\n props.loading ? html`<div class=\"loading\">${t(\"learning.loading\")}</div>` : nothing\n }\n ${props.subView === \"proposals\" ? renderProposals(props) : nothing}\n ${props.subView === \"lessons\" ? renderLessons(props) : nothing}\n </div>\n `;\n}\n"],"mappings":"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"}
@@ -78,8 +78,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
78
78
  <span class="chat-copy-btn__icon-check">${d.check}</span>
79
79
  </span>
80
80
  </button>
81
- `}function Ur(e){return Hr({text:()=>e,label:Lr})}function Wr(e){let t=e,n=typeof t.role==`string`?t.role:`unknown`,r=typeof t.toolCallId==`string`||typeof t.tool_call_id==`string`,i=t.content,a=Array.isArray(i)?i:null,o=Array.isArray(a)&&a.some(e=>{let t=e,n=(typeof t.type==`string`?t.type:``).toLowerCase();return n===`toolresult`||n===`tool_result`}),s=typeof t.toolName==`string`||typeof t.tool_name==`string`;(r||o||s)&&(n=`toolResult`);let c=[];typeof t.content==`string`?c=[{type:`text`,text:t.content}]:Array.isArray(t.content)?c=t.content.map(e=>({type:e.type||`text`,text:e.text,name:e.name,args:e.args||e.arguments})):typeof t.text==`string`&&(c=[{type:`text`,text:t.text}]);let l=typeof t.timestamp==`number`?t.timestamp:Date.now(),u=typeof t.id==`string`?t.id:void 0;return(n===`user`||n===`User`)&&(c=c.map(e=>e.type===`text`&&typeof e.text==`string`?{...e,text:ne(e.text)}:e)),{role:n,content:c,timestamp:l,id:u}}function Gr(e){let t=e.toLowerCase();return e===`user`||e===`User`?e:e===`assistant`?`assistant`:e===`system`?`system`:t===`toolresult`||t===`tool_result`||t===`tool`||t===`function`?`tool`:e}function Kr(e){let t=e,n=typeof t.role==`string`?t.role.toLowerCase():``;return n===`toolresult`||n===`tool_result`}var qr={version:1,fallback:{emoji:`🧩`,detailKeys:[`command`,`path`,`url`,`targetUrl`,`targetId`,`ref`,`element`,`node`,`nodeId`,`id`,`requestId`,`to`,`channelId`,`guildId`,`userId`,`name`,`query`,`pattern`,`messageId`]},tools:{bash:{emoji:`🛠️`,title:`Bash`,detailKeys:[`command`]},process:{emoji:`🧰`,title:`Process`,detailKeys:[`sessionId`]},read:{emoji:`📖`,title:`Read`,detailKeys:[`path`]},write:{emoji:`✍️`,title:`Write`,detailKeys:[`path`]},edit:{emoji:`📝`,title:`Edit`,detailKeys:[`path`]},attach:{emoji:`📎`,title:`Attach`,detailKeys:[`path`,`url`,`fileName`]},browser:{emoji:`🌐`,title:`Browser`,actions:{status:{label:`status`},start:{label:`start`},stop:{label:`stop`},tabs:{label:`tabs`},open:{label:`open`,detailKeys:[`targetUrl`]},focus:{label:`focus`,detailKeys:[`targetId`]},close:{label:`close`,detailKeys:[`targetId`]},snapshot:{label:`snapshot`,detailKeys:[`targetUrl`,`targetId`,`ref`,`element`,`format`]},screenshot:{label:`screenshot`,detailKeys:[`targetUrl`,`targetId`,`ref`,`element`]},navigate:{label:`navigate`,detailKeys:[`targetUrl`,`targetId`]},console:{label:`console`,detailKeys:[`level`,`targetId`]},pdf:{label:`pdf`,detailKeys:[`targetId`]},upload:{label:`upload`,detailKeys:[`paths`,`ref`,`inputRef`,`element`,`targetId`]},dialog:{label:`dialog`,detailKeys:[`accept`,`promptText`,`targetId`]},act:{label:`act`,detailKeys:[`request.kind`,`request.ref`,`request.selector`,`request.text`,`request.value`]}}},canvas:{emoji:`🖼️`,title:`Canvas`,actions:{present:{label:`present`,detailKeys:[`target`,`node`,`nodeId`]},hide:{label:`hide`,detailKeys:[`node`,`nodeId`]},navigate:{label:`navigate`,detailKeys:[`url`,`node`,`nodeId`]},eval:{label:`eval`,detailKeys:[`javaScript`,`node`,`nodeId`]},snapshot:{label:`snapshot`,detailKeys:[`format`,`node`,`nodeId`]},a2ui_push:{label:`A2UI push`,detailKeys:[`jsonlPath`,`node`,`nodeId`]},a2ui_reset:{label:`A2UI reset`,detailKeys:[`node`,`nodeId`]}}},nodes:{emoji:`📱`,title:`Nodes`,actions:{status:{label:`status`},describe:{label:`describe`,detailKeys:[`node`,`nodeId`]},pending:{label:`pending`},approve:{label:`approve`,detailKeys:[`requestId`]},reject:{label:`reject`,detailKeys:[`requestId`]},notify:{label:`notify`,detailKeys:[`node`,`nodeId`,`title`,`body`]},camera_snap:{label:`camera snap`,detailKeys:[`node`,`nodeId`,`facing`,`deviceId`]},camera_list:{label:`camera list`,detailKeys:[`node`,`nodeId`]},camera_clip:{label:`camera clip`,detailKeys:[`node`,`nodeId`,`facing`,`duration`,`durationMs`]},screen_record:{label:`screen record`,detailKeys:[`node`,`nodeId`,`duration`,`durationMs`,`fps`,`screenIndex`]}}},cron:{emoji:`⏰`,title:`Cron`,actions:{status:{label:`status`},list:{label:`list`},add:{label:`add`,detailKeys:[`job.name`,`job.id`,`job.schedule`,`job.cron`]},update:{label:`update`,detailKeys:[`id`]},remove:{label:`remove`,detailKeys:[`id`]},run:{label:`run`,detailKeys:[`id`]},runs:{label:`runs`,detailKeys:[`id`]},wake:{label:`wake`,detailKeys:[`text`,`mode`]}}},gateway:{emoji:`🔌`,title:`Gateway`,actions:{restart:{label:`restart`,detailKeys:[`reason`,`delayMs`]}}},whatsapp_login:{emoji:`🟢`,title:`WhatsApp Login`,actions:{start:{label:`start`},wait:{label:`wait`}}},discord:{emoji:`💬`,title:`Discord`,actions:{react:{label:`react`,detailKeys:[`channelId`,`messageId`,`emoji`]},reactions:{label:`reactions`,detailKeys:[`channelId`,`messageId`]},sticker:{label:`sticker`,detailKeys:[`to`,`stickerIds`]},poll:{label:`poll`,detailKeys:[`question`,`to`]},permissions:{label:`permissions`,detailKeys:[`channelId`]},readMessages:{label:`read messages`,detailKeys:[`channelId`,`limit`]},sendMessage:{label:`send`,detailKeys:[`to`,`content`]},editMessage:{label:`edit`,detailKeys:[`channelId`,`messageId`]},deleteMessage:{label:`delete`,detailKeys:[`channelId`,`messageId`]},threadCreate:{label:`thread create`,detailKeys:[`channelId`,`name`]},threadList:{label:`thread list`,detailKeys:[`guildId`,`channelId`]},threadReply:{label:`thread reply`,detailKeys:[`channelId`,`content`]},pinMessage:{label:`pin`,detailKeys:[`channelId`,`messageId`]},unpinMessage:{label:`unpin`,detailKeys:[`channelId`,`messageId`]},listPins:{label:`list pins`,detailKeys:[`channelId`]},searchMessages:{label:`search`,detailKeys:[`guildId`,`content`]},memberInfo:{label:`member`,detailKeys:[`guildId`,`userId`]},roleInfo:{label:`roles`,detailKeys:[`guildId`]},emojiList:{label:`emoji list`,detailKeys:[`guildId`]},roleAdd:{label:`role add`,detailKeys:[`guildId`,`userId`,`roleId`]},roleRemove:{label:`role remove`,detailKeys:[`guildId`,`userId`,`roleId`]},channelInfo:{label:`channel`,detailKeys:[`channelId`]},channelList:{label:`channels`,detailKeys:[`guildId`]},voiceStatus:{label:`voice`,detailKeys:[`guildId`,`userId`]},eventList:{label:`events`,detailKeys:[`guildId`]},eventCreate:{label:`event create`,detailKeys:[`guildId`,`name`]},timeout:{label:`timeout`,detailKeys:[`guildId`,`userId`]},kick:{label:`kick`,detailKeys:[`guildId`,`userId`]},ban:{label:`ban`,detailKeys:[`guildId`,`userId`]}}}}};function Jr(e){return e&&typeof e==`object`?e:void 0}function Yr(e){return(e??`tool`).trim()}function Xr(e){let t=e.replace(/_/g,` `).trim();return t?t.split(/\s+/).map(e=>e.length<=2&&e.toUpperCase()===e?e:`${e.at(0)?.toUpperCase()??``}${e.slice(1)}`).join(` `):`Tool`}function Zr(e){let t=e?.trim();if(t)return t.replace(/_/g,` `)}function Qr(e){if(!e||typeof e!=`object`)return;let t=e.action;if(typeof t==`string`)return t.trim()||void 0}function $r(e){return Ai({toolKey:e.toolKey,args:e.args,meta:e.meta,action:Qr(e.args),spec:e.spec,fallbackDetailKeys:e.fallbackDetailKeys,detailMode:e.detailMode,detailCoerce:e.detailCoerce,detailMaxEntries:e.detailMaxEntries,detailFormatKey:e.detailFormatKey})}function ei(e,t={}){let n=t.maxStringChars??160,r=t.maxArrayEntries??3;if(e!=null){if(typeof e==`string`){let t=e.trim();if(!t)return;let r=t.split(/\r?\n/)[0]?.trim()??``;return r?r.length>n?`${r.slice(0,Math.max(0,n-3))}…`:r:void 0}if(typeof e==`boolean`)return!e&&!t.includeFalse?void 0:e?`true`:`false`;if(typeof e==`number`)return Number.isFinite(e)?e===0&&!t.includeZero?void 0:String(e):t.includeNonFinite?String(e):void 0;if(Array.isArray(e)){let n=e.map(e=>ei(e,t)).filter(e=>!!e);if(n.length===0)return;let i=n.slice(0,r).join(`, `);return n.length>r?`${i}…`:i}}}function ti(e,t){if(!e||typeof e!=`object`)return;let n=e;for(let e of t.split(`.`)){if(!e||!n||typeof n!=`object`)return;n=n[e]}return n}function ni(e){let t=Jr(e);if(t)for(let e of[t.path,t.file_path,t.filePath]){if(typeof e!=`string`)continue;let t=e.trim();if(t)return t}}function ri(e){let t=Jr(e);if(!t)return;let n=ni(t);if(!n)return;let r=typeof t.offset==`number`&&Number.isFinite(t.offset)?Math.floor(t.offset):void 0,i=typeof t.limit==`number`&&Number.isFinite(t.limit)?Math.floor(t.limit):void 0,a=r===void 0?void 0:Math.max(1,r),o=i===void 0?void 0:Math.max(1,i);return a!==void 0&&o!==void 0?`${o===1?`line`:`lines`} ${a}-${a+o-1} from ${n}`:a===void 0?o===void 0?`from ${n}`:`first ${o} ${o===1?`line`:`lines`} of ${n}`:`from line ${a} in ${n}`}function ii(e,t){let n=Jr(t);if(!n)return;let r=ni(n)??(typeof n.url==`string`?n.url.trim():void 0);if(!r)return;if(e===`attach`)return`from ${r}`;let i=e===`edit`?`in`:`to`,a=typeof n.content==`string`?n.content:typeof n.newText==`string`?n.newText:typeof n.new_string==`string`?n.new_string:void 0;return a&&a.length>0?`${i} ${r} (${a.length} chars)`:`${i} ${r}`}function ai(e){let t=Jr(e);if(!t)return;let n=typeof t.query==`string`?t.query.trim():void 0,r=typeof t.count==`number`&&Number.isFinite(t.count)&&t.count>0?Math.floor(t.count):void 0;if(n)return r===void 0?`for "${n}"`:`for "${n}" (top ${r})`}function oi(e){let t=Jr(e);if(!t)return;let n=typeof t.url==`string`?t.url.trim():void 0;if(!n)return;let r=typeof t.extractMode==`string`?t.extractMode.trim():void 0,i=typeof t.maxChars==`number`&&Number.isFinite(t.maxChars)&&t.maxChars>0?Math.floor(t.maxChars):void 0,a=[r?`mode ${r}`:void 0,i===void 0?void 0:`max ${i} chars`].filter(e=>!!e).join(`, `);return a?`from ${n} (${a})`:`from ${n}`}function si(e){if(!e)return e;let t=e.trim();return t.length>=2&&(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))?t.slice(1,-1).trim():t}function ci(e,t=48){if(!e)return[];let n=[],r=``,i,a=!1;for(let o=0;o<e.length;o+=1){let s=e[o];if(a){r+=s,a=!1;continue}if(s===`\\`){a=!0;continue}if(i){s===i?i=void 0:r+=s;continue}if(s===`"`||s===`'`){i=s;continue}if(/\s/.test(s)){if(!r)continue;if(n.push(r),n.length>=t)return n;r=``;continue}r+=s}return r&&n.push(r),n}function li(e){if(!e)return;let t=si(e)??e;return(t.split(/[/]/).at(-1)??t).trim().toLowerCase()}function ui(e,t){let n=new Set(t);for(let r=0;r<e.length;r+=1){let i=e[r];if(i){if(n.has(i)){let t=e[r+1];if(t&&!t.startsWith(`-`))return t;continue}for(let e of t)if(e.startsWith(`--`)&&i.startsWith(`${e}=`))return i.slice(e.length+1)}}}function di(e,t=1,n=[]){let r=[],i=new Set(n);for(let n=t;n<e.length;n+=1){let t=e[n];if(t){if(t===`--`){for(let t=n+1;t<e.length;t+=1){let n=e[t];n&&r.push(n)}break}if(t.startsWith(`--`)){if(t.includes(`=`))continue;i.has(t)&&(n+=1);continue}if(t.startsWith(`-`)){i.has(t)&&(n+=1);continue}r.push(t)}}return r}function $(e,t=1,n=[]){return di(e,t,n)[0]}function fi(e){if(e.length===0)return e;let t=0;if(li(e[0])===`env`){for(t=1;t<e.length;){let n=e[t];if(!n)break;if(n.startsWith(`-`)){t+=1;continue}if(/^[A-Za-z_][A-Za-z0-9_]*=/.test(n)){t+=1;continue}break}return e.slice(t)}for(;t<e.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]);)t+=1;return e.slice(t)}function pi(e){let t=ci(e,10);if(t.length<3)return e;let n=li(t[0]);if(!(n===`bash`||n===`sh`||n===`zsh`||n===`fish`))return e;let r=t.findIndex((e,t)=>t>0&&(e===`-c`||e===`-lc`||e===`-ic`));if(r===-1)return e;let i=t.slice(r+1).join(` `).trim();return i?si(i)??e:e}function mi(e,t){let n,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(r){r=!1;continue}if(a===`\\`){r=!0;continue}if(n){a===n&&(n=void 0);continue}if(a===`"`||a===`'`){n=a;continue}if(t(a,i)===!1)return}}function hi(e){let t=[],n=0;return mi(e,(r,i)=>r===`;`?(t.push(e.slice(n,i)),n=i+1,!0):(r===`&`||r===`|`)&&e[i+1]===r?(t.push(e.slice(n,i)),n=i+2,!0):!0),t.push(e.slice(n)),t.map(e=>e.trim()).filter(e=>e.length>0)}function gi(e){let t=[],n=0;return mi(e,(r,i)=>(r===`|`&&e[i-1]!==`|`&&e[i+1]!==`|`&&(t.push(e.slice(n,i)),n=i+1),!0)),t.push(e.slice(n)),t.map(e=>e.trim()).filter(e=>e.length>0)}function _i(e){let t=ci(e,3),n=li(t[0]);if(n===`cd`||n===`pushd`)return t[1]||void 0}function vi(e){let t=li(ci(e,2)[0]);return t===`cd`||t===`pushd`||t===`popd`}function yi(e){return li(ci(e,2)[0])===`popd`}function bi(e){let t=e.trim(),n;for(let e=0;e<4;e+=1){let r;mi(t,(e,n)=>{if(e===`&`&&t[n+1]===`&`)return r={index:n,length:2},!1;if(e===`|`&&t[n+1]===`|`)return r={index:n,length:2,isOr:!0},!1;if(e===`;`||e===`
82
- `)return r={index:n,length:1},!1});let i=(r?t.slice(0,r.index):t).trim(),a=(r?!r.isOr:e>0)&&vi(i);if(!(i.startsWith(`set `)||i.startsWith(`export `)||i.startsWith(`unset `)||a)||(a&&(n=yi(i)?void 0:_i(i)??n),t=r?t.slice(r.index+r.length).trimStart():``,!t))break}return{command:t.trim(),chdirPath:n}}function xi(e){if(e.length===0)return`run command`;let t=li(e[0])??`command`;if(t===`git`){let t=new Set([`-C`,`-c`,`--git-dir`,`--work-tree`,`--namespace`,`--config-env`]),n=ui(e,[`-C`]),r;for(let n=1;n<e.length;n+=1){let i=e[n];if(i){if(i===`--`){r=$(e,n+1);break}if(i.startsWith(`--`)){if(i.includes(`=`))continue;t.has(i)&&(n+=1);continue}if(i.startsWith(`-`)){t.has(i)&&(n+=1);continue}r=i;break}}let i={status:`check git status`,diff:`check git diff`,log:`view git history`,show:`show git object`,branch:`list git branches`,checkout:`switch git branch`,switch:`switch git branch`,commit:`create git commit`,pull:`pull git changes`,push:`push git changes`,fetch:`fetch git changes`,merge:`merge git changes`,rebase:`rebase git branch`,add:`stage git changes`,restore:`restore git files`,reset:`reset git state`,stash:`stash git changes`};return r&&i[r]?i[r]:!r||r.startsWith(`/`)||r.startsWith(`~`)||r.includes(`/`)?n?`run git command in ${n}`:`run git command`:`run git ${r}`}if(t===`grep`||t===`rg`||t===`ripgrep`){let t=di(e,1,[`-e`,`--regexp`,`-f`,`--file`,`-m`,`--max-count`,`-A`,`--after-context`,`-B`,`--before-context`,`-C`,`--context`]),n=ui(e,[`-e`,`--regexp`])??t[0],r=t.length>1?t.at(-1):void 0;return n?r?`search "${n}" in ${r}`:`search "${n}"`:`search text`}if(t===`find`){let t=e[1]&&!e[1].startsWith(`-`)?e[1]:`.`,n=ui(e,[`-name`,`-iname`]);return n?`find files named "${n}" in ${t}`:`find files in ${t}`}if(t===`ls`){let t=$(e,1);return t?`list files in ${t}`:`list files`}if(t===`head`||t===`tail`){let n=ui(e,[`-n`,`--lines`])??e.slice(1).find(e=>/^-\d+$/.test(e))?.slice(1),r=di(e,1,[`-n`,`--lines`]),i=r.at(-1);i&&/^\d+$/.test(i)&&r.length===1&&(i=void 0);let a=t===`head`?`first`:`last`,o=n===`1`?`line`:`lines`;return n&&i?`show ${a} ${n} ${o} of ${i}`:n?`show ${a} ${n} ${o}`:i?`show ${i}`:`show ${t} output`}if(t===`cat`){let t=$(e,1);return t?`show ${t}`:`show output`}if(t===`sed`){let t=ui(e,[`-e`,`--expression`]),n=di(e,1,[`-e`,`--expression`,`-f`,`--file`]),r=t??n[0],i=t?n[0]:n[1];if(r){let e=(si(r)??r).replace(/\s+/g,``),t=e.match(/^([0-9]+),([0-9]+)p$/);if(t)return i?`print lines ${t[1]}-${t[2]} from ${i}`:`print lines ${t[1]}-${t[2]}`;let n=e.match(/^([0-9]+)p$/);if(n)return i?`print line ${n[1]} from ${i}`:`print line ${n[1]}`}return i?`run sed on ${i}`:`run sed transform`}if(t===`printf`||t===`echo`)return`print text`;if(t===`cp`||t===`mv`){let n=di(e,1,[`-t`,`--target-directory`,`-S`,`--suffix`]),r=n[0],i=n[1],a=t===`cp`?`copy`:`move`;return r&&i?`${a} ${r} to ${i}`:r?`${a} ${r}`:`${a} files`}if(t===`rm`){let t=$(e,1);return t?`remove ${t}`:`remove files`}if(t===`mkdir`){let t=$(e,1);return t?`create folder ${t}`:`create folder`}if(t===`touch`){let t=$(e,1);return t?`create file ${t}`:`create file`}if(t===`curl`||t===`wget`){let t=e.find(e=>/^https?:\/\//i.test(e));return t?`fetch ${t}`:`fetch url`}if(t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`){let n=di(e,1,[`--prefix`,`-C`,`--cwd`,`--config`]),r=n[0]??`command`;return{install:`install dependencies`,test:`run tests`,build:`run build`,start:`start app`,lint:`run lint`,run:n[1]?`run ${n[1]}`:`run script`}[r]??`run ${t} ${r}`}if(t===`node`||t===`python`||t===`python3`||t===`ruby`||t===`php`){if(e.slice(1).find(e=>e.startsWith(`<<`)))return`run ${t} inline script (heredoc)`;if((t===`node`?ui(e,[`-e`,`--eval`]):t===`python`||t===`python3`?ui(e,[`-c`]):void 0)!==void 0)return`run ${t} inline script`;let n=$(e,1,t===`node`?[`-e`,`--eval`,`-m`]:[`-c`,`-e`,`--eval`,`-m`]);return n?t===`node`?`${e.includes(`--check`)||e.includes(`-c`)?`check js syntax for`:`run node script`} ${n}`:`run ${t} ${n}`:`run ${t}`}if(t===`openclaw`){let t=$(e,1);return t?`run openclaw ${t}`:`run openclaw`}let n=$(e,1);return!n||n.length>48?`run ${t}`:/^[A-Za-z0-9._/-]+$/.test(n)?`run ${t} ${n}`:`run ${t}`}function Si(e){let t=gi(e);return t.length>1?`${xi(fi(ci(t[0])))} -> ${xi(fi(ci(t[t.length-1])))}${t.length>2?` (+${t.length-2} steps)`:``}`:xi(fi(ci(e)))}function Ci(e){let{command:t,chdirPath:n}=bi(e);if(!t)return n?{text:``,chdirPath:n}:void 0;let r=hi(t);if(r.length===0)return;let i=r.map(e=>Si(e));return{text:i.length===1?i[0]:i.join(` → `),chdirPath:n,allGeneric:i.every(e=>Ti(e))}}var wi=`check git.view git.show git.list git.switch git.create git.pull git.push git.fetch git.merge git.rebase git.stage git.restore git.reset git.stash git.search .find files.list files.show first.show last.print line.print text.copy .move .remove .create folder.create file.fetch http.install dependencies.run tests.run build.start app.run lint.run openclaw.run node script.run node .run python.run ruby.run php.run sed.run git .run npm .run pnpm .run yarn .run bun .check js syntax`.split(`.`);function Ti(e){return e===`run command`?!0:e.startsWith(`run `)?!wi.some(t=>e.startsWith(t)):!1}function Ei(e,t=120){let n=e.replace(/\s*\n\s*/g,` `).replace(/\s{2,}/g,` `).trim();return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function Di(e){let t=Jr(e);if(!t)return;let n=typeof t.command==`string`?t.command.trim():void 0;if(!n)return;let r=pi(n),i=Ci(r)??Ci(n),a=i?.text||`run command`,o=(typeof t.workdir==`string`?t.workdir:typeof t.cwd==`string`?t.cwd:void 0)?.trim()||i?.chdirPath||void 0,s=Ei(r);if(i?.allGeneric!==!1&&Ti(a))return o?`${s} (in ${o})`:s;let c=o?`${a} (in ${o})`:a;return s&&s!==c&&s!==a?`${c}\n\n\`${s}\``:c}function Oi(e,t){if(!(!e||!t))return e.actions?.[t]??void 0}function ki(e,t,n){if(n.mode===`first`){for(let r of t){let t=ei(ti(e,r),n.coerce);if(t)return t}return}let r=[];for(let i of t){let t=ei(ti(e,i),n.coerce);t&&r.push({label:n.formatKey?n.formatKey(i):i,value:t})}if(r.length===0)return;if(r.length===1)return r[0].value;let i=new Set,a=[];for(let e of r){let t=`${e.label}:${e.value}`;i.has(t)||(i.add(t),a.push(e))}if(a.length!==0)return a.slice(0,n.maxEntries??8).map(e=>`${e.label} ${e.value}`).join(` · `)}function Ai(e){let t=Oi(e.spec,e.action),n=e.toolKey===`web_search`?`search`:e.toolKey===`web_fetch`?`fetch`:e.toolKey.replace(/_/g,` `).replace(/\./g,` `),r=Zr(t?.label??e.action??n),i;e.toolKey===`exec`&&(i=Di(e.args)),!i&&e.toolKey===`read`&&(i=ri(e.args)),!i&&(e.toolKey===`write`||e.toolKey===`edit`||e.toolKey===`attach`)&&(i=ii(e.toolKey,e.args)),!i&&e.toolKey===`web_search`&&(i=ai(e.args)),!i&&e.toolKey===`web_fetch`&&(i=oi(e.args));let a=t?.detailKeys??e.spec?.detailKeys??e.fallbackDetailKeys??[];return!i&&a.length>0&&(i=ki(e.args,a,{mode:e.detailMode,coerce:e.detailCoerce,maxEntries:e.detailMaxEntries,formatKey:e.detailFormatKey})),!i&&e.meta&&(i=e.meta),{verb:r,detail:i}}function ji(e,t={}){if(!e)return;let n=e.includes(` · `)?e.split(` · `).map(e=>e.trim()).filter(e=>e.length>0).join(`, `):e;if(n)return t.prefixWithWith?`with ${n}`:n}var Mi={"🧩":`puzzle`,"🛠️":`wrench`,"🧰":`wrench`,"📖":`fileText`,"✍️":`edit`,"📝":`penLine`,"📎":`paperclip`,"🌐":`globe`,"📺":`monitor`,"🧾":`fileText`,"🔐":`settings`,"💻":`monitor`,"🔌":`plug`,"💬":`messageSquare`},Ni={icon:`messageSquare`,title:`Slack`,actions:{react:{label:`react`,detailKeys:[`channelId`,`messageId`,`emoji`]},reactions:{label:`reactions`,detailKeys:[`channelId`,`messageId`]},sendMessage:{label:`send`,detailKeys:[`to`,`content`]},editMessage:{label:`edit`,detailKeys:[`channelId`,`messageId`]},deleteMessage:{label:`delete`,detailKeys:[`channelId`,`messageId`]},readMessages:{label:`read messages`,detailKeys:[`channelId`,`limit`]},pinMessage:{label:`pin`,detailKeys:[`channelId`,`messageId`]},unpinMessage:{label:`unpin`,detailKeys:[`channelId`,`messageId`]},listPins:{label:`list pins`,detailKeys:[`channelId`]},memberInfo:{label:`member`,detailKeys:[`userId`]},emojiList:{label:`emoji list`}}};function Pi(e){return e?Mi[e]??`puzzle`:`puzzle`}function Fi(e){return{icon:Pi(e?.emoji),title:e?.title,label:e?.label,detailKeys:e?.detailKeys,actions:e?.actions}}var Ii=qr,Li=Fi(Ii.fallback??{emoji:`🧩`}),Ri=Object.fromEntries(Object.entries(Ii.tools??{}).map(([e,t])=>[e,Fi(t)]));Ri.slack=Ni;function zi(e){if(!e)return e;for(let t of[{re:/^\/Users\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^\/home\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^C:\\Users\\[^\\]+(\\|$)/i,replacement:`~$1`}])if(t.re.test(e))return e.replace(t.re,t.replacement);return e}function Bi(e){let t=Yr(e.name),n=t.toLowerCase(),r=Ri[n],i=r?.icon??Li.icon??`puzzle`,a=r?.title??Xr(t),o=r?.label??a,{verb:s,detail:c}=$r({toolKey:n,args:e.args,meta:e.meta,spec:r,fallbackDetailKeys:Li.detailKeys,detailMode:`first`,detailCoerce:{includeFalse:!0,includeZero:!0}});return c&&=zi(c),{name:t,icon:i,title:a,label:o,verb:s,detail:c}}function Vi(e){return ji(e.detail,{prefixWithWith:!0})}function Hi(e){let t=e.trim();if(t.startsWith(`{`)||t.startsWith(`[`))try{let e=JSON.parse(t);return"```json\n"+JSON.stringify(e,null,2)+"\n```"}catch{}return e}function Ui(e){let t=e.split(`
81
+ `}function Ur(e){return Hr({text:()=>e,label:Lr})}function Wr(e){let t=e,n=typeof t.role==`string`?t.role:`unknown`,r=typeof t.toolCallId==`string`||typeof t.tool_call_id==`string`,i=t.content,a=Array.isArray(i)?i:null,o=Array.isArray(a)&&a.some(e=>{let t=e,n=(typeof t.type==`string`?t.type:``).toLowerCase();return n===`toolresult`||n===`tool_result`}),s=typeof t.toolName==`string`||typeof t.tool_name==`string`;(r||o||s)&&(n=`toolResult`);let c=[];typeof t.content==`string`?c=[{type:`text`,text:t.content}]:Array.isArray(t.content)?c=t.content.map(e=>({type:e.type||`text`,text:e.text,name:e.name,args:e.args||e.arguments})):typeof t.text==`string`&&(c=[{type:`text`,text:t.text}]);let l=typeof t.timestamp==`number`?t.timestamp:Date.now(),u=typeof t.id==`string`?t.id:void 0;return(n===`user`||n===`User`)&&(c=c.map(e=>e.type===`text`&&typeof e.text==`string`?{...e,text:ne(e.text)}:e)),{role:n,content:c,timestamp:l,id:u}}function Gr(e){let t=e.toLowerCase();return e===`user`||e===`User`?e:e===`assistant`?`assistant`:e===`system`?`system`:t===`toolresult`||t===`tool_result`||t===`tool`||t===`function`?`tool`:e}function Kr(e){let t=e,n=typeof t.role==`string`?t.role.toLowerCase():``;return n===`toolresult`||n===`tool_result`}function qr(e){return e&&typeof e==`object`?e:void 0}function Jr(e){return(e??`tool`).trim()}function Yr(e){let t=e.replace(/_/g,` `).trim();return t?t.split(/\s+/).map(e=>e.length<=2&&e.toUpperCase()===e?e:`${e.at(0)?.toUpperCase()??``}${e.slice(1)}`).join(` `):`Tool`}function Xr(e){let t=e?.trim();if(t)return t.replace(/_/g,` `)}function Zr(e){if(!e||typeof e!=`object`)return;let t=e.action;if(typeof t==`string`)return t.trim()||void 0}function Qr(e){return ki({toolKey:e.toolKey,args:e.args,meta:e.meta,action:Zr(e.args),spec:e.spec,fallbackDetailKeys:e.fallbackDetailKeys,detailMode:e.detailMode,detailCoerce:e.detailCoerce,detailMaxEntries:e.detailMaxEntries,detailFormatKey:e.detailFormatKey})}function $r(e,t={}){let n=t.maxStringChars??160,r=t.maxArrayEntries??3;if(e!=null){if(typeof e==`string`){let t=e.trim();if(!t)return;let r=t.split(/\r?\n/)[0]?.trim()??``;return r?r.length>n?`${r.slice(0,Math.max(0,n-3))}…`:r:void 0}if(typeof e==`boolean`)return!e&&!t.includeFalse?void 0:e?`true`:`false`;if(typeof e==`number`)return Number.isFinite(e)?e===0&&!t.includeZero?void 0:String(e):t.includeNonFinite?String(e):void 0;if(Array.isArray(e)){let n=e.map(e=>$r(e,t)).filter(e=>!!e);if(n.length===0)return;let i=n.slice(0,r).join(`, `);return n.length>r?`${i}…`:i}}}function ei(e,t){if(!e||typeof e!=`object`)return;let n=e;for(let e of t.split(`.`)){if(!e||!n||typeof n!=`object`)return;n=n[e]}return n}function ti(e){let t=qr(e);if(t)for(let e of[t.path,t.file_path,t.filePath]){if(typeof e!=`string`)continue;let t=e.trim();if(t)return t}}function ni(e){let t=qr(e);if(!t)return;let n=ti(t);if(!n)return;let r=typeof t.offset==`number`&&Number.isFinite(t.offset)?Math.floor(t.offset):void 0,i=typeof t.limit==`number`&&Number.isFinite(t.limit)?Math.floor(t.limit):void 0,a=r===void 0?void 0:Math.max(1,r),o=i===void 0?void 0:Math.max(1,i);return a!==void 0&&o!==void 0?`${o===1?`line`:`lines`} ${a}-${a+o-1} from ${n}`:a===void 0?o===void 0?`from ${n}`:`first ${o} ${o===1?`line`:`lines`} of ${n}`:`from line ${a} in ${n}`}function ri(e,t){let n=qr(t);if(!n)return;let r=ti(n)??(typeof n.url==`string`?n.url.trim():void 0);if(!r)return;if(e===`attach`)return`from ${r}`;let i=e===`edit`?`in`:`to`,a=typeof n.content==`string`?n.content:typeof n.newText==`string`?n.newText:typeof n.new_string==`string`?n.new_string:void 0;return a&&a.length>0?`${i} ${r} (${a.length} chars)`:`${i} ${r}`}function ii(e){let t=qr(e);if(!t)return;let n=typeof t.query==`string`?t.query.trim():void 0,r=typeof t.count==`number`&&Number.isFinite(t.count)&&t.count>0?Math.floor(t.count):void 0;if(n)return r===void 0?`for "${n}"`:`for "${n}" (top ${r})`}function ai(e){let t=qr(e);if(!t)return;let n=typeof t.url==`string`?t.url.trim():void 0;if(!n)return;let r=typeof t.extractMode==`string`?t.extractMode.trim():void 0,i=typeof t.maxChars==`number`&&Number.isFinite(t.maxChars)&&t.maxChars>0?Math.floor(t.maxChars):void 0,a=[r?`mode ${r}`:void 0,i===void 0?void 0:`max ${i} chars`].filter(e=>!!e).join(`, `);return a?`from ${n} (${a})`:`from ${n}`}function oi(e){if(!e)return e;let t=e.trim();return t.length>=2&&(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))?t.slice(1,-1).trim():t}function si(e,t=48){if(!e)return[];let n=[],r=``,i,a=!1;for(let o=0;o<e.length;o+=1){let s=e[o];if(a){r+=s,a=!1;continue}if(s===`\\`){a=!0;continue}if(i){s===i?i=void 0:r+=s;continue}if(s===`"`||s===`'`){i=s;continue}if(/\s/.test(s)){if(!r)continue;if(n.push(r),n.length>=t)return n;r=``;continue}r+=s}return r&&n.push(r),n}function ci(e){if(!e)return;let t=oi(e)??e;return(t.split(/[/]/).at(-1)??t).trim().toLowerCase()}function li(e,t){let n=new Set(t);for(let r=0;r<e.length;r+=1){let i=e[r];if(i){if(n.has(i)){let t=e[r+1];if(t&&!t.startsWith(`-`))return t;continue}for(let e of t)if(e.startsWith(`--`)&&i.startsWith(`${e}=`))return i.slice(e.length+1)}}}function ui(e,t=1,n=[]){let r=[],i=new Set(n);for(let n=t;n<e.length;n+=1){let t=e[n];if(t){if(t===`--`){for(let t=n+1;t<e.length;t+=1){let n=e[t];n&&r.push(n)}break}if(t.startsWith(`--`)){if(t.includes(`=`))continue;i.has(t)&&(n+=1);continue}if(t.startsWith(`-`)){i.has(t)&&(n+=1);continue}r.push(t)}}return r}function $(e,t=1,n=[]){return ui(e,t,n)[0]}function di(e){if(e.length===0)return e;let t=0;if(ci(e[0])===`env`){for(t=1;t<e.length;){let n=e[t];if(!n)break;if(n.startsWith(`-`)){t+=1;continue}if(/^[A-Za-z_][A-Za-z0-9_]*=/.test(n)){t+=1;continue}break}return e.slice(t)}for(;t<e.length&&/^[A-Za-z_][A-Za-z0-9_]*=/.test(e[t]);)t+=1;return e.slice(t)}function fi(e){let t=si(e,10);if(t.length<3)return e;let n=ci(t[0]);if(!(n===`bash`||n===`sh`||n===`zsh`||n===`fish`))return e;let r=t.findIndex((e,t)=>t>0&&(e===`-c`||e===`-lc`||e===`-ic`));if(r===-1)return e;let i=t.slice(r+1).join(` `).trim();return i?oi(i)??e:e}function pi(e,t){let n,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(r){r=!1;continue}if(a===`\\`){r=!0;continue}if(n){a===n&&(n=void 0);continue}if(a===`"`||a===`'`){n=a;continue}if(t(a,i)===!1)return}}function mi(e){let t=[],n=0;return pi(e,(r,i)=>r===`;`?(t.push(e.slice(n,i)),n=i+1,!0):(r===`&`||r===`|`)&&e[i+1]===r?(t.push(e.slice(n,i)),n=i+2,!0):!0),t.push(e.slice(n)),t.map(e=>e.trim()).filter(e=>e.length>0)}function hi(e){let t=[],n=0;return pi(e,(r,i)=>(r===`|`&&e[i-1]!==`|`&&e[i+1]!==`|`&&(t.push(e.slice(n,i)),n=i+1),!0)),t.push(e.slice(n)),t.map(e=>e.trim()).filter(e=>e.length>0)}function gi(e){let t=si(e,3),n=ci(t[0]);if(n===`cd`||n===`pushd`)return t[1]||void 0}function _i(e){let t=ci(si(e,2)[0]);return t===`cd`||t===`pushd`||t===`popd`}function vi(e){return ci(si(e,2)[0])===`popd`}function yi(e){let t=e.trim(),n;for(let e=0;e<4;e+=1){let r;pi(t,(e,n)=>{if(e===`&`&&t[n+1]===`&`)return r={index:n,length:2},!1;if(e===`|`&&t[n+1]===`|`)return r={index:n,length:2,isOr:!0},!1;if(e===`;`||e===`
82
+ `)return r={index:n,length:1},!1});let i=(r?t.slice(0,r.index):t).trim(),a=(r?!r.isOr:e>0)&&_i(i);if(!(i.startsWith(`set `)||i.startsWith(`export `)||i.startsWith(`unset `)||a)||(a&&(n=vi(i)?void 0:gi(i)??n),t=r?t.slice(r.index+r.length).trimStart():``,!t))break}return{command:t.trim(),chdirPath:n}}function bi(e){if(e.length===0)return`run command`;let t=ci(e[0])??`command`;if(t===`git`){let t=new Set([`-C`,`-c`,`--git-dir`,`--work-tree`,`--namespace`,`--config-env`]),n=li(e,[`-C`]),r;for(let n=1;n<e.length;n+=1){let i=e[n];if(i){if(i===`--`){r=$(e,n+1);break}if(i.startsWith(`--`)){if(i.includes(`=`))continue;t.has(i)&&(n+=1);continue}if(i.startsWith(`-`)){t.has(i)&&(n+=1);continue}r=i;break}}let i={status:`check git status`,diff:`check git diff`,log:`view git history`,show:`show git object`,branch:`list git branches`,checkout:`switch git branch`,switch:`switch git branch`,commit:`create git commit`,pull:`pull git changes`,push:`push git changes`,fetch:`fetch git changes`,merge:`merge git changes`,rebase:`rebase git branch`,add:`stage git changes`,restore:`restore git files`,reset:`reset git state`,stash:`stash git changes`};return r&&i[r]?i[r]:!r||r.startsWith(`/`)||r.startsWith(`~`)||r.includes(`/`)?n?`run git command in ${n}`:`run git command`:`run git ${r}`}if(t===`grep`||t===`rg`||t===`ripgrep`){let t=ui(e,1,[`-e`,`--regexp`,`-f`,`--file`,`-m`,`--max-count`,`-A`,`--after-context`,`-B`,`--before-context`,`-C`,`--context`]),n=li(e,[`-e`,`--regexp`])??t[0],r=t.length>1?t.at(-1):void 0;return n?r?`search "${n}" in ${r}`:`search "${n}"`:`search text`}if(t===`find`){let t=e[1]&&!e[1].startsWith(`-`)?e[1]:`.`,n=li(e,[`-name`,`-iname`]);return n?`find files named "${n}" in ${t}`:`find files in ${t}`}if(t===`ls`){let t=$(e,1);return t?`list files in ${t}`:`list files`}if(t===`head`||t===`tail`){let n=li(e,[`-n`,`--lines`])??e.slice(1).find(e=>/^-\d+$/.test(e))?.slice(1),r=ui(e,1,[`-n`,`--lines`]),i=r.at(-1);i&&/^\d+$/.test(i)&&r.length===1&&(i=void 0);let a=t===`head`?`first`:`last`,o=n===`1`?`line`:`lines`;return n&&i?`show ${a} ${n} ${o} of ${i}`:n?`show ${a} ${n} ${o}`:i?`show ${i}`:`show ${t} output`}if(t===`cat`){let t=$(e,1);return t?`show ${t}`:`show output`}if(t===`sed`){let t=li(e,[`-e`,`--expression`]),n=ui(e,1,[`-e`,`--expression`,`-f`,`--file`]),r=t??n[0],i=t?n[0]:n[1];if(r){let e=(oi(r)??r).replace(/\s+/g,``),t=e.match(/^([0-9]+),([0-9]+)p$/);if(t)return i?`print lines ${t[1]}-${t[2]} from ${i}`:`print lines ${t[1]}-${t[2]}`;let n=e.match(/^([0-9]+)p$/);if(n)return i?`print line ${n[1]} from ${i}`:`print line ${n[1]}`}return i?`run sed on ${i}`:`run sed transform`}if(t===`printf`||t===`echo`)return`print text`;if(t===`cp`||t===`mv`){let n=ui(e,1,[`-t`,`--target-directory`,`-S`,`--suffix`]),r=n[0],i=n[1],a=t===`cp`?`copy`:`move`;return r&&i?`${a} ${r} to ${i}`:r?`${a} ${r}`:`${a} files`}if(t===`rm`){let t=$(e,1);return t?`remove ${t}`:`remove files`}if(t===`mkdir`){let t=$(e,1);return t?`create folder ${t}`:`create folder`}if(t===`touch`){let t=$(e,1);return t?`create file ${t}`:`create file`}if(t===`curl`||t===`wget`){let t=e.find(e=>/^https?:\/\//i.test(e));return t?`fetch ${t}`:`fetch url`}if(t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`){let n=ui(e,1,[`--prefix`,`-C`,`--cwd`,`--config`]),r=n[0]??`command`;return{install:`install dependencies`,test:`run tests`,build:`run build`,start:`start app`,lint:`run lint`,run:n[1]?`run ${n[1]}`:`run script`}[r]??`run ${t} ${r}`}if(t===`node`||t===`python`||t===`python3`||t===`ruby`||t===`php`){if(e.slice(1).find(e=>e.startsWith(`<<`)))return`run ${t} inline script (heredoc)`;if((t===`node`?li(e,[`-e`,`--eval`]):t===`python`||t===`python3`?li(e,[`-c`]):void 0)!==void 0)return`run ${t} inline script`;let n=$(e,1,t===`node`?[`-e`,`--eval`,`-m`]:[`-c`,`-e`,`--eval`,`-m`]);return n?t===`node`?`${e.includes(`--check`)||e.includes(`-c`)?`check js syntax for`:`run node script`} ${n}`:`run ${t} ${n}`:`run ${t}`}if(t===`openclaw`){let t=$(e,1);return t?`run openclaw ${t}`:`run openclaw`}let n=$(e,1);return!n||n.length>48?`run ${t}`:/^[A-Za-z0-9._/-]+$/.test(n)?`run ${t} ${n}`:`run ${t}`}function xi(e){let t=hi(e);return t.length>1?`${bi(di(si(t[0])))} -> ${bi(di(si(t[t.length-1])))}${t.length>2?` (+${t.length-2} steps)`:``}`:bi(di(si(e)))}function Si(e){let{command:t,chdirPath:n}=yi(e);if(!t)return n?{text:``,chdirPath:n}:void 0;let r=mi(t);if(r.length===0)return;let i=r.map(e=>xi(e));return{text:i.length===1?i[0]:i.join(` → `),chdirPath:n,allGeneric:i.every(e=>wi(e))}}var Ci=`check git.view git.show git.list git.switch git.create git.pull git.push git.fetch git.merge git.rebase git.stage git.restore git.reset git.stash git.search .find files.list files.show first.show last.print line.print text.copy .move .remove .create folder.create file.fetch http.install dependencies.run tests.run build.start app.run lint.run openclaw.run node script.run node .run python.run ruby.run php.run sed.run git .run npm .run pnpm .run yarn .run bun .check js syntax`.split(`.`);function wi(e){return e===`run command`?!0:e.startsWith(`run `)?!Ci.some(t=>e.startsWith(t)):!1}function Ti(e,t=120){let n=e.replace(/\s*\n\s*/g,` `).replace(/\s{2,}/g,` `).trim();return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function Ei(e){let t=qr(e);if(!t)return;let n=typeof t.command==`string`?t.command.trim():void 0;if(!n)return;let r=fi(n),i=Si(r)??Si(n),a=i?.text||`run command`,o=(typeof t.workdir==`string`?t.workdir:typeof t.cwd==`string`?t.cwd:void 0)?.trim()||i?.chdirPath||void 0,s=Ti(r);if(i?.allGeneric!==!1&&wi(a))return o?`${s} (in ${o})`:s;let c=o?`${a} (in ${o})`:a;return s&&s!==c&&s!==a?`${c}\n\n\`${s}\``:c}function Di(e,t){if(!(!e||!t))return e.actions?.[t]??void 0}function Oi(e,t,n){if(n.mode===`first`){for(let r of t){let t=$r(ei(e,r),n.coerce);if(t)return t}return}let r=[];for(let i of t){let t=$r(ei(e,i),n.coerce);t&&r.push({label:n.formatKey?n.formatKey(i):i,value:t})}if(r.length===0)return;if(r.length===1)return r[0].value;let i=new Set,a=[];for(let e of r){let t=`${e.label}:${e.value}`;i.has(t)||(i.add(t),a.push(e))}if(a.length!==0)return a.slice(0,n.maxEntries??8).map(e=>`${e.label} ${e.value}`).join(` · `)}function ki(e){let t=Di(e.spec,e.action),n=e.toolKey===`web_search`?`search`:e.toolKey===`web_fetch`?`fetch`:e.toolKey.replace(/_/g,` `).replace(/\./g,` `),r=Xr(t?.label??e.action??n),i;e.toolKey===`exec`&&(i=Ei(e.args)),!i&&e.toolKey===`read`&&(i=ni(e.args)),!i&&(e.toolKey===`write`||e.toolKey===`edit`||e.toolKey===`attach`)&&(i=ri(e.toolKey,e.args)),!i&&e.toolKey===`web_search`&&(i=ii(e.args)),!i&&e.toolKey===`web_fetch`&&(i=ai(e.args));let a=t?.detailKeys??e.spec?.detailKeys??e.fallbackDetailKeys??[];return!i&&a.length>0&&(i=Oi(e.args,a,{mode:e.detailMode,coerce:e.detailCoerce,maxEntries:e.detailMaxEntries,formatKey:e.detailFormatKey})),!i&&e.meta&&(i=e.meta),{verb:r,detail:i}}function Ai(e,t={}){if(!e)return;let n=e.includes(` · `)?e.split(` · `).map(e=>e.trim()).filter(e=>e.length>0).join(`, `):e;if(n)return t.prefixWithWith?`with ${n}`:n}var ji={version:1,fallback:{emoji:`🧩`,detailKeys:[`command`,`path`,`url`,`targetUrl`,`targetId`,`ref`,`element`,`node`,`nodeId`,`id`,`requestId`,`to`,`channelId`,`guildId`,`userId`,`name`,`query`,`pattern`,`messageId`]},tools:{bash:{emoji:`🛠️`,title:`Bash`,detailKeys:[`command`]},process:{emoji:`🧰`,title:`Process`,detailKeys:[`sessionId`]},read:{emoji:`📖`,title:`Read`,detailKeys:[`path`]},write:{emoji:`✍️`,title:`Write`,detailKeys:[`path`]},edit:{emoji:`📝`,title:`Edit`,detailKeys:[`path`]},attach:{emoji:`📎`,title:`Attach`,detailKeys:[`path`,`url`,`fileName`]},browser:{emoji:`🌐`,title:`Browser`,actions:{status:{label:`status`},start:{label:`start`},stop:{label:`stop`},tabs:{label:`tabs`},open:{label:`open`,detailKeys:[`targetUrl`]},focus:{label:`focus`,detailKeys:[`targetId`]},close:{label:`close`,detailKeys:[`targetId`]},snapshot:{label:`snapshot`,detailKeys:[`targetUrl`,`targetId`,`ref`,`element`,`format`]},screenshot:{label:`screenshot`,detailKeys:[`targetUrl`,`targetId`,`ref`,`element`]},navigate:{label:`navigate`,detailKeys:[`targetUrl`,`targetId`]},console:{label:`console`,detailKeys:[`level`,`targetId`]},pdf:{label:`pdf`,detailKeys:[`targetId`]},upload:{label:`upload`,detailKeys:[`paths`,`ref`,`inputRef`,`element`,`targetId`]},dialog:{label:`dialog`,detailKeys:[`accept`,`promptText`,`targetId`]},act:{label:`act`,detailKeys:[`request.kind`,`request.ref`,`request.selector`,`request.text`,`request.value`]}}},canvas:{emoji:`🖼️`,title:`Canvas`,actions:{present:{label:`present`,detailKeys:[`target`,`node`,`nodeId`]},hide:{label:`hide`,detailKeys:[`node`,`nodeId`]},navigate:{label:`navigate`,detailKeys:[`url`,`node`,`nodeId`]},eval:{label:`eval`,detailKeys:[`javaScript`,`node`,`nodeId`]},snapshot:{label:`snapshot`,detailKeys:[`format`,`node`,`nodeId`]},a2ui_push:{label:`A2UI push`,detailKeys:[`jsonlPath`,`node`,`nodeId`]},a2ui_reset:{label:`A2UI reset`,detailKeys:[`node`,`nodeId`]}}},nodes:{emoji:`📱`,title:`Nodes`,actions:{status:{label:`status`},describe:{label:`describe`,detailKeys:[`node`,`nodeId`]},pending:{label:`pending`},approve:{label:`approve`,detailKeys:[`requestId`]},reject:{label:`reject`,detailKeys:[`requestId`]},notify:{label:`notify`,detailKeys:[`node`,`nodeId`,`title`,`body`]},camera_snap:{label:`camera snap`,detailKeys:[`node`,`nodeId`,`facing`,`deviceId`]},camera_list:{label:`camera list`,detailKeys:[`node`,`nodeId`]},camera_clip:{label:`camera clip`,detailKeys:[`node`,`nodeId`,`facing`,`duration`,`durationMs`]},screen_record:{label:`screen record`,detailKeys:[`node`,`nodeId`,`duration`,`durationMs`,`fps`,`screenIndex`]}}},cron:{emoji:`⏰`,title:`Cron`,actions:{status:{label:`status`},list:{label:`list`},add:{label:`add`,detailKeys:[`job.name`,`job.id`,`job.schedule`,`job.cron`]},update:{label:`update`,detailKeys:[`id`]},remove:{label:`remove`,detailKeys:[`id`]},run:{label:`run`,detailKeys:[`id`]},runs:{label:`runs`,detailKeys:[`id`]},wake:{label:`wake`,detailKeys:[`text`,`mode`]}}},gateway:{emoji:`🔌`,title:`Gateway`,actions:{restart:{label:`restart`,detailKeys:[`reason`,`delayMs`]}}},whatsapp_login:{emoji:`🟢`,title:`WhatsApp Login`,actions:{start:{label:`start`},wait:{label:`wait`}}},discord:{emoji:`💬`,title:`Discord`,actions:{react:{label:`react`,detailKeys:[`channelId`,`messageId`,`emoji`]},reactions:{label:`reactions`,detailKeys:[`channelId`,`messageId`]},sticker:{label:`sticker`,detailKeys:[`to`,`stickerIds`]},poll:{label:`poll`,detailKeys:[`question`,`to`]},permissions:{label:`permissions`,detailKeys:[`channelId`]},readMessages:{label:`read messages`,detailKeys:[`channelId`,`limit`]},sendMessage:{label:`send`,detailKeys:[`to`,`content`]},editMessage:{label:`edit`,detailKeys:[`channelId`,`messageId`]},deleteMessage:{label:`delete`,detailKeys:[`channelId`,`messageId`]},threadCreate:{label:`thread create`,detailKeys:[`channelId`,`name`]},threadList:{label:`thread list`,detailKeys:[`guildId`,`channelId`]},threadReply:{label:`thread reply`,detailKeys:[`channelId`,`content`]},pinMessage:{label:`pin`,detailKeys:[`channelId`,`messageId`]},unpinMessage:{label:`unpin`,detailKeys:[`channelId`,`messageId`]},listPins:{label:`list pins`,detailKeys:[`channelId`]},searchMessages:{label:`search`,detailKeys:[`guildId`,`content`]},memberInfo:{label:`member`,detailKeys:[`guildId`,`userId`]},roleInfo:{label:`roles`,detailKeys:[`guildId`]},emojiList:{label:`emoji list`,detailKeys:[`guildId`]},roleAdd:{label:`role add`,detailKeys:[`guildId`,`userId`,`roleId`]},roleRemove:{label:`role remove`,detailKeys:[`guildId`,`userId`,`roleId`]},channelInfo:{label:`channel`,detailKeys:[`channelId`]},channelList:{label:`channels`,detailKeys:[`guildId`]},voiceStatus:{label:`voice`,detailKeys:[`guildId`,`userId`]},eventList:{label:`events`,detailKeys:[`guildId`]},eventCreate:{label:`event create`,detailKeys:[`guildId`,`name`]},timeout:{label:`timeout`,detailKeys:[`guildId`,`userId`]},kick:{label:`kick`,detailKeys:[`guildId`,`userId`]},ban:{label:`ban`,detailKeys:[`guildId`,`userId`]}}}}},Mi={"🧩":`puzzle`,"🛠️":`wrench`,"🧰":`wrench`,"📖":`fileText`,"✍️":`edit`,"📝":`penLine`,"📎":`paperclip`,"🌐":`globe`,"📺":`monitor`,"🧾":`fileText`,"🔐":`settings`,"💻":`monitor`,"🔌":`plug`,"💬":`messageSquare`},Ni={icon:`messageSquare`,title:`Slack`,actions:{react:{label:`react`,detailKeys:[`channelId`,`messageId`,`emoji`]},reactions:{label:`reactions`,detailKeys:[`channelId`,`messageId`]},sendMessage:{label:`send`,detailKeys:[`to`,`content`]},editMessage:{label:`edit`,detailKeys:[`channelId`,`messageId`]},deleteMessage:{label:`delete`,detailKeys:[`channelId`,`messageId`]},readMessages:{label:`read messages`,detailKeys:[`channelId`,`limit`]},pinMessage:{label:`pin`,detailKeys:[`channelId`,`messageId`]},unpinMessage:{label:`unpin`,detailKeys:[`channelId`,`messageId`]},listPins:{label:`list pins`,detailKeys:[`channelId`]},memberInfo:{label:`member`,detailKeys:[`userId`]},emojiList:{label:`emoji list`}}};function Pi(e){return e?Mi[e]??`puzzle`:`puzzle`}function Fi(e){return{icon:Pi(e?.emoji),title:e?.title,label:e?.label,detailKeys:e?.detailKeys,actions:e?.actions}}var Ii=ji,Li=Fi(Ii.fallback??{emoji:`🧩`}),Ri=Object.fromEntries(Object.entries(Ii.tools??{}).map(([e,t])=>[e,Fi(t)]));Ri.slack=Ni;function zi(e){if(!e)return e;for(let t of[{re:/^\/Users\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^\/home\/[^/]+(\/|$)/,replacement:`~$1`},{re:/^C:\\Users\\[^\\]+(\\|$)/i,replacement:`~$1`}])if(t.re.test(e))return e.replace(t.re,t.replacement);return e}function Bi(e){let t=Jr(e.name),n=t.toLowerCase(),r=Ri[n],i=r?.icon??Li.icon??`puzzle`,a=r?.title??Yr(t),o=r?.label??a,{verb:s,detail:c}=Qr({toolKey:n,args:e.args,meta:e.meta,spec:r,fallbackDetailKeys:Li.detailKeys,detailMode:`first`,detailCoerce:{includeFalse:!0,includeZero:!0}});return c&&=zi(c),{name:t,icon:i,title:a,label:o,verb:s,detail:c}}function Vi(e){return Ai(e.detail,{prefixWithWith:!0})}function Hi(e){let t=e.trim();if(t.startsWith(`{`)||t.startsWith(`[`))try{let e=JSON.parse(t);return"```json\n"+JSON.stringify(e,null,2)+"\n```"}catch{}return e}function Ui(e){let t=e.split(`
83
83
  `),n=t.slice(0,2),r=n.join(`
84
84
  `);return r.length>100?r.slice(0,100)+`…`:n.length<t.length?r+`…`:r}function Wi(e){let t=e,n=Ki(t.content),r=[];for(let e of n){let t=(typeof e.type==`string`?e.type:``).toLowerCase();([`toolcall`,`tool_call`,`tooluse`,`tool_use`].includes(t)||typeof e.name==`string`&&e.arguments!=null)&&r.push({kind:`call`,name:e.name??`tool`,args:qi(e.arguments??e.args)})}for(let e of n){let t=(typeof e.type==`string`?e.type:``).toLowerCase();if(t!==`toolresult`&&t!==`tool_result`)continue;let n=Ji(e),i=typeof e.name==`string`?e.name:`tool`;r.push({kind:`result`,name:i,text:n})}if(Kr(e)&&!r.some(e=>e.kind===`result`)){let n=typeof t.toolName==`string`&&t.toolName||typeof t.tool_name==`string`&&t.tool_name||`tool`,i=de(e)??void 0;r.push({kind:`result`,name:n,text:i})}return r}function Gi(e,t){let r=Bi({name:e.name,args:e.args}),i=Vi(r),a=!!e.text?.trim(),o=!!t,s=o?()=>{if(a){t(Hi(e.text));return}t(`## ${r.label}\n\n${i?`**Command:** \`${i}\`\n\n`:``}*No output — tool completed successfully.*`)}:void 0,c=a&&(e.text?.length??0)<=80,l=a&&!c,f=a&&c,p=!a;return u`
85
85
  <div
@@ -372,4 +372,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
372
372
  </div>
373
373
  </section>
374
374
  `}var ha=200;function ga(e){let t=[],n=null;for(let r of e){if(r.kind!==`message`){n&&=(t.push(n),null),t.push(r);continue}let e=Wr(r.message),i=Gr(e.role),a=e.timestamp||Date.now();!n||n.role!==i?(n&&t.push(n),n={kind:`group`,key:`group:${i}:${r.key}`,role:i,messages:[{message:r.message,key:r.key}],timestamp:a,isStreaming:!1}):n.messages.push({message:r.message,key:r.key})}return n&&t.push(n),t}function _a(e){let t=[],n=Array.isArray(e.messages)?e.messages:[],r=Array.isArray(e.toolMessages)?e.toolMessages:[],i=Math.max(0,n.length-ha);i>0&&t.push({kind:`message`,key:`chat:history:notice`,message:{role:`system`,content:`Showing last ${ha} messages (${i} hidden).`,timestamp:Date.now()}});for(let r=i;r<n.length;r++){let i=n[r],a=Wr(i),o=i.__openclaw;if(o&&o.kind===`compaction`){t.push({kind:`divider`,key:typeof o.id==`string`?`divider:compaction:${o.id}`:`divider:compaction:${a.timestamp}:${r}`,label:`Compaction`,timestamp:a.timestamp??Date.now()});continue}!e.showThinking&&a.role.toLowerCase()===`toolresult`||t.push({kind:`message`,key:va(i,r),message:i})}if(e.showThinking)for(let e=0;e<r.length;e++)t.push({kind:`message`,key:va(r[e],e+n.length),message:r[e]});if(e.stream!==null){let n=`stream:${e.sessionKey}:${e.streamStartedAt??`live`}`;e.stream.trim().length>0?t.push({kind:`stream`,key:n,text:e.stream,startedAt:e.streamStartedAt??Date.now()}):t.push({kind:`reading-indicator`,key:n})}return ga(t)}function va(e,t){let n=e,r=typeof n.toolCallId==`string`?n.toolCallId:``;if(r)return`tool:${r}`;let i=typeof n.id==`string`?n.id:``;if(i)return`msg:${i}`;let a=typeof n.messageId==`string`?n.messageId:``;if(a)return`msg:${a}`;let o=typeof n.timestamp==`number`?n.timestamp:null,s=typeof n.role==`string`?n.role:`unknown`;return o==null?`msg:${s}:${t}`:`msg:${s}:${o}:${t}`}export{Te as a,f as c,Ee as i,wr as n,ue as o,Ne as r,g as s,aa as t};
375
- //# sourceMappingURL=view-chat-DnpkK2I4.js.map
375
+ //# sourceMappingURL=view-chat-ByDyhnLw.js.map