@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.
- package/dist/{acp-cli-Du7NWZu3.js → acp-cli-2xKZfd6v.js} +3 -3
- package/dist/{acp-cli-BmKOFno7.js → acp-cli-q8e4aJoa.js} +3 -3
- package/dist/{agent-6dzad4Vk.js → agent-CZq9c4BW.js} +13 -13
- package/dist/{agent-step-C3wXb9Cx.js → agent-step-D5w2xNfi.js} +2 -2
- package/dist/{agent-step-Bf1GImWB.js → agent-step-DnVo1ws9.js} +2 -2
- package/dist/{agents-Dw2xlB7X.js → agents-3owoMugG.js} +7 -7
- package/dist/{agents-list-tool-Dq0lIpTn.js → agents-list-tool-Bjcc4I_6.js} +3 -3
- package/dist/{agents-list-tool-D9mHFLLa.js → agents-list-tool-CzUTgXov.js} +3 -3
- package/dist/{agents.config-1imA1H12.js → agents.config-Di1Fb5KI.js} +12 -12
- package/dist/{audit-DmbpL3cv.js → audit-B8L_aShb.js} +10 -10
- package/dist/{audit-DmJGMt0j.js → audit-Ck6MCUxx.js} +10 -10
- package/dist/{auth-choice-neer30p3.js → auth-choice-B6U5biA7.js} +4 -4
- package/dist/{auth-choice-CAmZkQLg.js → auth-choice-DmpOyRlb.js} +4 -4
- package/dist/{banner-DpI_geg3.js → banner-Be2ToLay.js} +1 -1
- package/dist/{browser-cli-z39mB4Us.js → browser-cli-BvtSNPci.js} +3 -3
- package/dist/{browser-cli-DDHEGwdS.js → browser-cli-De-S5eSp.js} +3 -3
- package/dist/{browser-tool-CWG74LXa.js → browser-tool-BVAlCkv9.js} +7 -7
- package/dist/{browser-tool-CZsdYOyF.js → browser-tool-CTNhVzit.js} +7 -7
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +489 -42
- package/dist/bundled/kg-message-sync/handler.js +6 -2
- package/dist/bundled/session-memory/handler.js +47 -1
- package/dist/{call-DkT-xA-u.js → call-BrDNyQiZ.js} +2 -2
- package/dist/{call-COjGFB_A.js → call-Di0NGY7s.js} +2 -2
- package/dist/{call-BKa0221r.js → call-QNmBuec5.js} +1 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{canvas-tool-yqzOmVk8.js → canvas-tool-C8kJ8X6t.js} +2 -2
- package/dist/{canvas-tool-D7utVUj9.js → canvas-tool-v_tDod0l.js} +2 -2
- package/dist/{channel-options-DDJR7t6c.js → channel-options-BgB_XE_R.js} +1 -1
- package/dist/{channel-options-wAeX19Sd.js → channel-options-C3G3uvc8.js} +1 -1
- package/dist/{channel-web-B731iz_S.js → channel-web-C7erWB8c.js} +7 -7
- package/dist/{channels-cli-DyZ1QjyT.js → channels-cli-CWL9_dUC.js} +9 -9
- package/dist/{channels-cli-B2lgO976.js → channels-cli-D0WU7aEW.js} +9 -9
- package/dist/{chrome-BYfNS8BB.js → chrome-BUH9jMtc.js} +1 -1
- package/dist/{chrome-DKRiholg.js → chrome-WqxB18cs.js} +2 -2
- package/dist/{chrome-C3MXJRdA.js → chrome-xmfH0ICu.js} +2 -2
- package/dist/{clawbot-cli-ByrTjcjf.js → clawbot-cli-BqvWmOf2.js} +1 -1
- package/dist/{clawbot-cli-C-8EFRKv.js → clawbot-cli-Cy4xxEwA.js} +1 -1
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-DNiohgQu.js → cli-C6-qelzK.js} +3 -3
- package/dist/{cli-D-m3umOT.js → cli-COPy2u3N.js} +3 -3
- package/dist/{client-D2hf2jQ7.js → client-BIS2Uayk.js} +4 -4
- package/dist/{client-BQN-LuPk.js → client-BoM5FwV4.js} +4 -4
- package/dist/{client-xu3whbFC.js → client-CTr2olAS.js} +4 -4
- package/dist/{command-registry-CB0tYTNA.js → command-registry-BSAY6wdm.js} +14 -14
- package/dist/{commands-registry-PW7IInMR.js → commands-registry-SXjoCA7i.js} +2 -2
- package/dist/{commands-registry-dia3m7-M.js → commands-registry-UnBqSA67.js} +2 -2
- package/dist/{completion-cli-Dg5pvBMY.js → completion-cli--3eqgAwK.js} +1 -1
- package/dist/{completion-cli-CSzxM5wY.js → completion-cli-RDTl_9qR.js} +2 -2
- package/dist/{config-BBoAK0dA.js → config-CkMQunWU.js} +6 -2
- package/dist/{config-ClkrcdId.js → config-DHYot764.js} +2 -2
- package/dist/{config-BgqD6SVw.js → config-DJTLRK5S.js} +2 -2
- package/dist/{config-cli-Denu0eEu.js → config-cli-BUCeVfP_.js} +4 -4
- package/dist/{config-cli-DtAjejub.js → config-cli-C1RrXpz0.js} +4 -4
- package/dist/{config-guard-DF1WNs2e.js → config-guard-CVx36OOi.js} +3 -3
- package/dist/config-guard-Csz0-uEX.js +2 -0
- package/dist/{config-validation-mmyHFUrK.js → config-validation-BVN3OEOd.js} +2 -2
- package/dist/{config-validation-lm5BwYiy.js → config-validation-C3jULSMI.js} +2 -2
- package/dist/{configure-CxrB1V4C.js → configure-CQEz5KQ3.js} +15 -15
- package/dist/{configure-CroxylRT.js → configure-akx6bWAt.js} +15 -15
- package/dist/{cron-cli-CYFkAl-f.js → cron-cli-BoMJUHUX.js} +2 -2
- package/dist/{cron-cli-CMjG3iLg.js → cron-cli-DvtMDSN2.js} +1 -1
- package/dist/{cron-tool-B3ffaxAO.js → cron-tool-Dcr3QMih.js} +5 -5
- package/dist/{cron-tool-BnUUPLV3.js → cron-tool-DllqQBKI.js} +5 -5
- package/dist/{daemon-cli-Bs0GD5xF.js → daemon-cli-CHfZAu4w.js} +9 -9
- package/dist/{daemon-cli-dauqwBcE.js → daemon-cli-D7K6zRR6.js} +9 -9
- package/dist/daemon-cli.js +6 -2
- package/dist/daemon-install-helpers-Ls_foXgf.js +2 -0
- package/dist/daemon-install-helpers-VzSaKa-j.js +2 -0
- package/dist/{daemon-runtime-C-XyxJRT.js → daemon-runtime--L-FasK6.js} +1 -1
- package/dist/{daemon-runtime-BLp3uThx.js → daemon-runtime-DKTkFmdZ.js} +1 -1
- package/dist/{deliver-C40KRMzm.js → deliver-BCijF1xe.js} +4 -4
- package/dist/{deliver-C5vVViLg.js → deliver-DiDYkpmh.js} +5 -5
- package/dist/{deliver-Dhut24vc.js → deliver-Ds0o_rCY.js} +3 -3
- package/dist/{deps-DRyTOIPO.js → deps-DFeGFeii.js} +6 -6
- package/dist/{devices-cli-DFPiK0W5.js → devices-cli-C9OvVBEs.js} +1 -1
- package/dist/{devices-cli-BfwxECLu.js → devices-cli-D4YJarjz.js} +1 -1
- package/dist/{diagnostic-Bzd3eHBU.js → diagnostic-CVAiT8Yi.js} +2 -2
- package/dist/{diagnostic-session-state-C8e7GxAm.js → diagnostic-session-state-Cj5nMvNL.js} +1 -1
- package/dist/{directory-cli-BX_a06o7.js → directory-cli--LuldZqc.js} +2 -2
- package/dist/{directory-cli-BQlGeeQK.js → directory-cli-DHpksyLI.js} +2 -2
- package/dist/{dispatcher-BWcYLowQ.js → dispatcher-D46WCdTe.js} +7 -7
- package/dist/{dispatcher-DefEQC4n.js → dispatcher-D8fgAnwH.js} +7 -7
- package/dist/{dm-policy-shared-Dm70u4Yr.js → dm-policy-shared-CEUsAI0F.js} +1 -1
- package/dist/{dm-policy-shared-DeX6SUMT.js → dm-policy-shared-DZglJJMa.js} +1 -1
- package/dist/{dns-cli-CxMaD4cI.js → dns-cli-C4L7EzEY.js} +2 -2
- package/dist/{dns-cli-DAdvx6qq.js → dns-cli-wSFONc42.js} +2 -2
- package/dist/{docs-cli-BR1YXIH4.js → docs-cli-4Dzg7LrJ.js} +1 -1
- package/dist/{docs-cli-BR8IKtP3.js → docs-cli-BWUGypxO.js} +1 -1
- package/dist/doctor-completion-B4bzzPyA.js +2 -0
- package/dist/doctor-completion-CE9xjPcf.js +2 -0
- package/dist/{doctor-completion-C3YAoPkP.js → doctor-completion-COKl8-PU.js} +1 -1
- package/dist/{doctor-completion-CkIy7FpB.js → doctor-completion-DPjvm1G7.js} +1 -1
- package/dist/{doctor-config-flow-CsP66Ij5.js → doctor-config-flow-CCqETtju.js} +4 -4
- package/dist/{doctor-config-flow-D_WRZLT3.js → doctor-config-flow-CRibe33c.js} +4 -4
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-CLIzgYS8.js → exec-approvals-cli-CCqVDSOe.js} +2 -2
- package/dist/{exec-approvals-cli-DW2-7TEV.js → exec-approvals-cli-RRZ5wIP0.js} +2 -2
- package/dist/extensionAPI.d.ts +36 -2
- package/dist/extensionAPI.js +263 -20
- package/dist/{gateway-Duqy39t3.js → gateway-Bvd5CqY4.js} +3 -3
- package/dist/{gateway-CqhiWZQd.js → gateway-D_kwhuup.js} +3 -3
- package/dist/{gateway-cli-CUrxOlB4.js → gateway-cli-BbuSOWKq.js} +328 -244
- package/dist/{gateway-cli-BrM4d8E7.js → gateway-cli-C-AMSwgo.js} +324 -240
- package/dist/{gateway-0sVK3Rjy.js → gateway-q_fM0u-m.js} +2 -2
- package/dist/{gateway-rpc-BGgh3mTl.js → gateway-rpc-Ed0F1N_m.js} +1 -1
- package/dist/{gateway-rpc-9WQJwkTJ.js → gateway-rpc-J14XBNuM.js} +1 -1
- package/dist/{gateway-tool-DtlbDV6N.js → gateway-tool-Bi96OPGe.js} +3 -3
- package/dist/{gateway-tool-CMd3r3O5.js → gateway-tool-CNaxsMbd.js} +3 -3
- package/dist/{github-copilot-auth-Dh5sombA.js → github-copilot-auth-BmlL3P7c.js} +2 -2
- package/dist/{github-copilot-auth-ClDHXpfT.js → github-copilot-auth-DhjScF3O.js} +2 -2
- package/dist/{gmail-Dkq3kngs.js → gmail-BuCz-KEp.js} +1 -1
- package/dist/{gmail-DpPYd91j.js → gmail-C1O6grHu.js} +1 -1
- package/dist/{health-BlZEOPXK.js → health-6TTjEZoo.js} +8 -8
- package/dist/{health-BJ-Irw3K.js → health-BJbAa4df.js} +8 -8
- package/dist/{hooks-cli-Bqd1BR2r.js → hooks-cli-C0Z9dRtP.js} +2 -2
- package/dist/{hooks-cli-CR_bwhdf.js → hooks-cli-DFrRHJ1j.js} +2 -2
- package/dist/{host-D3VZGype.js → host-C8oRBLB6.js} +1 -1
- package/dist/{host-CafVbu36.js → host-DCfZcVR_.js} +1 -1
- package/dist/{image-tool-CwCxITcF.js → image-tool-D_dhIXLT.js} +2 -2
- package/dist/{image-tool-BY8NbIQs.js → image-tool-y-FDf6-M.js} +2 -2
- package/dist/index.d.ts +36 -2
- package/dist/index.js +10 -10
- package/dist/{io-TKYkFbcF.js → io-C_Q6AU5E.js} +2 -2
- package/dist/{io-oiyyZuuG.js → io-CpUiX-Lv.js} +2 -2
- package/dist/{ir-CP9ltYx0.js → ir-D0vxg3iM.js} +2 -2
- package/dist/{knowledge-graph-Dd0rSl0Q.js → knowledge-graph-BFnL_feN.js} +1 -1
- package/dist/{lifecycle-core-C7W7YZwn.js → lifecycle-core-CCUOBmZs.js} +3 -3
- package/dist/{lifecycle-core-BQztQGrv.js → lifecycle-core-CX37YE4Z.js} +3 -3
- package/dist/llm-slug-generator.js +47 -1
- package/dist/{logs-cli-CdAJHTuP.js → logs-cli-BYdqoMkJ.js} +2 -2
- package/dist/{logs-cli-lcuW5kPv.js → logs-cli-Comxq7pP.js} +2 -2
- package/dist/{manager-DeR0znMP.js → manager-DvUEsXx3.js} +1 -1
- package/dist/{memory-cli-BxVGlaEm.js → memory-cli-Bz--RMDo.js} +3 -3
- package/dist/{memory-cli-Y_w-AsVt.js → memory-cli-ilkHc_D4.js} +3 -3
- package/dist/{message-action-runner-CE4bDq6V.js → message-action-runner-BZQOV03k.js} +9 -9
- package/dist/{message-action-runner-BdclEzxx.js → message-action-runner-J8W9BPhj.js} +9 -9
- package/dist/{message-tool-BpFLUe6E.js → message-tool-BHJpugQ6.js} +6 -6
- package/dist/{message-tool-_MODnjgC.js → message-tool-GTRrYMuR.js} +6 -6
- package/dist/{model-catalog-AiXYmm_2.js → model-catalog-7Ew4iFgU.js} +3 -3
- package/dist/{model-catalog-CIgjk707.js → model-catalog-B1R3eepi.js} +3 -3
- package/dist/{model-fallback-DsefSc26.js → model-fallback--afWtYyY.js} +2 -2
- package/dist/{model-fallback-C92G-WUW.js → model-fallback-DXR7ZbvM.js} +2 -2
- package/dist/{model-fallback-Dwkt7imi.js → model-fallback-GSMox3YK.js} +3 -3
- package/dist/{model-picker-B_SEgewv.js → model-picker--bqpbxbC.js} +2 -2
- package/dist/{model-picker-DLr3xagY.js → model-picker-DJpEjKZT.js} +2 -2
- package/dist/{models-YFKEQsfy.js → models-CETV4zZ3.js} +12 -12
- package/dist/{models-cli-DuHCNW7r.js → models-cli-B5caj79x.js} +2 -2
- package/dist/{models-cli-yoQKaR0X.js → models-cli-DPT6gYJm.js} +12 -12
- package/dist/{models-config-BWzVL4DK.js → models-config-CX3wpMrd.js} +2 -2
- package/dist/{models-config-Df7nRCU-.js → models-config-ChIAfklN.js} +2 -2
- package/dist/{node-cli-D4pCYQMW.js → node-cli-4VRhz_1P.js} +7 -7
- package/dist/{node-cli-DzvdQBVp.js → node-cli-DyoQqYo1.js} +7 -7
- package/dist/{nodes-cli-CHWJMLm6.js → nodes-cli-CNQ633Hz.js} +5 -5
- package/dist/{nodes-cli-cjiOPFLH.js → nodes-cli-Dl3KtKoX.js} +5 -5
- package/dist/{nodes-tool-CR8MmpTZ.js → nodes-tool-BkgixWxk.js} +3 -3
- package/dist/{nodes-tool-DxMgloLr.js → nodes-tool-BmT8LWTt.js} +3 -3
- package/dist/{nodes-utils-BHrOJOWk.js → nodes-utils-B1jr4oHE.js} +1 -1
- package/dist/{nodes-utils-BRFzmJmB.js → nodes-utils-CVaBTJ5V.js} +1 -1
- package/dist/{nodes-utils-Eo4ilZ36.js → nodes-utils-DVNKajNN.js} +1 -1
- package/dist/{onboard-D3EkmOs0.js → onboard-BSb-bXtw.js} +9 -9
- package/dist/{onboard-DdguleAq.js → onboard-DHzBfhN9.js} +9 -9
- package/dist/{onboard-channels-DBltNYY2.js → onboard-channels-BP5oQVqD.js} +1 -1
- package/dist/{onboard-channels-cSzxNqaz.js → onboard-channels-CNmc5fTo.js} +1 -1
- package/dist/{onboard-channels-CeAsHBgW.js → onboard-channels-DHeOj8d6.js} +1 -1
- package/dist/{onboard-channels-ZDMAODeW.js → onboard-channels-DqoegMtk.js} +1 -1
- package/dist/{onboard-custom-DqkrqRdv.js → onboard-custom-B7OO328d.js} +2 -2
- package/dist/{onboard-custom-DMHUJH5-.js → onboard-custom-BODmfSpC.js} +1 -1
- package/dist/{onboard-custom-Vb7K9679.js → onboard-custom-BZv_tJxB.js} +1 -1
- package/dist/{onboard-custom-DOEx3xcN.js → onboard-custom-D7LvDFdH.js} +2 -2
- package/dist/{onboard-helpers-D60Qp1ne.js → onboard-helpers-B9IGa3vx.js} +5 -5
- package/dist/{onboard-helpers-7fbTU2tq.js → onboard-helpers-BKca3qU4.js} +1 -1
- package/dist/{onboard-helpers-DCve32jF.js → onboard-helpers-DP2LE5Oh.js} +5 -5
- package/dist/{onboard-helpers-xGGsG9to.js → onboard-helpers-HkYz_NGi.js} +1 -1
- package/dist/{onboard-remote-B13DRLJa.js → onboard-remote-DQrtJWPJ.js} +1 -1
- package/dist/{onboard-remote-C6s3bR7X.js → onboard-remote-kBPMv7zo.js} +1 -1
- package/dist/{onboard-skills-BU0OKpqj.js → onboard-skills-Cd2WeuBn.js} +3 -3
- package/dist/{onboard-skills-CKzdl2Ph.js → onboard-skills-KRXxu17b.js} +3 -3
- package/dist/{onboarding-BkiZ3JkU.js → onboarding-Cg42Uf0E.js} +11 -11
- package/dist/{onboarding-C--TfoeE.js → onboarding-nPyIyp8f.js} +11 -11
- package/dist/{onboarding.finalize-CUkOVH_E.js → onboarding.finalize-B8gctARP.js} +9 -9
- package/dist/{onboarding.finalize-Damz4ET-.js → onboarding.finalize-BoMhnz3U.js} +9 -9
- package/dist/{onboarding.gateway-config-BA3PQJBL.js → onboarding.gateway-config-Co5c5Jsj.js} +2 -2
- package/dist/{onboarding.gateway-config-4wtmgfdq.js → onboarding.gateway-config-DkkPCpUx.js} +2 -2
- package/dist/{outbound-send-deps-BmDpImVK.js → outbound-send-deps-Dg8cSoFv.js} +6 -6
- package/dist/{outbound-session-B9B7Vsxm.js → outbound-session-BCNTkSVV.js} +3 -3
- package/dist/{outbound-session-pZGUQ4vz.js → outbound-session-BG0ZMrIB.js} +3 -3
- package/dist/{pairing-cli-CRnZKVjx.js → pairing-cli-B_sfgSbk.js} +2 -2
- package/dist/{pairing-cli-aoyKpG0L.js → pairing-cli-mUAKj093.js} +2 -2
- package/dist/{pi-embedded-helpers-D-m7pmXE.js → pi-embedded-helpers-BsRnajNh.js} +1 -1
- package/dist/{pi-embedded-helpers-CkhQP2gU.js → pi-embedded-helpers-CSxJBpFl.js} +1 -1
- package/dist/{pi-embedded-helpers-BbHYim54.js → pi-embedded-helpers-CUfPWD_N.js} +6 -5
- package/dist/{pi-embedded-utils-C6MaVLHj.js → pi-embedded-utils-BlNfBen_.js} +1 -1
- package/dist/{pi-embedded-utils-DIGchmzO.js → pi-embedded-utils-Bql42QTv.js} +1 -1
- package/dist/{pi-embedded-utils-Ip0GsjWb.js → pi-embedded-utils-BtyCE2ZK.js} +1 -1
- package/dist/{pi-model-discovery-Ot_Q_yYa.js → pi-model-discovery-BV73T1am.js} +1 -1
- package/dist/{pi-tools.policy-Dt2kTSid.js → pi-tools.policy-DDJ31-0E.js} +3 -3
- package/dist/{plugin-registry-BZCSZFQn.js → plugin-registry-Dq33ZU89.js} +3 -3
- package/dist/{plugin-registry-DMRnpxA2.js → plugin-registry-RoPLmlrM.js} +3 -3
- package/dist/plugin-sdk/agents/bash/bash-tools.exec-runtime.d.ts +4 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-context-guard.d.ts +5 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/tool-result-reduce.d.ts +8 -0
- package/dist/plugin-sdk/agents/sandbox/tier0/index.d.ts +3 -0
- package/dist/plugin-sdk/agents/sandbox/tier0/registry.d.ts +28 -0
- package/dist/plugin-sdk/agents/sandbox/tier0/router.d.ts +18 -0
- package/dist/plugin-sdk/agents/sandbox/tier0/virtual-sandbox.d.ts +30 -0
- package/dist/plugin-sdk/agents/sandbox/types.d.ts +5 -0
- package/dist/plugin-sdk/agents/sections/behaviour.d.ts +9 -0
- package/dist/plugin-sdk/agents/skills/compact-prompt.d.ts +12 -0
- package/dist/plugin-sdk/agents/skills/workspace.d.ts +4 -0
- package/dist/plugin-sdk/channels/discord.js +487 -40
- package/dist/plugin-sdk/channels/googlechat.js +3 -1
- package/dist/plugin-sdk/channels/imessage.js +487 -40
- package/dist/plugin-sdk/channels/line.js +489 -42
- package/dist/plugin-sdk/channels/msteams.js +3 -1
- package/dist/plugin-sdk/channels/signal.js +487 -40
- package/dist/plugin-sdk/channels/slack.js +487 -40
- package/dist/plugin-sdk/channels/telegram.js +487 -40
- package/dist/plugin-sdk/channels/whatsapp.js +488 -41
- package/dist/plugin-sdk/config/types.agent-defaults.d.ts +8 -0
- package/dist/plugin-sdk/config/types.agents.d.ts +4 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +8 -0
- package/dist/plugin-sdk/config/types.skills.d.ts +7 -0
- package/dist/plugin-sdk/config/types.tools.d.ts +8 -0
- package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +3 -0
- package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +9 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +6 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +26 -0
- package/dist/plugin-sdk/core.js +6 -2
- package/dist/plugin-sdk/index.js +501 -54
- package/dist/{plugins-cli-BKMBY-np.js → plugins-cli-BA0wJM-k.js} +3 -3
- package/dist/{plugins-cli-D3_BCsVN.js → plugins-cli-a-DWljrI.js} +3 -3
- package/dist/{program-context-CVLR19jJ.js → program-context-CUZUPsiC.js} +43 -43
- package/dist/{program-DFvYiOXj.js → program-gbYi5UIa.js} +7 -7
- package/dist/{prompt-select-styled-D-axSDjg.js → prompt-select-styled-DAdqH32e.js} +17 -17
- package/dist/{prompt-select-styled-n1nMLPsI.js → prompt-select-styled-lKRNiihE.js} +17 -17
- package/dist/{push-apns-Dh6xZki_.js → push-apns-BhtcU_Da.js} +1 -1
- package/dist/{push-apns-D4wjtIOe.js → push-apns-D69Af97u.js} +1 -1
- package/dist/{pw-ai-2VhRhF2B.js → pw-ai-Ba9xJlWV.js} +2 -2
- package/dist/{pw-ai-Blk_s6D5.js → pw-ai-Cvjg4UOk.js} +2 -2
- package/dist/{pw-ai-B6oeo1wI.js → pw-ai-DiwvYyv3.js} +2 -2
- package/dist/{pw-session-Crb06R5v.js → pw-session-BZ1pAX5r.js} +1 -1
- package/dist/{pw-session-DmaV4mTM.js → pw-session-BxiZ6YYh.js} +1 -1
- package/dist/{pw-session-CATqkBLI.js → pw-session-EHew9i-n.js} +1 -1
- package/dist/{qr-cli-B3IWV_8b.js → qr-cli-CFsUuFR-.js} +2 -2
- package/dist/{qr-cli-SfioxAM_.js → qr-cli-SfzcWdI0.js} +2 -2
- package/dist/{register.agent-DDVZDpQC.js → register.agent-B4bNkRtB.js} +11 -11
- package/dist/{register.agent-Dfk70LYq.js → register.agent-DHCAqxWX.js} +8 -8
- package/dist/{register.channel-BvMvb6ip.js → register.channel-B1vKkWV7.js} +2 -2
- package/dist/{register.channel-BJtyCgD7.js → register.channel-D0lVq7dU.js} +2 -2
- package/dist/{register.configure-WQlTjNyz.js → register.configure-DFSJd0YH.js} +1 -1
- package/dist/{register.configure-BdKChDnl.js → register.configure-DIHFldND.js} +1 -1
- package/dist/{register.drone-B-xrDJpJ.js → register.drone-Do4i5ZE9.js} +2 -2
- package/dist/{register.drone-DSHJ5vq1.js → register.drone-Tckr0QFo.js} +2 -2
- package/dist/{register.maintenance-DoMoBeyF.js → register.maintenance-Bw9G1eZ0.js} +5 -5
- package/dist/{register.maintenance-DnP_N0ye.js → register.maintenance-D5LVEuKI.js} +5 -5
- package/dist/{register.message-Xl-pZILp.js → register.message-BsGRyTVT.js} +7 -7
- package/dist/{register.message-Cdp8TM0J.js → register.message-C_51tZCE.js} +8 -8
- package/dist/{register.onboard-BzZPizJ0.js → register.onboard-CMusJAzJ.js} +1 -1
- package/dist/{register.onboard-IPqLR5Zb.js → register.onboard-Ngaw9ikW.js} +1 -1
- package/dist/{register.setup-DLzSctB1.js → register.setup-aKi_hurQ.js} +4 -4
- package/dist/{register.setup-BX8Ya9qY.js → register.setup-xpiPRct8.js} +4 -4
- package/dist/{register.status-health-sessions-CXIHidz6.js → register.status-health-sessions-B87H-g0g.js} +6 -6
- package/dist/{register.status-health-sessions-DnNAMB3T.js → register.status-health-sessions-D2rMUW_t.js} +4 -4
- package/dist/{register.subclis-DAt5WEzu.js → register.subclis-DB0kFld6.js} +30 -30
- package/dist/{reply-D_uwJ_hb.js → reply-CNJWciSj.js} +442 -52
- package/dist/{reply-payloads-BBHotu7W.js → reply-payloads-BS889lPA.js} +2 -2
- package/dist/{reply-payloads-CikGrhVL.js → reply-payloads-Dk-zLmJC.js} +2 -2
- package/dist/{reply-prefix-eSF5kXs5.js → reply-prefix-CfrIMbCM.js} +1 -1
- package/dist/{reply-prefix-CYbvVBOV.js → reply-prefix-D9MQ_veY.js} +1 -1
- package/dist/{resolve-route-FLi7kFo1.js → resolve-route-0arQsERr.js} +1 -1
- package/dist/{resolve-route-DiiBj8NL.js → resolve-route-DwDSX3mI.js} +2 -2
- package/dist/{routes-DFLRIpty.js → routes-DubNFADQ.js} +4 -4
- package/dist/{routes-CagC77kh.js → routes-hcdbDZ60.js} +4 -4
- package/dist/{rpc-DxdMMngu.js → rpc-CpEGWO4f.js} +1 -1
- package/dist/{rpc-dZcSayi6.js → rpc-DShIx1il.js} +1 -1
- package/dist/{run-main-Cw7JO4bk.js → run-main-CgrHeBpO.js} +20 -20
- package/dist/{sandbox-DX1DKAJb.js → sandbox-BYK6Qgnd.js} +9 -8
- package/dist/{sandbox-pZvVQZ-a.js → sandbox-CDGF9AVA.js} +9 -8
- package/dist/{sandbox-cli-DsFqky0Y.js → sandbox-cli-3v8NFyXC.js} +4 -4
- package/dist/{sandbox-cli--NZU5yHm.js → sandbox-cli-DmXP8NkD.js} +4 -4
- package/dist/{security-cli-B9rFqAom.js → security-cli-B23Rjmu8.js} +3 -3
- package/dist/{security-cli-DUGFqvJc.js → security-cli-C7jxF7EW.js} +3 -3
- package/dist/{send-OcwoynpB.js → send-B3EXtlyb.js} +2 -2
- package/dist/{send-BUUHmWJ3.js → send-Boe93Q4V.js} +2 -2
- package/dist/{send-Czh3Yz38.js → send-Br1IcpxR.js} +2 -2
- package/dist/{send-mztwgKny.js → send-BrvRGJ0_.js} +3 -3
- package/dist/{send-CRNffLsb.js → send-BuiJlYF8.js} +2 -2
- package/dist/{send-DTQ_lSWv.js → send-DPURnZWZ.js} +2 -2
- package/dist/{send-Bh69NFd_.js → send-DT-x-IFQ.js} +3 -3
- package/dist/{send-CuFw68zk.js → send-D_PQuZ3x.js} +2 -2
- package/dist/{send-Ckq83rOO.js → send-DhuPDKRX.js} +2 -2
- package/dist/{server-context-D-VUH9Bz.js → server-context-BRKaxwJB.js} +6 -6
- package/dist/{server-context-BlUcP_zF.js → server-context-CvEQbenq.js} +6 -6
- package/dist/{server-context-BNI2cc_e.js → server-context-nyYhGUmI.js} +5 -5
- package/dist/{server-node-events-DQqHB_8B.js → server-node-events-B6rUT0PE.js} +8 -8
- package/dist/{server-node-events-BqG45BMs.js → server-node-events-D90DAPI1.js} +10 -10
- package/dist/{session-status-tool-CN-Juxjq.js → session-status-tool-BIN4ooy0.js} +6 -6
- package/dist/{session-status-tool-DnD354sJ.js → session-status-tool-CtbF1-VI.js} +7 -7
- package/dist/{session-utils-0BYkk3f_.js → session-utils-DDCd8HC9.js} +4 -4
- package/dist/{sessions-CismtNoo.js → sessions-ByNQiqr2.js} +1 -1
- package/dist/{sessions-D_b2UXud.js → sessions-C0Qs0Flz.js} +3 -3
- package/dist/{sessions-0d-dBE8D.js → sessions-CPoA3oJo.js} +4 -4
- package/dist/{sessions-Z8JCL_sa.js → sessions-CW4tzKA-.js} +3 -3
- package/dist/{sessions-helpers-Crh_NTSX.js → sessions-helpers-DdqQiSR6.js} +3 -3
- package/dist/{sessions-helpers-JsbUTHcP.js → sessions-helpers-vwVJ1Vy4.js} +3 -3
- package/dist/{sessions-helpers-uZ0Taeh3.js → sessions-helpers-xH-u6Byb.js} +3 -3
- package/dist/{sessions-history-tool-6VYdT_kc.js → sessions-history-tool-BO81rMTT.js} +5 -5
- package/dist/{sessions-history-tool-6WMcHpxy.js → sessions-history-tool-DKXNjv5X.js} +5 -5
- package/dist/{sessions-list-tool-CwTLRwGc.js → sessions-list-tool-6DJtypdD.js} +5 -5
- package/dist/{sessions-list-tool-CwGp-l3S.js → sessions-list-tool-s_y-_4Uv.js} +5 -5
- package/dist/{sessions-send-tool-BKNgicV5.js → sessions-send-tool-C3ggqtMe.js} +5 -5
- package/dist/{sessions-send-tool-Dl4HKGgL.js → sessions-send-tool-roh-kyNw.js} +5 -5
- package/dist/{sessions-spawn-tool-DqfoPFrK.js → sessions-spawn-tool-BgkkNWMg.js} +1 -1
- package/dist/{sessions-spawn-tool-Bguo3O1I.js → sessions-spawn-tool-UAd65WIb.js} +1 -1
- package/dist/{shared-Cr0N9iap.js → shared-BysrBqEi.js} +2 -2
- package/dist/{shared-B7QVxDsn.js → shared-CjEFJgna.js} +2 -2
- package/dist/{skills-DkeUrhAT.js → skills-Bf4ZPGHe.js} +1 -1
- package/dist/{skills-DMPRReoe.js → skills-DDhWBAii.js} +1 -1
- package/dist/{skills-cli--8zG3UQk.js → skills-cli-DnO1g2oN.js} +6 -6
- package/dist/{skills-cli-D334Q0dM.js → skills-cli-DxFMRja6.js} +6 -6
- package/dist/{skills-install-DAphGXoj.js → skills-install-Bo9PwVmT.js} +2 -2
- package/dist/{skills-install-BNR2Nfa3.js → skills-install-DkZHLCih.js} +2 -2
- package/dist/{skills-status-D54inzOP.js → skills-status-8p-KrlIF.js} +2 -2
- package/dist/{skills-status-DDzkv-Rj.js → skills-status-CBTT87BN.js} +2 -2
- package/dist/{status-BIvJQtxV.js → status-BpgCPxM4.js} +3 -3
- package/dist/{status-JJ8BdlhI.js → status-Db6PPdwI.js} +3 -3
- package/dist/{status-DosDYGut.js → status-DyQwrglF.js} +12 -12
- package/dist/{status-gWt5DmvD.js → status-Dz_-4ATW.js} +13 -13
- package/dist/{status.update-BnYycijV.js → status.update-BBLk_Q3P.js} +1 -1
- package/dist/{status.update-D0KmfrNX.js → status.update-OhQ3FS7R.js} +1 -1
- package/dist/{subagent-registry-0zv9UyYz.js → subagent-registry-C_UHFYRY.js} +443 -53
- package/dist/{subagents-tool-usr_WpP2.js → subagents-tool-BdWYv7Mb.js} +6 -6
- package/dist/{subagents-tool-m92Kjy1x.js → subagents-tool-DjPwvSat.js} +6 -6
- package/dist/{system-cli-t4Qk2mcC.js → system-cli-BQJK1EiV.js} +1 -1
- package/dist/{system-cli-BxYnYU05.js → system-cli-Cj6oDS1q.js} +1 -1
- package/dist/{systemd-hints-JlNoKkcf.js → systemd-hints-BKM-UvY_.js} +1 -1
- package/dist/{systemd-hints-C21GmUrX.js → systemd-hints-BdVIEvO3.js} +1 -1
- package/dist/{targets-BWPxk4rU.js → targets-BpZ7t54u.js} +1 -1
- package/dist/{tools-F4g3knJE.js → tools-D3fRPoa3.js} +421 -38
- package/dist/{tools-cli-Cmg7InJT.js → tools-cli-CjniP2oD.js} +3 -3
- package/dist/{tools-cli-BPV7GpBg.js → tools-cli-DLPn3_f-.js} +3 -3
- package/dist/{tts-CC3WSaW9.js → tts-BhWpmVdG.js} +1 -1
- package/dist/{tts-CRpGlsYO.js → tts-DrFhyLnB.js} +1 -1
- package/dist/{tts-OJZ7iSKo.js → tts-DyQvwyVi.js} +1 -1
- package/dist/{tts-tool-DsLN8-ZT.js → tts-tool-CdaKVWBM.js} +3 -3
- package/dist/{tts-tool-B73xs8Vs.js → tts-tool-CfEs7ebD.js} +3 -3
- package/dist/{tui-BRdOjXJy.js → tui-CNuz7tKz.js} +5 -5
- package/dist/{tui-PSDwA6SF.js → tui-DJvjN1xV.js} +5 -5
- package/dist/{tui-cli-DMD7clw2.js → tui-cli-CLoyYSXd.js} +1 -1
- package/dist/{tui-cli-DHWrleUP.js → tui-cli-DhhA87TG.js} +1 -1
- package/dist/{update-cli-DlxYgSAN.js → update-cli-0lBEnFj5.js} +8 -8
- package/dist/{update-cli-Du5BbYfl.js → update-cli-Cc4jgBsG.js} +8 -8
- package/dist/{validation-CG8Ui8_v.js → validation-B-XaORq2.js} +5 -1
- package/dist/{validation-T0CNq_JP.js → validation-DuFmPzCB.js} +5 -1
- package/dist/web-BUkj8HIz.js +2 -0
- package/dist/{web-CtwxKIvO.js → web-BY79LufL.js} +8 -8
- package/dist/{web-search-B5d6ODyB.js → web-search-CCeGZMBD.js} +4 -4
- package/dist/{web-search-CV42wG57.js → web-search-D1pX-Tuc.js} +4 -4
- package/dist/{webhooks-cli-tSv_Pzzq.js → webhooks-cli-B3LP9UKY.js} +5 -5
- package/dist/{webhooks-cli-BeHnKv6z.js → webhooks-cli-C5xR4Wu5.js} +5 -5
- package/dist/{workspace-Dov1_dCF.js → workspace-BwzunhL2.js} +49 -3
- package/dist/{workspace-CSGZ3DZ_.js → workspace-CVAkpBJa.js} +48 -2
- package/dist/{workspace-CSBTFAxh.js → workspace-D5-DoTNR.js} +48 -2
- package/dist/{workspace-dirs-Yo4RZm7s.js → workspace-dirs-CJDJUlno.js} +3 -3
- package/docs/superpowers/plans/2026-06-10-phase1-quick-wins.md +1260 -0
- package/docs/superpowers/specs/2026-06-10-recon-quick-wins-and-silent-agent-design.md +151 -0
- package/extensions/alert-watcher/index.js +47 -1
- package/extensions/bluebubbles/index.js +5 -1
- package/extensions/feishu/index.js +5 -1
- package/extensions/flows/index.js +52 -2
- package/extensions/gmail-calendar/index.js +47 -1
- package/extensions/googlechat/index.js +5 -1
- package/extensions/irc/index.js +5 -1
- package/extensions/llm-task/index.js +47 -1
- package/extensions/matrix/{credentials-B1q3x-N0.mjs → credentials-BtiLgiNR.mjs} +5 -1
- package/extensions/matrix/index.js +3 -3
- package/extensions/matrix/{matrix-B9amoffh.mjs → matrix-CWlUSNSh.mjs} +2 -2
- package/extensions/matrix/{resolve-targets-Dw7tv-7K.mjs → resolve-targets-ml4iU4Bd.mjs} +2 -2
- package/extensions/mattermost/index.js +5 -1
- package/extensions/nextcloud-talk/index.js +5 -1
- package/extensions/tlon/index.js +47 -1
- package/extensions/wati/index.js +5 -1
- package/extensions/weixin/index.js +5 -1
- package/extensions/zalo/index.js +5 -1
- package/extensions/zalouser/index.js +5 -1
- package/package.json +3 -2
- package/dist/config-guard-BfdkKYAa.js +0 -2
- package/dist/daemon-install-helpers-4gMthp-_.js +0 -2
- package/dist/daemon-install-helpers-BLXYJ3C5.js +0 -2
- package/dist/doctor-completion-DKJRw1m1.js +0 -2
- package/dist/doctor-completion-DMcJXsi0.js +0 -2
- 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(),
|
package/extensions/irc/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
1301
|
+
monitorMatrixProvider = (await import("./matrix-CWlUSNSh.mjs")).monitorMatrixProvider;
|
|
1302
1302
|
} finally {
|
|
1303
1303
|
releaseLock();
|
|
1304
1304
|
}
|