agim-cli 1.2.151 → 1.2.152
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/CHANGELOG.md +45 -0
- package/dist/web/agim-skills-api.d.ts.map +1 -1
- package/dist/web/agim-skills-api.js +6 -1
- package/dist/web/agim-skills-api.js.map +1 -1
- package/dist/web/public/assets/{a2a-BJ4YL13Y.js → a2a-DZL1sgVk.js} +2 -2
- package/dist/web/public/assets/{a2a-BJ4YL13Y.js.map → a2a-DZL1sgVk.js.map} +1 -1
- package/dist/web/public/assets/{activity-Dzy3LsL8.js → activity-BsCuSHQd.js} +2 -2
- package/dist/web/public/assets/{activity-Dzy3LsL8.js.map → activity-BsCuSHQd.js.map} +1 -1
- package/dist/web/public/assets/{admins-CUAm5mP9.js → admins-CyG_mVaa.js} +2 -2
- package/dist/web/public/assets/{admins-CUAm5mP9.js.map → admins-CyG_mVaa.js.map} +1 -1
- package/dist/web/public/assets/{agents-CyDJ89HA.js → agents-D2wSzcVZ.js} +2 -2
- package/dist/web/public/assets/{agents-CyDJ89HA.js.map → agents-D2wSzcVZ.js.map} +1 -1
- package/dist/web/public/assets/{approvals-i39FaOuk.js → approvals-C3uNQTdL.js} +2 -2
- package/dist/web/public/assets/{approvals-i39FaOuk.js.map → approvals-C3uNQTdL.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-BQ-kUumo.js → arrow-down-CppegASc.js} +2 -2
- package/dist/web/public/assets/{arrow-down-BQ-kUumo.js.map → arrow-down-CppegASc.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-C8L1uMX_.js → arrow-up-8NH41ZQX.js} +2 -2
- package/dist/web/public/assets/{arrow-up-C8L1uMX_.js.map → arrow-up-8NH41ZQX.js.map} +1 -1
- package/dist/web/public/assets/{asks-D20T9unh.js → asks-DiT_eq2x.js} +2 -2
- package/dist/web/public/assets/{asks-D20T9unh.js.map → asks-DiT_eq2x.js.map} +1 -1
- package/dist/web/public/assets/{audit-DLENxEeu.js → audit-0T4jT2G0.js} +2 -2
- package/dist/web/public/assets/{audit-DLENxEeu.js.map → audit-0T4jT2G0.js.map} +1 -1
- package/dist/web/public/assets/{bell-IZMkMv1H.js → bell-BoZsoN58.js} +2 -2
- package/dist/web/public/assets/{bell-IZMkMv1H.js.map → bell-BoZsoN58.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-B1lhvGco.js → bgjobs-DbHdPyhE.js} +2 -2
- package/dist/web/public/assets/{bgjobs-B1lhvGco.js.map → bgjobs-DbHdPyhE.js.map} +1 -1
- package/dist/web/public/assets/{brain-R_LZjZV8.js → brain-D-zbPJ7o.js} +2 -2
- package/dist/web/public/assets/{brain-R_LZjZV8.js.map → brain-D-zbPJ7o.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BdiZ_zkr.js → briefcase-D3jWpfeB.js} +2 -2
- package/dist/web/public/assets/{briefcase-BdiZ_zkr.js.map → briefcase-D3jWpfeB.js.map} +1 -1
- package/dist/web/public/assets/{chat-CLZP47Tv.js → chat-DrYeCiFH.js} +2 -2
- package/dist/web/public/assets/{chat-CLZP47Tv.js.map → chat-DrYeCiFH.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-Y59fTozP.js → chevron-left-D6-MKmUs.js} +2 -2
- package/dist/web/public/assets/{chevron-left-Y59fTozP.js.map → chevron-left-D6-MKmUs.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-x790nj7i.js → chevron-right-CHtA6f0-.js} +2 -2
- package/dist/web/public/assets/{chevron-right-x790nj7i.js.map → chevron-right-CHtA6f0-.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-DFYX85pc.js → circle-check-B9adx56J.js} +2 -2
- package/dist/web/public/assets/{circle-check-DFYX85pc.js.map → circle-check-B9adx56J.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-CSJIRIBe.js → circle-check-big-E1qhYcsu.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-CSJIRIBe.js.map → circle-check-big-E1qhYcsu.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-Bb8WBDc7.js → circle-x-xB2tQMGw.js} +2 -2
- package/dist/web/public/assets/{circle-x-Bb8WBDc7.js.map → circle-x-xB2tQMGw.js.map} +1 -1
- package/dist/web/public/assets/{clock-CjFbXxT9.js → clock-DFU9E0F0.js} +2 -2
- package/dist/web/public/assets/{clock-CjFbXxT9.js.map → clock-DFU9E0F0.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-BxRHoNWb.js → confirm-dialog-C1w1040N.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-BxRHoNWb.js.map → confirm-dialog-C1w1040N.js.map} +1 -1
- package/dist/web/public/assets/{copy-MTv1G7jQ.js → copy-UOTkO-2l.js} +2 -2
- package/dist/web/public/assets/{copy-MTv1G7jQ.js.map → copy-UOTkO-2l.js.map} +1 -1
- package/dist/web/public/assets/{data-table-CyskwqK3.js → data-table-CBTDQyFx.js} +2 -2
- package/dist/web/public/assets/{data-table-CyskwqK3.js.map → data-table-CBTDQyFx.js.map} +1 -1
- package/dist/web/public/assets/{dialog-CbUUUyma.js → dialog-CqBNfrYQ.js} +2 -2
- package/dist/web/public/assets/{dialog-CbUUUyma.js.map → dialog-CqBNfrYQ.js.map} +1 -1
- package/dist/web/public/assets/{download-Cuz5HSTK.js → download-BzDp4OCu.js} +2 -2
- package/dist/web/public/assets/{download-Cuz5HSTK.js.map → download-BzDp4OCu.js.map} +1 -1
- package/dist/web/public/assets/{email-JVBTD9Cm.js → email-BDd0tUm1.js} +2 -2
- package/dist/web/public/assets/{email-JVBTD9Cm.js.map → email-BDd0tUm1.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-mrWiD3Ah.js → empty-state-CKPzKsI5.js} +2 -2
- package/dist/web/public/assets/{empty-state-mrWiD3Ah.js.map → empty-state-CKPzKsI5.js.map} +1 -1
- package/dist/web/public/assets/{external-link-B08yOP0L.js → external-link-Cx0ulEkb.js} +2 -2
- package/dist/web/public/assets/{external-link-B08yOP0L.js.map → external-link-Cx0ulEkb.js.map} +1 -1
- package/dist/web/public/assets/{eye-BSA7oBlI.js → eye-D9PD2xVj.js} +2 -2
- package/dist/web/public/assets/{eye-BSA7oBlI.js.map → eye-D9PD2xVj.js.map} +1 -1
- package/dist/web/public/assets/{facts-IPC6o6jR.js → facts-CRpGEODt.js} +2 -2
- package/dist/web/public/assets/{facts-IPC6o6jR.js.map → facts-CRpGEODt.js.map} +1 -1
- package/dist/web/public/assets/{goals-CQiFEtCu.js → goals-pyF71sFT.js} +2 -2
- package/dist/web/public/assets/{goals-CQiFEtCu.js.map → goals-pyF71sFT.js.map} +1 -1
- package/dist/web/public/assets/{health-C2wwtDRS.js → health-_YLm7LIW.js} +2 -2
- package/dist/web/public/assets/{health-C2wwtDRS.js.map → health-_YLm7LIW.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-l8ycLqPJ.js → heart-pulse-DyxG9jqH.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-l8ycLqPJ.js.map → heart-pulse-DyxG9jqH.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-CxeGyQ1p.js → heartbeat-bZfXp6Vm.js} +2 -2
- package/dist/web/public/assets/{heartbeat-CxeGyQ1p.js.map → heartbeat-bZfXp6Vm.js.map} +1 -1
- package/dist/web/public/assets/{hot-CqahuXWL.js → hot-CSwCgYXw.js} +2 -2
- package/dist/web/public/assets/{hot-CqahuXWL.js.map → hot-CSwCgYXw.js.map} +1 -1
- package/dist/web/public/assets/{index-1mxdI2Ts.js → index-D5DvetP5.js} +4 -4
- package/dist/web/public/assets/{index-1mxdI2Ts.js.map → index-D5DvetP5.js.map} +1 -1
- package/dist/web/public/assets/{index-B5zx5382.css → index-uKzGZ_Df.css} +1 -1
- package/dist/web/public/assets/injection-CYjttllI.js +2 -0
- package/dist/web/public/assets/injection-CYjttllI.js.map +1 -0
- package/dist/web/public/assets/installed-C6eNPXLl.js +31 -0
- package/dist/web/public/assets/installed-C6eNPXLl.js.map +1 -0
- package/dist/web/public/assets/{jobs-DGKn7wsS.js → jobs-CKQvijeH.js} +2 -2
- package/dist/web/public/assets/{jobs-DGKn7wsS.js.map → jobs-CKQvijeH.js.map} +1 -1
- package/dist/web/public/assets/{layout-BRwzzJRD.js → layout-2S0YMTH_.js} +2 -2
- package/dist/web/public/assets/{layout-BRwzzJRD.js.map → layout-2S0YMTH_.js.map} +1 -1
- package/dist/web/public/assets/{layout-5GOGK7pX.js → layout-BQGP-bci.js} +2 -2
- package/dist/web/public/assets/{layout-5GOGK7pX.js.map → layout-BQGP-bci.js.map} +1 -1
- package/dist/web/public/assets/{layout-CxlJCe_U.js → layout-C4RTH7Mc.js} +2 -2
- package/dist/web/public/assets/{layout-CxlJCe_U.js.map → layout-C4RTH7Mc.js.map} +1 -1
- package/dist/web/public/assets/{layout-BNsrCbDd.js → layout-C9vch6up.js} +2 -2
- package/dist/web/public/assets/{layout-BNsrCbDd.js.map → layout-C9vch6up.js.map} +1 -1
- package/dist/web/public/assets/{layout-Bov7xJjG.js → layout-Y4GA9SyV.js} +2 -2
- package/dist/web/public/assets/{layout-Bov7xJjG.js.map → layout-Y4GA9SyV.js.map} +1 -1
- package/dist/web/public/assets/{llm-pv7DKMXd.js → llm-CJvopUnt.js} +2 -2
- package/dist/web/public/assets/{llm-pv7DKMXd.js.map → llm-CJvopUnt.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-D-_gvYI1.js → loader-circle-CgLbYd3g.js} +2 -2
- package/dist/web/public/assets/{loader-circle-D-_gvYI1.js.map → loader-circle-CgLbYd3g.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-B0I4Ww6U.js → map-pin-CdHDC52F.js} +2 -2
- package/dist/web/public/assets/{map-pin-B0I4Ww6U.js.map → map-pin-CdHDC52F.js.map} +1 -1
- package/dist/web/public/assets/{mcp-B4NfRtYe.js → mcp-SI73JwZR.js} +2 -2
- package/dist/web/public/assets/{mcp-B4NfRtYe.js.map → mcp-SI73JwZR.js.map} +1 -1
- package/dist/web/public/assets/{memos-C0kKjNm0.js → memos-B-5cdUp2.js} +2 -2
- package/dist/web/public/assets/{memos-C0kKjNm0.js.map → memos-B-5cdUp2.js.map} +1 -1
- package/dist/web/public/assets/{messengers-BRtpzgyO.js → messengers-CUz9DXB5.js} +2 -2
- package/dist/web/public/assets/{messengers-BRtpzgyO.js.map → messengers-CUz9DXB5.js.map} +1 -1
- package/dist/web/public/assets/{mobile-Csr4VGd9.js → mobile-CrdzyGXr.js} +2 -2
- package/dist/web/public/assets/{mobile-Csr4VGd9.js.map → mobile-CrdzyGXr.js.map} +1 -1
- package/dist/web/public/assets/{native-agent-BBgHqG48.js → native-agent-g8BpqzAo.js} +2 -2
- package/dist/web/public/assets/{native-agent-BBgHqG48.js.map → native-agent-g8BpqzAo.js.map} +1 -1
- package/dist/web/public/assets/{network-D-_C1Id9.js → network-DcpeRx8a.js} +2 -2
- package/dist/web/public/assets/{network-D-_C1Id9.js.map → network-DcpeRx8a.js.map} +1 -1
- package/dist/web/public/assets/{outbox-D-k0S4z0.js → outbox-uR6crgVJ.js} +2 -2
- package/dist/web/public/assets/{outbox-D-k0S4z0.js.map → outbox-uR6crgVJ.js.map} +1 -1
- package/dist/web/public/assets/{pagination-H9_6NsCl.js → pagination-CxK3lTYb.js} +2 -2
- package/dist/web/public/assets/{pagination-H9_6NsCl.js.map → pagination-CxK3lTYb.js.map} +1 -1
- package/dist/web/public/assets/{persona-C_8JNYfR.js → persona-B1k5tc4U.js} +2 -2
- package/dist/web/public/assets/{persona-C_8JNYfR.js.map → persona-B1k5tc4U.js.map} +1 -1
- package/dist/web/public/assets/{plans-D6YmQW_N.js → plans-BWQSahSt.js} +2 -2
- package/dist/web/public/assets/{plans-D6YmQW_N.js.map → plans-BWQSahSt.js.map} +1 -1
- package/dist/web/public/assets/{play-CzbLMGqe.js → play-D2VxB3QN.js} +2 -2
- package/dist/web/public/assets/{play-CzbLMGqe.js.map → play-D2VxB3QN.js.map} +1 -1
- package/dist/web/public/assets/{plus-DHmf4GJ2.js → plus-_XZVk5F_.js} +2 -2
- package/dist/web/public/assets/{plus-DHmf4GJ2.js.map → plus-_XZVk5F_.js.map} +1 -1
- package/dist/web/public/assets/{policy-BN_bs6Io.js → policy-D77IdVzS.js} +2 -2
- package/dist/web/public/assets/{policy-BN_bs6Io.js.map → policy-D77IdVzS.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-DnK1SL3l.js → qr-code-glvcd_3g.js} +2 -2
- package/dist/web/public/assets/{qr-code-DnK1SL3l.js.map → qr-code-glvcd_3g.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-DSNfamTD.js → refresh-ccw-MfejQvU6.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-DSNfamTD.js.map → refresh-ccw-MfejQvU6.js.map} +1 -1
- package/dist/web/public/assets/{reminders-BCfQpyhh.js → reminders-CtKa3ECr.js} +2 -2
- package/dist/web/public/assets/{reminders-BCfQpyhh.js.map → reminders-CtKa3ECr.js.map} +1 -1
- package/dist/web/public/assets/{save-B6RwcyoS.js → save-Cha8EnUJ.js} +2 -2
- package/dist/web/public/assets/{save-B6RwcyoS.js.map → save-Cha8EnUJ.js.map} +1 -1
- package/dist/web/public/assets/{schedules-Djaw4gdH.js → schedules-CuQgG6hz.js} +2 -2
- package/dist/web/public/assets/{schedules-Djaw4gdH.js.map → schedules-CuQgG6hz.js.map} +1 -1
- package/dist/web/public/assets/{search-Dyl0DQcw.js → search-BJqFnKP5.js} +2 -2
- package/dist/web/public/assets/{search-Dyl0DQcw.js.map → search-BJqFnKP5.js.map} +1 -1
- package/dist/web/public/assets/{search-DW9n3_SF.js → search-BpyL8Spy.js} +2 -2
- package/dist/web/public/assets/{search-DW9n3_SF.js.map → search-BpyL8Spy.js.map} +1 -1
- package/dist/web/public/assets/{security-BLuVCXkh.js → security-Cw_yJiDX.js} +2 -2
- package/dist/web/public/assets/{security-BLuVCXkh.js.map → security-Cw_yJiDX.js.map} +1 -1
- package/dist/web/public/assets/{service-DBpd7pkl.js → service-CgSHzzZ2.js} +2 -2
- package/dist/web/public/assets/{service-DBpd7pkl.js.map → service-CgSHzzZ2.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-CdF1C1OF.js → shield-alert-C_TX7BBD.js} +2 -2
- package/dist/web/public/assets/{shield-alert-CdF1C1OF.js.map → shield-alert-C_TX7BBD.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-BCIoenPM.js → status-badge-CLMCkv6R.js} +2 -2
- package/dist/web/public/assets/{status-badge-BCIoenPM.js.map → status-badge-CLMCkv6R.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-ZimmkSar.js → subtasks-BpXUesU9.js} +2 -2
- package/dist/web/public/assets/{subtasks-ZimmkSar.js.map → subtasks-BpXUesU9.js.map} +1 -1
- package/dist/web/public/assets/{table-Bm0gEvxM.js → table-B-dheE8t.js} +2 -2
- package/dist/web/public/assets/{table-Bm0gEvxM.js.map → table-B-dheE8t.js.map} +1 -1
- package/dist/web/public/assets/{topn-CIqrKIEG.js → topn-CIXROr87.js} +2 -2
- package/dist/web/public/assets/{topn-CIqrKIEG.js.map → topn-CIXROr87.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-C5e_ChRg.js → trash-2-CiJPCsGG.js} +2 -2
- package/dist/web/public/assets/{trash-2-C5e_ChRg.js.map → trash-2-CiJPCsGG.js.map} +1 -1
- package/dist/web/public/assets/{use-agim-skills-DpOfgXTF.js → use-agim-skills-DDOG9Vno.js} +2 -2
- package/dist/web/public/assets/use-agim-skills-DDOG9Vno.js.map +1 -0
- package/dist/web/public/assets/{use-background-tasks-P7MRkIjy.js → use-background-tasks-BT6BkFMM.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-P7MRkIjy.js.map → use-background-tasks-BT6BkFMM.js.map} +1 -1
- package/dist/web/public/assets/{use-llm-admin-5KWvGX-n.js → use-llm-admin-C5QwblGu.js} +2 -2
- package/dist/web/public/assets/{use-llm-admin-5KWvGX-n.js.map → use-llm-admin-C5QwblGu.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-D1oAiAgA.js → use-memory-BaQLelYY.js} +2 -2
- package/dist/web/public/assets/{use-memory-D1oAiAgA.js.map → use-memory-BaQLelYY.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-DmZsQEH6.js → use-observability-DiJjq_81.js} +2 -2
- package/dist/web/public/assets/{use-observability-DmZsQEH6.js.map → use-observability-DiJjq_81.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-C35Hb-qN.js → use-settings-CTuwZEdY.js} +2 -2
- package/dist/web/public/assets/{use-settings-C35Hb-qN.js.map → use-settings-CTuwZEdY.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-CMhnIsjv.js → use-workspace-42B5n8Aa.js} +2 -2
- package/dist/web/public/assets/{use-workspace-CMhnIsjv.js.map → use-workspace-42B5n8Aa.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-qIxOSePS.js → useQuery-BLyYPRRA.js} +2 -2
- package/dist/web/public/assets/{useQuery-qIxOSePS.js.map → useQuery-BLyYPRRA.js.map} +1 -1
- package/dist/web/public/assets/{vector-DpAG-MwT.js → vector-BlyEjpL_.js} +2 -2
- package/dist/web/public/assets/{vector-DpAG-MwT.js.map → vector-BlyEjpL_.js.map} +1 -1
- package/dist/web/public/assets/{viewer-oV2bNGun.js → viewer-nKB1rvkV.js} +2 -2
- package/dist/web/public/assets/{viewer-oV2bNGun.js.map → viewer-nKB1rvkV.js.map} +1 -1
- package/dist/web/public/assets/{workspace-ndMN69ms.js → workspace-C5xO2uoT.js} +2 -2
- package/dist/web/public/assets/{workspace-ndMN69ms.js.map → workspace-C5xO2uoT.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-CQd3UL8p.js → workspaces-BncBOneY.js} +2 -2
- package/dist/web/public/assets/{workspaces-CQd3UL8p.js.map → workspaces-BncBOneY.js.map} +1 -1
- package/dist/web/public/assets/{x-BbSX_WMw.js → x-De6HR8Q5.js} +2 -2
- package/dist/web/public/assets/{x-BbSX_WMw.js.map → x-De6HR8Q5.js.map} +1 -1
- package/dist/web/public/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/public/assets/injection-DTlETF-9.js +0 -2
- package/dist/web/public/assets/injection-DTlETF-9.js.map +0 -1
- package/dist/web/public/assets/installed-BYrIRWsr.js +0 -31
- package/dist/web/public/assets/installed-BYrIRWsr.js.map +0 -1
- package/dist/web/public/assets/use-agim-skills-DpOfgXTF.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injection-DTlETF-9.js","sources":["../../src/routes/settings/agim-skills/injection.tsx"],"sourcesContent":["/**\n * /settings/agim-skills/injection — operator-facing editor for the\n * tier-1 system-prompt skill block.\n *\n * v1.2.151 — Background: every agim turn injects an auto-generated\n * skill block at the top of the system prompt so the LLM knows which\n * skills it can call. The block is computed from the loader's bucket\n * + cluster rules. When operators want to nudge it (pin a skill,\n * hide a noisy one, add a routing hint about a custom env), they\n * authoring text here writes a single Markdown file\n * (`~/.agim/skill-injection-override.md`) that REPLACES the auto\n * block at injection time. Empty file == auto behaviour.\n *\n * UI:\n * · Left/top: Auto-generated block (read-only preview).\n * · Right/bottom: Operator override (editable textarea).\n * · Buttons: Save / Clear / Refresh / Copy-auto-into-override.\n * · Counters: char count for both panes + warning at ≥10k chars.\n */\n\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Copy, Loader2, RefreshCcw, Save, Trash2 } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Label } from '@/components/ui/label'\nimport {\n useSkillInjection, useSkillInjectionSave, useSkillInjectionDelete,\n} from '@/hooks/use-agim-skills'\n\nconst TOKEN_WARN_CHARS = 10_000\n\nexport function Component(): JSX.Element {\n return <InjectionEditorRoute />\n}\n\nexport default function InjectionEditorRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const query = useSkillInjection()\n const save = useSkillInjectionSave()\n const del = useSkillInjectionDelete()\n\n // Local draft state; sync from server on first load + after a save.\n const [draft, setDraft] = useState('')\n const [touched, setTouched] = useState(false)\n\n useEffect(() => {\n if (query.data && !touched) {\n setDraft(query.data.override ?? '')\n }\n }, [query.data, touched])\n\n const auto = query.data?.auto ?? ''\n const maxChars = query.data?.maxOverrideChars ?? 40_000\n const overrideActive = query.data?.overrideActive ?? false\n const overridePath = query.data?.overridePath ?? '~/.agim/skill-injection-override.md'\n\n const draftLen = draft.length\n const overLimit = draftLen > maxChars\n\n async function onSave(): Promise<void> {\n if (overLimit) {\n toast.error(t('skillInjection.overLimitToast', { len: draftLen, max: maxChars }))\n return\n }\n try {\n const r = await save.mutateAsync(draft)\n toast.success(r.deleted ? t('skillInjection.clearedToast') : t('skillInjection.savedToast'))\n setTouched(false)\n } catch (err) {\n toast.error((err as Error)?.message ?? String(err))\n }\n }\n\n async function onClear(): Promise<void> {\n if (!confirm(t('skillInjection.confirmClear'))) return\n try {\n await del.mutateAsync()\n setDraft('')\n setTouched(false)\n toast.success(t('skillInjection.clearedToast'))\n } catch (err) {\n toast.error((err as Error)?.message ?? String(err))\n }\n }\n\n async function onRefresh(): Promise<void> {\n await query.refetch()\n if (!touched) setDraft(query.data?.override ?? '')\n toast.info(t('skillInjection.refreshedToast'))\n }\n\n function onCopyAuto(): void {\n setDraft(auto)\n setTouched(true)\n }\n\n return (\n <div className=\"mx-auto flex max-w-6xl flex-col gap-4\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('skillInjection.title')}</h1>\n {overrideActive\n ? <Badge variant=\"success\">{t('skillInjection.overrideActive')}</Badge>\n : <Badge variant=\"outline\">{t('skillInjection.overrideInactive')}</Badge>}\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void onRefresh()}\n disabled={query.isFetching}\n >\n {query.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('common:refresh', { defaultValue: 'Refresh' })}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('skillInjection.subtitle')}</p>\n <p className=\"text-xs text-text-dim font-mono break-all\">{overridePath}</p>\n\n {/* Auto preview */}\n <section className=\"flex flex-col gap-2 rounded-md border border-border bg-surface p-3\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-sm font-medium\">{t('skillInjection.autoLabel')}</Label>\n <Badge variant=\"outline\">{auto.length.toLocaleString()} chars</Badge>\n {auto.length >= TOKEN_WARN_CHARS && (\n <Badge variant=\"warning\">{t('skillInjection.largeWarn')}</Badge>\n )}\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={onCopyAuto}\n disabled={query.isLoading}\n >\n <Copy className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('skillInjection.copyToOverride')}</span>\n </Button>\n </div>\n <textarea\n readOnly\n value={query.isLoading ? '...' : auto}\n className=\"h-64 w-full resize-y rounded border border-border bg-surface-2 p-2 font-mono text-xs\"\n aria-label={t('skillInjection.autoLabel')}\n />\n </section>\n\n {/* Override editor */}\n <section className=\"flex flex-col gap-2 rounded-md border border-border bg-surface p-3\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-sm font-medium\">{t('skillInjection.overrideLabel')}</Label>\n <Badge variant={overLimit ? 'danger' : 'outline'}>\n {draftLen.toLocaleString()} / {maxChars.toLocaleString()} chars\n </Badge>\n {draftLen >= TOKEN_WARN_CHARS && !overLimit && (\n <Badge variant=\"warning\">{t('skillInjection.largeWarn')}</Badge>\n )}\n </div>\n <textarea\n value={draft}\n onChange={(e) => { setDraft(e.target.value); setTouched(true) }}\n placeholder={t('skillInjection.overridePlaceholder')}\n className=\"h-72 w-full resize-y rounded border border-border bg-surface-2 p-2 font-mono text-xs\"\n aria-label={t('skillInjection.overrideLabel')}\n />\n <div className=\"flex flex-wrap items-center gap-2 pt-1\">\n <Button\n onClick={() => void onSave()}\n disabled={save.isPending || overLimit}\n >\n {save.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {t('skillInjection.save')}\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => void onClear()}\n disabled={del.isPending || (!overrideActive && draft.length === 0)}\n >\n {del.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Trash2 className=\"h-4 w-4\" />}\n {t('skillInjection.clear')}\n </Button>\n <span className=\"text-xs text-text-dim\">{t('skillInjection.hint')}</span>\n </div>\n </section>\n </div>\n )\n}\n"],"names":["TOKEN_WARN_CHARS","Component","InjectionEditorRoute","t","useTranslation","query","useSkillInjection","save","useSkillInjectionSave","del","useSkillInjectionDelete","draft","setDraft","useState","touched","setTouched","useEffect","auto","maxChars","overrideActive","overridePath","draftLen","overLimit","onSave","toast","r","err","onClear","onRefresh","onCopyAuto","jsxs","jsx","Badge","Button","Loader2","RefreshCcw","Label","Copy","e","Save","Trash2"],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import{n as v,u as k,j as e,k as u,B as f,l as m,L as C,I as L}from"./index-1mxdI2Ts.js";import{r as x}from"./react-DlP5eolq.js";import{u as A,a as B,b as R,c as P,d as T,e as M}from"./use-agim-skills-DpOfgXTF.js";import{L as j}from"./loader-circle-D-_gvYI1.js";import{R as z}from"./refresh-ccw-DSNfamTD.js";import{T as E}from"./trash-2-C5e_ChRg.js";import{S as D}from"./save-B6RwcyoS.js";import"./useQuery-qIxOSePS.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const F=v("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const O=v("FilePlus2",[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M3 15h6",key:"4e2qda"}],["path",{d:"M6 12v6",key:"1u72j0"}]]),q=`---
|
|
12
|
-
name: my-skill
|
|
13
|
-
description: One-line summary the LLM uses to decide whether to load this skill.
|
|
14
|
-
always: false
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# My Skill
|
|
18
|
-
|
|
19
|
-
Write the body the agent should read when this skill applies.
|
|
20
|
-
|
|
21
|
-
## When to use this skill
|
|
22
|
-
|
|
23
|
-
- bullet 1
|
|
24
|
-
- bullet 2
|
|
25
|
-
|
|
26
|
-
## Steps
|
|
27
|
-
|
|
28
|
-
1. step one
|
|
29
|
-
2. step two
|
|
30
|
-
`;function K(){const{t}=k(["settings","common"]),l=A(),o=B(),[s,a]=x.useState(null);x.useEffect(()=>{!s&&l.data?.skills.length&&a(l.data.skills[0]?.name??null)},[s,l.data]);const i=l.data?.skills??[],d=l.data?.maxBodyChars??32e3;async function c(){try{const n=await o.mutateAsync();m.success(t("agimSkills.reloadedToast",{count:n.count}))}catch(n){m.error(n?.message??String(n))}}return e.jsxs("div",{className:"mx-auto flex max-w-6xl flex-col gap-4",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(F,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("agimSkills.title")}),e.jsx(u,{variant:"info",children:i.length}),e.jsxs(f,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void c(),disabled:o.isPending,children:[o.isPending?e.jsx(j,{className:"h-4 w-4 animate-spin"}):e.jsx(z,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("agimSkills.reload")})]}),e.jsx(I,{onCreate:n=>a(n)})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("agimSkills.subtitle")}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[280px,1fr]",children:[e.jsx(W,{skills:i,selected:s,onSelect:a,loading:l.isLoading}),s?e.jsx(H,{name:s,maxBody:d,onDeleted:()=>a(null)},s):e.jsx("section",{className:"flex items-center justify-center rounded-md border border-border bg-surface p-12 text-sm text-text-dim",children:t("agimSkills.selectHint")})]})]})}function W({skills:t,selected:l,onSelect:o,loading:s}){const{t:a}=k(["settings","common"]);return s?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):t.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-4 text-sm text-text-dim",children:a("agimSkills.emptyList")}):e.jsx("nav",{className:"rounded-md border border-border bg-surface",children:e.jsx("ul",{className:"divide-y divide-border",children:t.map(i=>{const d=l===i.name,c=i.available?i.always?e.jsx(u,{variant:"success",children:a("agimSkills.alwaysOn")}):null:e.jsx(u,{variant:"outline",title:i.unavailableReason,children:a("agimSkills.unavailable")}),n=i.source==="workspace"?e.jsx(u,{variant:"info",children:a("agimSkills.sourceWs")}):e.jsx(u,{variant:"outline",children:a("agimSkills.sourceBuiltin")});return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>o(i.name),className:"flex w-full flex-col items-start gap-1 px-3 py-2 text-left text-xs transition hover:bg-surface-2 "+(d?"bg-surface-2 font-semibold":""),children:[e.jsxs("span",{className:"flex w-full items-center gap-2 font-mono text-[12px]",children:[e.jsx("span",{className:"grow truncate",children:i.name}),n,c]}),e.jsx("span",{className:"line-clamp-2 text-[11px] text-text-dim",children:i.description})]})},i.name)})})})}function H({name:t,maxBody:l,onDeleted:o}){const{t:s}=k(["settings","common"]),a=P(t),i=T(),d=M(),[c,n]=x.useState(""),[h,b]=x.useState("");x.useEffect(()=>{a.data&&h!==t&&(n(a.data.body),b(t))},[a.data,t,h]);const r=a.data?.meta,p=r?.source==="builtin",S=a.data?.body??"",y=x.useMemo(()=>c!==S,[c,S]);async function N(){try{await i.mutateAsync({name:t,body:c}),m.success(s("agimSkills.savedToast",{name:t}))}catch(g){m.error(g?.message??String(g))}}async function w(){if(!p&&confirm(s("agimSkills.deleteConfirm",{name:t})))try{await d.mutateAsync(t),m.success(s("agimSkills.deletedToast",{name:t})),o()}catch(g){m.error(g?.message??String(g))}}return a.isLoading?e.jsx("section",{className:"h-72 rounded-md bg-surface-2 animate-pulse"}):r?e.jsxs("section",{className:"flex flex-col gap-2",children:[e.jsxs("header",{className:"flex flex-wrap items-center gap-2 rounded-md border border-border bg-surface px-3 py-2",children:[e.jsx("span",{className:"font-mono text-sm font-semibold",children:r.name}),r.source==="workspace"?e.jsx(u,{variant:"info",children:s("agimSkills.sourceWorkspace")}):e.jsx(u,{variant:"outline",children:s("agimSkills.sourceBuiltinReadonly")}),r.always&&e.jsx(u,{variant:"success",children:s("agimSkills.alwaysOn")}),!r.available&&e.jsx(u,{variant:"outline",title:r.unavailableReason,children:s("agimSkills.unavailable")}),e.jsxs("span",{className:"ml-auto text-[11px] text-text-dim",children:[c.length," / ",l]})]}),e.jsx("textarea",{value:c,onChange:g=>n(g.target.value),disabled:p&&!y,spellCheck:!1,className:"min-h-[500px] w-full rounded-md border border-border bg-surface p-3 font-mono text-xs leading-relaxed focus:border-accent focus:outline-none"}),e.jsxs("div",{className:"text-[11px] text-text-dim",children:[s("agimSkills.pathLabel")," ",e.jsx("code",{children:r.dir})," ·",s("agimSkills.binsLabel")," ",e.jsx("code",{children:r.requiresBins.join(", ")||s("agimSkills.none")})," ·",s("agimSkills.envLabel")," ",e.jsx("code",{children:r.requiresEnv.join(", ")||s("agimSkills.none")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[p&&e.jsx("span",{className:"text-[11px] text-text-dim",children:s("agimSkills.builtinShadowHint")}),e.jsx("span",{className:"ml-auto"}),!p&&e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>void w(),disabled:d.isPending,className:"text-danger hover:text-danger",children:[e.jsx(E,{className:"h-4 w-4"}),s("agimSkills.delete")]}),e.jsxs(f,{size:"sm",onClick:()=>void N(),disabled:i.isPending||!y,children:[i.isPending?e.jsx(j,{className:"h-4 w-4 animate-spin"}):e.jsx(D,{className:"h-4 w-4"}),s(p?"agimSkills.saveShadow":"agimSkills.save")]})]})]}):e.jsx("section",{className:"rounded-md border border-border bg-surface p-4 text-sm text-danger",children:s("agimSkills.notFound")})}function I({onCreate:t}){const{t:l}=k(["settings","common"]),o=R(),[s,a]=x.useState(!1),[i,d]=x.useState("");async function c(n){n.preventDefault();const h=i.trim();if(!h){m.error(l("agimSkills.nameRequired"));return}if(!/^[A-Za-z0-9._-]+$/.test(h)){m.error("safe chars only: [A-Za-z0-9._-]");return}const b=q.replace("name: my-skill",`name: ${h}`);try{const r=await o.mutateAsync({name:h,body:b});m.success(l("agimSkills.createdToast",{name:r.meta.name})),a(!1),d(""),t(r.meta.name)}catch(r){m.error(r?.message??String(r))}}return s?e.jsxs("form",{onSubmit:n=>void c(n),className:"flex items-center gap-1",children:[e.jsx(C,{className:"sr-only",children:l("agimSkills.newName")}),e.jsx(L,{autoFocus:!0,value:i,onChange:n=>d(n.target.value),placeholder:l("agimSkills.newNamePlaceholder"),className:"h-8 w-44 font-mono text-xs"}),e.jsx(f,{type:"submit",size:"sm",disabled:o.isPending,children:o.isPending?e.jsx(j,{className:"h-4 w-4 animate-spin"}):l("agimSkills.newCreate")}),e.jsx(f,{type:"button",variant:"ghost",size:"sm",onClick:()=>{a(!1),d("")},children:l("actions.cancel",{ns:"common"})})]}):e.jsxs(f,{size:"sm",onClick:()=>a(!0),children:[e.jsx(O,{className:"h-4 w-4"})," ",l("agimSkills.new")]})}export{K as default};
|
|
31
|
-
//# sourceMappingURL=installed-BYrIRWsr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installed-BYrIRWsr.js","sources":["../../node_modules/lucide-react/dist/esm/icons/book-open.js","../../node_modules/lucide-react/dist/esm/icons/file-plus-2.js","../../src/routes/settings/agim-skills/installed.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookOpen = createLucideIcon(\"BookOpen\", [\n [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n [\n \"path\",\n {\n d: \"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\n key: \"ruj8y\"\n }\n ]\n]);\n\nexport { BookOpen as default };\n//# sourceMappingURL=book-open.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FilePlus2 = createLucideIcon(\"FilePlus2\", [\n [\"path\", { d: \"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4\", key: \"1pf5j1\" }],\n [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n [\"path\", { d: \"M3 15h6\", key: \"4e2qda\" }],\n [\"path\", { d: \"M6 12v6\", key: \"1u72j0\" }]\n]);\n\nexport { FilePlus2 as default };\n//# sourceMappingURL=file-plus-2.js.map\n","/**\n * /settings/agim-skills — manage the agim SKILL.md library\n * (P1 follow-up).\n *\n * Two-pane layout:\n * · Left: skill list (source + availability + always-on tags;\n * click to load body into the editor).\n * · Right: SKILL.md editor (textarea) + Save + Delete (workspace\n * skills only) + Create New + Refresh from disk.\n *\n * Builtin skills are read-only here — to override one, just create\n * a workspace skill with the same name; the loader shadows builtins\n * by name (see core/skills/loader.ts § discovery + shadowing).\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n BookOpen, FilePlus2, Loader2, RefreshCcw, Save, Trash2,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n useAgimSkillsList, useAgimSkill,\n useAgimSkillCreate, useAgimSkillUpdate, useAgimSkillDelete,\n useAgimSkillsRefresh,\n type AgimSkillMeta,\n} from '@/hooks/use-agim-skills'\n\nconst STARTER_TEMPLATE = `---\nname: my-skill\ndescription: One-line summary the LLM uses to decide whether to load this skill.\nalways: false\n---\n\n# My Skill\n\nWrite the body the agent should read when this skill applies.\n\n## When to use this skill\n\n- bullet 1\n- bullet 2\n\n## Steps\n\n1. step one\n2. step two\n`\n\nexport default function SettingsAgimSkillsRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useAgimSkillsList()\n const refresh = useAgimSkillsRefresh()\n const [selected, setSelected] = useState<string | null>(null)\n\n // Pre-select the first skill once the list arrives.\n useEffect(() => {\n if (!selected && listQuery.data?.skills.length) {\n setSelected(listQuery.data.skills[0]?.name ?? null)\n }\n }, [selected, listQuery.data])\n\n const skills = listQuery.data?.skills ?? []\n const maxBody = listQuery.data?.maxBodyChars ?? 32_000\n\n async function onRefresh(): Promise<void> {\n try {\n const r = await refresh.mutateAsync()\n toast.success(t('agimSkills.reloadedToast', { count: r.count }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <div className=\"mx-auto flex max-w-6xl flex-col gap-4\">\n <header className=\"flex items-center gap-3\">\n <BookOpen className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('agimSkills.title')}</h1>\n <Badge variant=\"info\">{skills.length}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void onRefresh()}\n disabled={refresh.isPending}\n >\n {refresh.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('agimSkills.reload')}</span>\n </Button>\n <NewSkillButton onCreate={(n) => setSelected(n)} />\n </header>\n <p className=\"text-sm text-text-dim\">{t('agimSkills.subtitle')}</p>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-[280px,1fr]\">\n <SkillsList\n skills={skills}\n selected={selected}\n onSelect={setSelected}\n loading={listQuery.isLoading}\n />\n {selected ? (\n <SkillEditor\n key={selected}\n name={selected}\n maxBody={maxBody}\n onDeleted={() => setSelected(null)}\n />\n ) : (\n <section className=\"flex items-center justify-center rounded-md border border-border bg-surface p-12 text-sm text-text-dim\">\n {t('agimSkills.selectHint')}\n </section>\n )}\n </div>\n </div>\n )\n}\n\n/* ─────────────── List pane ─────────────── */\n\nfunction SkillsList({\n skills, selected, onSelect, loading,\n}: { skills: AgimSkillMeta[]; selected: string | null; onSelect: (n: string) => void; loading: boolean }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n if (loading) return <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n if (skills.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-4 text-sm text-text-dim\">\n {t('agimSkills.emptyList')}\n </section>\n )\n }\n return (\n <nav className=\"rounded-md border border-border bg-surface\">\n <ul className=\"divide-y divide-border\">\n {skills.map((s) => {\n const isSelected = selected === s.name\n const flag = !s.available\n ? <Badge variant=\"outline\" title={s.unavailableReason}>{t('agimSkills.unavailable')}</Badge>\n : s.always\n ? <Badge variant=\"success\">{t('agimSkills.alwaysOn')}</Badge>\n : null\n const src = s.source === 'workspace'\n ? <Badge variant=\"info\">{t('agimSkills.sourceWs')}</Badge>\n : <Badge variant=\"outline\">{t('agimSkills.sourceBuiltin')}</Badge>\n return (\n <li key={s.name}>\n <button\n type=\"button\"\n onClick={() => onSelect(s.name)}\n className={\n 'flex w-full flex-col items-start gap-1 px-3 py-2 text-left text-xs transition hover:bg-surface-2 '\n + (isSelected ? 'bg-surface-2 font-semibold' : '')\n }\n >\n <span className=\"flex w-full items-center gap-2 font-mono text-[12px]\">\n <span className=\"grow truncate\">{s.name}</span>\n {src}\n {flag}\n </span>\n <span className=\"line-clamp-2 text-[11px] text-text-dim\">{s.description}</span>\n </button>\n </li>\n )\n })}\n </ul>\n </nav>\n )\n}\n\n/* ─────────────── Editor pane ─────────────── */\n\nfunction SkillEditor({\n name, maxBody, onDeleted,\n}: { name: string; maxBody: number; onDeleted: () => void }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const detail = useAgimSkill(name)\n const update = useAgimSkillUpdate()\n const remove = useAgimSkillDelete()\n\n const [draft, setDraft] = useState('')\n const [syncedFor, setSyncedFor] = useState<string>('')\n\n useEffect(() => {\n if (detail.data && syncedFor !== name) {\n setDraft(detail.data.body)\n setSyncedFor(name)\n }\n }, [detail.data, name, syncedFor])\n\n const meta = detail.data?.meta\n const isBuiltin = meta?.source === 'builtin'\n const initial = detail.data?.body ?? ''\n const isDirty = useMemo(() => draft !== initial, [draft, initial])\n\n async function onSave(): Promise<void> {\n try {\n await update.mutateAsync({ name, body: draft })\n toast.success(t('agimSkills.savedToast', { name }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onDelete(): Promise<void> {\n if (isBuiltin) return\n if (!confirm(t('agimSkills.deleteConfirm', { name }))) return\n try {\n await remove.mutateAsync(name)\n toast.success(t('agimSkills.deletedToast', { name }))\n onDeleted()\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n if (detail.isLoading) return <section className=\"h-72 rounded-md bg-surface-2 animate-pulse\" />\n if (!meta) return <section className=\"rounded-md border border-border bg-surface p-4 text-sm text-danger\">{t('agimSkills.notFound')}</section>\n\n return (\n <section className=\"flex flex-col gap-2\">\n <header className=\"flex flex-wrap items-center gap-2 rounded-md border border-border bg-surface px-3 py-2\">\n <span className=\"font-mono text-sm font-semibold\">{meta.name}</span>\n {meta.source === 'workspace'\n ? <Badge variant=\"info\">{t('agimSkills.sourceWorkspace')}</Badge>\n : <Badge variant=\"outline\">{t('agimSkills.sourceBuiltinReadonly')}</Badge>}\n {meta.always && <Badge variant=\"success\">{t('agimSkills.alwaysOn')}</Badge>}\n {!meta.available && <Badge variant=\"outline\" title={meta.unavailableReason}>{t('agimSkills.unavailable')}</Badge>}\n <span className=\"ml-auto text-[11px] text-text-dim\">{draft.length} / {maxBody}</span>\n </header>\n <textarea\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n disabled={isBuiltin && !isDirty}\n spellCheck={false}\n className=\"min-h-[500px] w-full rounded-md border border-border bg-surface p-3 font-mono text-xs leading-relaxed focus:border-accent focus:outline-none\"\n />\n <div className=\"text-[11px] text-text-dim\">\n {t('agimSkills.pathLabel')} <code>{meta.dir}</code> ·\n {t('agimSkills.binsLabel')} <code>{meta.requiresBins.join(', ') || t('agimSkills.none')}</code> ·\n {t('agimSkills.envLabel')} <code>{meta.requiresEnv.join(', ') || t('agimSkills.none')}</code>\n </div>\n <div className=\"flex items-center gap-2\">\n {isBuiltin && (\n <span className=\"text-[11px] text-text-dim\">\n {t('agimSkills.builtinShadowHint')}\n </span>\n )}\n <span className=\"ml-auto\" />\n {!isBuiltin && (\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onDelete()}\n disabled={remove.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n {t('agimSkills.delete')}\n </Button>\n )}\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={update.isPending || !isDirty}\n >\n {update.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {isBuiltin ? t('agimSkills.saveShadow') : t('agimSkills.save')}\n </Button>\n </div>\n </section>\n )\n}\n\n/* ─────────────── New skill ─────────────── */\n\nfunction NewSkillButton({ onCreate }: { onCreate: (name: string) => void }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const create = useAgimSkillCreate()\n const [open, setOpen] = useState(false)\n const [name, setName] = useState('')\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n const trimmed = name.trim()\n if (!trimmed) { toast.error(t('agimSkills.nameRequired')); return }\n if (!/^[A-Za-z0-9._-]+$/.test(trimmed)) {\n toast.error('safe chars only: [A-Za-z0-9._-]'); return\n }\n const body = STARTER_TEMPLATE.replace('name: my-skill', `name: ${trimmed}`)\n try {\n const r = await create.mutateAsync({ name: trimmed, body })\n toast.success(t('agimSkills.createdToast', { name: r.meta.name }))\n setOpen(false)\n setName('')\n onCreate(r.meta.name)\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n if (!open) {\n return (\n <Button size=\"sm\" onClick={() => setOpen(true)}>\n <FilePlus2 className=\"h-4 w-4\" /> {t('agimSkills.new')}\n </Button>\n )\n }\n\n return (\n <form onSubmit={(e) => void onSubmit(e)} className=\"flex items-center gap-1\">\n <Label className=\"sr-only\">{t('agimSkills.newName')}</Label>\n <Input\n autoFocus\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t('agimSkills.newNamePlaceholder')}\n className=\"h-8 w-44 font-mono text-xs\"\n />\n <Button type=\"submit\" size=\"sm\" disabled={create.isPending}>\n {create.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : t('agimSkills.newCreate')}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => { setOpen(false); setName('') }}>\n {t('actions.cancel', { ns: 'common' })}\n </Button>\n </form>\n )\n}\n"],"names":["BookOpen","createLucideIcon","FilePlus2","STARTER_TEMPLATE","SettingsAgimSkillsRoute","useTranslation","listQuery","useAgimSkillsList","refresh","useAgimSkillsRefresh","selected","setSelected","useState","useEffect","skills","maxBody","onRefresh","r","toast","err","jsxs","jsx","Badge","Button","Loader2","RefreshCcw","NewSkillButton","SkillsList","SkillEditor","onSelect","loading","t","s","isSelected","flag","src","name","onDeleted","detail","useAgimSkill","update","useAgimSkillUpdate","remove","useAgimSkillDelete","draft","setDraft","syncedFor","setSyncedFor","meta","isBuiltin","initial","isDirty","useMemo","onSave","onDelete","e","Trash2","Save","onCreate","create","useAgimSkillCreate","open","setOpen","setName","onSubmit","trimmed","body","Label","Input"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-agim-skills-DpOfgXTF.js","sources":["../../src/hooks/use-agim-skills.ts"],"sourcesContent":["/**\n * use-agim-skills — react-query wrappers for the agim SKILL.md\n * editor (`/api/agim-skills/*`).\n *\n * Distinct from the pre-existing `useSkills*` hooks against\n * `/api/skills` (which lists per-agent workspace CLI skills);\n * this set targets the in-process loader from\n * src/core/skills/loader.ts.\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { client } from '@/lib/api/client'\n\nexport interface AgimSkillMeta {\n name: string\n description: string\n source: 'workspace' | 'builtin'\n always: boolean\n available: boolean\n unavailableReason?: string\n requiresBins: string[]\n requiresEnv: string[]\n dir: string\n}\n\nexport interface AgimSkillsListResponse {\n skills: AgimSkillMeta[]\n count: number\n maxBodyChars: number\n}\n\nexport interface AgimSkillDetailResponse {\n meta: AgimSkillMeta\n body: string\n}\n\nconst skillKeys = {\n all: ['agim-skills'] as const,\n list: ['agim-skills', 'list'] as const,\n one: (name: string) => ['agim-skills', 'one', name] as const,\n}\n\nexport function useAgimSkillsList() {\n return useQuery<AgimSkillsListResponse>({\n queryKey: skillKeys.list,\n queryFn: () => client.get<AgimSkillsListResponse>('/api/agim-skills'),\n })\n}\n\nexport function useAgimSkill(name: string | null) {\n return useQuery<AgimSkillDetailResponse>({\n queryKey: name ? skillKeys.one(name) : ['agim-skills', 'one', '__none__'],\n queryFn: () => client.get<AgimSkillDetailResponse>(`/api/agim-skills/${encodeURIComponent(name!)}`),\n enabled: !!name,\n })\n}\n\nexport function useAgimSkillCreate() {\n const qc = useQueryClient()\n return useMutation<{ meta: AgimSkillMeta }, Error, { name: string; body: string }>({\n mutationFn: (body) => client.post('/api/agim-skills', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: skillKeys.all }),\n })\n}\n\nexport function useAgimSkillUpdate() {\n const qc = useQueryClient()\n return useMutation<{ meta: AgimSkillMeta }, Error, { name: string; body: string }>({\n mutationFn: ({ name, body }) => client.put(\n `/api/agim-skills/${encodeURIComponent(name)}`, { body: { body } },\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: skillKeys.all }),\n })\n}\n\nexport function useAgimSkillDelete() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, string>({\n mutationFn: (name) => client.delete(`/api/agim-skills/${encodeURIComponent(name)}`),\n onSuccess: () => qc.invalidateQueries({ queryKey: skillKeys.all }),\n })\n}\n\nexport function useAgimSkillsRefresh() {\n const qc = useQueryClient()\n return useMutation<{ count: number }, Error, void>({\n mutationFn: () => client.post('/api/agim-skills/refresh'),\n onSuccess: () => qc.invalidateQueries({ queryKey: skillKeys.all }),\n })\n}\n\n// ─── v1.2.151 — injection-block override editor (operator-facing) ──────\n\nexport interface AgimSkillsInjectionResponse {\n /** The auto-generated tier-1 skill block from the live loader state.\n * Read-only preview the SPA shows on the left. */\n auto: string\n autoChars: number\n /** Current override file content (null when no override is active). */\n override: string | null\n overrideChars: number\n /** Absolute filesystem path of the override file (display-only). */\n overridePath: string\n /** True when the loader is currently using the override instead of\n * the auto block. */\n overrideActive: boolean\n /** Server-enforced character cap on the override body. */\n maxOverrideChars: number\n}\n\nconst injectionKey = ['agim-skills', 'injection'] as const\n\nexport function useSkillInjection() {\n return useQuery<AgimSkillsInjectionResponse>({\n queryKey: injectionKey,\n queryFn: () => client.get<AgimSkillsInjectionResponse>('/api/agim-skills/injection'),\n })\n}\n\nexport function useSkillInjectionSave() {\n const qc = useQueryClient()\n return useMutation<{ saved: boolean; deleted?: boolean; length?: number }, Error, string>({\n mutationFn: (body) => client.put('/api/agim-skills/injection', { body: { body } }),\n onSuccess: () => qc.invalidateQueries({ queryKey: injectionKey }),\n })\n}\n\nexport function useSkillInjectionDelete() {\n const qc = useQueryClient()\n return useMutation<{ deleted: boolean }, Error, void>({\n mutationFn: () => client.delete('/api/agim-skills/injection'),\n onSuccess: () => qc.invalidateQueries({ queryKey: injectionKey }),\n })\n}\n"],"names":["skillKeys","name","useAgimSkillsList","useQuery","client","useAgimSkill","useAgimSkillCreate","qc","useQueryClient","useMutation","body","useAgimSkillUpdate","useAgimSkillDelete","useAgimSkillsRefresh","injectionKey","useSkillInjection","useSkillInjectionSave","useSkillInjectionDelete"],"mappings":"4FAoCA,MAAMA,EAAY,CAChB,IAAM,CAAC,aAAa,EACpB,KAAM,CAAC,cAAe,MAAM,EAC5B,IAAOC,GAAiB,CAAC,cAAe,MAAOA,CAAI,CACrD,EAEO,SAASC,GAAoB,CAClC,OAAOC,EAAiC,CACtC,SAAUH,EAAU,KACpB,QAAS,IAAMI,EAAO,IAA4B,kBAAkB,CAAA,CACrE,CACH,CAEO,SAASC,EAAaJ,EAAqB,CAChD,OAAOE,EAAkC,CACvC,SAAUF,EAAOD,EAAU,IAAIC,CAAI,EAAI,CAAC,cAAe,MAAO,UAAU,EACxE,QAAS,IAAMG,EAAO,IAA6B,oBAAoB,mBAAmBH,CAAK,CAAC,EAAE,EAClG,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASK,GAAqB,CACnC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAA4E,CACjF,WAAaC,GAASN,EAAO,KAAK,mBAAoB,CAAE,KAAAM,EAAM,EAC9D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUP,EAAU,IAAK,CAAA,CAClE,CACH,CAEO,SAASW,GAAqB,CACnC,MAAMJ,EAAKC,EAAA,EACX,OAAOC,EAA4E,CACjF,WAAY,CAAC,CAAE,KAAAR,EAAM,KAAAS,CAAA,IAAWN,EAAO,IACrC,oBAAoB,mBAAmBH,CAAI,CAAC,GAAI,CAAE,KAAM,CAAE,KAAAS,CAAA,CAAK,CAAE,EAEnE,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUP,EAAU,IAAK,CAAA,CAClE,CACH,CAEO,SAASY,GAAqB,CACnC,MAAML,EAAKC,EAAA,EACX,OAAOC,EAAoC,CACzC,WAAaR,GAASG,EAAO,OAAO,oBAAoB,mBAAmBH,CAAI,CAAC,EAAE,EAClF,UAAW,IAAMM,EAAG,kBAAkB,CAAE,SAAUP,EAAU,IAAK,CAAA,CAClE,CACH,CAEO,SAASa,GAAuB,CACrC,MAAMN,EAAKC,EAAA,EACX,OAAOC,EAA4C,CACjD,WAAY,IAAML,EAAO,KAAK,0BAA0B,EACxD,UAAW,IAAMG,EAAG,kBAAkB,CAAE,SAAUP,EAAU,IAAK,CAAA,CAClE,CACH,CAqBA,MAAMc,EAAe,CAAC,cAAe,WAAW,EAEzC,SAASC,GAAoB,CAClC,OAAOZ,EAAsC,CAC3C,SAAUW,EACV,QAAS,IAAMV,EAAO,IAAiC,4BAA4B,CAAA,CACpF,CACH,CAEO,SAASY,GAAwB,CACtC,MAAMT,EAAKC,EAAA,EACX,OAAOC,EAAmF,CACxF,WAAaC,GAASN,EAAO,IAAI,6BAA8B,CAAE,KAAM,CAAE,KAAAM,CAAA,EAAQ,EACjF,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUO,EAAc,CAAA,CACjE,CACH,CAEO,SAASG,GAA0B,CACxC,MAAMV,EAAKC,EAAA,EACX,OAAOC,EAA+C,CACpD,WAAY,IAAML,EAAO,OAAO,4BAA4B,EAC5D,UAAW,IAAMG,EAAG,kBAAkB,CAAE,SAAUO,EAAc,CAAA,CACjE,CACH"}
|