@nikolasp98/minion 2026.6.14-dev.20260616061802 → 2026.6.16-dev

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 (393) hide show
  1. package/dist/{acp-cli-Du7NWZu3.js → acp-cli-2xKZfd6v.js} +3 -3
  2. package/dist/{acp-cli-BmKOFno7.js → acp-cli-q8e4aJoa.js} +3 -3
  3. package/dist/{agent-6dzad4Vk.js → agent-CZq9c4BW.js} +13 -13
  4. package/dist/{agent-step-C3wXb9Cx.js → agent-step-D5w2xNfi.js} +2 -2
  5. package/dist/{agent-step-Bf1GImWB.js → agent-step-DnVo1ws9.js} +2 -2
  6. package/dist/{agents-Dw2xlB7X.js → agents-3owoMugG.js} +7 -7
  7. package/dist/{agents-list-tool-Dq0lIpTn.js → agents-list-tool-Bjcc4I_6.js} +3 -3
  8. package/dist/{agents-list-tool-D9mHFLLa.js → agents-list-tool-CzUTgXov.js} +3 -3
  9. package/dist/{agents.config-1imA1H12.js → agents.config-Di1Fb5KI.js} +12 -12
  10. package/dist/{audit-DmbpL3cv.js → audit-B8L_aShb.js} +10 -10
  11. package/dist/{audit-DmJGMt0j.js → audit-Ck6MCUxx.js} +10 -10
  12. package/dist/{auth-choice-neer30p3.js → auth-choice-B6U5biA7.js} +4 -4
  13. package/dist/{auth-choice-CAmZkQLg.js → auth-choice-DmpOyRlb.js} +4 -4
  14. package/dist/{banner-DpI_geg3.js → banner-Be2ToLay.js} +1 -1
  15. package/dist/{browser-cli-z39mB4Us.js → browser-cli-BvtSNPci.js} +3 -3
  16. package/dist/{browser-cli-DDHEGwdS.js → browser-cli-De-S5eSp.js} +3 -3
  17. package/dist/{browser-tool-CWG74LXa.js → browser-tool-BVAlCkv9.js} +7 -7
  18. package/dist/{browser-tool-CZsdYOyF.js → browser-tool-CTNhVzit.js} +7 -7
  19. package/dist/build-info.json +3 -3
  20. package/dist/bundled/boot-md/handler.js +489 -42
  21. package/dist/bundled/kg-message-sync/handler.js +6 -2
  22. package/dist/bundled/session-memory/handler.js +47 -1
  23. package/dist/{call-DkT-xA-u.js → call-BrDNyQiZ.js} +2 -2
  24. package/dist/{call-COjGFB_A.js → call-Di0NGY7s.js} +2 -2
  25. package/dist/{call-BKa0221r.js → call-QNmBuec5.js} +1 -1
  26. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  27. package/dist/{canvas-tool-yqzOmVk8.js → canvas-tool-C8kJ8X6t.js} +2 -2
  28. package/dist/{canvas-tool-D7utVUj9.js → canvas-tool-v_tDod0l.js} +2 -2
  29. package/dist/{channel-options-DDJR7t6c.js → channel-options-BgB_XE_R.js} +1 -1
  30. package/dist/{channel-options-wAeX19Sd.js → channel-options-C3G3uvc8.js} +1 -1
  31. package/dist/{channel-web-B731iz_S.js → channel-web-C7erWB8c.js} +7 -7
  32. package/dist/{channels-cli-DyZ1QjyT.js → channels-cli-CWL9_dUC.js} +9 -9
  33. package/dist/{channels-cli-B2lgO976.js → channels-cli-D0WU7aEW.js} +9 -9
  34. package/dist/{chrome-BYfNS8BB.js → chrome-BUH9jMtc.js} +1 -1
  35. package/dist/{chrome-DKRiholg.js → chrome-WqxB18cs.js} +2 -2
  36. package/dist/{chrome-C3MXJRdA.js → chrome-xmfH0ICu.js} +2 -2
  37. package/dist/{clawbot-cli-ByrTjcjf.js → clawbot-cli-BqvWmOf2.js} +1 -1
  38. package/dist/{clawbot-cli-C-8EFRKv.js → clawbot-cli-Cy4xxEwA.js} +1 -1
  39. package/dist/cli/daemon-cli.js +1 -1
  40. package/dist/{cli-DNiohgQu.js → cli-C6-qelzK.js} +3 -3
  41. package/dist/{cli-D-m3umOT.js → cli-COPy2u3N.js} +3 -3
  42. package/dist/{client-D2hf2jQ7.js → client-BIS2Uayk.js} +4 -4
  43. package/dist/{client-BQN-LuPk.js → client-BoM5FwV4.js} +4 -4
  44. package/dist/{client-xu3whbFC.js → client-CTr2olAS.js} +4 -4
  45. package/dist/{command-registry-CB0tYTNA.js → command-registry-BSAY6wdm.js} +14 -14
  46. package/dist/{commands-registry-PW7IInMR.js → commands-registry-SXjoCA7i.js} +2 -2
  47. package/dist/{commands-registry-dia3m7-M.js → commands-registry-UnBqSA67.js} +2 -2
  48. package/dist/{completion-cli-Dg5pvBMY.js → completion-cli--3eqgAwK.js} +1 -1
  49. package/dist/{completion-cli-CSzxM5wY.js → completion-cli-RDTl_9qR.js} +2 -2
  50. package/dist/{config-BBoAK0dA.js → config-CkMQunWU.js} +6 -2
  51. package/dist/{config-ClkrcdId.js → config-DHYot764.js} +2 -2
  52. package/dist/{config-BgqD6SVw.js → config-DJTLRK5S.js} +2 -2
  53. package/dist/{config-cli-Denu0eEu.js → config-cli-BUCeVfP_.js} +4 -4
  54. package/dist/{config-cli-DtAjejub.js → config-cli-C1RrXpz0.js} +4 -4
  55. package/dist/{config-guard-DF1WNs2e.js → config-guard-CVx36OOi.js} +3 -3
  56. package/dist/config-guard-Csz0-uEX.js +2 -0
  57. package/dist/{config-validation-mmyHFUrK.js → config-validation-BVN3OEOd.js} +2 -2
  58. package/dist/{config-validation-lm5BwYiy.js → config-validation-C3jULSMI.js} +2 -2
  59. package/dist/{configure-CxrB1V4C.js → configure-CQEz5KQ3.js} +15 -15
  60. package/dist/{configure-CroxylRT.js → configure-akx6bWAt.js} +15 -15
  61. package/dist/{cron-cli-CYFkAl-f.js → cron-cli-BoMJUHUX.js} +2 -2
  62. package/dist/{cron-cli-CMjG3iLg.js → cron-cli-DvtMDSN2.js} +1 -1
  63. package/dist/{cron-tool-B3ffaxAO.js → cron-tool-Dcr3QMih.js} +5 -5
  64. package/dist/{cron-tool-BnUUPLV3.js → cron-tool-DllqQBKI.js} +5 -5
  65. package/dist/{daemon-cli-Bs0GD5xF.js → daemon-cli-CHfZAu4w.js} +9 -9
  66. package/dist/{daemon-cli-dauqwBcE.js → daemon-cli-D7K6zRR6.js} +9 -9
  67. package/dist/daemon-cli.js +6 -2
  68. package/dist/daemon-install-helpers-Ls_foXgf.js +2 -0
  69. package/dist/daemon-install-helpers-VzSaKa-j.js +2 -0
  70. package/dist/{daemon-runtime-C-XyxJRT.js → daemon-runtime--L-FasK6.js} +1 -1
  71. package/dist/{daemon-runtime-BLp3uThx.js → daemon-runtime-DKTkFmdZ.js} +1 -1
  72. package/dist/{deliver-C40KRMzm.js → deliver-BCijF1xe.js} +4 -4
  73. package/dist/{deliver-C5vVViLg.js → deliver-DiDYkpmh.js} +5 -5
  74. package/dist/{deliver-Dhut24vc.js → deliver-Ds0o_rCY.js} +3 -3
  75. package/dist/{deps-DRyTOIPO.js → deps-DFeGFeii.js} +6 -6
  76. package/dist/{devices-cli-DFPiK0W5.js → devices-cli-C9OvVBEs.js} +1 -1
  77. package/dist/{devices-cli-BfwxECLu.js → devices-cli-D4YJarjz.js} +1 -1
  78. package/dist/{diagnostic-Bzd3eHBU.js → diagnostic-CVAiT8Yi.js} +2 -2
  79. package/dist/{diagnostic-session-state-C8e7GxAm.js → diagnostic-session-state-Cj5nMvNL.js} +1 -1
  80. package/dist/{directory-cli-BX_a06o7.js → directory-cli--LuldZqc.js} +2 -2
  81. package/dist/{directory-cli-BQlGeeQK.js → directory-cli-DHpksyLI.js} +2 -2
  82. package/dist/{dispatcher-BWcYLowQ.js → dispatcher-D46WCdTe.js} +7 -7
  83. package/dist/{dispatcher-DefEQC4n.js → dispatcher-D8fgAnwH.js} +7 -7
  84. package/dist/{dm-policy-shared-Dm70u4Yr.js → dm-policy-shared-CEUsAI0F.js} +1 -1
  85. package/dist/{dm-policy-shared-DeX6SUMT.js → dm-policy-shared-DZglJJMa.js} +1 -1
  86. package/dist/{dns-cli-CxMaD4cI.js → dns-cli-C4L7EzEY.js} +2 -2
  87. package/dist/{dns-cli-DAdvx6qq.js → dns-cli-wSFONc42.js} +2 -2
  88. package/dist/{docs-cli-BR1YXIH4.js → docs-cli-4Dzg7LrJ.js} +1 -1
  89. package/dist/{docs-cli-BR8IKtP3.js → docs-cli-BWUGypxO.js} +1 -1
  90. package/dist/doctor-completion-B4bzzPyA.js +2 -0
  91. package/dist/doctor-completion-CE9xjPcf.js +2 -0
  92. package/dist/{doctor-completion-C3YAoPkP.js → doctor-completion-COKl8-PU.js} +1 -1
  93. package/dist/{doctor-completion-CkIy7FpB.js → doctor-completion-DPjvm1G7.js} +1 -1
  94. package/dist/{doctor-config-flow-CsP66Ij5.js → doctor-config-flow-CCqETtju.js} +4 -4
  95. package/dist/{doctor-config-flow-D_WRZLT3.js → doctor-config-flow-CRibe33c.js} +4 -4
  96. package/dist/entry.js +1 -1
  97. package/dist/{exec-approvals-cli-CLIzgYS8.js → exec-approvals-cli-CCqVDSOe.js} +2 -2
  98. package/dist/{exec-approvals-cli-DW2-7TEV.js → exec-approvals-cli-RRZ5wIP0.js} +2 -2
  99. package/dist/extensionAPI.d.ts +36 -2
  100. package/dist/extensionAPI.js +263 -20
  101. package/dist/{gateway-Duqy39t3.js → gateway-Bvd5CqY4.js} +3 -3
  102. package/dist/{gateway-CqhiWZQd.js → gateway-D_kwhuup.js} +3 -3
  103. package/dist/{gateway-cli-CUrxOlB4.js → gateway-cli-BbuSOWKq.js} +328 -244
  104. package/dist/{gateway-cli-BrM4d8E7.js → gateway-cli-C-AMSwgo.js} +324 -240
  105. package/dist/{gateway-0sVK3Rjy.js → gateway-q_fM0u-m.js} +2 -2
  106. package/dist/{gateway-rpc-BGgh3mTl.js → gateway-rpc-Ed0F1N_m.js} +1 -1
  107. package/dist/{gateway-rpc-9WQJwkTJ.js → gateway-rpc-J14XBNuM.js} +1 -1
  108. package/dist/{gateway-tool-DtlbDV6N.js → gateway-tool-Bi96OPGe.js} +3 -3
  109. package/dist/{gateway-tool-CMd3r3O5.js → gateway-tool-CNaxsMbd.js} +3 -3
  110. package/dist/{github-copilot-auth-Dh5sombA.js → github-copilot-auth-BmlL3P7c.js} +2 -2
  111. package/dist/{github-copilot-auth-ClDHXpfT.js → github-copilot-auth-DhjScF3O.js} +2 -2
  112. package/dist/{gmail-Dkq3kngs.js → gmail-BuCz-KEp.js} +1 -1
  113. package/dist/{gmail-DpPYd91j.js → gmail-C1O6grHu.js} +1 -1
  114. package/dist/{health-BlZEOPXK.js → health-6TTjEZoo.js} +8 -8
  115. package/dist/{health-BJ-Irw3K.js → health-BJbAa4df.js} +8 -8
  116. package/dist/{hooks-cli-Bqd1BR2r.js → hooks-cli-C0Z9dRtP.js} +2 -2
  117. package/dist/{hooks-cli-CR_bwhdf.js → hooks-cli-DFrRHJ1j.js} +2 -2
  118. package/dist/{host-D3VZGype.js → host-C8oRBLB6.js} +1 -1
  119. package/dist/{host-CafVbu36.js → host-DCfZcVR_.js} +1 -1
  120. package/dist/{image-tool-CwCxITcF.js → image-tool-D_dhIXLT.js} +2 -2
  121. package/dist/{image-tool-BY8NbIQs.js → image-tool-y-FDf6-M.js} +2 -2
  122. package/dist/index.d.ts +36 -2
  123. package/dist/index.js +10 -10
  124. package/dist/{io-TKYkFbcF.js → io-C_Q6AU5E.js} +2 -2
  125. package/dist/{io-oiyyZuuG.js → io-CpUiX-Lv.js} +2 -2
  126. package/dist/{ir-CP9ltYx0.js → ir-D0vxg3iM.js} +2 -2
  127. package/dist/{knowledge-graph-Dd0rSl0Q.js → knowledge-graph-BFnL_feN.js} +1 -1
  128. package/dist/{lifecycle-core-C7W7YZwn.js → lifecycle-core-CCUOBmZs.js} +3 -3
  129. package/dist/{lifecycle-core-BQztQGrv.js → lifecycle-core-CX37YE4Z.js} +3 -3
  130. package/dist/llm-slug-generator.js +47 -1
  131. package/dist/{logs-cli-CdAJHTuP.js → logs-cli-BYdqoMkJ.js} +2 -2
  132. package/dist/{logs-cli-lcuW5kPv.js → logs-cli-Comxq7pP.js} +2 -2
  133. package/dist/{manager-DeR0znMP.js → manager-DvUEsXx3.js} +1 -1
  134. package/dist/{memory-cli-BxVGlaEm.js → memory-cli-Bz--RMDo.js} +3 -3
  135. package/dist/{memory-cli-Y_w-AsVt.js → memory-cli-ilkHc_D4.js} +3 -3
  136. package/dist/{message-action-runner-CE4bDq6V.js → message-action-runner-BZQOV03k.js} +9 -9
  137. package/dist/{message-action-runner-BdclEzxx.js → message-action-runner-J8W9BPhj.js} +9 -9
  138. package/dist/{message-tool-BpFLUe6E.js → message-tool-BHJpugQ6.js} +6 -6
  139. package/dist/{message-tool-_MODnjgC.js → message-tool-GTRrYMuR.js} +6 -6
  140. package/dist/{model-catalog-AiXYmm_2.js → model-catalog-7Ew4iFgU.js} +3 -3
  141. package/dist/{model-catalog-CIgjk707.js → model-catalog-B1R3eepi.js} +3 -3
  142. package/dist/{model-fallback-DsefSc26.js → model-fallback--afWtYyY.js} +2 -2
  143. package/dist/{model-fallback-C92G-WUW.js → model-fallback-DXR7ZbvM.js} +2 -2
  144. package/dist/{model-fallback-Dwkt7imi.js → model-fallback-GSMox3YK.js} +3 -3
  145. package/dist/{model-picker-B_SEgewv.js → model-picker--bqpbxbC.js} +2 -2
  146. package/dist/{model-picker-DLr3xagY.js → model-picker-DJpEjKZT.js} +2 -2
  147. package/dist/{models-YFKEQsfy.js → models-CETV4zZ3.js} +12 -12
  148. package/dist/{models-cli-DuHCNW7r.js → models-cli-B5caj79x.js} +2 -2
  149. package/dist/{models-cli-yoQKaR0X.js → models-cli-DPT6gYJm.js} +12 -12
  150. package/dist/{models-config-BWzVL4DK.js → models-config-CX3wpMrd.js} +2 -2
  151. package/dist/{models-config-Df7nRCU-.js → models-config-ChIAfklN.js} +2 -2
  152. package/dist/{node-cli-D4pCYQMW.js → node-cli-4VRhz_1P.js} +7 -7
  153. package/dist/{node-cli-DzvdQBVp.js → node-cli-DyoQqYo1.js} +7 -7
  154. package/dist/{nodes-cli-CHWJMLm6.js → nodes-cli-CNQ633Hz.js} +5 -5
  155. package/dist/{nodes-cli-cjiOPFLH.js → nodes-cli-Dl3KtKoX.js} +5 -5
  156. package/dist/{nodes-tool-CR8MmpTZ.js → nodes-tool-BkgixWxk.js} +3 -3
  157. package/dist/{nodes-tool-DxMgloLr.js → nodes-tool-BmT8LWTt.js} +3 -3
  158. package/dist/{nodes-utils-BHrOJOWk.js → nodes-utils-B1jr4oHE.js} +1 -1
  159. package/dist/{nodes-utils-BRFzmJmB.js → nodes-utils-CVaBTJ5V.js} +1 -1
  160. package/dist/{nodes-utils-Eo4ilZ36.js → nodes-utils-DVNKajNN.js} +1 -1
  161. package/dist/{onboard-D3EkmOs0.js → onboard-BSb-bXtw.js} +9 -9
  162. package/dist/{onboard-DdguleAq.js → onboard-DHzBfhN9.js} +9 -9
  163. package/dist/{onboard-channels-DBltNYY2.js → onboard-channels-BP5oQVqD.js} +1 -1
  164. package/dist/{onboard-channels-cSzxNqaz.js → onboard-channels-CNmc5fTo.js} +1 -1
  165. package/dist/{onboard-channels-CeAsHBgW.js → onboard-channels-DHeOj8d6.js} +1 -1
  166. package/dist/{onboard-channels-ZDMAODeW.js → onboard-channels-DqoegMtk.js} +1 -1
  167. package/dist/{onboard-custom-DqkrqRdv.js → onboard-custom-B7OO328d.js} +2 -2
  168. package/dist/{onboard-custom-DMHUJH5-.js → onboard-custom-BODmfSpC.js} +1 -1
  169. package/dist/{onboard-custom-Vb7K9679.js → onboard-custom-BZv_tJxB.js} +1 -1
  170. package/dist/{onboard-custom-DOEx3xcN.js → onboard-custom-D7LvDFdH.js} +2 -2
  171. package/dist/{onboard-helpers-D60Qp1ne.js → onboard-helpers-B9IGa3vx.js} +5 -5
  172. package/dist/{onboard-helpers-7fbTU2tq.js → onboard-helpers-BKca3qU4.js} +1 -1
  173. package/dist/{onboard-helpers-DCve32jF.js → onboard-helpers-DP2LE5Oh.js} +5 -5
  174. package/dist/{onboard-helpers-xGGsG9to.js → onboard-helpers-HkYz_NGi.js} +1 -1
  175. package/dist/{onboard-remote-B13DRLJa.js → onboard-remote-DQrtJWPJ.js} +1 -1
  176. package/dist/{onboard-remote-C6s3bR7X.js → onboard-remote-kBPMv7zo.js} +1 -1
  177. package/dist/{onboard-skills-BU0OKpqj.js → onboard-skills-Cd2WeuBn.js} +3 -3
  178. package/dist/{onboard-skills-CKzdl2Ph.js → onboard-skills-KRXxu17b.js} +3 -3
  179. package/dist/{onboarding-BkiZ3JkU.js → onboarding-Cg42Uf0E.js} +11 -11
  180. package/dist/{onboarding-C--TfoeE.js → onboarding-nPyIyp8f.js} +11 -11
  181. package/dist/{onboarding.finalize-CUkOVH_E.js → onboarding.finalize-B8gctARP.js} +9 -9
  182. package/dist/{onboarding.finalize-Damz4ET-.js → onboarding.finalize-BoMhnz3U.js} +9 -9
  183. package/dist/{onboarding.gateway-config-BA3PQJBL.js → onboarding.gateway-config-Co5c5Jsj.js} +2 -2
  184. package/dist/{onboarding.gateway-config-4wtmgfdq.js → onboarding.gateway-config-DkkPCpUx.js} +2 -2
  185. package/dist/{outbound-send-deps-BmDpImVK.js → outbound-send-deps-Dg8cSoFv.js} +6 -6
  186. package/dist/{outbound-session-B9B7Vsxm.js → outbound-session-BCNTkSVV.js} +3 -3
  187. package/dist/{outbound-session-pZGUQ4vz.js → outbound-session-BG0ZMrIB.js} +3 -3
  188. package/dist/{pairing-cli-CRnZKVjx.js → pairing-cli-B_sfgSbk.js} +2 -2
  189. package/dist/{pairing-cli-aoyKpG0L.js → pairing-cli-mUAKj093.js} +2 -2
  190. package/dist/{pi-embedded-helpers-D-m7pmXE.js → pi-embedded-helpers-BsRnajNh.js} +1 -1
  191. package/dist/{pi-embedded-helpers-CkhQP2gU.js → pi-embedded-helpers-CSxJBpFl.js} +1 -1
  192. package/dist/{pi-embedded-helpers-BbHYim54.js → pi-embedded-helpers-CUfPWD_N.js} +6 -5
  193. package/dist/{pi-embedded-utils-C6MaVLHj.js → pi-embedded-utils-BlNfBen_.js} +1 -1
  194. package/dist/{pi-embedded-utils-DIGchmzO.js → pi-embedded-utils-Bql42QTv.js} +1 -1
  195. package/dist/{pi-embedded-utils-Ip0GsjWb.js → pi-embedded-utils-BtyCE2ZK.js} +1 -1
  196. package/dist/{pi-model-discovery-Ot_Q_yYa.js → pi-model-discovery-BV73T1am.js} +1 -1
  197. package/dist/{pi-tools.policy-Dt2kTSid.js → pi-tools.policy-DDJ31-0E.js} +3 -3
  198. package/dist/{plugin-registry-BZCSZFQn.js → plugin-registry-Dq33ZU89.js} +3 -3
  199. package/dist/{plugin-registry-DMRnpxA2.js → plugin-registry-RoPLmlrM.js} +3 -3
  200. package/dist/plugin-sdk/agents/bash/bash-tools.exec-runtime.d.ts +4 -0
  201. package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-context-guard.d.ts +5 -0
  202. package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-reduce.d.ts +8 -0
  203. package/dist/plugin-sdk/agents/sandbox/tier0/index.d.ts +3 -0
  204. package/dist/plugin-sdk/agents/sandbox/tier0/registry.d.ts +28 -0
  205. package/dist/plugin-sdk/agents/sandbox/tier0/router.d.ts +18 -0
  206. package/dist/plugin-sdk/agents/sandbox/tier0/virtual-sandbox.d.ts +30 -0
  207. package/dist/plugin-sdk/agents/sandbox/types.d.ts +5 -0
  208. package/dist/plugin-sdk/agents/sections/behaviour.d.ts +9 -0
  209. package/dist/plugin-sdk/agents/skills/compact-prompt.d.ts +12 -0
  210. package/dist/plugin-sdk/agents/skills/workspace.d.ts +4 -0
  211. package/dist/plugin-sdk/channels/discord.js +487 -40
  212. package/dist/plugin-sdk/channels/googlechat.js +3 -1
  213. package/dist/plugin-sdk/channels/imessage.js +487 -40
  214. package/dist/plugin-sdk/channels/line.js +489 -42
  215. package/dist/plugin-sdk/channels/msteams.js +3 -1
  216. package/dist/plugin-sdk/channels/signal.js +487 -40
  217. package/dist/plugin-sdk/channels/slack.js +487 -40
  218. package/dist/plugin-sdk/channels/telegram.js +487 -40
  219. package/dist/plugin-sdk/channels/whatsapp.js +488 -41
  220. package/dist/plugin-sdk/config/types.agent-defaults.d.ts +8 -0
  221. package/dist/plugin-sdk/config/types.agents.d.ts +4 -0
  222. package/dist/plugin-sdk/config/types.gateway.d.ts +8 -0
  223. package/dist/plugin-sdk/config/types.skills.d.ts +7 -0
  224. package/dist/plugin-sdk/config/types.tools.d.ts +8 -0
  225. package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +3 -0
  226. package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +9 -0
  227. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +6 -0
  228. package/dist/plugin-sdk/config/zod-schema.d.ts +26 -0
  229. package/dist/plugin-sdk/core.js +6 -2
  230. package/dist/plugin-sdk/index.js +501 -54
  231. package/dist/{plugins-cli-BKMBY-np.js → plugins-cli-BA0wJM-k.js} +3 -3
  232. package/dist/{plugins-cli-D3_BCsVN.js → plugins-cli-a-DWljrI.js} +3 -3
  233. package/dist/{program-context-CVLR19jJ.js → program-context-CUZUPsiC.js} +43 -43
  234. package/dist/{program-DFvYiOXj.js → program-gbYi5UIa.js} +7 -7
  235. package/dist/{prompt-select-styled-D-axSDjg.js → prompt-select-styled-DAdqH32e.js} +17 -17
  236. package/dist/{prompt-select-styled-n1nMLPsI.js → prompt-select-styled-lKRNiihE.js} +17 -17
  237. package/dist/{push-apns-Dh6xZki_.js → push-apns-BhtcU_Da.js} +1 -1
  238. package/dist/{push-apns-D4wjtIOe.js → push-apns-D69Af97u.js} +1 -1
  239. package/dist/{pw-ai-2VhRhF2B.js → pw-ai-Ba9xJlWV.js} +2 -2
  240. package/dist/{pw-ai-Blk_s6D5.js → pw-ai-Cvjg4UOk.js} +2 -2
  241. package/dist/{pw-ai-B6oeo1wI.js → pw-ai-DiwvYyv3.js} +2 -2
  242. package/dist/{pw-session-Crb06R5v.js → pw-session-BZ1pAX5r.js} +1 -1
  243. package/dist/{pw-session-DmaV4mTM.js → pw-session-BxiZ6YYh.js} +1 -1
  244. package/dist/{pw-session-CATqkBLI.js → pw-session-EHew9i-n.js} +1 -1
  245. package/dist/{qr-cli-B3IWV_8b.js → qr-cli-CFsUuFR-.js} +2 -2
  246. package/dist/{qr-cli-SfioxAM_.js → qr-cli-SfzcWdI0.js} +2 -2
  247. package/dist/{register.agent-DDVZDpQC.js → register.agent-B4bNkRtB.js} +11 -11
  248. package/dist/{register.agent-Dfk70LYq.js → register.agent-DHCAqxWX.js} +8 -8
  249. package/dist/{register.channel-BvMvb6ip.js → register.channel-B1vKkWV7.js} +2 -2
  250. package/dist/{register.channel-BJtyCgD7.js → register.channel-D0lVq7dU.js} +2 -2
  251. package/dist/{register.configure-WQlTjNyz.js → register.configure-DFSJd0YH.js} +1 -1
  252. package/dist/{register.configure-BdKChDnl.js → register.configure-DIHFldND.js} +1 -1
  253. package/dist/{register.drone-B-xrDJpJ.js → register.drone-Do4i5ZE9.js} +2 -2
  254. package/dist/{register.drone-DSHJ5vq1.js → register.drone-Tckr0QFo.js} +2 -2
  255. package/dist/{register.maintenance-DoMoBeyF.js → register.maintenance-Bw9G1eZ0.js} +5 -5
  256. package/dist/{register.maintenance-DnP_N0ye.js → register.maintenance-D5LVEuKI.js} +5 -5
  257. package/dist/{register.message-Xl-pZILp.js → register.message-BsGRyTVT.js} +7 -7
  258. package/dist/{register.message-Cdp8TM0J.js → register.message-C_51tZCE.js} +8 -8
  259. package/dist/{register.onboard-BzZPizJ0.js → register.onboard-CMusJAzJ.js} +1 -1
  260. package/dist/{register.onboard-IPqLR5Zb.js → register.onboard-Ngaw9ikW.js} +1 -1
  261. package/dist/{register.setup-DLzSctB1.js → register.setup-aKi_hurQ.js} +4 -4
  262. package/dist/{register.setup-BX8Ya9qY.js → register.setup-xpiPRct8.js} +4 -4
  263. package/dist/{register.status-health-sessions-CXIHidz6.js → register.status-health-sessions-B87H-g0g.js} +6 -6
  264. package/dist/{register.status-health-sessions-DnNAMB3T.js → register.status-health-sessions-D2rMUW_t.js} +4 -4
  265. package/dist/{register.subclis-DAt5WEzu.js → register.subclis-DB0kFld6.js} +30 -30
  266. package/dist/{reply-D_uwJ_hb.js → reply-CNJWciSj.js} +442 -52
  267. package/dist/{reply-payloads-BBHotu7W.js → reply-payloads-BS889lPA.js} +2 -2
  268. package/dist/{reply-payloads-CikGrhVL.js → reply-payloads-Dk-zLmJC.js} +2 -2
  269. package/dist/{reply-prefix-eSF5kXs5.js → reply-prefix-CfrIMbCM.js} +1 -1
  270. package/dist/{reply-prefix-CYbvVBOV.js → reply-prefix-D9MQ_veY.js} +1 -1
  271. package/dist/{resolve-route-FLi7kFo1.js → resolve-route-0arQsERr.js} +1 -1
  272. package/dist/{resolve-route-DiiBj8NL.js → resolve-route-DwDSX3mI.js} +2 -2
  273. package/dist/{routes-DFLRIpty.js → routes-DubNFADQ.js} +4 -4
  274. package/dist/{routes-CagC77kh.js → routes-hcdbDZ60.js} +4 -4
  275. package/dist/{rpc-DxdMMngu.js → rpc-CpEGWO4f.js} +1 -1
  276. package/dist/{rpc-dZcSayi6.js → rpc-DShIx1il.js} +1 -1
  277. package/dist/{run-main-Cw7JO4bk.js → run-main-CgrHeBpO.js} +20 -20
  278. package/dist/{sandbox-DX1DKAJb.js → sandbox-BYK6Qgnd.js} +9 -8
  279. package/dist/{sandbox-pZvVQZ-a.js → sandbox-CDGF9AVA.js} +9 -8
  280. package/dist/{sandbox-cli-DsFqky0Y.js → sandbox-cli-3v8NFyXC.js} +4 -4
  281. package/dist/{sandbox-cli--NZU5yHm.js → sandbox-cli-DmXP8NkD.js} +4 -4
  282. package/dist/{security-cli-B9rFqAom.js → security-cli-B23Rjmu8.js} +3 -3
  283. package/dist/{security-cli-DUGFqvJc.js → security-cli-C7jxF7EW.js} +3 -3
  284. package/dist/{send-OcwoynpB.js → send-B3EXtlyb.js} +2 -2
  285. package/dist/{send-BUUHmWJ3.js → send-Boe93Q4V.js} +2 -2
  286. package/dist/{send-Czh3Yz38.js → send-Br1IcpxR.js} +2 -2
  287. package/dist/{send-mztwgKny.js → send-BrvRGJ0_.js} +3 -3
  288. package/dist/{send-CRNffLsb.js → send-BuiJlYF8.js} +2 -2
  289. package/dist/{send-DTQ_lSWv.js → send-DPURnZWZ.js} +2 -2
  290. package/dist/{send-Bh69NFd_.js → send-DT-x-IFQ.js} +3 -3
  291. package/dist/{send-CuFw68zk.js → send-D_PQuZ3x.js} +2 -2
  292. package/dist/{send-Ckq83rOO.js → send-DhuPDKRX.js} +2 -2
  293. package/dist/{server-context-D-VUH9Bz.js → server-context-BRKaxwJB.js} +6 -6
  294. package/dist/{server-context-BlUcP_zF.js → server-context-CvEQbenq.js} +6 -6
  295. package/dist/{server-context-BNI2cc_e.js → server-context-nyYhGUmI.js} +5 -5
  296. package/dist/{server-node-events-DQqHB_8B.js → server-node-events-B6rUT0PE.js} +8 -8
  297. package/dist/{server-node-events-BqG45BMs.js → server-node-events-D90DAPI1.js} +10 -10
  298. package/dist/{session-status-tool-CN-Juxjq.js → session-status-tool-BIN4ooy0.js} +6 -6
  299. package/dist/{session-status-tool-DnD354sJ.js → session-status-tool-CtbF1-VI.js} +7 -7
  300. package/dist/{session-utils-0BYkk3f_.js → session-utils-DDCd8HC9.js} +4 -4
  301. package/dist/{sessions-CismtNoo.js → sessions-ByNQiqr2.js} +1 -1
  302. package/dist/{sessions-D_b2UXud.js → sessions-C0Qs0Flz.js} +3 -3
  303. package/dist/{sessions-0d-dBE8D.js → sessions-CPoA3oJo.js} +4 -4
  304. package/dist/{sessions-Z8JCL_sa.js → sessions-CW4tzKA-.js} +3 -3
  305. package/dist/{sessions-helpers-Crh_NTSX.js → sessions-helpers-DdqQiSR6.js} +3 -3
  306. package/dist/{sessions-helpers-JsbUTHcP.js → sessions-helpers-vwVJ1Vy4.js} +3 -3
  307. package/dist/{sessions-helpers-uZ0Taeh3.js → sessions-helpers-xH-u6Byb.js} +3 -3
  308. package/dist/{sessions-history-tool-6VYdT_kc.js → sessions-history-tool-BO81rMTT.js} +5 -5
  309. package/dist/{sessions-history-tool-6WMcHpxy.js → sessions-history-tool-DKXNjv5X.js} +5 -5
  310. package/dist/{sessions-list-tool-CwTLRwGc.js → sessions-list-tool-6DJtypdD.js} +5 -5
  311. package/dist/{sessions-list-tool-CwGp-l3S.js → sessions-list-tool-s_y-_4Uv.js} +5 -5
  312. package/dist/{sessions-send-tool-BKNgicV5.js → sessions-send-tool-C3ggqtMe.js} +5 -5
  313. package/dist/{sessions-send-tool-Dl4HKGgL.js → sessions-send-tool-roh-kyNw.js} +5 -5
  314. package/dist/{sessions-spawn-tool-DqfoPFrK.js → sessions-spawn-tool-BgkkNWMg.js} +1 -1
  315. package/dist/{sessions-spawn-tool-Bguo3O1I.js → sessions-spawn-tool-UAd65WIb.js} +1 -1
  316. package/dist/{shared-Cr0N9iap.js → shared-BysrBqEi.js} +2 -2
  317. package/dist/{shared-B7QVxDsn.js → shared-CjEFJgna.js} +2 -2
  318. package/dist/{skills-DkeUrhAT.js → skills-Bf4ZPGHe.js} +1 -1
  319. package/dist/{skills-DMPRReoe.js → skills-DDhWBAii.js} +1 -1
  320. package/dist/{skills-cli--8zG3UQk.js → skills-cli-DnO1g2oN.js} +6 -6
  321. package/dist/{skills-cli-D334Q0dM.js → skills-cli-DxFMRja6.js} +6 -6
  322. package/dist/{skills-install-DAphGXoj.js → skills-install-Bo9PwVmT.js} +2 -2
  323. package/dist/{skills-install-BNR2Nfa3.js → skills-install-DkZHLCih.js} +2 -2
  324. package/dist/{skills-status-D54inzOP.js → skills-status-8p-KrlIF.js} +2 -2
  325. package/dist/{skills-status-DDzkv-Rj.js → skills-status-CBTT87BN.js} +2 -2
  326. package/dist/{status-BIvJQtxV.js → status-BpgCPxM4.js} +3 -3
  327. package/dist/{status-JJ8BdlhI.js → status-Db6PPdwI.js} +3 -3
  328. package/dist/{status-DosDYGut.js → status-DyQwrglF.js} +12 -12
  329. package/dist/{status-gWt5DmvD.js → status-Dz_-4ATW.js} +13 -13
  330. package/dist/{status.update-BnYycijV.js → status.update-BBLk_Q3P.js} +1 -1
  331. package/dist/{status.update-D0KmfrNX.js → status.update-OhQ3FS7R.js} +1 -1
  332. package/dist/{subagent-registry-0zv9UyYz.js → subagent-registry-C_UHFYRY.js} +443 -53
  333. package/dist/{subagents-tool-usr_WpP2.js → subagents-tool-BdWYv7Mb.js} +6 -6
  334. package/dist/{subagents-tool-m92Kjy1x.js → subagents-tool-DjPwvSat.js} +6 -6
  335. package/dist/{system-cli-t4Qk2mcC.js → system-cli-BQJK1EiV.js} +1 -1
  336. package/dist/{system-cli-BxYnYU05.js → system-cli-Cj6oDS1q.js} +1 -1
  337. package/dist/{systemd-hints-JlNoKkcf.js → systemd-hints-BKM-UvY_.js} +1 -1
  338. package/dist/{systemd-hints-C21GmUrX.js → systemd-hints-BdVIEvO3.js} +1 -1
  339. package/dist/{targets-BWPxk4rU.js → targets-BpZ7t54u.js} +1 -1
  340. package/dist/{tools-F4g3knJE.js → tools-D3fRPoa3.js} +421 -38
  341. package/dist/{tools-cli-Cmg7InJT.js → tools-cli-CjniP2oD.js} +3 -3
  342. package/dist/{tools-cli-BPV7GpBg.js → tools-cli-DLPn3_f-.js} +3 -3
  343. package/dist/{tts-CC3WSaW9.js → tts-BhWpmVdG.js} +1 -1
  344. package/dist/{tts-CRpGlsYO.js → tts-DrFhyLnB.js} +1 -1
  345. package/dist/{tts-OJZ7iSKo.js → tts-DyQvwyVi.js} +1 -1
  346. package/dist/{tts-tool-DsLN8-ZT.js → tts-tool-CdaKVWBM.js} +3 -3
  347. package/dist/{tts-tool-B73xs8Vs.js → tts-tool-CfEs7ebD.js} +3 -3
  348. package/dist/{tui-BRdOjXJy.js → tui-CNuz7tKz.js} +5 -5
  349. package/dist/{tui-PSDwA6SF.js → tui-DJvjN1xV.js} +5 -5
  350. package/dist/{tui-cli-DMD7clw2.js → tui-cli-CLoyYSXd.js} +1 -1
  351. package/dist/{tui-cli-DHWrleUP.js → tui-cli-DhhA87TG.js} +1 -1
  352. package/dist/{update-cli-DlxYgSAN.js → update-cli-0lBEnFj5.js} +8 -8
  353. package/dist/{update-cli-Du5BbYfl.js → update-cli-Cc4jgBsG.js} +8 -8
  354. package/dist/{validation-CG8Ui8_v.js → validation-B-XaORq2.js} +5 -1
  355. package/dist/{validation-T0CNq_JP.js → validation-DuFmPzCB.js} +5 -1
  356. package/dist/web-BUkj8HIz.js +2 -0
  357. package/dist/{web-CtwxKIvO.js → web-BY79LufL.js} +8 -8
  358. package/dist/{web-search-B5d6ODyB.js → web-search-CCeGZMBD.js} +4 -4
  359. package/dist/{web-search-CV42wG57.js → web-search-D1pX-Tuc.js} +4 -4
  360. package/dist/{webhooks-cli-tSv_Pzzq.js → webhooks-cli-B3LP9UKY.js} +5 -5
  361. package/dist/{webhooks-cli-BeHnKv6z.js → webhooks-cli-C5xR4Wu5.js} +5 -5
  362. package/dist/{workspace-Dov1_dCF.js → workspace-BwzunhL2.js} +49 -3
  363. package/dist/{workspace-CSGZ3DZ_.js → workspace-CVAkpBJa.js} +48 -2
  364. package/dist/{workspace-CSBTFAxh.js → workspace-D5-DoTNR.js} +48 -2
  365. package/dist/{workspace-dirs-Yo4RZm7s.js → workspace-dirs-CJDJUlno.js} +3 -3
  366. package/docs/superpowers/plans/2026-06-10-phase1-quick-wins.md +1260 -0
  367. package/docs/superpowers/specs/2026-06-10-recon-quick-wins-and-silent-agent-design.md +151 -0
  368. package/extensions/alert-watcher/index.js +47 -1
  369. package/extensions/bluebubbles/index.js +5 -1
  370. package/extensions/feishu/index.js +5 -1
  371. package/extensions/flows/index.js +52 -2
  372. package/extensions/gmail-calendar/index.js +47 -1
  373. package/extensions/googlechat/index.js +5 -1
  374. package/extensions/irc/index.js +5 -1
  375. package/extensions/llm-task/index.js +47 -1
  376. package/extensions/matrix/{credentials-B1q3x-N0.mjs → credentials-BtiLgiNR.mjs} +5 -1
  377. package/extensions/matrix/index.js +3 -3
  378. package/extensions/matrix/{matrix-B9amoffh.mjs → matrix-CWlUSNSh.mjs} +2 -2
  379. package/extensions/matrix/{resolve-targets-Dw7tv-7K.mjs → resolve-targets-ml4iU4Bd.mjs} +2 -2
  380. package/extensions/mattermost/index.js +5 -1
  381. package/extensions/nextcloud-talk/index.js +5 -1
  382. package/extensions/tlon/index.js +47 -1
  383. package/extensions/wati/index.js +5 -1
  384. package/extensions/weixin/index.js +5 -1
  385. package/extensions/zalo/index.js +5 -1
  386. package/extensions/zalouser/index.js +5 -1
  387. package/package.json +3 -2
  388. package/dist/config-guard-BfdkKYAa.js +0 -2
  389. package/dist/daemon-install-helpers-4gMthp-_.js +0 -2
  390. package/dist/daemon-install-helpers-BLXYJ3C5.js +0 -2
  391. package/dist/doctor-completion-DKJRw1m1.js +0 -2
  392. package/dist/doctor-completion-DMcJXsi0.js +0 -2
  393. package/dist/web-Dj8nR4rt.js +0 -2
@@ -0,0 +1,151 @@
1
+ # Design: Recon Quick Wins + Hermes Silent Agent
2
+
3
+ **Date:** 2026-06-10
4
+ **Branch/Worktree:** `feat/recon-quick-wins` @ `/home/nikolas/Documents/CODE/minion-quick-wins`
5
+ **Source:** Absorption picks from `recon-openclaw-hermes-agentzero-2026-06-10.md`
6
+ **Scope decisions (user, 2026-06-10):** one worktree, two phases · silent agent heuristic-gated · **on by default** (with kill-switch + safety rails).
7
+
8
+ > Reminder: minion is its own independent project. OpenClaw/Hermes/Agent Zero are peer idea-sources; we port designs, not couple repos.
9
+
10
+ ---
11
+
12
+ ## Goal
13
+
14
+ Land the low-risk "quick wins" from the recon, then the strategic Hermes self-improvement pair (two-file memory + silent review agent), in one phased worktree. Each component is an independent atomic commit. The silent agent is the headline: it turns minion's existing single-shot post-turn memory extractor into a forked review sub-agent that also writes/patches skills.
15
+
16
+ ## Existing scaffolding we build on (already in minion)
17
+
18
+ - `src/agents/pi-embedded-runner/lifecycle-hooks.ts` — "from Hermes's 4-hook model": `preLlmCall` / `postLlmCall` / `onSessionStart` / `onSessionEnd`. Trajectory + silent agent hook here.
19
+ - `src/memory/extract-memories-runner.ts` — fire-and-forget post-turn extractor ("NEVER delays the user's next message — runs in a detached microtask"), gated by `shouldExtract(...)`. The silent agent **evolves** this; we reuse its gate + detached-microtask pattern.
20
+ - `src/agents/system-prompt/system-prompt.ts` `buildAgentSystemPrompt(...)` — injection point for `behaviour.md` + two-file memory.
21
+ - `src/plugin-sdk/` — `registerHttpRoute(...)` and `registerWebhookTarget(...)` already exist → webhooks/admin-http-rpc are pure extension work.
22
+ - `src/agents/skills/` — workspace skills (`bundled-context.ts`, `workspace.ts`, `serialize.ts`) → progressive disclosure + `skill_write` plug in here.
23
+ - pgvector `agent_memories` store stays as the **searchable long-term** memory; two-file model is the **always-injected working set**. Distinct roles, no conflict.
24
+
25
+ ---
26
+
27
+ ## Phase 1 — Independent quick wins (ship first, atomic commits)
28
+
29
+ ### 1.1 tool-call-repair
30
+
31
+ - **What:** Normalize/repair malformed streaming tool-call JSON (partial JSON, trailing commas, concatenated objects, unescaped newlines) before parse. We already hit this with OpenRouter.
32
+ - **Where:** `src/llm/tool-call-repair/` (internal module — minion's `packages/` are app-level, so not a published package). Consumed by the streaming tool-call accumulator in the LLM layer.
33
+ - **Interface:** `repairToolCallArguments(raw: string): { value: string; repaired: boolean }` + a streaming accumulator helper.
34
+ - **Tests:** fixture-driven (known-bad provider payloads → expected repaired JSON). Reference: OpenClaw `packages/tool-call-repair`.
35
+ - **Config:** none (always-on; pure resilience, no behavior change on valid input).
36
+
37
+ ### 1.2 Trajectory recording
38
+
39
+ - **What:** Per-session JSONL of turn events (model call meta, tool calls, content, usage) with size caps + pointer file + export. Foundation for replay/eval.
40
+ - **Where:** new `src/trajectory/` — `types.ts`, `runtime.ts`, `writer.ts` (append + rotation), `export.ts`. Storage under the session state dir.
41
+ - **Wiring:** `lifecycle-hooks` `postLlmCall` (+ tool dispatch) emit events; never blocks the loop.
42
+ - **Config:** `trajectory.enabled` (default **off** — observability opt-in).
43
+ - **Reference:** OpenClaw `src/trajectory/`.
44
+
45
+ ### 1.3 tokenjuice (tool-output reduction)
46
+
47
+ - **What:** Reduce large/repetitive bash/exec tool output before it reaches the model (collapse repeated lines, head/tail windows, dedupe). Token savings on code-heavy agents.
48
+ - **Where:** runner middleware `src/agents/pi-embedded-runner/tool-result-reduce.ts`, applied alongside the existing `tool-result-truncation.ts` before results are appended to history.
49
+ - **Config:** `tools.outputReduce.enabled` (default **on** for shell/exec-class tools; conservative thresholds).
50
+ - **Reference:** OpenClaw `extensions/tokenjuice`.
51
+
52
+ ### 1.4 webhooks extension
53
+
54
+ - **What:** Authenticated inbound HTTP POST → trigger an agent/flow. Missing piece for CRM/booking/payment integration.
55
+ - **Where:** `extensions/webhooks/` using `registerHttpRoute` + secret (HMAC/bearer) verification; maps a configured path → dispatch.
56
+ - **Config:** per-route secret + target agent/flow in extension config.
57
+ - **Reference:** OpenClaw `extensions/webhooks`.
58
+
59
+ ### 1.5 admin-http-rpc extension
60
+
61
+ - **What:** Curated subset of gateway RPC methods over plain HTTP for ops/CI (health/status/config/channels/models/agents/cron/tasks/diagnostics) — no WS client needed.
62
+ - **Where:** `extensions/admin-http-rpc/` using `registerHttpRoute`; **method allowlist** + bearer auth; read-leaning by default.
63
+ - **Config:** bearer token + method allowlist.
64
+ - **Reference:** OpenClaw `extensions/admin-http-rpc`.
65
+
66
+ ### 1.6 Progressive skill disclosure
67
+
68
+ - **What:** Inject only skill **name + description** by default (~3k tok cap), load full SKILL.md on demand. Cuts skill token overhead.
69
+ - **Where:** `src/agents/skills/` prompt-build path (`bundled-context.ts`/`serialize.ts`); add a `skill_view(name)` tool that returns full body (and `skill_view(name, path)` for support files).
70
+ - **Config:** `skills.progressiveDisclosure` (default **on**; legacy full-load behind the flag for rollback).
71
+ - **Reference:** Hermes `agent/skill_utils.py` three-level load.
72
+
73
+ ### 1.7 behaviour.md self-modification tool (Agent Zero)
74
+
75
+ - **What:** Per-agent `behaviour.md` ruleset, injected into the system prompt; an `update_behaviour` tool lets the agent merge adjustments into it (via a utility model) — persists across restarts, human-readable/editable.
76
+ - **Where:** `behaviour.md` in the agent workspace; injected in `buildAgentSystemPrompt`; tool in agent tools; merge via utility model.
77
+ - **Config:** `agents.*.behaviourFile` (default **on**; empty file = no-op injection).
78
+ - **Safety:** injection-scanned before write (reuse `src/memory/injection-scanner.ts`); bounded size.
79
+ - **Reference:** Agent Zero `plugins/_memory/tools/behaviour_adjustment.py`.
80
+
81
+ ---
82
+
83
+ ## Phase 2 — Two-file memory + silent agent (the IP)
84
+
85
+ ### 2.1 Two-file memory model
86
+
87
+ - **What:** Two frozen-injected flat files per agent: `MEMORY.md` (agent/env working notes, ~2,200 char budget) and `USER.md` (who the user is, ~1,375 char budget). Injected as one system-prompt block at session start (stabilizes the prefix cache). A `memory` tool with three actions: **add / replace / remove** via substring matching. Char budget enforced at write → forces consolidation/eviction (no unbounded growth).
88
+ - **Where:** files in the agent workspace; injection in `buildAgentSystemPrompt`; `memory` tool in agent tools. The current single-MEMORY.md auto-extract target is replaced by this two-file model.
89
+ - **Relationship to pgvector:** pgvector `agent_memories` remains the **searchable long-term store** (RAG/recall). Two-file is the **always-in-context working set**. The silent agent may write to both (flat for working set, sink for long-term).
90
+ - **Config:** budgets configurable; on by default.
91
+ - **Reference:** Hermes `agent/memory_manager.py`, `docs/.../memory.md`.
92
+
93
+ ### 2.2 skill_write capability + self-authored provenance
94
+
95
+ - **What:** A guarded tool to create/patch workspace skills (write SKILL.md + support files), so the silent agent can persist learned skills. 4-tier write preference (patch loaded skill → patch umbrella → add support file → new umbrella).
96
+ - **Where:** `src/agents/skills/` write path; `skill_write` tool. Reuse workspace skill storage.
97
+ - **Provenance marker:** every skill written by `skill_write`/the silent agent is stamped in SKILL.md frontmatter with `metadata.minion.origin: self-authored` (+ author agent id + timestamp). This flag rides through the existing skill-entry serialization (same path that carries the `bundled` flag) so the hub can segregate it. Hand-authored/bundled skills are unaffected.
98
+ - **Safety:** injection-scan skill content before write; size cap; writes only into the agent's own workspace skills dir.
99
+
100
+ ### 2.4 Hub changes (cross-repo: `minion_hub`)
101
+
102
+ Two hub touches, both fed by gateway-side flags/events emitted from this worktree:
103
+
104
+ **(a) Self-authored skill label**
105
+
106
+ - **What:** Surface self-authored skills in each agent's **Skill Registry** with a distinct pill (e.g. `self-authored`, accent-colored) next to the existing `bundled` pill, for visual segregation. (See user screenshot: pills render inline after the skill name.)
107
+ - **Gateway side (this worktree):** ensure the `origin: self-authored` flag is included in the skill entries the gateway sends to the hub (`listSkills`/skills RPC payload) — mirror how `bundled` is already propagated.
108
+ - **Hub side (`minion_hub`, separate repo/branch):** in the Skill Registry component that renders the `bundled` `<Pill>`, add a `self-authored` variant gated on the new flag; optional filter facet alongside All/Enabled/Disabled. Svelte 5 runes, reuse existing pill styling.
109
+ - **Reference:** existing `bundled` pill in the hub Skill Registry (screenshot 2026-06-10).
110
+
111
+ **(b) Silent-agent "action" block in chat**
112
+
113
+ - Render the new `action` chat message part (from §2.3) as an inline block in the hub chat thread, mirroring the existing "Reasoning" block component (italic, labeled header, screenshot 2026-06-10). Distinct label/icon ("Action" / self-improvement).
114
+ - Gateway side (this worktree): emit the `action` part over the chat stream (mirror `reasoning`). Hub side: add the renderer + the shared protocol part type (`@minion-stack/shared`, if reasoning lives there).
115
+
116
+ **Note:** §2.4 is the only `minion_hub` (SvelteKit/Bun) work — coordinated in a separate hub branch. Per cross-project impact: skill-format + chat-part change → gateway runtime + `@minion-stack/shared` + hub registry/chat.
117
+
118
+ ### 2.3 Silent agent (background self-review) — headline
119
+
120
+ - **What:** After a heuristic-gated turn end, **fire-and-forget** spawn a review sub-agent fed the conversation snapshot, **tool-whitelisted to `[memory, skill_write]`** (enforced at the dispatch layer — full schema kept for cache parity, guarded at runtime, per Hermes). It runs the adapted Hermes `_SKILL_REVIEW_PROMPT`: distinguish class-level skills from user-profile facts, choose the right write tier, and explicitly _"do NOT capture transient errors / negative claims"_ — "nothing to save is valid and must not be the default."
121
+ - **Where:** `src/agents/self-improvement/background-review.ts`. Reuses `extract-memories-runner`'s detached-microtask + `shouldExtract`-style gate.
122
+ - **Surfacing (decided):** emit an **"action" block** into the hub chat stream — a new chat message part type `action` that mirrors the existing `reasoning` part (`src/gateway/open-responses.schema.ts` `type: "reasoning"`; rendered by the hub as the italic "Reasoning" block in the screenshot). The action block summarizes what the review did (e.g. _"Updated skill `clinic-intake`; added 1 user-profile fact"_) or notes a no-op. Carried as a chat event so it lands inline in the conversation like reasoning. Not silent/log-only.
123
+ - **Trigger (decided):** heuristic-gated — substantive turn / message-count threshold / tool-call activity (reuse existing gate).
124
+ - **Default (decided):** **on by default**, with safety rails:
125
+ - kill-switch config `agents.*.selfImprovement.enabled` (default true) + global `selfImprovement.enabled`.
126
+ - never blocks the user turn (detached); hard timeout; failures swallowed + logged.
127
+ - conservative prompt (bias to no-op); tool whitelist; char budgets; injection-scan every write.
128
+ - per-turn cost cap / debounce so it can't run on every trivial message.
129
+ - **Reference:** Hermes `agent/background_review.py:1-609` (the `_SKILL_REVIEW_PROMPT` at L45-148 is the adopted IP).
130
+
131
+ ---
132
+
133
+ ## Cross-cutting
134
+
135
+ - **Error handling:** every new subsystem is fail-safe — trajectory, tokenjuice, silent agent, behaviour merge all swallow+log errors and never break the user-facing turn.
136
+ - **Config surface:** all gated under existing agent/gateway config; defaults chosen per decisions above.
137
+ - **Testing:** unit tests per module (tool-call-repair fixtures, two-file budget enforcement, substring add/replace/remove, gate logic, reducer thresholds); e2e for the silent-agent loop with a mock LLM (assert it writes memory/skill and never blocks).
138
+ - **`tsgo` + `pnpm check` + `pnpm test`** green before each phase merge.
139
+
140
+ ## Out of scope (deferred)
141
+
142
+ - Skill lifecycle states + curator (Hermes) — later.
143
+ - Custom CodeQL queries — meta-repo CI concern, separate.
144
+ - talk/agent-consult, workboard, memory-wiki, tasks registry, video-gen, context-engine — Part-4 strategic items, separate worktrees.
145
+ - Full re-baseline against OpenClaw — explicitly not a goal.
146
+
147
+ ## Build order
148
+
149
+ 1. tool-call-repair → 2. tokenjuice → 3. trajectory → 4. progressive skill disclosure → 5. behaviour.md tool → 6. webhooks → 7. admin-http-rpc → **(Phase 2)** 8. two-file memory → 9. skill_write (+ self-authored provenance) → 10. silent agent (+ emit `action` chat part) → 11. hub changes (`minion_hub`): self-authored pill + `action` block renderer.
150
+
151
+ (1–7 independent; 8→9→10 ordered by dependency; 11 depends on 9's provenance flag + 10's `action` part, and is the only `minion_hub` work — coordinated in a separate hub branch.)
@@ -2491,6 +2491,23 @@ function resolveBundledSkillsDir(opts = {}) {
2491
2491
  } catch {}
2492
2492
  }
2493
2493
  //#endregion
2494
+ //#region src/agents/skills/compact-prompt.ts
2495
+ /**
2496
+ * Render a compact, name+description-only skills listing for progressive
2497
+ * disclosure. The full SKILL.md body is deliberately omitted; the agent is
2498
+ * instructed to load it on demand via the `skill_view` tool. This keeps the
2499
+ * system prompt small when many skills are available.
2500
+ */
2501
+ function formatSkillsCompact(skills) {
2502
+ if (skills.length === 0) return "";
2503
+ return [
2504
+ "<available_skills>",
2505
+ ...skills.map((s) => `- **${s.name}** — ${s.description.trim()}`),
2506
+ "</available_skills>",
2507
+ "Call the `skill_view` tool with a skill name to load its full instructions before using it."
2508
+ ].join("\n");
2509
+ }
2510
+ //#endregion
2494
2511
  //#region src/shared/config-eval.ts
2495
2512
  function isTruthyValue(value) {
2496
2513
  if (value === void 0 || value === null) return false;
@@ -4239,6 +4256,35 @@ function applySkillsPromptLimits(params) {
4239
4256
  truncatedReason
4240
4257
  };
4241
4258
  }
4259
+ /**
4260
+ * Resolve whether progressive disclosure is enabled. Default is ON; only an
4261
+ * explicit `false` disables it (inlining full skill bodies in the prompt).
4262
+ */
4263
+ function resolveProgressiveDisclosure(config, override) {
4264
+ if (override !== void 0) return override;
4265
+ return config?.skills?.progressiveDisclosure !== false;
4266
+ }
4267
+ /**
4268
+ * Map prompt-eligible skill entries to compact `{ name, description, body }`
4269
+ * records. The body is the full SKILL.md text, read from disk on demand; if the
4270
+ * file can't be read we fall back to an empty body (compact mode omits bodies
4271
+ * from the prompt anyway, so this only affects callers that inspect `body`).
4272
+ */
4273
+ function toCompactSkills(skills) {
4274
+ return skills.map((skill) => {
4275
+ let body = "";
4276
+ try {
4277
+ body = fs.readFileSync(skill.filePath, "utf-8");
4278
+ } catch {
4279
+ body = "";
4280
+ }
4281
+ return {
4282
+ name: skill.name,
4283
+ description: skill.description ?? "",
4284
+ body
4285
+ };
4286
+ });
4287
+ }
4242
4288
  function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4243
4289
  const eligible = filterSkillEntries(opts?.entries ?? loadSkillEntries(workspaceDir, opts), opts?.config, opts?.skillFilter, opts?.eligibility, opts?.denyFilter);
4244
4290
  const resolvedSkills = eligible.filter((entry) => entry.invocation?.disableModelInvocation !== true).map((entry) => entry.skill);
@@ -4250,7 +4296,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4250
4296
  const prompt = [
4251
4297
  remoteNote,
4252
4298
  truncated ? `⚠️ Skills truncated: included ${skillsForPrompt.length} of ${resolvedSkills.length}. Run \`openclaw skills check\` to audit.` : "",
4253
- formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4299
+ resolveProgressiveDisclosure(opts?.config, opts?.progressive) ? formatSkillsCompact(toCompactSkills(skillsForPrompt)) : formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4254
4300
  ].filter(Boolean).join("\n");
4255
4301
  const skillFilter = normalizeSkillFilter(opts?.skillFilter);
4256
4302
  const denyFilter = normalizeSkillFilter(opts?.denyFilter);
@@ -1769,6 +1769,7 @@ const AgentSandboxSchema = z.object({
1769
1769
  ]).optional(),
1770
1770
  perSession: z.boolean().optional(),
1771
1771
  workspaceRoot: z.string().optional(),
1772
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
1772
1773
  docker: SandboxDockerSchema,
1773
1774
  browser: SandboxBrowserSchema,
1774
1775
  prune: SandboxPruneSchema
@@ -1970,7 +1971,8 @@ const ToolsSchema = z.object({
1970
1971
  exec: ToolExecSchema,
1971
1972
  fs: ToolFsSchema,
1972
1973
  subagents: z.object({ tools: ToolPolicySchema$1 }).strict().optional(),
1973
- sandbox: z.object({ tools: ToolPolicySchema$1 }).strict().optional()
1974
+ sandbox: z.object({ tools: ToolPolicySchema$1 }).strict().optional(),
1975
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
1974
1976
  }).strict().superRefine((value, ctx) => {
1975
1977
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
1976
1978
  }).optional();
@@ -4736,6 +4738,7 @@ z.object({
4736
4738
  importContacts: z.boolean().optional()
4737
4739
  }).strict().optional(),
4738
4740
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4741
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4739
4742
  personalAgentObservations: z.object({
4740
4743
  enabled: z.boolean().optional(),
4741
4744
  dbPath: z.string().optional()
@@ -4848,6 +4851,7 @@ z.object({
4848
4851
  memory: MemorySchema,
4849
4852
  skills: z.object({
4850
4853
  allowBundled: z.array(z.string()).optional(),
4854
+ progressiveDisclosure: z.boolean().optional(),
4851
4855
  load: z.object({
4852
4856
  extraDirs: z.array(z.string()).optional(),
4853
4857
  watch: z.boolean().optional(),
@@ -2313,6 +2313,7 @@ const AgentSandboxSchema = z.object({
2313
2313
  ]).optional(),
2314
2314
  perSession: z.boolean().optional(),
2315
2315
  workspaceRoot: z.string().optional(),
2316
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
2316
2317
  docker: SandboxDockerSchema,
2317
2318
  browser: SandboxBrowserSchema,
2318
2319
  prune: SandboxPruneSchema
@@ -2514,7 +2515,8 @@ const ToolsSchema = z.object({
2514
2515
  exec: ToolExecSchema,
2515
2516
  fs: ToolFsSchema,
2516
2517
  subagents: z.object({ tools: ToolPolicySchema }).strict().optional(),
2517
- sandbox: z.object({ tools: ToolPolicySchema }).strict().optional()
2518
+ sandbox: z.object({ tools: ToolPolicySchema }).strict().optional(),
2519
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
2518
2520
  }).strict().superRefine((value, ctx) => {
2519
2521
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
2520
2522
  }).optional();
@@ -5280,6 +5282,7 @@ z.object({
5280
5282
  importContacts: z.boolean().optional()
5281
5283
  }).strict().optional(),
5282
5284
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
5285
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
5283
5286
  personalAgentObservations: z.object({
5284
5287
  enabled: z.boolean().optional(),
5285
5288
  dbPath: z.string().optional()
@@ -5392,6 +5395,7 @@ z.object({
5392
5395
  memory: MemorySchema,
5393
5396
  skills: z.object({
5394
5397
  allowBundled: z.array(z.string()).optional(),
5398
+ progressiveDisclosure: z.boolean().optional(),
5395
5399
  load: z.object({
5396
5400
  extraDirs: z.array(z.string()).optional(),
5397
5401
  watch: z.boolean().optional(),
@@ -2743,6 +2743,23 @@ function resolveBundledSkillsDir(opts = {}) {
2743
2743
  } catch {}
2744
2744
  }
2745
2745
  //#endregion
2746
+ //#region src/agents/skills/compact-prompt.ts
2747
+ /**
2748
+ * Render a compact, name+description-only skills listing for progressive
2749
+ * disclosure. The full SKILL.md body is deliberately omitted; the agent is
2750
+ * instructed to load it on demand via the `skill_view` tool. This keeps the
2751
+ * system prompt small when many skills are available.
2752
+ */
2753
+ function formatSkillsCompact(skills) {
2754
+ if (skills.length === 0) return "";
2755
+ return [
2756
+ "<available_skills>",
2757
+ ...skills.map((s) => `- **${s.name}** — ${s.description.trim()}`),
2758
+ "</available_skills>",
2759
+ "Call the `skill_view` tool with a skill name to load its full instructions before using it."
2760
+ ].join("\n");
2761
+ }
2762
+ //#endregion
2746
2763
  //#region src/shared/config-eval.ts
2747
2764
  function isTruthyValue(value) {
2748
2765
  if (value === void 0 || value === null) return false;
@@ -4491,6 +4508,35 @@ function applySkillsPromptLimits(params) {
4491
4508
  truncatedReason
4492
4509
  };
4493
4510
  }
4511
+ /**
4512
+ * Resolve whether progressive disclosure is enabled. Default is ON; only an
4513
+ * explicit `false` disables it (inlining full skill bodies in the prompt).
4514
+ */
4515
+ function resolveProgressiveDisclosure(config, override) {
4516
+ if (override !== void 0) return override;
4517
+ return config?.skills?.progressiveDisclosure !== false;
4518
+ }
4519
+ /**
4520
+ * Map prompt-eligible skill entries to compact `{ name, description, body }`
4521
+ * records. The body is the full SKILL.md text, read from disk on demand; if the
4522
+ * file can't be read we fall back to an empty body (compact mode omits bodies
4523
+ * from the prompt anyway, so this only affects callers that inspect `body`).
4524
+ */
4525
+ function toCompactSkills(skills) {
4526
+ return skills.map((skill) => {
4527
+ let body = "";
4528
+ try {
4529
+ body = fs.readFileSync(skill.filePath, "utf-8");
4530
+ } catch {
4531
+ body = "";
4532
+ }
4533
+ return {
4534
+ name: skill.name,
4535
+ description: skill.description ?? "",
4536
+ body
4537
+ };
4538
+ });
4539
+ }
4494
4540
  function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4495
4541
  const eligible = filterSkillEntries(opts?.entries ?? loadSkillEntries(workspaceDir, opts), opts?.config, opts?.skillFilter, opts?.eligibility, opts?.denyFilter);
4496
4542
  const resolvedSkills = eligible.filter((entry) => entry.invocation?.disableModelInvocation !== true).map((entry) => entry.skill);
@@ -4502,7 +4548,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4502
4548
  const prompt = [
4503
4549
  remoteNote,
4504
4550
  truncated ? `⚠️ Skills truncated: included ${skillsForPrompt.length} of ${resolvedSkills.length}. Run \`openclaw skills check\` to audit.` : "",
4505
- formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4551
+ resolveProgressiveDisclosure(opts?.config, opts?.progressive) ? formatSkillsCompact(toCompactSkills(skillsForPrompt)) : formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4506
4552
  ].filter(Boolean).join("\n");
4507
4553
  const skillFilter = normalizeSkillFilter(opts?.skillFilter);
4508
4554
  const denyFilter = normalizeSkillFilter(opts?.denyFilter);
@@ -5379,6 +5425,7 @@ const AgentSandboxSchema = z.object({
5379
5425
  ]).optional(),
5380
5426
  perSession: z.boolean().optional(),
5381
5427
  workspaceRoot: z.string().optional(),
5428
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
5382
5429
  docker: SandboxDockerSchema,
5383
5430
  browser: SandboxBrowserSchema,
5384
5431
  prune: SandboxPruneSchema
@@ -5580,7 +5627,8 @@ const ToolsSchema = z.object({
5580
5627
  exec: ToolExecSchema,
5581
5628
  fs: ToolFsSchema,
5582
5629
  subagents: z.object({ tools: ToolPolicySchema }).strict().optional(),
5583
- sandbox: z.object({ tools: ToolPolicySchema }).strict().optional()
5630
+ sandbox: z.object({ tools: ToolPolicySchema }).strict().optional(),
5631
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
5584
5632
  }).strict().superRefine((value, ctx) => {
5585
5633
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
5586
5634
  }).optional();
@@ -8208,6 +8256,7 @@ z.object({
8208
8256
  importContacts: z.boolean().optional()
8209
8257
  }).strict().optional(),
8210
8258
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
8259
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
8211
8260
  personalAgentObservations: z.object({
8212
8261
  enabled: z.boolean().optional(),
8213
8262
  dbPath: z.string().optional()
@@ -8320,6 +8369,7 @@ z.object({
8320
8369
  memory: MemorySchema,
8321
8370
  skills: z.object({
8322
8371
  allowBundled: z.array(z.string()).optional(),
8372
+ progressiveDisclosure: z.boolean().optional(),
8323
8373
  load: z.object({
8324
8374
  extraDirs: z.array(z.string()).optional(),
8325
8375
  watch: z.boolean().optional(),
@@ -2530,6 +2530,23 @@ function resolveBundledSkillsDir(opts = {}) {
2530
2530
  } catch {}
2531
2531
  }
2532
2532
  //#endregion
2533
+ //#region src/agents/skills/compact-prompt.ts
2534
+ /**
2535
+ * Render a compact, name+description-only skills listing for progressive
2536
+ * disclosure. The full SKILL.md body is deliberately omitted; the agent is
2537
+ * instructed to load it on demand via the `skill_view` tool. This keeps the
2538
+ * system prompt small when many skills are available.
2539
+ */
2540
+ function formatSkillsCompact(skills) {
2541
+ if (skills.length === 0) return "";
2542
+ return [
2543
+ "<available_skills>",
2544
+ ...skills.map((s) => `- **${s.name}** — ${s.description.trim()}`),
2545
+ "</available_skills>",
2546
+ "Call the `skill_view` tool with a skill name to load its full instructions before using it."
2547
+ ].join("\n");
2548
+ }
2549
+ //#endregion
2533
2550
  //#region src/shared/config-eval.ts
2534
2551
  function isTruthyValue(value) {
2535
2552
  if (value === void 0 || value === null) return false;
@@ -4278,6 +4295,35 @@ function applySkillsPromptLimits(params) {
4278
4295
  truncatedReason
4279
4296
  };
4280
4297
  }
4298
+ /**
4299
+ * Resolve whether progressive disclosure is enabled. Default is ON; only an
4300
+ * explicit `false` disables it (inlining full skill bodies in the prompt).
4301
+ */
4302
+ function resolveProgressiveDisclosure(config, override) {
4303
+ if (override !== void 0) return override;
4304
+ return config?.skills?.progressiveDisclosure !== false;
4305
+ }
4306
+ /**
4307
+ * Map prompt-eligible skill entries to compact `{ name, description, body }`
4308
+ * records. The body is the full SKILL.md text, read from disk on demand; if the
4309
+ * file can't be read we fall back to an empty body (compact mode omits bodies
4310
+ * from the prompt anyway, so this only affects callers that inspect `body`).
4311
+ */
4312
+ function toCompactSkills(skills) {
4313
+ return skills.map((skill) => {
4314
+ let body = "";
4315
+ try {
4316
+ body = fs$1.readFileSync(skill.filePath, "utf-8");
4317
+ } catch {
4318
+ body = "";
4319
+ }
4320
+ return {
4321
+ name: skill.name,
4322
+ description: skill.description ?? "",
4323
+ body
4324
+ };
4325
+ });
4326
+ }
4281
4327
  function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4282
4328
  const eligible = filterSkillEntries(opts?.entries ?? loadSkillEntries(workspaceDir, opts), opts?.config, opts?.skillFilter, opts?.eligibility, opts?.denyFilter);
4283
4329
  const resolvedSkills = eligible.filter((entry) => entry.invocation?.disableModelInvocation !== true).map((entry) => entry.skill);
@@ -4289,7 +4335,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4289
4335
  const prompt = [
4290
4336
  remoteNote,
4291
4337
  truncated ? `⚠️ Skills truncated: included ${skillsForPrompt.length} of ${resolvedSkills.length}. Run \`openclaw skills check\` to audit.` : "",
4292
- formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4338
+ resolveProgressiveDisclosure(opts?.config, opts?.progressive) ? formatSkillsCompact(toCompactSkills(skillsForPrompt)) : formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4293
4339
  ].filter(Boolean).join("\n");
4294
4340
  const skillFilter = normalizeSkillFilter(opts?.skillFilter);
4295
4341
  const denyFilter = normalizeSkillFilter(opts?.denyFilter);
@@ -1770,6 +1770,7 @@ const AgentSandboxSchema = z.object({
1770
1770
  ]).optional(),
1771
1771
  perSession: z.boolean().optional(),
1772
1772
  workspaceRoot: z.string().optional(),
1773
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
1773
1774
  docker: SandboxDockerSchema,
1774
1775
  browser: SandboxBrowserSchema,
1775
1776
  prune: SandboxPruneSchema
@@ -1971,7 +1972,8 @@ const ToolsSchema = z.object({
1971
1972
  exec: ToolExecSchema,
1972
1973
  fs: ToolFsSchema,
1973
1974
  subagents: z.object({ tools: ToolPolicySchema }).strict().optional(),
1974
- sandbox: z.object({ tools: ToolPolicySchema }).strict().optional()
1975
+ sandbox: z.object({ tools: ToolPolicySchema }).strict().optional(),
1976
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
1975
1977
  }).strict().superRefine((value, ctx) => {
1976
1978
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
1977
1979
  }).optional();
@@ -4737,6 +4739,7 @@ z.object({
4737
4739
  importContacts: z.boolean().optional()
4738
4740
  }).strict().optional(),
4739
4741
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4742
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4740
4743
  personalAgentObservations: z.object({
4741
4744
  enabled: z.boolean().optional(),
4742
4745
  dbPath: z.string().optional()
@@ -4849,6 +4852,7 @@ z.object({
4849
4852
  memory: MemorySchema,
4850
4853
  skills: z.object({
4851
4854
  allowBundled: z.array(z.string()).optional(),
4855
+ progressiveDisclosure: z.boolean().optional(),
4852
4856
  load: z.object({
4853
4857
  extraDirs: z.array(z.string()).optional(),
4854
4858
  watch: z.boolean().optional(),
@@ -1771,6 +1771,7 @@ const AgentSandboxSchema = z.object({
1771
1771
  ]).optional(),
1772
1772
  perSession: z.boolean().optional(),
1773
1773
  workspaceRoot: z.string().optional(),
1774
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
1774
1775
  docker: SandboxDockerSchema,
1775
1776
  browser: SandboxBrowserSchema,
1776
1777
  prune: SandboxPruneSchema
@@ -1972,7 +1973,8 @@ const ToolsSchema = z.object({
1972
1973
  exec: ToolExecSchema,
1973
1974
  fs: ToolFsSchema,
1974
1975
  subagents: z.object({ tools: ToolPolicySchema$1 }).strict().optional(),
1975
- sandbox: z.object({ tools: ToolPolicySchema$1 }).strict().optional()
1976
+ sandbox: z.object({ tools: ToolPolicySchema$1 }).strict().optional(),
1977
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
1976
1978
  }).strict().superRefine((value, ctx) => {
1977
1979
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
1978
1980
  }).optional();
@@ -4738,6 +4740,7 @@ z.object({
4738
4740
  importContacts: z.boolean().optional()
4739
4741
  }).strict().optional(),
4740
4742
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4743
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4741
4744
  personalAgentObservations: z.object({
4742
4745
  enabled: z.boolean().optional(),
4743
4746
  dbPath: z.string().optional()
@@ -4850,6 +4853,7 @@ z.object({
4850
4853
  memory: MemorySchema,
4851
4854
  skills: z.object({
4852
4855
  allowBundled: z.array(z.string()).optional(),
4856
+ progressiveDisclosure: z.boolean().optional(),
4853
4857
  load: z.object({
4854
4858
  extraDirs: z.array(z.string()).optional(),
4855
4859
  watch: z.boolean().optional(),
@@ -2491,6 +2491,23 @@ function resolveBundledSkillsDir(opts = {}) {
2491
2491
  } catch {}
2492
2492
  }
2493
2493
  //#endregion
2494
+ //#region src/agents/skills/compact-prompt.ts
2495
+ /**
2496
+ * Render a compact, name+description-only skills listing for progressive
2497
+ * disclosure. The full SKILL.md body is deliberately omitted; the agent is
2498
+ * instructed to load it on demand via the `skill_view` tool. This keeps the
2499
+ * system prompt small when many skills are available.
2500
+ */
2501
+ function formatSkillsCompact(skills) {
2502
+ if (skills.length === 0) return "";
2503
+ return [
2504
+ "<available_skills>",
2505
+ ...skills.map((s) => `- **${s.name}** — ${s.description.trim()}`),
2506
+ "</available_skills>",
2507
+ "Call the `skill_view` tool with a skill name to load its full instructions before using it."
2508
+ ].join("\n");
2509
+ }
2510
+ //#endregion
2494
2511
  //#region src/shared/config-eval.ts
2495
2512
  function isTruthyValue(value) {
2496
2513
  if (value === void 0 || value === null) return false;
@@ -4239,6 +4256,35 @@ function applySkillsPromptLimits(params) {
4239
4256
  truncatedReason
4240
4257
  };
4241
4258
  }
4259
+ /**
4260
+ * Resolve whether progressive disclosure is enabled. Default is ON; only an
4261
+ * explicit `false` disables it (inlining full skill bodies in the prompt).
4262
+ */
4263
+ function resolveProgressiveDisclosure(config, override) {
4264
+ if (override !== void 0) return override;
4265
+ return config?.skills?.progressiveDisclosure !== false;
4266
+ }
4267
+ /**
4268
+ * Map prompt-eligible skill entries to compact `{ name, description, body }`
4269
+ * records. The body is the full SKILL.md text, read from disk on demand; if the
4270
+ * file can't be read we fall back to an empty body (compact mode omits bodies
4271
+ * from the prompt anyway, so this only affects callers that inspect `body`).
4272
+ */
4273
+ function toCompactSkills(skills) {
4274
+ return skills.map((skill) => {
4275
+ let body = "";
4276
+ try {
4277
+ body = fs.readFileSync(skill.filePath, "utf-8");
4278
+ } catch {
4279
+ body = "";
4280
+ }
4281
+ return {
4282
+ name: skill.name,
4283
+ description: skill.description ?? "",
4284
+ body
4285
+ };
4286
+ });
4287
+ }
4242
4288
  function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4243
4289
  const eligible = filterSkillEntries(opts?.entries ?? loadSkillEntries(workspaceDir, opts), opts?.config, opts?.skillFilter, opts?.eligibility, opts?.denyFilter);
4244
4290
  const resolvedSkills = eligible.filter((entry) => entry.invocation?.disableModelInvocation !== true).map((entry) => entry.skill);
@@ -4250,7 +4296,7 @@ function buildWorkspaceSkillSnapshot(workspaceDir, opts) {
4250
4296
  const prompt = [
4251
4297
  remoteNote,
4252
4298
  truncated ? `⚠️ Skills truncated: included ${skillsForPrompt.length} of ${resolvedSkills.length}. Run \`openclaw skills check\` to audit.` : "",
4253
- formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4299
+ resolveProgressiveDisclosure(opts?.config, opts?.progressive) ? formatSkillsCompact(toCompactSkills(skillsForPrompt)) : formatSkillsForPrompt(compactSkillPaths(skillsForPrompt))
4254
4300
  ].filter(Boolean).join("\n");
4255
4301
  const skillFilter = normalizeSkillFilter(opts?.skillFilter);
4256
4302
  const denyFilter = normalizeSkillFilter(opts?.denyFilter);
@@ -1768,6 +1768,7 @@ const AgentSandboxSchema = z.object({
1768
1768
  ]).optional(),
1769
1769
  perSession: z.boolean().optional(),
1770
1770
  workspaceRoot: z.string().optional(),
1771
+ tier0: z.object({ enabled: z.boolean().optional() }).strict().optional(),
1771
1772
  docker: SandboxDockerSchema,
1772
1773
  browser: SandboxBrowserSchema,
1773
1774
  prune: SandboxPruneSchema
@@ -1969,7 +1970,8 @@ const ToolsSchema = z.object({
1969
1970
  exec: ToolExecSchema,
1970
1971
  fs: ToolFsSchema,
1971
1972
  subagents: z.object({ tools: ToolPolicySchema }).strict().optional(),
1972
- sandbox: z.object({ tools: ToolPolicySchema }).strict().optional()
1973
+ sandbox: z.object({ tools: ToolPolicySchema }).strict().optional(),
1974
+ outputReduce: z.object({ enabled: z.boolean().optional() }).strict().optional()
1973
1975
  }).strict().superRefine((value, ctx) => {
1974
1976
  addAllowAlsoAllowConflictIssue(value, ctx, "tools cannot set both allow and alsoAllow in the same scope (merge alsoAllow into allow, or remove allow and use profile + alsoAllow)");
1975
1977
  }).optional();
@@ -4735,6 +4737,7 @@ z.object({
4735
4737
  importContacts: z.boolean().optional()
4736
4738
  }).strict().optional(),
4737
4739
  memorySync: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4740
+ trajectory: z.object({ enabled: z.boolean().optional() }).strict().optional(),
4738
4741
  personalAgentObservations: z.object({
4739
4742
  enabled: z.boolean().optional(),
4740
4743
  dbPath: z.string().optional()
@@ -4847,6 +4850,7 @@ z.object({
4847
4850
  memory: MemorySchema,
4848
4851
  skills: z.object({
4849
4852
  allowBundled: z.array(z.string()).optional(),
4853
+ progressiveDisclosure: z.boolean().optional(),
4850
4854
  load: z.object({
4851
4855
  extraDirs: z.array(z.string()).optional(),
4852
4856
  watch: z.boolean().optional(),
@@ -1,5 +1,5 @@
1
- import { a as setMatrixRuntime, i as getMatrixRuntime } from "./credentials-B1q3x-N0.mjs";
2
- import { A as listMatrixAccountIds, I as resolveMatrixAuth, M as resolveMatrixAccount, N as resolveMatrixAccountConfig, S as sendPollMatrix, T as resolveMatrixRoomId, _ as RelationType, b as reactMatrixMessage, c as listMatrixDirectoryGroupsLive, d as removeMatrixReactions, f as fetchEventSummary, g as MsgType, h as EventType, i as normalizeMatrixUserId, j as resolveDefaultMatrixAccountId, l as listMatrixDirectoryPeersLive, m as summarizeMatrixRawEvent, n as probeMatrix, p as readPinnedEvents, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, u as listMatrixReactions, v as resolveMatrixActionLimit, x as sendMessageMatrix, y as resolveActionClient } from "./resolve-targets-Dw7tv-7K.mjs";
1
+ import { a as setMatrixRuntime, i as getMatrixRuntime } from "./credentials-BtiLgiNR.mjs";
2
+ import { A as listMatrixAccountIds, I as resolveMatrixAuth, M as resolveMatrixAccount, N as resolveMatrixAccountConfig, S as sendPollMatrix, T as resolveMatrixRoomId, _ as RelationType, b as reactMatrixMessage, c as listMatrixDirectoryGroupsLive, d as removeMatrixReactions, f as fetchEventSummary, g as MsgType, h as EventType, i as normalizeMatrixUserId, j as resolveDefaultMatrixAccountId, l as listMatrixDirectoryPeersLive, m as summarizeMatrixRawEvent, n as probeMatrix, p as readPinnedEvents, r as normalizeMatrixAllowList, s as resolveMatrixRoomConfig, t as resolveMatrixTargets, u as listMatrixReactions, v as resolveMatrixActionLimit, x as sendMessageMatrix, y as resolveActionClient } from "./resolve-targets-ml4iU4Bd.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { MarkdownConfigSchema, ToolPolicySchema, emptyPluginConfigSchema, maybeInjectDisclosure, resolveDisclosureConfig } from "minion/plugin-sdk";
5
5
  import { DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, addWildcardAllowFrom, applyAccountNameToChannelSection, buildChannelConfigSchema, createActionGate, deleteAccountFromConfigSection, formatDocsLink, formatPairingApproveHint, jsonResult, mergeAllowFromEntries, normalizeAccountId, promptChannelAccessConfig, readNumberParam, readReactionParams, readStringParam, setAccountEnabledInConfigSection } from "openclaw/plugin-sdk";
@@ -1298,7 +1298,7 @@ const matrixPlugin = {
1298
1298
  await previousLock;
1299
1299
  let monitorMatrixProvider;
1300
1300
  try {
1301
- monitorMatrixProvider = (await import("./matrix-B9amoffh.mjs")).monitorMatrixProvider;
1301
+ monitorMatrixProvider = (await import("./matrix-CWlUSNSh.mjs")).monitorMatrixProvider;
1302
1302
  } finally {
1303
1303
  releaseLock();
1304
1304
  }