agim-cli 1.2.150 → 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 +122 -0
- package/dist/core/skills/loader.d.ts +54 -0
- package/dist/core/skills/loader.d.ts.map +1 -1
- package/dist/core/skills/loader.js +221 -96
- package/dist/core/skills/loader.js.map +1 -1
- package/dist/web/agim-skills-api.d.ts.map +1 -1
- package/dist/web/agim-skills-api.js +80 -1
- package/dist/web/agim-skills-api.js.map +1 -1
- package/dist/web/public/assets/{a2a-Cll3P4QN.js → a2a-DZL1sgVk.js} +2 -2
- package/dist/web/public/assets/{a2a-Cll3P4QN.js.map → a2a-DZL1sgVk.js.map} +1 -1
- package/dist/web/public/assets/{activity-B7T7YFlD.js → activity-BsCuSHQd.js} +2 -2
- package/dist/web/public/assets/{activity-B7T7YFlD.js.map → activity-BsCuSHQd.js.map} +1 -1
- package/dist/web/public/assets/{admins-CN7P018S.js → admins-CyG_mVaa.js} +2 -2
- package/dist/web/public/assets/{admins-CN7P018S.js.map → admins-CyG_mVaa.js.map} +1 -1
- package/dist/web/public/assets/{agents-Bqgq7GBF.js → agents-D2wSzcVZ.js} +2 -2
- package/dist/web/public/assets/{agents-Bqgq7GBF.js.map → agents-D2wSzcVZ.js.map} +1 -1
- package/dist/web/public/assets/{approvals-C8IUJQ_A.js → approvals-C3uNQTdL.js} +2 -2
- package/dist/web/public/assets/{approvals-C8IUJQ_A.js.map → approvals-C3uNQTdL.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-SLWKqtDc.js → arrow-down-CppegASc.js} +2 -2
- package/dist/web/public/assets/{arrow-down-SLWKqtDc.js.map → arrow-down-CppegASc.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-BOADc9ce.js → arrow-up-8NH41ZQX.js} +2 -2
- package/dist/web/public/assets/{arrow-up-BOADc9ce.js.map → arrow-up-8NH41ZQX.js.map} +1 -1
- package/dist/web/public/assets/{asks-C-j-DypC.js → asks-DiT_eq2x.js} +2 -2
- package/dist/web/public/assets/{asks-C-j-DypC.js.map → asks-DiT_eq2x.js.map} +1 -1
- package/dist/web/public/assets/{audit-DQb-RuXh.js → audit-0T4jT2G0.js} +2 -2
- package/dist/web/public/assets/{audit-DQb-RuXh.js.map → audit-0T4jT2G0.js.map} +1 -1
- package/dist/web/public/assets/{bell-CV88-ul6.js → bell-BoZsoN58.js} +2 -2
- package/dist/web/public/assets/{bell-CV88-ul6.js.map → bell-BoZsoN58.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-CDrK0d-W.js → bgjobs-DbHdPyhE.js} +2 -2
- package/dist/web/public/assets/{bgjobs-CDrK0d-W.js.map → bgjobs-DbHdPyhE.js.map} +1 -1
- package/dist/web/public/assets/{brain-B7HtSOQU.js → brain-D-zbPJ7o.js} +2 -2
- package/dist/web/public/assets/{brain-B7HtSOQU.js.map → brain-D-zbPJ7o.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-mdzuIa__.js → briefcase-D3jWpfeB.js} +2 -2
- package/dist/web/public/assets/{briefcase-mdzuIa__.js.map → briefcase-D3jWpfeB.js.map} +1 -1
- package/dist/web/public/assets/{chat-CSjtY2rN.js → chat-DrYeCiFH.js} +2 -2
- package/dist/web/public/assets/{chat-CSjtY2rN.js.map → chat-DrYeCiFH.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-uSfPn636.js → chevron-left-D6-MKmUs.js} +2 -2
- package/dist/web/public/assets/{chevron-left-uSfPn636.js.map → chevron-left-D6-MKmUs.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-CtelqacW.js → chevron-right-CHtA6f0-.js} +2 -2
- package/dist/web/public/assets/{chevron-right-CtelqacW.js.map → chevron-right-CHtA6f0-.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-8dbL-u7O.js → circle-check-B9adx56J.js} +2 -2
- package/dist/web/public/assets/{circle-check-8dbL-u7O.js.map → circle-check-B9adx56J.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-D8-svk9a.js → circle-check-big-E1qhYcsu.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-D8-svk9a.js.map → circle-check-big-E1qhYcsu.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-rUxzIz5P.js → circle-x-xB2tQMGw.js} +2 -2
- package/dist/web/public/assets/{circle-x-rUxzIz5P.js.map → circle-x-xB2tQMGw.js.map} +1 -1
- package/dist/web/public/assets/{clock-CG5dlBGB.js → clock-DFU9E0F0.js} +2 -2
- package/dist/web/public/assets/{clock-CG5dlBGB.js.map → clock-DFU9E0F0.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-DlUsSur3.js → confirm-dialog-C1w1040N.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-DlUsSur3.js.map → confirm-dialog-C1w1040N.js.map} +1 -1
- package/dist/web/public/assets/{copy-DnC76wFT.js → copy-UOTkO-2l.js} +2 -2
- package/dist/web/public/assets/{copy-DnC76wFT.js.map → copy-UOTkO-2l.js.map} +1 -1
- package/dist/web/public/assets/{data-table-DswkWUfG.js → data-table-CBTDQyFx.js} +2 -2
- package/dist/web/public/assets/{data-table-DswkWUfG.js.map → data-table-CBTDQyFx.js.map} +1 -1
- package/dist/web/public/assets/{dialog-Ceo4YuXy.js → dialog-CqBNfrYQ.js} +2 -2
- package/dist/web/public/assets/{dialog-Ceo4YuXy.js.map → dialog-CqBNfrYQ.js.map} +1 -1
- package/dist/web/public/assets/{download-DF-46tS4.js → download-BzDp4OCu.js} +2 -2
- package/dist/web/public/assets/{download-DF-46tS4.js.map → download-BzDp4OCu.js.map} +1 -1
- package/dist/web/public/assets/{email-CZee26-_.js → email-BDd0tUm1.js} +2 -2
- package/dist/web/public/assets/{email-CZee26-_.js.map → email-BDd0tUm1.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-D9Hi0Atm.js → empty-state-CKPzKsI5.js} +2 -2
- package/dist/web/public/assets/{empty-state-D9Hi0Atm.js.map → empty-state-CKPzKsI5.js.map} +1 -1
- package/dist/web/public/assets/{external-link-D64iZa9P.js → external-link-Cx0ulEkb.js} +2 -2
- package/dist/web/public/assets/{external-link-D64iZa9P.js.map → external-link-Cx0ulEkb.js.map} +1 -1
- package/dist/web/public/assets/{eye-sY6WZb7D.js → eye-D9PD2xVj.js} +2 -2
- package/dist/web/public/assets/{eye-sY6WZb7D.js.map → eye-D9PD2xVj.js.map} +1 -1
- package/dist/web/public/assets/{facts-B7bGGwvi.js → facts-CRpGEODt.js} +2 -2
- package/dist/web/public/assets/{facts-B7bGGwvi.js.map → facts-CRpGEODt.js.map} +1 -1
- package/dist/web/public/assets/{goals-BfQbsvZv.js → goals-pyF71sFT.js} +2 -2
- package/dist/web/public/assets/{goals-BfQbsvZv.js.map → goals-pyF71sFT.js.map} +1 -1
- package/dist/web/public/assets/{health-Ba_mY0Ts.js → health-_YLm7LIW.js} +2 -2
- package/dist/web/public/assets/{health-Ba_mY0Ts.js.map → health-_YLm7LIW.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-BjikOVwU.js → heart-pulse-DyxG9jqH.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-BjikOVwU.js.map → heart-pulse-DyxG9jqH.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-BM8LlPes.js → heartbeat-bZfXp6Vm.js} +2 -2
- package/dist/web/public/assets/{heartbeat-BM8LlPes.js.map → heartbeat-bZfXp6Vm.js.map} +1 -1
- package/dist/web/public/assets/{hot-BtuLL6n8.js → hot-CSwCgYXw.js} +2 -2
- package/dist/web/public/assets/{hot-BtuLL6n8.js.map → hot-CSwCgYXw.js.map} +1 -1
- package/dist/web/public/assets/{index-DEWFfW_Z.js → index-D5DvetP5.js} +11 -11
- package/dist/web/public/assets/index-D5DvetP5.js.map +1 -0
- package/dist/web/public/assets/{index-f1K5Q2Yz.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-Ddy81Udm.js → jobs-CKQvijeH.js} +2 -2
- package/dist/web/public/assets/{jobs-Ddy81Udm.js.map → jobs-CKQvijeH.js.map} +1 -1
- package/dist/web/public/assets/{layout-Bp4SAA8_.js → layout-2S0YMTH_.js} +2 -2
- package/dist/web/public/assets/{layout-Bp4SAA8_.js.map → layout-2S0YMTH_.js.map} +1 -1
- package/dist/web/public/assets/{layout-Bn2qUxcK.js → layout-BQGP-bci.js} +2 -2
- package/dist/web/public/assets/{layout-Bn2qUxcK.js.map → layout-BQGP-bci.js.map} +1 -1
- package/dist/web/public/assets/{layout-CZ9pGnW8.js → layout-C4RTH7Mc.js} +2 -2
- package/dist/web/public/assets/{layout-CZ9pGnW8.js.map → layout-C4RTH7Mc.js.map} +1 -1
- package/dist/web/public/assets/{layout-BL74fT-L.js → layout-C9vch6up.js} +2 -2
- package/dist/web/public/assets/{layout-BL74fT-L.js.map → layout-C9vch6up.js.map} +1 -1
- package/dist/web/public/assets/layout-Y4GA9SyV.js +2 -0
- package/dist/web/public/assets/layout-Y4GA9SyV.js.map +1 -0
- package/dist/web/public/assets/{llm-yp7b5xxL.js → llm-CJvopUnt.js} +2 -2
- package/dist/web/public/assets/{llm-yp7b5xxL.js.map → llm-CJvopUnt.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-Bbw4pEyE.js → loader-circle-CgLbYd3g.js} +2 -2
- package/dist/web/public/assets/{loader-circle-Bbw4pEyE.js.map → loader-circle-CgLbYd3g.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-DIXHUQgM.js → map-pin-CdHDC52F.js} +2 -2
- package/dist/web/public/assets/{map-pin-DIXHUQgM.js.map → map-pin-CdHDC52F.js.map} +1 -1
- package/dist/web/public/assets/{mcp-DyaljIM_.js → mcp-SI73JwZR.js} +2 -2
- package/dist/web/public/assets/{mcp-DyaljIM_.js.map → mcp-SI73JwZR.js.map} +1 -1
- package/dist/web/public/assets/{memos-Dkoc157i.js → memos-B-5cdUp2.js} +2 -2
- package/dist/web/public/assets/{memos-Dkoc157i.js.map → memos-B-5cdUp2.js.map} +1 -1
- package/dist/web/public/assets/{messengers-CcyGDeUI.js → messengers-CUz9DXB5.js} +2 -2
- package/dist/web/public/assets/{messengers-CcyGDeUI.js.map → messengers-CUz9DXB5.js.map} +1 -1
- package/dist/web/public/assets/{mobile-DqzIv4Xb.js → mobile-CrdzyGXr.js} +2 -2
- package/dist/web/public/assets/{mobile-DqzIv4Xb.js.map → mobile-CrdzyGXr.js.map} +1 -1
- package/dist/web/public/assets/{native-agent-BQ7WaRGK.js → native-agent-g8BpqzAo.js} +2 -2
- package/dist/web/public/assets/{native-agent-BQ7WaRGK.js.map → native-agent-g8BpqzAo.js.map} +1 -1
- package/dist/web/public/assets/{network-B_yUFAqC.js → network-DcpeRx8a.js} +2 -2
- package/dist/web/public/assets/{network-B_yUFAqC.js.map → network-DcpeRx8a.js.map} +1 -1
- package/dist/web/public/assets/{outbox-l8aVOZqO.js → outbox-uR6crgVJ.js} +2 -2
- package/dist/web/public/assets/{outbox-l8aVOZqO.js.map → outbox-uR6crgVJ.js.map} +1 -1
- package/dist/web/public/assets/{pagination-BAKRGKa9.js → pagination-CxK3lTYb.js} +2 -2
- package/dist/web/public/assets/{pagination-BAKRGKa9.js.map → pagination-CxK3lTYb.js.map} +1 -1
- package/dist/web/public/assets/{persona-D3VL9Rg1.js → persona-B1k5tc4U.js} +2 -2
- package/dist/web/public/assets/{persona-D3VL9Rg1.js.map → persona-B1k5tc4U.js.map} +1 -1
- package/dist/web/public/assets/{plans-BBB5e9my.js → plans-BWQSahSt.js} +2 -2
- package/dist/web/public/assets/{plans-BBB5e9my.js.map → plans-BWQSahSt.js.map} +1 -1
- package/dist/web/public/assets/{play-7-Wd369f.js → play-D2VxB3QN.js} +2 -2
- package/dist/web/public/assets/{play-7-Wd369f.js.map → play-D2VxB3QN.js.map} +1 -1
- package/dist/web/public/assets/{plus-B0sfZy-j.js → plus-_XZVk5F_.js} +2 -2
- package/dist/web/public/assets/{plus-B0sfZy-j.js.map → plus-_XZVk5F_.js.map} +1 -1
- package/dist/web/public/assets/{policy-BM1WRXH0.js → policy-D77IdVzS.js} +2 -2
- package/dist/web/public/assets/{policy-BM1WRXH0.js.map → policy-D77IdVzS.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-DcKs5fi3.js → qr-code-glvcd_3g.js} +2 -2
- package/dist/web/public/assets/{qr-code-DcKs5fi3.js.map → qr-code-glvcd_3g.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-uNKeBeRl.js → refresh-ccw-MfejQvU6.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-uNKeBeRl.js.map → refresh-ccw-MfejQvU6.js.map} +1 -1
- package/dist/web/public/assets/{reminders-DHM8K0_O.js → reminders-CtKa3ECr.js} +2 -2
- package/dist/web/public/assets/{reminders-DHM8K0_O.js.map → reminders-CtKa3ECr.js.map} +1 -1
- package/dist/web/public/assets/{save-qwJa5_SA.js → save-Cha8EnUJ.js} +2 -2
- package/dist/web/public/assets/{save-qwJa5_SA.js.map → save-Cha8EnUJ.js.map} +1 -1
- package/dist/web/public/assets/{schedules-Bcd0wbT4.js → schedules-CuQgG6hz.js} +2 -2
- package/dist/web/public/assets/{schedules-Bcd0wbT4.js.map → schedules-CuQgG6hz.js.map} +1 -1
- package/dist/web/public/assets/{search-i1tP2maJ.js → search-BJqFnKP5.js} +2 -2
- package/dist/web/public/assets/{search-i1tP2maJ.js.map → search-BJqFnKP5.js.map} +1 -1
- package/dist/web/public/assets/{search-BUlzNWrj.js → search-BpyL8Spy.js} +2 -2
- package/dist/web/public/assets/{search-BUlzNWrj.js.map → search-BpyL8Spy.js.map} +1 -1
- package/dist/web/public/assets/{security-DgJyTT4g.js → security-Cw_yJiDX.js} +2 -2
- package/dist/web/public/assets/{security-DgJyTT4g.js.map → security-Cw_yJiDX.js.map} +1 -1
- package/dist/web/public/assets/{service-A0Hzear0.js → service-CgSHzzZ2.js} +2 -2
- package/dist/web/public/assets/{service-A0Hzear0.js.map → service-CgSHzzZ2.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-DrnN6fz_.js → shield-alert-C_TX7BBD.js} +2 -2
- package/dist/web/public/assets/{shield-alert-DrnN6fz_.js.map → shield-alert-C_TX7BBD.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-Ryzf96Pl.js → status-badge-CLMCkv6R.js} +2 -2
- package/dist/web/public/assets/{status-badge-Ryzf96Pl.js.map → status-badge-CLMCkv6R.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-Bzh3o3EF.js → subtasks-BpXUesU9.js} +2 -2
- package/dist/web/public/assets/{subtasks-Bzh3o3EF.js.map → subtasks-BpXUesU9.js.map} +1 -1
- package/dist/web/public/assets/{table-BbAOSyc8.js → table-B-dheE8t.js} +2 -2
- package/dist/web/public/assets/{table-BbAOSyc8.js.map → table-B-dheE8t.js.map} +1 -1
- package/dist/web/public/assets/{topn-DkhYw-Gp.js → topn-CIXROr87.js} +2 -2
- package/dist/web/public/assets/{topn-DkhYw-Gp.js.map → topn-CIXROr87.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-CA0cLpnU.js → trash-2-CiJPCsGG.js} +2 -2
- package/dist/web/public/assets/{trash-2-CA0cLpnU.js.map → trash-2-CiJPCsGG.js.map} +1 -1
- package/dist/web/public/assets/use-agim-skills-DDOG9Vno.js +2 -0
- package/dist/web/public/assets/use-agim-skills-DDOG9Vno.js.map +1 -0
- package/dist/web/public/assets/{use-background-tasks-B64YjlA8.js → use-background-tasks-BT6BkFMM.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-B64YjlA8.js.map → use-background-tasks-BT6BkFMM.js.map} +1 -1
- package/dist/web/public/assets/{use-llm-admin-DY2axI4D.js → use-llm-admin-C5QwblGu.js} +2 -2
- package/dist/web/public/assets/{use-llm-admin-DY2axI4D.js.map → use-llm-admin-C5QwblGu.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-BYEjVWbU.js → use-memory-BaQLelYY.js} +2 -2
- package/dist/web/public/assets/{use-memory-BYEjVWbU.js.map → use-memory-BaQLelYY.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-Coj02yDo.js → use-observability-DiJjq_81.js} +2 -2
- package/dist/web/public/assets/{use-observability-Coj02yDo.js.map → use-observability-DiJjq_81.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-i1MhlkyC.js → use-settings-CTuwZEdY.js} +2 -2
- package/dist/web/public/assets/{use-settings-i1MhlkyC.js.map → use-settings-CTuwZEdY.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-DgEM35PY.js → use-workspace-42B5n8Aa.js} +2 -2
- package/dist/web/public/assets/{use-workspace-DgEM35PY.js.map → use-workspace-42B5n8Aa.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-CY2iazjN.js → useQuery-BLyYPRRA.js} +2 -2
- package/dist/web/public/assets/{useQuery-CY2iazjN.js.map → useQuery-BLyYPRRA.js.map} +1 -1
- package/dist/web/public/assets/{vector-Ic76u2hY.js → vector-BlyEjpL_.js} +2 -2
- package/dist/web/public/assets/{vector-Ic76u2hY.js.map → vector-BlyEjpL_.js.map} +1 -1
- package/dist/web/public/assets/{viewer-BXbUN1Rl.js → viewer-nKB1rvkV.js} +2 -2
- package/dist/web/public/assets/{viewer-BXbUN1Rl.js.map → viewer-nKB1rvkV.js.map} +1 -1
- package/dist/web/public/assets/{workspace-CUg0JPn6.js → workspace-C5xO2uoT.js} +2 -2
- package/dist/web/public/assets/{workspace-CUg0JPn6.js.map → workspace-C5xO2uoT.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-C-wb5FQj.js → workspaces-BncBOneY.js} +2 -2
- package/dist/web/public/assets/{workspaces-C-wb5FQj.js.map → workspaces-BncBOneY.js.map} +1 -1
- package/dist/web/public/assets/{x-D1iSuoqg.js → x-De6HR8Q5.js} +2 -2
- package/dist/web/public/assets/{x-D1iSuoqg.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/index-DEWFfW_Z.js.map +0 -1
- package/dist/web/public/assets/installed-Xr8p31ij.js +0 -31
- package/dist/web/public/assets/installed-Xr8p31ij.js.map +0 -1
- package/dist/web/public/assets/layout-pasFRkKV.js +0 -2
- package/dist/web/public/assets/layout-pasFRkKV.js.map +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import{n as q,a as b,b as y,o as p,u as j,j as e,k as u,B as f,l as m,L as B,I as F}from"./index-DEWFfW_Z.js";import{r as x}from"./react-DlP5eolq.js";import{u as L}from"./useQuery-CY2iazjN.js";import{L as N}from"./loader-circle-Bbw4pEyE.js";import{R as M}from"./refresh-ccw-uNKeBeRl.js";import{T as P}from"./trash-2-CA0cLpnU.js";import{S as T}from"./save-qwJa5_SA.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 z=q("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 E=q("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"}]]),k={all:["agim-skills"],list:["agim-skills","list"],one:s=>["agim-skills","one",s]};function K(){return L({queryKey:k.list,queryFn:()=>p.get("/api/agim-skills")})}function Q(s){return L({queryKey:s?k.one(s):["agim-skills","one","__none__"],queryFn:()=>p.get(`/api/agim-skills/${encodeURIComponent(s)}`),enabled:!!s})}function _(){const s=b();return y({mutationFn:t=>p.post("/api/agim-skills",{body:t}),onSuccess:()=>s.invalidateQueries({queryKey:k.all})})}function D(){const s=b();return y({mutationFn:({name:t,body:o})=>p.put(`/api/agim-skills/${encodeURIComponent(t)}`,{body:{body:o}}),onSuccess:()=>s.invalidateQueries({queryKey:k.all})})}function I(){const s=b();return y({mutationFn:t=>p.delete(`/api/agim-skills/${encodeURIComponent(t)}`),onSuccess:()=>s.invalidateQueries({queryKey:k.all})})}function O(){const s=b();return y({mutationFn:()=>p.post("/api/agim-skills/refresh"),onSuccess:()=>s.invalidateQueries({queryKey:k.all})})}const $=`---
|
|
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 se(){const{t:s}=j(["settings","common"]),t=K(),o=O(),[a,i]=x.useState(null);x.useEffect(()=>{!a&&t.data?.skills.length&&i(t.data.skills[0]?.name??null)},[a,t.data]);const l=t.data?.skills??[],d=t.data?.maxBodyChars??32e3;async function c(){try{const n=await o.mutateAsync();m.success(s("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(z,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:s("agimSkills.title")}),e.jsx(u,{variant:"info",children:l.length}),e.jsxs(f,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void c(),disabled:o.isPending,children:[o.isPending?e.jsx(N,{className:"h-4 w-4 animate-spin"}):e.jsx(M,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("agimSkills.reload")})]}),e.jsx(H,{onCreate:n=>i(n)})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("agimSkills.subtitle")}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[280px,1fr]",children:[e.jsx(U,{skills:l,selected:a,onSelect:i,loading:t.isLoading}),a?e.jsx(W,{name:a,maxBody:d,onDeleted:()=>i(null)},a):e.jsx("section",{className:"flex items-center justify-center rounded-md border border-border bg-surface p-12 text-sm text-text-dim",children:s("agimSkills.selectHint")})]})]})}function U({skills:s,selected:t,onSelect:o,loading:a}){const{t:i}=j(["settings","common"]);return a?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):s.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-4 text-sm text-text-dim",children:i("agimSkills.emptyList")}):e.jsx("nav",{className:"rounded-md border border-border bg-surface",children:e.jsx("ul",{className:"divide-y divide-border",children:s.map(l=>{const d=t===l.name,c=l.available?l.always?e.jsx(u,{variant:"success",children:i("agimSkills.alwaysOn")}):null:e.jsx(u,{variant:"outline",title:l.unavailableReason,children:i("agimSkills.unavailable")}),n=l.source==="workspace"?e.jsx(u,{variant:"info",children:i("agimSkills.sourceWs")}):e.jsx(u,{variant:"outline",children:i("agimSkills.sourceBuiltin")});return e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>o(l.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:l.name}),n,c]}),e.jsx("span",{className:"line-clamp-2 text-[11px] text-text-dim",children:l.description})]})},l.name)})})})}function W({name:s,maxBody:t,onDeleted:o}){const{t:a}=j(["settings","common"]),i=Q(s),l=D(),d=I(),[c,n]=x.useState(""),[g,v]=x.useState("");x.useEffect(()=>{i.data&&g!==s&&(n(i.data.body),v(s))},[i.data,s,g]);const r=i.data?.meta,S=r?.source==="builtin",w=i.data?.body??"",C=x.useMemo(()=>c!==w,[c,w]);async function A(){try{await l.mutateAsync({name:s,body:c}),m.success(a("agimSkills.savedToast",{name:s}))}catch(h){m.error(h?.message??String(h))}}async function R(){if(!S&&confirm(a("agimSkills.deleteConfirm",{name:s})))try{await d.mutateAsync(s),m.success(a("agimSkills.deletedToast",{name:s})),o()}catch(h){m.error(h?.message??String(h))}}return i.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:a("agimSkills.sourceWorkspace")}):e.jsx(u,{variant:"outline",children:a("agimSkills.sourceBuiltinReadonly")}),r.always&&e.jsx(u,{variant:"success",children:a("agimSkills.alwaysOn")}),!r.available&&e.jsx(u,{variant:"outline",title:r.unavailableReason,children:a("agimSkills.unavailable")}),e.jsxs("span",{className:"ml-auto text-[11px] text-text-dim",children:[c.length," / ",t]})]}),e.jsx("textarea",{value:c,onChange:h=>n(h.target.value),disabled:S&&!C,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:[a("agimSkills.pathLabel")," ",e.jsx("code",{children:r.dir})," ·",a("agimSkills.binsLabel")," ",e.jsx("code",{children:r.requiresBins.join(", ")||a("agimSkills.none")})," ·",a("agimSkills.envLabel")," ",e.jsx("code",{children:r.requiresEnv.join(", ")||a("agimSkills.none")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[S&&e.jsx("span",{className:"text-[11px] text-text-dim",children:a("agimSkills.builtinShadowHint")}),e.jsx("span",{className:"ml-auto"}),!S&&e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>void R(),disabled:d.isPending,className:"text-danger hover:text-danger",children:[e.jsx(P,{className:"h-4 w-4"}),a("agimSkills.delete")]}),e.jsxs(f,{size:"sm",onClick:()=>void A(),disabled:l.isPending||!C,children:[l.isPending?e.jsx(N,{className:"h-4 w-4 animate-spin"}):e.jsx(T,{className:"h-4 w-4"}),a(S?"agimSkills.saveShadow":"agimSkills.save")]})]})]}):e.jsx("section",{className:"rounded-md border border-border bg-surface p-4 text-sm text-danger",children:a("agimSkills.notFound")})}function H({onCreate:s}){const{t}=j(["settings","common"]),o=_(),[a,i]=x.useState(!1),[l,d]=x.useState("");async function c(n){n.preventDefault();const g=l.trim();if(!g){m.error(t("agimSkills.nameRequired"));return}if(!/^[A-Za-z0-9._-]+$/.test(g)){m.error("safe chars only: [A-Za-z0-9._-]");return}const v=$.replace("name: my-skill",`name: ${g}`);try{const r=await o.mutateAsync({name:g,body:v});m.success(t("agimSkills.createdToast",{name:r.meta.name})),i(!1),d(""),s(r.meta.name)}catch(r){m.error(r?.message??String(r))}}return a?e.jsxs("form",{onSubmit:n=>void c(n),className:"flex items-center gap-1",children:[e.jsx(B,{className:"sr-only",children:t("agimSkills.newName")}),e.jsx(F,{autoFocus:!0,value:l,onChange:n=>d(n.target.value),placeholder:t("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(N,{className:"h-4 w-4 animate-spin"}):t("agimSkills.newCreate")}),e.jsx(f,{type:"button",variant:"ghost",size:"sm",onClick:()=>{i(!1),d("")},children:t("actions.cancel",{ns:"common"})})]}):e.jsxs(f,{size:"sm",onClick:()=>i(!0),children:[e.jsx(E,{className:"h-4 w-4"})," ",t("agimSkills.new")]})}export{se as default};
|
|
31
|
-
//# sourceMappingURL=installed-Xr8p31ij.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installed-Xr8p31ij.js","sources":["../../node_modules/lucide-react/dist/esm/icons/book-open.js","../../node_modules/lucide-react/dist/esm/icons/file-plus-2.js","../../src/hooks/use-agim-skills.ts","../../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 * 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 * /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","skillKeys","name","useAgimSkillsList","useQuery","client","useAgimSkill","useAgimSkillCreate","qc","useQueryClient","useMutation","body","useAgimSkillUpdate","useAgimSkillDelete","useAgimSkillsRefresh","STARTER_TEMPLATE","SettingsAgimSkillsRoute","t","useTranslation","listQuery","refresh","selected","setSelected","useState","useEffect","skills","maxBody","onRefresh","r","toast","err","jsxs","jsx","Badge","Button","Loader2","RefreshCcw","NewSkillButton","SkillsList","SkillEditor","onSelect","loading","s","isSelected","flag","src","onDeleted","detail","update","remove","draft","setDraft","syncedFor","setSyncedFor","meta","isBuiltin","initial","isDirty","useMemo","onSave","onDelete","e","Trash2","Save","onCreate","create","open","setOpen","setName","onSubmit","trimmed","Label","Input"],"mappings":"gXAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAWC,EAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CACE,OACA,CACE,EAAG,qIACH,IAAK,OACX,CACA,CACA,CAAC,EClBD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMC,EAAYD,EAAiB,YAAa,CAC9C,CAAC,OAAQ,CAAE,EAAG,kDAAmD,IAAK,QAAQ,CAAE,EAChF,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,CAC1C,CAAC,ECsBKE,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,CCxDA,MAAMc,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBzB,SAAwBC,IAAuC,CAC7D,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7CC,EAAYhB,EAAA,EACZiB,EAAUN,EAAA,EACV,CAACO,EAAUC,CAAW,EAAIC,EAAAA,SAAwB,IAAI,EAG5DC,EAAAA,UAAU,IAAM,CACV,CAACH,GAAYF,EAAU,MAAM,OAAO,QACtCG,EAAYH,EAAU,KAAK,OAAO,CAAC,GAAG,MAAQ,IAAI,CAEtD,EAAG,CAACE,EAAUF,EAAU,IAAI,CAAC,EAE7B,MAAMM,EAASN,EAAU,MAAM,QAAU,CAAA,EACnCO,EAAUP,EAAU,MAAM,cAAgB,KAEhD,eAAeQ,GAA2B,CACxC,GAAI,CACF,MAAMC,EAAI,MAAMR,EAAQ,YAAA,EACxBS,EAAM,QAAQZ,EAAE,2BAA4B,CAAE,MAAOW,EAAE,KAAA,CAAO,CAAC,CACjE,OAASE,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,0BAChB,SAAA,CAAAC,EAAAA,IAAClC,EAAA,CAAS,UAAU,uBAAA,CAAwB,QAC3C,KAAA,CAAG,UAAU,wBAAyB,SAAAmB,EAAE,kBAAkB,EAAE,EAC7De,EAAAA,IAACC,EAAA,CAAM,QAAQ,OAAQ,WAAO,OAAO,EACrCF,EAAAA,KAACG,EAAA,CACC,QAAQ,QAAQ,KAAK,KAAK,UAAU,UACpC,QAAS,IAAM,KAAKP,EAAA,EACpB,SAAUP,EAAQ,UAEjB,SAAA,CAAAA,EAAQ,gBACJe,EAAA,CAAQ,UAAU,uBAAuB,EAC1CH,EAAAA,IAACI,EAAA,CAAW,UAAU,SAAA,CAAU,QACnC,OAAA,CAAK,UAAU,mBAAoB,SAAAnB,EAAE,mBAAmB,CAAA,CAAE,CAAA,CAAA,CAAA,QAE5DoB,EAAA,CAAe,SAAW,GAAMf,EAAY,CAAC,CAAA,CAAG,CAAA,EACnD,QACC,IAAA,CAAE,UAAU,wBAAyB,SAAAL,EAAE,qBAAqB,EAAE,EAE/Dc,EAAAA,KAAC,MAAA,CAAI,UAAU,kDACb,SAAA,CAAAC,EAAAA,IAACM,EAAA,CACC,OAAAb,EACA,SAAAJ,EACA,SAAUC,EACV,QAASH,EAAU,SAAA,CAAA,EAEpBE,EACCW,EAAAA,IAACO,EAAA,CAEC,KAAMlB,EACN,QAAAK,EACA,UAAW,IAAMJ,EAAY,IAAI,CAAA,EAH5BD,CAAA,EAMPW,EAAAA,IAAC,UAAA,CAAQ,UAAU,yGAChB,SAAAf,EAAE,uBAAuB,CAAA,CAC5B,CAAA,CAAA,CAEJ,CAAA,EACF,CAEJ,CAIA,SAASqB,EAAW,CAClB,OAAAb,EAAQ,SAAAJ,EAAU,SAAAmB,EAAU,QAAAC,CAC9B,EAAuH,CACrH,KAAM,CAAE,EAAAxB,CAAA,EAAMC,EAAe,CAAC,WAAY,QAAQ,CAAC,EACnD,OAAIuB,EAAgBT,EAAAA,IAAC,MAAA,CAAI,UAAU,6CAA6C,EAC5EP,EAAO,SAAW,QAEjB,UAAA,CAAQ,UAAU,uEAChB,SAAAR,EAAE,sBAAsB,EAC3B,EAIFe,EAAAA,IAAC,MAAA,CAAI,UAAU,6CACb,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,yBACX,SAAAP,EAAO,IAAKiB,GAAM,CACjB,MAAMC,EAAatB,IAAaqB,EAAE,KAC5BE,EAAQF,EAAE,UAEZA,EAAE,OACAV,EAAAA,IAACC,EAAA,CAAM,QAAQ,UAAW,SAAAhB,EAAE,qBAAqB,CAAA,CAAE,EACnD,KAHFe,EAAAA,IAACC,GAAM,QAAQ,UAAU,MAAOS,EAAE,kBAAoB,SAAAzB,EAAE,wBAAwB,CAAA,CAAE,EAIhF4B,EAAMH,EAAE,SAAW,YACrBV,MAACC,EAAA,CAAM,QAAQ,OAAQ,SAAAhB,EAAE,qBAAqB,EAAE,EAChDe,MAACC,EAAA,CAAM,QAAQ,UAAW,SAAAhB,EAAE,0BAA0B,EAAE,EAC5D,aACG,KAAA,CACC,SAAAc,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMS,EAASE,EAAE,IAAI,EAC9B,UACE,qGACGC,EAAa,6BAA+B,IAGjD,SAAA,CAAAZ,EAAAA,KAAC,OAAA,CAAK,UAAU,uDACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,gBAAiB,SAAAU,EAAE,KAAK,EACvCG,EACAD,CAAA,EACH,EACAZ,EAAAA,IAAC,OAAA,CAAK,UAAU,yCAA0C,WAAE,WAAA,CAAY,CAAA,CAAA,CAAA,CAC1E,EAfOU,EAAE,IAgBX,CAEJ,CAAC,EACH,EACF,CAEJ,CAIA,SAASH,EAAY,CACnB,KAAArC,EAAM,QAAAwB,EAAS,UAAAoB,CACjB,EAA0E,CACxE,KAAM,CAAE,EAAA7B,CAAA,EAAMC,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7C6B,EAASzC,EAAaJ,CAAI,EAC1B8C,EAASpC,EAAA,EACTqC,EAASpC,EAAA,EAET,CAACqC,EAAOC,CAAQ,EAAI5B,EAAAA,SAAS,EAAE,EAC/B,CAAC6B,EAAWC,CAAY,EAAI9B,EAAAA,SAAiB,EAAE,EAErDC,EAAAA,UAAU,IAAM,CACVuB,EAAO,MAAQK,IAAclD,IAC/BiD,EAASJ,EAAO,KAAK,IAAI,EACzBM,EAAanD,CAAI,EAErB,EAAG,CAAC6C,EAAO,KAAM7C,EAAMkD,CAAS,CAAC,EAEjC,MAAME,EAAOP,EAAO,MAAM,KACpBQ,EAAYD,GAAM,SAAW,UAC7BE,EAAUT,EAAO,MAAM,MAAQ,GAC/BU,EAAUC,EAAAA,QAAQ,IAAMR,IAAUM,EAAS,CAACN,EAAOM,CAAO,CAAC,EAEjE,eAAeG,GAAwB,CACrC,GAAI,CACF,MAAMX,EAAO,YAAY,CAAE,KAAA9C,EAAM,KAAMgD,EAAO,EAC9CrB,EAAM,QAAQZ,EAAE,wBAAyB,CAAE,KAAAf,CAAA,CAAM,CAAC,CACpD,OAAS4B,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,eAAe8B,GAA0B,CACvC,GAAI,CAAAL,GACC,QAAQtC,EAAE,2BAA4B,CAAE,KAAAf,CAAA,CAAM,CAAC,EACpD,GAAI,CACF,MAAM+C,EAAO,YAAY/C,CAAI,EAC7B2B,EAAM,QAAQZ,EAAE,0BAA2B,CAAE,KAAAf,CAAA,CAAM,CAAC,EACpD4C,EAAA,CACF,OAAShB,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,OAAIiB,EAAO,UAAkBf,EAAAA,IAAC,UAAA,CAAQ,UAAU,6CAA6C,EACxFsB,EAGHvB,EAAAA,KAAC,UAAA,CAAQ,UAAU,sBACjB,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,yFAChB,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,kCAAmC,SAAAsB,EAAK,KAAK,EAC5DA,EAAK,SAAW,YACbtB,MAACC,EAAA,CAAM,QAAQ,OAAQ,SAAAhB,EAAE,4BAA4B,CAAA,CAAE,EACvDe,EAAAA,IAACC,EAAA,CAAM,QAAQ,UAAW,SAAAhB,EAAE,kCAAkC,EAAE,EACnEqC,EAAK,QAAUtB,MAACC,EAAA,CAAM,QAAQ,UAAW,SAAAhB,EAAE,qBAAqB,EAAE,EAClE,CAACqC,EAAK,WAAatB,EAAAA,IAACC,EAAA,CAAM,QAAQ,UAAU,MAAOqB,EAAK,kBAAoB,SAAArC,EAAE,wBAAwB,CAAA,CAAE,EACzGc,EAAAA,KAAC,OAAA,CAAK,UAAU,oCAAqC,SAAA,CAAAmB,EAAM,OAAO,MAAIxB,CAAA,CAAA,CAAQ,CAAA,EAChF,EACAM,EAAAA,IAAC,WAAA,CACC,MAAOkB,EACP,SAAWW,GAAMV,EAASU,EAAE,OAAO,KAAK,EACxC,SAAUN,GAAa,CAACE,EACxB,WAAY,GACZ,UAAU,8IAAA,CAAA,EAEZ1B,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACZ,SAAA,CAAAd,EAAE,sBAAsB,EAAE,IAACe,EAAAA,IAAC,OAAA,CAAM,SAAAsB,EAAK,GAAA,CAAI,EAAO,KAClDrC,EAAE,sBAAsB,EAAE,IAACe,EAAAA,IAAC,QAAM,SAAAsB,EAAK,aAAa,KAAK,IAAI,GAAKrC,EAAE,iBAAiB,CAAA,CAAE,EAAO,KAC9FA,EAAE,qBAAqB,EAAE,IAACe,EAAAA,IAAC,QAAM,SAAAsB,EAAK,YAAY,KAAK,IAAI,GAAKrC,EAAE,iBAAiB,CAAA,CAAE,CAAA,EACxF,EACAc,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAwB,SACE,OAAA,CAAK,UAAU,4BACb,SAAAtC,EAAE,8BAA8B,EACnC,EAEFe,EAAAA,IAAC,OAAA,CAAK,UAAU,SAAA,CAAU,EACzB,CAACuB,GACAxB,EAAAA,KAACG,EAAA,CACC,QAAQ,QAAQ,KAAK,KACrB,QAAS,IAAM,KAAK0B,EAAA,EACpB,SAAUX,EAAO,UACjB,UAAU,gCAEV,SAAA,CAAAjB,EAAAA,IAAC8B,EAAA,CAAO,UAAU,SAAA,CAAU,EAC3B7C,EAAE,mBAAmB,CAAA,CAAA,CAAA,EAG1Bc,EAAAA,KAACG,EAAA,CACC,KAAK,KACL,QAAS,IAAM,KAAKyB,EAAA,EACpB,SAAUX,EAAO,WAAa,CAACS,EAE9B,SAAA,CAAAT,EAAO,gBAAab,EAAA,CAAQ,UAAU,uBAAuB,EAAKH,EAAAA,IAAC+B,EAAA,CAAK,UAAU,SAAA,CAAU,EAChF9C,EAAZsC,EAAc,wBAA6B,iBAAN,CAAuB,CAAA,CAAA,CAC/D,CAAA,CACF,CAAA,EACF,EApDgBvB,EAAAA,IAAC,WAAQ,UAAU,qEAAsE,SAAAf,EAAE,qBAAqB,CAAA,CAAE,CAsDtI,CAIA,SAASoB,EAAe,CAAE,SAAA2B,GAA+D,CACvF,KAAM,CAAE,CAAA,EAAM9C,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7C+C,EAAS1D,EAAA,EACT,CAAC2D,EAAMC,CAAO,EAAI5C,EAAAA,SAAS,EAAK,EAChC,CAACrB,EAAMkE,CAAO,EAAI7C,EAAAA,SAAS,EAAE,EAEnC,eAAe8C,EAASR,EAAmC,CACzDA,EAAE,eAAA,EACF,MAAMS,EAAUpE,EAAK,KAAA,EACrB,GAAI,CAACoE,EAAS,CAAEzC,EAAM,MAAM,EAAE,yBAAyB,CAAC,EAAG,MAAO,CAClE,GAAI,CAAC,oBAAoB,KAAKyC,CAAO,EAAG,CACtCzC,EAAM,MAAM,iCAAiC,EAAG,MAClD,CACA,MAAMlB,EAAOI,EAAiB,QAAQ,iBAAkB,SAASuD,CAAO,EAAE,EAC1E,GAAI,CACF,MAAM,EAAI,MAAML,EAAO,YAAY,CAAE,KAAMK,EAAS,KAAA3D,EAAM,EAC1DkB,EAAM,QAAQ,EAAE,0BAA2B,CAAE,KAAM,EAAE,KAAK,IAAA,CAAM,CAAC,EACjEsC,EAAQ,EAAK,EACbC,EAAQ,EAAE,EACVJ,EAAS,EAAE,KAAK,IAAI,CACtB,OAASlC,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,OAAKoC,EASHnC,OAAC,OAAA,CAAK,SAAW8B,GAAM,KAAKQ,EAASR,CAAC,EAAG,UAAU,0BACjD,SAAA,CAAA7B,MAACuC,EAAA,CAAM,UAAU,UAAW,SAAA,EAAE,oBAAoB,EAAE,EACpDvC,EAAAA,IAACwC,EAAA,CACC,UAAS,GACT,MAAOtE,EACP,SAAW2D,GAAMO,EAAQP,EAAE,OAAO,KAAK,EACvC,YAAa,EAAE,+BAA+B,EAC9C,UAAU,4BAAA,CAAA,QAEX3B,EAAA,CAAO,KAAK,SAAS,KAAK,KAAK,SAAU+B,EAAO,UAC9C,SAAAA,EAAO,gBAAa9B,EAAA,CAAQ,UAAU,uBAAuB,EAAK,EAAE,sBAAsB,EAC7F,EACAH,MAACE,GAAO,KAAK,SAAS,QAAQ,QAAQ,KAAK,KAAK,QAAS,IAAM,CAAEiC,EAAQ,EAAK,EAAGC,EAAQ,EAAE,CAAE,EAC1F,SAAA,EAAE,iBAAkB,CAAE,GAAI,QAAA,CAAU,CAAA,CACvC,CAAA,EACF,EAtBErC,EAAAA,KAACG,GAAO,KAAK,KAAK,QAAS,IAAMiC,EAAQ,EAAI,EAC3C,SAAA,CAAAnC,EAAAA,IAAChC,EAAA,CAAU,UAAU,SAAA,CAAU,EAAE,IAAE,EAAE,gBAAgB,CAAA,EACvD,CAsBN","x_google_ignoreList":[0,1]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as o,j as t,N as n,c as a,O as l}from"./index-DEWFfW_Z.js";import"./react-DlP5eolq.js";const r=[{to:"installed",i18nKey:"agimSkills.tab.installed"},{to:"hot",i18nKey:"agimSkills.tab.hot"}];function c(){const{t:s}=o(["settings"]);return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx("nav",{className:a("flex items-center gap-1","border-b border-border","-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2","overflow-x-auto"),"aria-label":s("agimSkills.title"),children:r.map(e=>t.jsx(n,{to:e.to,className:({isActive:i})=>a("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",i?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:s(e.i18nKey)},e.to))}),t.jsx(l,{})]})}export{c as default};
|
|
2
|
-
//# sourceMappingURL=layout-pasFRkKV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-pasFRkKV.js","sources":["../../src/routes/settings/agim-skills/layout.tsx"],"sourcesContent":["/**\n * /settings/agim-skills — combined skill management.\n *\n * 2026-05 consolidation: the v2 SPA briefly had two skill entry points\n * (top-level /skills + this settings route) which duplicated 95% of\n * the data after multi-root scanning landed. We merged both flows here:\n *\n * installed — agim's own loader view; CRUD against the writable\n * workspace dir, read-only for builtins and skills\n * inherited from ~/.claude/skills + opencode + codex.\n * hot — skillhub.cn 热门 (moved from /skills/hot).\n *\n * Old URLs under /skills still resolve via redirects in router.tsx\n * so bookmarks keep working.\n */\n\nimport { NavLink, Outlet } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'installed', i18nKey: 'agimSkills.tab.installed' },\n { to: 'hot', i18nKey: 'agimSkills.tab.hot' },\n]\n\nexport default function SettingsAgimSkillsLayout(): JSX.Element {\n const { t } = useTranslation(['settings'])\n return (\n <div className=\"flex flex-col gap-4\">\n <nav\n className={cn(\n 'flex items-center gap-1',\n 'border-b border-border',\n '-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2',\n 'overflow-x-auto',\n )}\n aria-label={t('agimSkills.title')}\n >\n {SUB_TABS.map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n <Outlet />\n </div>\n )\n}\n"],"names":["SUB_TABS","SettingsAgimSkillsLayout","t","useTranslation","jsxs","jsx","cn","tab","NavLink","isActive","Outlet"],"mappings":"gGAyBA,MAAMA,EAAqB,CACzB,CAAE,GAAI,YAAa,QAAS,0BAAA,EAC5B,CAAE,GAAI,MAAa,QAAS,oBAAA,CAC9B,EAEA,SAAwBC,GAAwC,CAC9D,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,CAAC,UAAU,CAAC,EACzC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACC,UAAWC,EACT,0BACA,yBACA,mCACA,iBAAA,EAEF,aAAYJ,EAAE,kBAAkB,EAE/B,SAAAF,EAAS,IAAKO,GACbF,EAAAA,IAACG,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAAP,EAAEK,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAEFG,EAAA,CAAA,CAAO,CAAA,EACV,CAEJ"}
|