@deepseek-insight/dsi 0.5.38 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.agents/skills/dsi-plugin-rack/SKILL.md +27 -0
  2. package/.agents/skills/dsi-plugin-rack/rack.mjs +237 -0
  3. package/README.md +27 -3
  4. package/bin/dsi.mjs +42 -1
  5. package/bin/lib/plugin-chain.mjs +62 -0
  6. package/build/client/_app/immutable/assets/{2.B3K-kE1m.css → 2.DLFRZPDf.css} +1 -1
  7. package/build/client/_app/immutable/chunks/BZW4nu4u.js +1 -0
  8. package/build/client/_app/immutable/chunks/CpgMZB3l.js +1 -0
  9. package/build/client/_app/immutable/chunks/DZixYQAd.js +2 -0
  10. package/build/client/_app/immutable/chunks/{8isMKkmK.js → DzZu8EY2.js} +1 -1
  11. package/build/client/_app/immutable/entry/{app.CpbSsqDG.js → app.Toc7d2RT.js} +2 -2
  12. package/build/client/_app/immutable/entry/start.CCaKY2bM.js +1 -0
  13. package/build/client/_app/immutable/nodes/{1.C4SBbU1i.js → 1.BMemLSP2.js} +1 -1
  14. package/build/client/_app/immutable/nodes/{2.C1u8HG5a.js → 2.BDUOgoKA.js} +195 -195
  15. package/build/client/_app/version.json +1 -1
  16. package/build/handler.js +4 -4
  17. package/build/index.js +4 -4
  18. package/build/server/chunks/chunks/engine.js-CrdWRSwf.js +97 -0
  19. package/build/server/chunks/chunks/{engine.js-BRoFbCnL.js → engine2.js-BRoFbCnL.js} +1 -1
  20. package/build/server/chunks/chunks/{internal.js-D0IzcQru.js → internal.js-Dhppl8VW.js} +2 -2
  21. package/build/server/chunks/chunks/{state.js-BeFSJ3AU.js → state.js--QbGDz9E.js} +2 -2
  22. package/build/server/chunks/entries/endpoints/api/plugins/apply/_server.ts.js-BXwRN5sp.js +100 -0
  23. package/build/server/chunks/entries/endpoints/api/plugins/reload/_server.ts.js-U8vRgx7E.js +34 -0
  24. package/build/server/chunks/entries/endpoints/api/plugins/snapshot/_server.ts.js-9Ezy2OeQ.js +36 -0
  25. package/build/server/chunks/entries/endpoints/api/skills/install/{_server.ts.js-DijnCqgt.js → _server.ts.js-DyzPF_Z5.js} +2 -2
  26. package/build/server/chunks/entries/endpoints/api/skills/reload/{_server.ts.js-Cqig6BdK.js → _server.ts.js-BUnCt45D.js} +2 -2
  27. package/build/server/chunks/entries/endpoints/api/skills/reload/cancel/{_server.ts.js-CGlFnmuI.js → _server.ts.js-DT52g6_a.js} +2 -2
  28. package/build/server/chunks/entries/endpoints/api/skills/snapshot/{_server.ts.js-p7P1CFjG.js → _server.ts.js-CaBD0w0v.js} +2 -2
  29. package/build/server/chunks/entries/endpoints/api/skills/uninstall/{_server.ts.js-h5IfIfov.js → _server.ts.js-D_NXkZEr.js} +2 -2
  30. package/build/server/chunks/entries/pages/{_error.svelte.js-C5-GtTAX.js → _error.svelte.js-n2xOEPvp.js} +3 -3
  31. package/build/server/chunks/entries/pages/{_page.svelte.js-DoOQ17mk.js → _page.svelte.js-BJ7eKmkS.js} +1183 -105
  32. package/build/server/chunks/{handler-UO5maDaQ.js → handler-BJHxQwK-.js} +3 -3
  33. package/build/server/chunks/{index.js-sK5zTj9E.js → index.js-BXPH1Bno.js} +2 -2
  34. package/build/server/chunks/{manifest.js-DdUlckhQ.js → manifest.js-DjQqMW2U.js} +30 -9
  35. package/build/server/chunks/nodes/1.js-Cb5I-Dtm.js +9 -0
  36. package/build/server/chunks/nodes/{2.js-ClaC6DDN.js → 2.js-BnWybqO0.js} +4 -4
  37. package/package.json +1 -1
  38. package/template/.dsi/resources/plugins-reff.md +3 -0
  39. package/build/client/_app/immutable/chunks/DaJQaZs4.js +0 -1
  40. package/build/client/_app/immutable/chunks/vqHvFU33.js +0 -2
  41. package/build/client/_app/immutable/chunks/y7n0suOs.js +0 -1
  42. package/build/client/_app/immutable/entry/start.CNrTX-th.js +0 -1
  43. package/build/server/chunks/nodes/1.js-CKpJoUo-.js +0 -9
@@ -1,4 +1,4 @@
1
- import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-D0IzcQru.js';
1
+ import { c as onDestroy, d as __exportAll } from '../../chunks/internal.js-Dhppl8VW.js';
2
2
  import { V as head, y as derived, X as bind_props, W as escape_html, Y as attr, Z as attr_style, _ as attr_class, x as setContext, $ as spread_props, a0 as attributes, a1 as clsx, a2 as ensure_array_like, a3 as element, J as getContext, a4 as stringify, a5 as html, F as run, a6 as props_id } from '../../chunks/server.js-11-pxAWV.js';
3
3
  import { U as UI_LOCALES } from '../../chunks/config.js-B0w1-uCA.js';
4
4
  import { m as mergeEntries, c as collapseSystemPromptEntries, t as truncate } from '../../chunks/dsh-events.js-CyvSb4O3.js';
@@ -7,7 +7,7 @@ import { b as applyKnobEvent, E as EMPTY_KNOBS, r as resolvePermission, l as loc
7
7
  import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r.js';
8
8
  import { a as appConfig, t as triggerMode, g as getTrigger, p as previewSegments, i as isValidTagWord, b as textPreviewOf, s as searchKey, c as shouldRecordPrompt, d as parseTagWords } from '../../chunks/app-config.svelte.js-BBPHOX4N.js';
9
9
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
10
- import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-BeFSJ3AU.js';
10
+ import { p as page, a as afterNavigate, t, c as replaceState, e as currentLocale, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js--QbGDz9E.js';
11
11
  import 'yaml';
12
12
  import 'html-to-image';
13
13
  import hljs from 'highlight.js/lib/core';
@@ -1750,6 +1750,166 @@ var commandhelp1 = ((inputs = {}, options = {}) => {
1750
1750
  return en_commandhelp1();
1751
1751
  });
1752
1752
  //#endregion
1753
+ //#region src/lib/paraglide/messages/commandhelppluginrackexamplebare4.js
1754
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1755
+ /** @typedef {{}} Commandhelppluginrackexamplebare4Inputs */
1756
+ var en_commandhelppluginrackexamplebare4 = () => {
1757
+ return `Opens the rack - install or uninstall with one click per row.`;
1758
+ };
1759
+ var zh_commandhelppluginrackexamplebare4 = () => {
1760
+ return `打开插件架 - 每行一键安装或卸载。`;
1761
+ };
1762
+ var id_commandhelppluginrackexamplebare4 = () => {
1763
+ return `Membuka rak - instal atau copot dengan satu klik per baris.`;
1764
+ };
1765
+ var es_commandhelppluginrackexamplebare4 = () => {
1766
+ return `Abre el rack: instala o desinstala con un clic por fila.`;
1767
+ };
1768
+ /**
1769
+ * | output |
1770
+ * | --- |
1771
+ * | "Opens the rack - install or uninstall with one click per row." |
1772
+ *
1773
+ * @param {Commandhelppluginrackexamplebare4Inputs} inputs
1774
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1775
+ * @returns {LocalizedString}
1776
+ */
1777
+ var commandhelppluginrackexamplebare4 = ((inputs = {}, options = {}) => {
1778
+ const locale = options.locale ?? getLocale();
1779
+ if (locale === "zh") return zh_commandhelppluginrackexamplebare4();
1780
+ if (locale === "id") return id_commandhelppluginrackexamplebare4();
1781
+ if (locale === "es") return es_commandhelppluginrackexamplebare4();
1782
+ return en_commandhelppluginrackexamplebare4();
1783
+ });
1784
+ //#endregion
1785
+ //#region src/lib/paraglide/messages/commandhelppluginrackexamplehelp4.js
1786
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1787
+ /** @typedef {{}} Commandhelppluginrackexamplehelp4Inputs */
1788
+ var en_commandhelppluginrackexamplehelp4 = () => {
1789
+ return `Prints this help card.`;
1790
+ };
1791
+ var zh_commandhelppluginrackexamplehelp4 = () => {
1792
+ return `打印此帮助卡片。`;
1793
+ };
1794
+ var id_commandhelppluginrackexamplehelp4 = () => {
1795
+ return `Mencetak kartu bantuan ini.`;
1796
+ };
1797
+ var es_commandhelppluginrackexamplehelp4 = () => {
1798
+ return `Imprime esta tarjeta de ayuda.`;
1799
+ };
1800
+ /**
1801
+ * | output |
1802
+ * | --- |
1803
+ * | "Prints this help card." |
1804
+ *
1805
+ * @param {Commandhelppluginrackexamplehelp4Inputs} inputs
1806
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1807
+ * @returns {LocalizedString}
1808
+ */
1809
+ var commandhelppluginrackexamplehelp4 = ((inputs = {}, options = {}) => {
1810
+ const locale = options.locale ?? getLocale();
1811
+ if (locale === "zh") return zh_commandhelppluginrackexamplehelp4();
1812
+ if (locale === "id") return id_commandhelppluginrackexamplehelp4();
1813
+ if (locale === "es") return es_commandhelppluginrackexamplehelp4();
1814
+ return en_commandhelppluginrackexamplehelp4();
1815
+ });
1816
+ //#endregion
1817
+ //#region src/lib/paraglide/messages/commandhelppluginrackexamplereload4.js
1818
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1819
+ /** @typedef {{}} Commandhelppluginrackexamplereload4Inputs */
1820
+ var en_commandhelppluginrackexamplereload4 = () => {
1821
+ return `Rebuilds the rack snapshot first (fresh numbering, fresh installed flags).`;
1822
+ };
1823
+ var zh_commandhelppluginrackexamplereload4 = () => {
1824
+ return `先重建插件架快照(全新编号、全新安装状态)。`;
1825
+ };
1826
+ var id_commandhelppluginrackexamplereload4 = () => {
1827
+ return `Membangun ulang snapshot rak lebih dulu (penomoran baru, status terpasang baru).`;
1828
+ };
1829
+ var es_commandhelppluginrackexamplereload4 = () => {
1830
+ return `Reconstruye primero el snapshot del rack (numeración y estados de instalación recientes).`;
1831
+ };
1832
+ /**
1833
+ * | output |
1834
+ * | --- |
1835
+ * | "Rebuilds the rack snapshot first (fresh numbering, fresh installed flags)." |
1836
+ *
1837
+ * @param {Commandhelppluginrackexamplereload4Inputs} inputs
1838
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1839
+ * @returns {LocalizedString}
1840
+ */
1841
+ var commandhelppluginrackexamplereload4 = ((inputs = {}, options = {}) => {
1842
+ const locale = options.locale ?? getLocale();
1843
+ if (locale === "zh") return zh_commandhelppluginrackexamplereload4();
1844
+ if (locale === "id") return id_commandhelppluginrackexamplereload4();
1845
+ if (locale === "es") return es_commandhelppluginrackexamplereload4();
1846
+ return en_commandhelppluginrackexamplereload4();
1847
+ });
1848
+ //#endregion
1849
+ //#region src/lib/paraglide/messages/commandhelppluginrackparamreload4.js
1850
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1851
+ /** @typedef {{}} Commandhelppluginrackparamreload4Inputs */
1852
+ var en_commandhelppluginrackparamreload4 = () => {
1853
+ return `Force a snapshot rebuild from plugins-reff.md before the panel opens. Without it the cached rack snapshot is used as-is.`;
1854
+ };
1855
+ var zh_commandhelppluginrackparamreload4 = () => {
1856
+ return `在面板打开前从 plugins-reff.md 重建快照。不带它时按原样使用缓存的插件架快照。`;
1857
+ };
1858
+ var id_commandhelppluginrackparamreload4 = () => {
1859
+ return `Bangun ulang snapshot dari plugins-reff.md sebelum panel terbuka. Tanpa itu, snapshot rak yang tersimpan dipakai apa adanya.`;
1860
+ };
1861
+ var es_commandhelppluginrackparamreload4 = () => {
1862
+ return `Fuerza a reconstruir el snapshot desde plugins-reff.md antes de abrir el panel. Sin ella se usa el snapshot en caché tal cual.`;
1863
+ };
1864
+ /**
1865
+ * | output |
1866
+ * | --- |
1867
+ * | "Force a snapshot rebuild from plugins-reff.md before the panel opens. Without it the cached rack snapshot is used as-is." |
1868
+ *
1869
+ * @param {Commandhelppluginrackparamreload4Inputs} inputs
1870
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1871
+ * @returns {LocalizedString}
1872
+ */
1873
+ var commandhelppluginrackparamreload4 = ((inputs = {}, options = {}) => {
1874
+ const locale = options.locale ?? getLocale();
1875
+ if (locale === "zh") return zh_commandhelppluginrackparamreload4();
1876
+ if (locale === "id") return id_commandhelppluginrackparamreload4();
1877
+ if (locale === "es") return es_commandhelppluginrackparamreload4();
1878
+ return en_commandhelppluginrackparamreload4();
1879
+ });
1880
+ //#endregion
1881
+ //#region src/lib/paraglide/messages/commandhelppluginracksummary3.js
1882
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1883
+ /** @typedef {{}} Commandhelppluginracksummary3Inputs */
1884
+ var en_commandhelppluginracksummary3 = () => {
1885
+ return `Opens the Plugin Rack panel (The Plugin Rack ADR, 2026-09-27): install and uninstall dsh plugins from the plugins reference. Every apply ends with the DSH restart chain - the floor bounces and the page re-attaches.`;
1886
+ };
1887
+ var zh_commandhelppluginracksummary3 = () => {
1888
+ return `打开插件架面板(The Plugin Rack ADR,2026-09-27):从插件参考安装/卸载 dsh 插件。每次应用都会触发 DSH 重启链 - 页面会短暂离开并自动恢复。`;
1889
+ };
1890
+ var id_commandhelppluginracksummary3 = () => {
1891
+ return `Membuka panel Rak Plugin (ADR The Plugin Rack, 2026-09-27): instal dan copot plugin dsh dari referensi plugin. Setiap penerapan diakhiri rantai restart DSH - lantai turun sejenak lalu halaman pulih sendiri.`;
1892
+ };
1893
+ var es_commandhelppluginracksummary3 = () => {
1894
+ return `Abre el panel Rack de plugins (ADR The Plugin Rack, 2026-09-27): instala y desinstala plugins de dsh desde la referencia de plugins. Cada aplicación termina con la cadena de reinicio de DSH: la página se va un momento y vuelve sola.`;
1895
+ };
1896
+ /**
1897
+ * | output |
1898
+ * | --- |
1899
+ * | "Opens the Plugin Rack panel (The Plugin Rack ADR, 2026-09-27): install and uninstall dsh plugins from the plugins reference. Every apply ends with the DSH re..." |
1900
+ *
1901
+ * @param {Commandhelppluginracksummary3Inputs} inputs
1902
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
1903
+ * @returns {LocalizedString}
1904
+ */
1905
+ var commandhelppluginracksummary3 = ((inputs = {}, options = {}) => {
1906
+ const locale = options.locale ?? getLocale();
1907
+ if (locale === "zh") return zh_commandhelppluginracksummary3();
1908
+ if (locale === "id") return id_commandhelppluginracksummary3();
1909
+ if (locale === "es") return es_commandhelppluginracksummary3();
1910
+ return en_commandhelppluginracksummary3();
1911
+ });
1912
+ //#endregion
1753
1913
  //#region src/lib/paraglide/messages/commandhelpskillshelfexamplebare4.js
1754
1914
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
1755
1915
  /** @typedef {{}} Commandhelpskillshelfexamplebare4Inputs */
@@ -7464,50 +7624,594 @@ var es_picksession1 = () => {
7464
7624
  /**
7465
7625
  * | output |
7466
7626
  * | --- |
7467
- * | "Pick a session from the sidebar, or start one with + New chat." |
7627
+ * | "Pick a session from the sidebar, or start one with + New chat." |
7628
+ *
7629
+ * @param {Picksession1Inputs} inputs
7630
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7631
+ * @returns {LocalizedString}
7632
+ */
7633
+ var picksession1 = ((inputs = {}, options = {}) => {
7634
+ const locale = options.locale ?? getLocale();
7635
+ if (locale === "zh") return zh_picksession1();
7636
+ if (locale === "id") return id_picksession1();
7637
+ if (locale === "es") return es_picksession1();
7638
+ return en_picksession1();
7639
+ });
7640
+ //#endregion
7641
+ //#region src/lib/paraglide/messages/planmode1.js
7642
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7643
+ /** @typedef {{}} Planmode1Inputs */
7644
+ var en_planmode1 = () => {
7645
+ return `plan mode`;
7646
+ };
7647
+ var zh_planmode1 = () => {
7648
+ return `计划模式`;
7649
+ };
7650
+ var id_planmode1 = () => {
7651
+ return `mode rencana`;
7652
+ };
7653
+ var es_planmode1 = () => {
7654
+ return `modo plan`;
7655
+ };
7656
+ /**
7657
+ * | output |
7658
+ * | --- |
7659
+ * | "plan mode" |
7660
+ *
7661
+ * @param {Planmode1Inputs} inputs
7662
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7663
+ * @returns {LocalizedString}
7664
+ */
7665
+ var planmode1 = ((inputs = {}, options = {}) => {
7666
+ const locale = options.locale ?? getLocale();
7667
+ if (locale === "zh") return zh_planmode1();
7668
+ if (locale === "id") return id_planmode1();
7669
+ if (locale === "es") return es_planmode1();
7670
+ return en_planmode1();
7671
+ });
7672
+ //#endregion
7673
+ //#region src/lib/paraglide/messages/pluginrackapplying2.js
7674
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7675
+ /** @typedef {{}} Pluginrackapplying2Inputs */
7676
+ var en_pluginrackapplying2 = () => {
7677
+ return `Applying — the floor will come back shortly.`;
7678
+ };
7679
+ var zh_pluginrackapplying2 = () => {
7680
+ return `正在应用 — 页面稍后会自动恢复。`;
7681
+ };
7682
+ var id_pluginrackapplying2 = () => {
7683
+ return `Menerapkan — lantai akan kembali sebentar lagi.`;
7684
+ };
7685
+ var es_pluginrackapplying2 = () => {
7686
+ return `Aplicando — la página volverá enseguida.`;
7687
+ };
7688
+ /**
7689
+ * | output |
7690
+ * | --- |
7691
+ * | "Applying — the floor will come back shortly." |
7692
+ *
7693
+ * @param {Pluginrackapplying2Inputs} inputs
7694
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7695
+ * @returns {LocalizedString}
7696
+ */
7697
+ var pluginrackapplying2 = ((inputs = {}, options = {}) => {
7698
+ const locale = options.locale ?? getLocale();
7699
+ if (locale === "zh") return zh_pluginrackapplying2();
7700
+ if (locale === "id") return id_pluginrackapplying2();
7701
+ if (locale === "es") return es_pluginrackapplying2();
7702
+ return en_pluginrackapplying2();
7703
+ });
7704
+ //#endregion
7705
+ //#region src/lib/paraglide/messages/pluginrackby2.js
7706
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7707
+ /** @typedef {{}} Pluginrackby2Inputs */
7708
+ var en_pluginrackby2 = () => {
7709
+ return `by`;
7710
+ };
7711
+ var zh_pluginrackby2 = () => {
7712
+ return `作者:`;
7713
+ };
7714
+ var id_pluginrackby2 = () => {
7715
+ return `oleh`;
7716
+ };
7717
+ var es_pluginrackby2 = () => {
7718
+ return `por`;
7719
+ };
7720
+ /**
7721
+ * | output |
7722
+ * | --- |
7723
+ * | "by" |
7724
+ *
7725
+ * @param {Pluginrackby2Inputs} inputs
7726
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7727
+ * @returns {LocalizedString}
7728
+ */
7729
+ var pluginrackby2 = ((inputs = {}, options = {}) => {
7730
+ const locale = options.locale ?? getLocale();
7731
+ if (locale === "zh") return zh_pluginrackby2();
7732
+ if (locale === "id") return id_pluginrackby2();
7733
+ if (locale === "es") return es_pluginrackby2();
7734
+ return en_pluginrackby2();
7735
+ });
7736
+ //#endregion
7737
+ //#region src/lib/paraglide/messages/pluginrackempty2.js
7738
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7739
+ /** @typedef {{}} Pluginrackempty2Inputs */
7740
+ var en_pluginrackempty2 = () => {
7741
+ return `No plugins on the rack yet — add a line to plugins-reff.md.`;
7742
+ };
7743
+ var zh_pluginrackempty2 = () => {
7744
+ return `插件架暂无插件 — 在 plugins-reff.md 中添加一行。`;
7745
+ };
7746
+ var id_pluginrackempty2 = () => {
7747
+ return `Belum ada plugin di rak — tambahkan satu baris di plugins-reff.md.`;
7748
+ };
7749
+ var es_pluginrackempty2 = () => {
7750
+ return `Aún no hay plugins en el rack — añade una línea a plugins-reff.md.`;
7751
+ };
7752
+ /**
7753
+ * | output |
7754
+ * | --- |
7755
+ * | "No plugins on the rack yet — add a line to plugins-reff.md." |
7756
+ *
7757
+ * @param {Pluginrackempty2Inputs} inputs
7758
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7759
+ * @returns {LocalizedString}
7760
+ */
7761
+ var pluginrackempty2 = ((inputs = {}, options = {}) => {
7762
+ const locale = options.locale ?? getLocale();
7763
+ if (locale === "zh") return zh_pluginrackempty2();
7764
+ if (locale === "id") return id_pluginrackempty2();
7765
+ if (locale === "es") return es_pluginrackempty2();
7766
+ return en_pluginrackempty2();
7767
+ });
7768
+ //#endregion
7769
+ //#region src/lib/paraglide/messages/pluginrackinstall2.js
7770
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7771
+ /** @typedef {{}} Pluginrackinstall2Inputs */
7772
+ var en_pluginrackinstall2 = () => {
7773
+ return `Install`;
7774
+ };
7775
+ var zh_pluginrackinstall2 = () => {
7776
+ return `安装`;
7777
+ };
7778
+ var id_pluginrackinstall2 = () => {
7779
+ return `Instal`;
7780
+ };
7781
+ var es_pluginrackinstall2 = () => {
7782
+ return `Instalar`;
7783
+ };
7784
+ /**
7785
+ * | output |
7786
+ * | --- |
7787
+ * | "Install" |
7788
+ *
7789
+ * @param {Pluginrackinstall2Inputs} inputs
7790
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7791
+ * @returns {LocalizedString}
7792
+ */
7793
+ var pluginrackinstall2 = ((inputs = {}, options = {}) => {
7794
+ const locale = options.locale ?? getLocale();
7795
+ if (locale === "zh") return zh_pluginrackinstall2();
7796
+ if (locale === "id") return id_pluginrackinstall2();
7797
+ if (locale === "es") return es_pluginrackinstall2();
7798
+ return en_pluginrackinstall2();
7799
+ });
7800
+ //#endregion
7801
+ //#region src/lib/paraglide/messages/pluginrackinstallempty3.js
7802
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7803
+ /** @typedef {{}} Pluginrackinstallempty3Inputs */
7804
+ var en_pluginrackinstallempty3 = () => {
7805
+ return `Everything on the rack is installed.`;
7806
+ };
7807
+ var zh_pluginrackinstallempty3 = () => {
7808
+ return `插件架上的插件都已安装。`;
7809
+ };
7810
+ var id_pluginrackinstallempty3 = () => {
7811
+ return `Semua plugin di rak sudah terpasang.`;
7812
+ };
7813
+ var es_pluginrackinstallempty3 = () => {
7814
+ return `Todo en el rack está instalado.`;
7815
+ };
7816
+ /**
7817
+ * | output |
7818
+ * | --- |
7819
+ * | "Everything on the rack is installed." |
7820
+ *
7821
+ * @param {Pluginrackinstallempty3Inputs} inputs
7822
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7823
+ * @returns {LocalizedString}
7824
+ */
7825
+ var pluginrackinstallempty3 = ((inputs = {}, options = {}) => {
7826
+ const locale = options.locale ?? getLocale();
7827
+ if (locale === "zh") return zh_pluginrackinstallempty3();
7828
+ if (locale === "id") return id_pluginrackinstallempty3();
7829
+ if (locale === "es") return es_pluginrackinstallempty3();
7830
+ return en_pluginrackinstallempty3();
7831
+ });
7832
+ //#endregion
7833
+ //#region src/lib/paraglide/messages/pluginrackinstalled2.js
7834
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7835
+ /** @typedef {{}} Pluginrackinstalled2Inputs */
7836
+ var en_pluginrackinstalled2 = () => {
7837
+ return `Installed`;
7838
+ };
7839
+ var zh_pluginrackinstalled2 = () => {
7840
+ return `已安装`;
7841
+ };
7842
+ var id_pluginrackinstalled2 = () => {
7843
+ return `Terpasang`;
7844
+ };
7845
+ var es_pluginrackinstalled2 = () => {
7846
+ return `Instalado`;
7847
+ };
7848
+ /**
7849
+ * | output |
7850
+ * | --- |
7851
+ * | "Installed" |
7852
+ *
7853
+ * @param {Pluginrackinstalled2Inputs} inputs
7854
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7855
+ * @returns {LocalizedString}
7856
+ */
7857
+ var pluginrackinstalled2 = ((inputs = {}, options = {}) => {
7858
+ const locale = options.locale ?? getLocale();
7859
+ if (locale === "zh") return zh_pluginrackinstalled2();
7860
+ if (locale === "id") return id_pluginrackinstalled2();
7861
+ if (locale === "es") return es_pluginrackinstalled2();
7862
+ return en_pluginrackinstalled2();
7863
+ });
7864
+ //#endregion
7865
+ //#region src/lib/paraglide/messages/pluginrackinstalling2.js
7866
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7867
+ /** @typedef {{}} Pluginrackinstalling2Inputs */
7868
+ var en_pluginrackinstalling2 = () => {
7869
+ return `Installing…`;
7870
+ };
7871
+ var zh_pluginrackinstalling2 = () => {
7872
+ return `安装中…`;
7873
+ };
7874
+ var id_pluginrackinstalling2 = () => {
7875
+ return `Menginstal…`;
7876
+ };
7877
+ var es_pluginrackinstalling2 = () => {
7878
+ return `Instalando…`;
7879
+ };
7880
+ /**
7881
+ * | output |
7882
+ * | --- |
7883
+ * | "Installing…" |
7884
+ *
7885
+ * @param {Pluginrackinstalling2Inputs} inputs
7886
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7887
+ * @returns {LocalizedString}
7888
+ */
7889
+ var pluginrackinstalling2 = ((inputs = {}, options = {}) => {
7890
+ const locale = options.locale ?? getLocale();
7891
+ if (locale === "zh") return zh_pluginrackinstalling2();
7892
+ if (locale === "id") return id_pluginrackinstalling2();
7893
+ if (locale === "es") return es_pluginrackinstalling2();
7894
+ return en_pluginrackinstalling2();
7895
+ });
7896
+ //#endregion
7897
+ //#region src/lib/paraglide/messages/pluginrackloadfailed3.js
7898
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7899
+ /** @typedef {{}} Pluginrackloadfailed3Inputs */
7900
+ var en_pluginrackloadfailed3 = () => {
7901
+ return `Could not load the rack.`;
7902
+ };
7903
+ var zh_pluginrackloadfailed3 = () => {
7904
+ return `无法加载插件架。`;
7905
+ };
7906
+ var id_pluginrackloadfailed3 = () => {
7907
+ return `Tidak dapat memuat rak plugin.`;
7908
+ };
7909
+ var es_pluginrackloadfailed3 = () => {
7910
+ return `No se pudo cargar el rack de plugins.`;
7911
+ };
7912
+ /**
7913
+ * | output |
7914
+ * | --- |
7915
+ * | "Could not load the rack." |
7916
+ *
7917
+ * @param {Pluginrackloadfailed3Inputs} inputs
7918
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7919
+ * @returns {LocalizedString}
7920
+ */
7921
+ var pluginrackloadfailed3 = ((inputs = {}, options = {}) => {
7922
+ const locale = options.locale ?? getLocale();
7923
+ if (locale === "zh") return zh_pluginrackloadfailed3();
7924
+ if (locale === "id") return id_pluginrackloadfailed3();
7925
+ if (locale === "es") return es_pluginrackloadfailed3();
7926
+ return en_pluginrackloadfailed3();
7927
+ });
7928
+ //#endregion
7929
+ //#region src/lib/paraglide/messages/pluginrackopenauthor3.js
7930
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7931
+ /** @typedef {{}} Pluginrackopenauthor3Inputs */
7932
+ var en_pluginrackopenauthor3 = () => {
7933
+ return `Open the creator's profile`;
7934
+ };
7935
+ var zh_pluginrackopenauthor3 = () => {
7936
+ return `打开作者主页`;
7937
+ };
7938
+ var id_pluginrackopenauthor3 = () => {
7939
+ return `Buka profil pembuat`;
7940
+ };
7941
+ var es_pluginrackopenauthor3 = () => {
7942
+ return `Abrir el perfil del creador`;
7943
+ };
7944
+ /**
7945
+ * | output |
7946
+ * | --- |
7947
+ * | "Open the creator's profile" |
7948
+ *
7949
+ * @param {Pluginrackopenauthor3Inputs} inputs
7950
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7951
+ * @returns {LocalizedString}
7952
+ */
7953
+ var pluginrackopenauthor3 = ((inputs = {}, options = {}) => {
7954
+ const locale = options.locale ?? getLocale();
7955
+ if (locale === "zh") return zh_pluginrackopenauthor3();
7956
+ if (locale === "id") return id_pluginrackopenauthor3();
7957
+ if (locale === "es") return es_pluginrackopenauthor3();
7958
+ return en_pluginrackopenauthor3();
7959
+ });
7960
+ //#endregion
7961
+ //#region src/lib/paraglide/messages/pluginrackopenrepo3.js
7962
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7963
+ /** @typedef {{}} Pluginrackopenrepo3Inputs */
7964
+ var en_pluginrackopenrepo3 = () => {
7965
+ return `Open the plugin repo`;
7966
+ };
7967
+ var zh_pluginrackopenrepo3 = () => {
7968
+ return `打开插件仓库`;
7969
+ };
7970
+ var id_pluginrackopenrepo3 = () => {
7971
+ return `Buka repo plugin`;
7972
+ };
7973
+ var es_pluginrackopenrepo3 = () => {
7974
+ return `Abrir el repositorio del plugin`;
7975
+ };
7976
+ /**
7977
+ * | output |
7978
+ * | --- |
7979
+ * | "Open the plugin repo" |
7980
+ *
7981
+ * @param {Pluginrackopenrepo3Inputs} inputs
7982
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7983
+ * @returns {LocalizedString}
7984
+ */
7985
+ var pluginrackopenrepo3 = ((inputs = {}, options = {}) => {
7986
+ const locale = options.locale ?? getLocale();
7987
+ if (locale === "zh") return zh_pluginrackopenrepo3();
7988
+ if (locale === "id") return id_pluginrackopenrepo3();
7989
+ if (locale === "es") return es_pluginrackopenrepo3();
7990
+ return en_pluginrackopenrepo3();
7991
+ });
7992
+ //#endregion
7993
+ //#region src/lib/paraglide/messages/pluginrackreload2.js
7994
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7995
+ /** @typedef {{}} Pluginrackreload2Inputs */
7996
+ var en_pluginrackreload2 = () => {
7997
+ return `Reload`;
7998
+ };
7999
+ var zh_pluginrackreload2 = () => {
8000
+ return `重新加载`;
8001
+ };
8002
+ var id_pluginrackreload2 = () => {
8003
+ return `Muat ulang`;
8004
+ };
8005
+ var es_pluginrackreload2 = () => {
8006
+ return `Recargar`;
8007
+ };
8008
+ /**
8009
+ * | output |
8010
+ * | --- |
8011
+ * | "Reload" |
8012
+ *
8013
+ * @param {Pluginrackreload2Inputs} inputs
8014
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
8015
+ * @returns {LocalizedString}
8016
+ */
8017
+ var pluginrackreload2 = ((inputs = {}, options = {}) => {
8018
+ const locale = options.locale ?? getLocale();
8019
+ if (locale === "zh") return zh_pluginrackreload2();
8020
+ if (locale === "id") return id_pluginrackreload2();
8021
+ if (locale === "es") return es_pluginrackreload2();
8022
+ return en_pluginrackreload2();
8023
+ });
8024
+ //#endregion
8025
+ //#region src/lib/paraglide/messages/pluginrackretry2.js
8026
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
8027
+ /** @typedef {{}} Pluginrackretry2Inputs */
8028
+ var en_pluginrackretry2 = () => {
8029
+ return `Retry`;
8030
+ };
8031
+ var zh_pluginrackretry2 = () => {
8032
+ return `重试`;
8033
+ };
8034
+ var id_pluginrackretry2 = () => {
8035
+ return `Coba lagi`;
8036
+ };
8037
+ var es_pluginrackretry2 = () => {
8038
+ return `Reintentar`;
8039
+ };
8040
+ /**
8041
+ * | output |
8042
+ * | --- |
8043
+ * | "Retry" |
8044
+ *
8045
+ * @param {Pluginrackretry2Inputs} inputs
8046
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
8047
+ * @returns {LocalizedString}
8048
+ */
8049
+ var pluginrackretry2 = ((inputs = {}, options = {}) => {
8050
+ const locale = options.locale ?? getLocale();
8051
+ if (locale === "zh") return zh_pluginrackretry2();
8052
+ if (locale === "id") return id_pluginrackretry2();
8053
+ if (locale === "es") return es_pluginrackretry2();
8054
+ return en_pluginrackretry2();
8055
+ });
8056
+ //#endregion
8057
+ //#region src/lib/paraglide/messages/pluginracksearch2.js
8058
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
8059
+ /** @typedef {{}} Pluginracksearch2Inputs */
8060
+ var en_pluginracksearch2 = () => {
8061
+ return `Search plugins`;
8062
+ };
8063
+ var zh_pluginracksearch2 = () => {
8064
+ return `搜索插件`;
8065
+ };
8066
+ var id_pluginracksearch2 = () => {
8067
+ return `Cari plugin`;
8068
+ };
8069
+ var es_pluginracksearch2 = () => {
8070
+ return `Buscar plugins`;
8071
+ };
8072
+ /**
8073
+ * | output |
8074
+ * | --- |
8075
+ * | "Search plugins" |
8076
+ *
8077
+ * @param {Pluginracksearch2Inputs} inputs
8078
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
8079
+ * @returns {LocalizedString}
8080
+ */
8081
+ var pluginracksearch2 = ((inputs = {}, options = {}) => {
8082
+ const locale = options.locale ?? getLocale();
8083
+ if (locale === "zh") return zh_pluginracksearch2();
8084
+ if (locale === "id") return id_pluginracksearch2();
8085
+ if (locale === "es") return es_pluginracksearch2();
8086
+ return en_pluginracksearch2();
8087
+ });
8088
+ //#endregion
8089
+ //#region src/lib/paraglide/messages/pluginracktitle2.js
8090
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
8091
+ /** @typedef {{}} Pluginracktitle2Inputs */
8092
+ var en_pluginracktitle2 = () => {
8093
+ return `Plugin Rack`;
8094
+ };
8095
+ var zh_pluginracktitle2 = () => {
8096
+ return `插件架`;
8097
+ };
8098
+ var id_pluginracktitle2 = () => {
8099
+ return `Rak Plugin`;
8100
+ };
8101
+ var es_pluginracktitle2 = () => {
8102
+ return `Rack de plugins`;
8103
+ };
8104
+ /**
8105
+ * | output |
8106
+ * | --- |
8107
+ * | "Plugin Rack" |
8108
+ *
8109
+ * @param {Pluginracktitle2Inputs} inputs
8110
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
8111
+ * @returns {LocalizedString}
8112
+ */
8113
+ var pluginracktitle2 = ((inputs = {}, options = {}) => {
8114
+ const locale = options.locale ?? getLocale();
8115
+ if (locale === "zh") return zh_pluginracktitle2();
8116
+ if (locale === "id") return id_pluginracktitle2();
8117
+ if (locale === "es") return es_pluginracktitle2();
8118
+ return en_pluginracktitle2();
8119
+ });
8120
+ //#endregion
8121
+ //#region src/lib/paraglide/messages/pluginrackuninstall2.js
8122
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
8123
+ /** @typedef {{}} Pluginrackuninstall2Inputs */
8124
+ var en_pluginrackuninstall2 = () => {
8125
+ return `Uninstall`;
8126
+ };
8127
+ var zh_pluginrackuninstall2 = () => {
8128
+ return `卸载`;
8129
+ };
8130
+ var id_pluginrackuninstall2 = () => {
8131
+ return `Copot`;
8132
+ };
8133
+ var es_pluginrackuninstall2 = () => {
8134
+ return `Desinstalar`;
8135
+ };
8136
+ /**
8137
+ * | output |
8138
+ * | --- |
8139
+ * | "Uninstall" |
8140
+ *
8141
+ * @param {Pluginrackuninstall2Inputs} inputs
8142
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
8143
+ * @returns {LocalizedString}
8144
+ */
8145
+ var pluginrackuninstall2 = ((inputs = {}, options = {}) => {
8146
+ const locale = options.locale ?? getLocale();
8147
+ if (locale === "zh") return zh_pluginrackuninstall2();
8148
+ if (locale === "id") return id_pluginrackuninstall2();
8149
+ if (locale === "es") return es_pluginrackuninstall2();
8150
+ return en_pluginrackuninstall2();
8151
+ });
8152
+ //#endregion
8153
+ //#region src/lib/paraglide/messages/pluginrackuninstallempty3.js
8154
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
8155
+ /** @typedef {{}} Pluginrackuninstallempty3Inputs */
8156
+ var en_pluginrackuninstallempty3 = () => {
8157
+ return `Nothing installed yet - install a plugin from the install tab.`;
8158
+ };
8159
+ var zh_pluginrackuninstallempty3 = () => {
8160
+ return `尚未安装任何插件 - 请在安装标签页中安装。`;
8161
+ };
8162
+ var id_pluginrackuninstallempty3 = () => {
8163
+ return `Belum ada yang terpasang - instal plugin dari tab instal.`;
8164
+ };
8165
+ var es_pluginrackuninstallempty3 = () => {
8166
+ return `Nada instalado todavía: instala un plugin desde la pestaña de instalación.`;
8167
+ };
8168
+ /**
8169
+ * | output |
8170
+ * | --- |
8171
+ * | "Nothing installed yet - install a plugin from the install tab." |
7468
8172
  *
7469
- * @param {Picksession1Inputs} inputs
8173
+ * @param {Pluginrackuninstallempty3Inputs} inputs
7470
8174
  * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7471
8175
  * @returns {LocalizedString}
7472
8176
  */
7473
- var picksession1 = ((inputs = {}, options = {}) => {
8177
+ var pluginrackuninstallempty3 = ((inputs = {}, options = {}) => {
7474
8178
  const locale = options.locale ?? getLocale();
7475
- if (locale === "zh") return zh_picksession1();
7476
- if (locale === "id") return id_picksession1();
7477
- if (locale === "es") return es_picksession1();
7478
- return en_picksession1();
8179
+ if (locale === "zh") return zh_pluginrackuninstallempty3();
8180
+ if (locale === "id") return id_pluginrackuninstallempty3();
8181
+ if (locale === "es") return es_pluginrackuninstallempty3();
8182
+ return en_pluginrackuninstallempty3();
7479
8183
  });
7480
8184
  //#endregion
7481
- //#region src/lib/paraglide/messages/planmode1.js
8185
+ //#region src/lib/paraglide/messages/pluginrackuninstalling2.js
7482
8186
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
7483
- /** @typedef {{}} Planmode1Inputs */
7484
- var en_planmode1 = () => {
7485
- return `plan mode`;
8187
+ /** @typedef {{}} Pluginrackuninstalling2Inputs */
8188
+ var en_pluginrackuninstalling2 = () => {
8189
+ return `Removing…`;
7486
8190
  };
7487
- var zh_planmode1 = () => {
7488
- return `计划模式`;
8191
+ var zh_pluginrackuninstalling2 = () => {
8192
+ return `卸载中…`;
7489
8193
  };
7490
- var id_planmode1 = () => {
7491
- return `mode rencana`;
8194
+ var id_pluginrackuninstalling2 = () => {
8195
+ return `Mencopot…`;
7492
8196
  };
7493
- var es_planmode1 = () => {
7494
- return `modo plan`;
8197
+ var es_pluginrackuninstalling2 = () => {
8198
+ return `Desinstalando…`;
7495
8199
  };
7496
8200
  /**
7497
8201
  * | output |
7498
8202
  * | --- |
7499
- * | "plan mode" |
8203
+ * | "Removing…" |
7500
8204
  *
7501
- * @param {Planmode1Inputs} inputs
8205
+ * @param {Pluginrackuninstalling2Inputs} inputs
7502
8206
  * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
7503
8207
  * @returns {LocalizedString}
7504
8208
  */
7505
- var planmode1 = ((inputs = {}, options = {}) => {
8209
+ var pluginrackuninstalling2 = ((inputs = {}, options = {}) => {
7506
8210
  const locale = options.locale ?? getLocale();
7507
- if (locale === "zh") return zh_planmode1();
7508
- if (locale === "id") return id_planmode1();
7509
- if (locale === "es") return es_planmode1();
7510
- return en_planmode1();
8211
+ if (locale === "zh") return zh_pluginrackuninstalling2();
8212
+ if (locale === "id") return id_pluginrackuninstalling2();
8213
+ if (locale === "es") return es_pluginrackuninstalling2();
8214
+ return en_pluginrackuninstalling2();
7511
8215
  });
7512
8216
  //#endregion
7513
8217
  //#region src/lib/paraglide/messages/plusadd1.js
@@ -12623,6 +13327,11 @@ var _index_exports = /* @__PURE__ */ __exportAll({
12623
13327
  collapseLineage: () => collapselineage1,
12624
13328
  collapseSidebar: () => collapsesidebar1,
12625
13329
  commandHelp: () => commandhelp1,
13330
+ commandHelpPluginrackExampleBare: () => commandhelppluginrackexamplebare4,
13331
+ commandHelpPluginrackExampleHelp: () => commandhelppluginrackexamplehelp4,
13332
+ commandHelpPluginrackExampleReload: () => commandhelppluginrackexamplereload4,
13333
+ commandHelpPluginrackParamReload: () => commandhelppluginrackparamreload4,
13334
+ commandHelpPluginrackSummary: () => commandhelppluginracksummary3,
12626
13335
  commandHelpSkillshelfExampleBare: () => commandhelpskillshelfexamplebare4,
12627
13336
  commandHelpSkillshelfExampleHelp: () => commandhelpskillshelfexamplehelp4,
12628
13337
  commandHelpSkillshelfExampleReload: () => commandhelpskillshelfexamplereload4,
@@ -12804,6 +13513,23 @@ var _index_exports = /* @__PURE__ */ __exportAll({
12804
13513
  pendingAttachments: () => pendingattachments1,
12805
13514
  pickSession: () => picksession1,
12806
13515
  planMode: () => planmode1,
13516
+ pluginRackApplying: () => pluginrackapplying2,
13517
+ pluginRackBy: () => pluginrackby2,
13518
+ pluginRackEmpty: () => pluginrackempty2,
13519
+ pluginRackInstall: () => pluginrackinstall2,
13520
+ pluginRackInstallEmpty: () => pluginrackinstallempty3,
13521
+ pluginRackInstalled: () => pluginrackinstalled2,
13522
+ pluginRackInstalling: () => pluginrackinstalling2,
13523
+ pluginRackLoadFailed: () => pluginrackloadfailed3,
13524
+ pluginRackOpenAuthor: () => pluginrackopenauthor3,
13525
+ pluginRackOpenRepo: () => pluginrackopenrepo3,
13526
+ pluginRackReload: () => pluginrackreload2,
13527
+ pluginRackRetry: () => pluginrackretry2,
13528
+ pluginRackSearch: () => pluginracksearch2,
13529
+ pluginRackTitle: () => pluginracktitle2,
13530
+ pluginRackUninstall: () => pluginrackuninstall2,
13531
+ pluginRackUninstallEmpty: () => pluginrackuninstallempty3,
13532
+ pluginRackUninstalling: () => pluginrackuninstalling2,
12807
13533
  plusAdd: () => plusadd1,
12808
13534
  presetCustom: () => presetcustom1,
12809
13535
  presetFullAccess: () => presetfullaccess2,
@@ -13024,6 +13750,11 @@ var messages_exports = /* @__PURE__ */ __exportAll({
13024
13750
  collapseLineage: () => collapselineage1,
13025
13751
  collapseSidebar: () => collapsesidebar1,
13026
13752
  commandHelp: () => commandhelp1,
13753
+ commandHelpPluginrackExampleBare: () => commandhelppluginrackexamplebare4,
13754
+ commandHelpPluginrackExampleHelp: () => commandhelppluginrackexamplehelp4,
13755
+ commandHelpPluginrackExampleReload: () => commandhelppluginrackexamplereload4,
13756
+ commandHelpPluginrackParamReload: () => commandhelppluginrackparamreload4,
13757
+ commandHelpPluginrackSummary: () => commandhelppluginracksummary3,
13027
13758
  commandHelpSkillshelfExampleBare: () => commandhelpskillshelfexamplebare4,
13028
13759
  commandHelpSkillshelfExampleHelp: () => commandhelpskillshelfexamplehelp4,
13029
13760
  commandHelpSkillshelfExampleReload: () => commandhelpskillshelfexamplereload4,
@@ -13206,6 +13937,23 @@ var messages_exports = /* @__PURE__ */ __exportAll({
13206
13937
  pendingAttachments: () => pendingattachments1,
13207
13938
  pickSession: () => picksession1,
13208
13939
  planMode: () => planmode1,
13940
+ pluginRackApplying: () => pluginrackapplying2,
13941
+ pluginRackBy: () => pluginrackby2,
13942
+ pluginRackEmpty: () => pluginrackempty2,
13943
+ pluginRackInstall: () => pluginrackinstall2,
13944
+ pluginRackInstallEmpty: () => pluginrackinstallempty3,
13945
+ pluginRackInstalled: () => pluginrackinstalled2,
13946
+ pluginRackInstalling: () => pluginrackinstalling2,
13947
+ pluginRackLoadFailed: () => pluginrackloadfailed3,
13948
+ pluginRackOpenAuthor: () => pluginrackopenauthor3,
13949
+ pluginRackOpenRepo: () => pluginrackopenrepo3,
13950
+ pluginRackReload: () => pluginrackreload2,
13951
+ pluginRackRetry: () => pluginrackretry2,
13952
+ pluginRackSearch: () => pluginracksearch2,
13953
+ pluginRackTitle: () => pluginracktitle2,
13954
+ pluginRackUninstall: () => pluginrackuninstall2,
13955
+ pluginRackUninstallEmpty: () => pluginrackuninstallempty3,
13956
+ pluginRackUninstalling: () => pluginrackuninstalling2,
13209
13957
  plusAdd: () => plusadd1,
13210
13958
  presetCustom: () => presetcustom1,
13211
13959
  presetFullAccess: () => presetfullaccess2,
@@ -15163,13 +15911,46 @@ function renderMarkdown(text) {
15163
15911
  function renderInline(text) {
15164
15912
  const codeSpans = [];
15165
15913
  let rest = text.replace(/`([^`\n]+)`/g, (_m, body) => {
15166
- codeSpans.push(`<code>${body}</code>`);
15914
+ const raw = unescapeEntities(body);
15915
+ if (/^https?:\/\/\S+$/i.test(raw)) codeSpans.push(externalAnchor(raw));
15916
+ else codeSpans.push(`<code>${body}</code>`);
15167
15917
  return `\u0000${codeSpans.length - 1}\u0000`;
15168
15918
  });
15169
15919
  rest = emphasis(rest);
15170
15920
  rest = links(rest);
15921
+ rest = autolinkBareUrls(rest);
15171
15922
  return rest.replace(/\u0000(\d+)\u0000/g, (_m, idx) => codeSpans[Number(idx)] ?? "");
15172
15923
  }
15924
+ /** One hardened external anchor from a RAW url — display is origin+path
15925
+ * (query/fragment stripped), href keeps everything (BC-12 attributes). */
15926
+ function externalAnchor(rawUrl) {
15927
+ let cut = rawUrl.length;
15928
+ for (const c of ["?", "#"]) {
15929
+ const i = rawUrl.indexOf(c);
15930
+ if (i !== -1 && i < cut) cut = i;
15931
+ }
15932
+ return `<a href="${rawUrl.replaceAll("\"", "&quot;")}" rel="noopener noreferrer" target="_blank">${rawUrl.slice(0, cut)}</a>`;
15933
+ }
15934
+ /**
15935
+ * Bare-URL autolink (2026-09-27): an http(s) URL in plain text becomes an
15936
+ * anchor whose DISPLAY TEXT is the origin+path with the query/hash stripped
15937
+ * (transcript URLs like …new?merge_request[source_branch]=… render short)
15938
+ * while the HREF keeps the FULL URL. Runs after [label](href) parsing and
15939
+ * skips text inside existing anchors/code placeholders (\u0000N\u0000 markers).
15940
+ * Trailing punctuation ),.,;:!?'"] and matching surrounding parens stay
15941
+ * outside the link (CommonMark's autolink tail rule).
15942
+ */
15943
+ function autolinkBareUrls(text) {
15944
+ return text.replace(/https?:\/\/[^\s<>"'\u0000]+/gi, (whole, offset, full) => {
15945
+ const before = full.slice(Math.max(0, offset - 2e3), offset);
15946
+ if (/<a\s[^>]*$/i.test(before) || /<code>[^<]*$/i.test(before)) return whole;
15947
+ let url = whole;
15948
+ while (url.endsWith(")") && (url.match(/\(/g)?.length ?? 0) < (url.match(/\)/g)?.length ?? 0)) url = url.slice(0, -1);
15949
+ url = url.replace(/[.,;:!?]+$/, "");
15950
+ const tail = whole.slice(url.length);
15951
+ return `${externalAnchor(url)}${tail}`;
15952
+ });
15953
+ }
15173
15954
  /** ***bold-italic***, **bold**, *italic*, _italic_, ~~strike~~. */
15174
15955
  function emphasis(text) {
15175
15956
  return text.replace(/\*\*\*(.+?)\*\*\*/g, "<strong><em>$1</em></strong>").replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>").replace(/\*(.+?)\*/g, "<em>$1</em>").replace(/(?<![\w])_(.+?)_(?![\w])/g, "<em>$1</em>").replace(/~~(.+?)~~/g, "<del>$1</del>");
@@ -15182,10 +15963,10 @@ function emphasis(text) {
15182
15963
  */
15183
15964
  function links(text) {
15184
15965
  return text.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (whole, label, href) => {
15185
- const unescaped = href.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&quot;", "\"").replaceAll("&#39;", "'");
15186
- if (/^https?:\/\//i.test(unescaped)) return `<a href="${href}" rel="noopener noreferrer" target="_blank">${label}</a>`;
15187
- if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(unescaped) || unescaped.startsWith("//")) return whole;
15188
- return `<a href="${href}">${label}</a>`;
15966
+ const bare = href.replaceAll("&amp;", "&").replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&quot;", "\"").replaceAll("&#39;", "'").replace(/^<(.+)>$/, "$1");
15967
+ if (/^https?:\/\//i.test(bare)) return `<a href="${bare.replaceAll("\"", "&quot;")}" rel="noopener noreferrer" target="_blank">${label}</a>`;
15968
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(bare) || bare.startsWith("//")) return whole;
15969
+ return `<a href="${bare.replaceAll("\"", "&quot;")}">${label}</a>`;
15189
15970
  });
15190
15971
  }
15191
15972
  //#endregion
@@ -18108,6 +18889,7 @@ function panelHeaderLabel(panel) {
18108
18889
  if (panel.kind === "terminal") return "Terminal";
18109
18890
  if (panel.kind === "prompt-manager") return MANAGER_ROW_TITLE;
18110
18891
  if (panel.kind === "skill-shelf") return "Skill Shelf";
18892
+ if (panel.kind === "plugin-rack") return "Plugin Rack";
18111
18893
  if (panel.kind === "settings-editor") return SETTINGS_ROW_TITLE[panel.target];
18112
18894
  if (panel.kind === "injected-doc") return injectedDocTitle(panel.displayPath);
18113
18895
  if (panel.kind === "workspace-explorer") return panel.title ?? workspaceExplorerTitle(panel.root);
@@ -18133,9 +18915,9 @@ function panelRowsFor(input) {
18133
18915
  const { panels, spineRows, coldCache, deadSessions, edgeCache, lineageFacts, moveFacts } = input;
18134
18916
  const openSessionIds = openSessionIdsOf(panels);
18135
18917
  return panels.map((p, index) => {
18136
- if (p.kind === "terminal" || p.kind === "prompt-manager" || p.kind === "settings-editor" || p.kind === "skill-shelf") return {
18918
+ if (p.kind === "terminal" || p.kind === "prompt-manager" || p.kind === "settings-editor" || p.kind === "skill-shelf" || p.kind === "plugin-rack") return {
18137
18919
  panel: p,
18138
- title: p.kind === "terminal" ? "Terminal" : p.kind === "prompt-manager" ? MANAGER_ROW_TITLE : p.kind === "skill-shelf" ? "Skill Shelf" : SETTINGS_ROW_TITLE[p.target],
18920
+ title: p.kind === "terminal" ? "Terminal" : p.kind === "prompt-manager" ? MANAGER_ROW_TITLE : p.kind === "skill-shelf" ? "Skill Shelf" : p.kind === "plugin-rack" ? "Plugin Rack" : SETTINGS_ROW_TITLE[p.target],
18139
18921
  workspace: null,
18140
18922
  dead: false,
18141
18923
  running: false,
@@ -18355,6 +19137,20 @@ function parseCommand(text) {
18355
19137
  }[token],
18356
19138
  args
18357
19139
  };
19140
+ case "/dsi-plugins":
19141
+ if (args === "") return {
19142
+ type: "pluginrack",
19143
+ args
19144
+ };
19145
+ if (args === "--reload") return {
19146
+ type: "pluginrack",
19147
+ args: "",
19148
+ reload: true
19149
+ };
19150
+ return {
19151
+ type: "pluginrack",
19152
+ args
19153
+ };
18358
19154
  case "/dsi-skills":
18359
19155
  if (args === "") return {
18360
19156
  type: "skillshelf",
@@ -18551,6 +19347,38 @@ var COMMAND_HELP = {
18551
19347
  }
18552
19348
  ]
18553
19349
  },
19350
+ pluginrack: {
19351
+ usage: "/dsi-plugins [--reload]",
19352
+ get summary() {
19353
+ return t(commandhelppluginracksummary3);
19354
+ },
19355
+ params: [{
19356
+ name: "--reload",
19357
+ get description() {
19358
+ return t(commandhelppluginrackparamreload4);
19359
+ }
19360
+ }],
19361
+ examples: [
19362
+ {
19363
+ line: "/dsi-plugins",
19364
+ get description() {
19365
+ return t(commandhelppluginrackexamplebare4);
19366
+ }
19367
+ },
19368
+ {
19369
+ line: "/dsi-plugins --reload",
19370
+ get description() {
19371
+ return t(commandhelppluginrackexamplereload4);
19372
+ }
19373
+ },
19374
+ {
19375
+ line: "/dsi-plugins ?",
19376
+ get description() {
19377
+ return t(commandhelppluginrackexamplehelp4);
19378
+ }
19379
+ }
19380
+ ]
19381
+ },
18554
19382
  dshsettings: {
18555
19383
  usage: "/dsh-settings",
18556
19384
  summary: "Aims the harness settings home explorer (~/.dsh, titled “DSH - Settings”): the open explorer takes the focus; otherwise a NEW explorer opens to the right of this conversation, selected. settings.yaml opens as a tab and stays editable; the running harness picks edits up through its own file watcher.",
@@ -18634,6 +19462,14 @@ var MENU_GESTURES = [
18634
19462
  return t(commandhelpskillshelfsummary3);
18635
19463
  }
18636
19464
  },
19465
+ {
19466
+ name: "pluginrack",
19467
+ display: "/dsi-plugins",
19468
+ seed: "/dsi-plugins ",
19469
+ get description() {
19470
+ return t(commandhelppluginracksummary3);
19471
+ }
19472
+ },
18637
19473
  {
18638
19474
  name: "dsisettings",
18639
19475
  display: "/dsi-settings",
@@ -20054,7 +20890,7 @@ function hasDotDotSegment(path) {
20054
20890
  * it never breaks the open).
20055
20891
  */
20056
20892
  function parseFileLinkHref(href) {
20057
- const value = href.trim();
20893
+ const value = stripAngleWrapper(href.trim());
20058
20894
  const hash = value.indexOf("#");
20059
20895
  const raw = hash === -1 ? value : value.slice(0, hash);
20060
20896
  const anchor = hash === -1 ? "" : value.slice(hash + 1);
@@ -20080,8 +20916,14 @@ function parseFileLinkHref(href) {
20080
20916
  lines
20081
20917
  };
20082
20918
  }
20919
+ /** CommonMark angle-bracket destinations (<path> and their %3C/%3E
20920
+ * encodings) are destination syntax, never path bytes - renderers that
20921
+ * hand the wrapper through must not have it reach the host read. */
20922
+ function stripAngleWrapper(value) {
20923
+ return value.replace(/^(?:%3C|<)/i, "").replace(/(?:%3E|>)$/i, "");
20924
+ }
20083
20925
  function normalizeFileLinkPath(href) {
20084
- let value = href.trim().replace(/^\.\//, "").replace(/\/{2,}/g, "/");
20926
+ let value = stripAngleWrapper(href.trim()).replace(/^\.\//, "").replace(/\/{2,}/g, "/");
20085
20927
  const hash = value.indexOf("#");
20086
20928
  if (hash !== -1) value = value.slice(0, hash);
20087
20929
  if (value.startsWith("/")) value = value.slice(1);
@@ -24594,6 +25436,7 @@ async function executeCommand(command, ctx, onNote) {
24594
25436
  if (command.type === "promptmanager") return runPromptManager(command.args, ctx, onNote);
24595
25437
  if (command.type === "terminal") return runTerminal(command.args, command.terminalAction, ctx, onNote);
24596
25438
  if (command.type === "skillshelf") return runSkillShelf(command.args, command.reload === true, ctx, onNote);
25439
+ if (command.type === "pluginrack") return runPluginRack(command.args, command.reload === true, ctx, onNote);
24597
25440
  if (command.type === "dsisettings" || command.type === "dshsettings") return runSettingsEditor(command.type === "dsisettings" ? "dsi" : "dsh", command.type === "dsisettings" ? "/dsi-settings" : "/dsh-settings", command.args, ctx, onNote);
24598
25441
  if (command.type === "loadinjected") return runLoadInjected(command.filename, command.addPanel === true, ctx, onNote);
24599
25442
  if (command.args !== "") {
@@ -24801,6 +25644,61 @@ async function runPromptManager(args, ctx, onNote) {
24801
25644
  * forces the rebuild HERE so the panel's first fetch already carries the
24802
25645
  * fresh snapshot. No note on success — the focused panel IS the feedback.
24803
25646
  */
25647
+ /**
25648
+ * /dsi-plugins (The Plugin Rack ADR, 2026-09-27, D1): aim the
25649
+ * PluginManagerPanel — the floor dedupes and FOCUSES the open rack (the
25650
+ * manager-request grammar). Snapshot-first is the ROUTE's contract
25651
+ * (GET /api/plugins/snapshot builds when absent, D2); the '--reload' flag
25652
+ * forces the rebuild HERE so the panel's first fetch already carries the
25653
+ * fresh snapshot. No note on success — the focused panel IS the feedback.
25654
+ */
25655
+ async function runPluginRack(args, reload, ctx, onNote) {
25656
+ if (args !== "") {
25657
+ const usage = "usage: /dsi-plugins [--reload]";
25658
+ onNote?.(false, usage);
25659
+ return {
25660
+ ok: false,
25661
+ note: usage
25662
+ };
25663
+ }
25664
+ if (ctx.panelId == null) {
25665
+ const note = "/dsi-plugins needs a panel floor (open this session on the floor first)";
25666
+ onNote?.(false, note);
25667
+ return {
25668
+ ok: false,
25669
+ note
25670
+ };
25671
+ }
25672
+ if (reload) try {
25673
+ const res = await fetch("/api/plugins/reload", { method: "POST" });
25674
+ if (!res.ok) {
25675
+ const note = "/dsi-plugins: snapshot rebuild failed (" + res.status + ")";
25676
+ onNote?.(false, note);
25677
+ return {
25678
+ ok: false,
25679
+ note
25680
+ };
25681
+ }
25682
+ } catch {
25683
+ const note = "/dsi-plugins: snapshot rebuild failed (network)";
25684
+ onNote?.(false, note);
25685
+ return {
25686
+ ok: false,
25687
+ note
25688
+ };
25689
+ }
25690
+ if (!addPanel({
25691
+ afterSessionId: ctx.sessionId
25692
+ })) {
25693
+ const note = "/dsi-plugins: the floor is not mounted";
25694
+ onNote?.(false, note);
25695
+ return {
25696
+ ok: false,
25697
+ note
25698
+ };
25699
+ }
25700
+ return { ok: true };
25701
+ }
24804
25702
  async function runSkillShelf(args, reload, ctx, onNote) {
24805
25703
  if (args !== "") {
24806
25704
  const usage = "usage: /dsi-skills [--reload]";
@@ -27126,11 +28024,11 @@ function SettingsSkillsToolbar($$renderer, $$props) {
27126
28024
  });
27127
28025
  }
27128
28026
  //#endregion
27129
- //#region src/lib/components/settings-skills/SettingsSkillsTabgroup.svelte
27130
- function SettingsSkillsTabgroup($$renderer, $$props) {
28027
+ //#region src/lib/components/settings-skills/SettingsSkillsHeaderTabs.svelte
28028
+ function SettingsSkillsHeaderTabs($$renderer, $$props) {
27131
28029
  $$renderer.component(($$renderer) => {
27132
28030
  /**
27133
- * SettingsSkillsTabgroup — the shelf's own tab pill (The Shelf
28031
+ * SettingsSkillsHeaderTabs — the shelf's own tab pill (The Shelf
27134
28032
  * Chrome, D3): the joined-pill segmented grammar (class:on,
27135
28033
  * aria-pressed) speaking the shelf's native tab names directly —
27136
28034
  * install / uninstall, plain labels, no counts. Install is the
@@ -27138,11 +28036,95 @@ function SettingsSkillsTabgroup($$renderer, $$props) {
27138
28036
  * renders the two segments and reports picks.
27139
28037
  */
27140
28038
  let { tab = "install"} = $$props;
27141
- $$renderer.push(`<div data-svelte="SettingsSkillsTabgroup" class="seg-group svelte-8kewue" role="group"${attr("aria-label", t(skillsshelftitle2))} data-testid="shelf-tab-group"><button type="button"${attr_class("seg left svelte-8kewue", void 0, { "on": tab === "install" })}${attr("aria-pressed", tab === "install")} data-testid="shelf-tab-install">${escape_html(t(skillsshelftabinstall3))}</button> <button type="button"${attr_class("seg right svelte-8kewue", void 0, { "on": tab === "uninstall" })}${attr("aria-pressed", tab === "uninstall")} data-testid="shelf-tab-uninstall">${escape_html(t(skillsshelftabuninstall3))}</button></div>`);
28039
+ $$renderer.push(`<div data-svelte="SettingsSkillsHeaderTabs" class="seg-group svelte-34npwv" role="group"${attr("aria-label", t(skillsshelftitle2))} data-testid="shelf-tab-group"><button type="button"${attr_class("seg left svelte-34npwv", void 0, { "on": tab === "install" })}${attr("aria-pressed", tab === "install")} data-testid="shelf-tab-install">${escape_html(t(skillsshelftabinstall3))}</button> <button type="button"${attr_class("seg right svelte-34npwv", void 0, { "on": tab === "uninstall" })}${attr("aria-pressed", tab === "uninstall")} data-testid="shelf-tab-uninstall">${escape_html(t(skillsshelftabuninstall3))}</button></div>`);
28040
+ });
28041
+ }
28042
+ //#endregion
28043
+ //#region src/lib/components/settings-skills/SettingsSkillsHeaderActions.svelte
28044
+ function SettingsSkillsHeaderActions($$renderer, $$props) {
28045
+ $$renderer.component(($$renderer) => {
28046
+ /**
28047
+ * SettingsSkillsHeaderActions - the shelf header's action cluster
28048
+ * (The Shelf Chrome ADR): the reload verb + progress/cancel
28049
+ * (install tab only) and the lineage-fold pill (cross-tab by
28050
+ * contract, ADR D2). Presentational: every verb and all state are
28051
+ * owned by SettingsSkillsPanel.
28052
+ */
28053
+ let { tab, reloadState, busy} = $$props;
28054
+ $$renderer.push(`<div data-svelte="SettingsSkillsHeaderActions" class="shelf-header-actions svelte-1c0ydto">`);
28055
+ if (tab === "install") {
28056
+ $$renderer.push("<!--[0-->");
28057
+ $$renderer.push(`<button type="button"${attr_class("shelf-reload svelte-1c0ydto", void 0, {
28058
+ "reloading": reloadState === "loading",
28059
+ "reloaded": reloadState === "done"
28060
+ })} data-testid="shelf-reload"${attr("data-reload-state", reloadState)}${attr("title", reloadState === "loading" ? t(skillsshelfreloading2) : reloadState === "done" ? t(skillsshelfreloaded2) : t(skillsshelfreload2))}${attr("aria-label", reloadState === "loading" ? t(skillsshelfreloading2) : reloadState === "done" ? t(skillsshelfreloaded2) : t(skillsshelfreload2))}${attr("disabled", busy, true)}>`);
28061
+ if (reloadState === "loading") {
28062
+ $$renderer.push("<!--[0-->");
28063
+ Loader_circle($$renderer, {
28064
+ size: 13,
28065
+ "aria-hidden": "true"
28066
+ });
28067
+ } else if (reloadState === "done") {
28068
+ $$renderer.push("<!--[1-->");
28069
+ Check($$renderer, {
28070
+ size: 13,
28071
+ "aria-hidden": "true"
28072
+ });
28073
+ } else {
28074
+ $$renderer.push("<!--[-1-->");
28075
+ Rotate_cw($$renderer, {
28076
+ size: 13,
28077
+ "aria-hidden": "true"
28078
+ });
28079
+ }
28080
+ $$renderer.push(`<!--]--> `);
28081
+ $$renderer.push("<!--[-1-->");
28082
+ $$renderer.push(`<!--]--></button> `);
28083
+ if (tab === "install" && reloadState === "loading") {
28084
+ $$renderer.push("<!--[0-->");
28085
+ $$renderer.push(`<button type="button" class="shelf-reload-cancel svelte-1c0ydto" data-testid="shelf-reload-cancel"${attr("title", t(skillsshelfreloadcancel3))}${attr("aria-label", t(skillsshelfreloadcancel3))}>`);
28086
+ X($$renderer, {
28087
+ size: 13,
28088
+ "aria-hidden": "true"
28089
+ });
28090
+ $$renderer.push(`<!----></button>`);
28091
+ } else $$renderer.push("<!--[-1-->");
28092
+ $$renderer.push(`<!--]-->`);
28093
+ } else $$renderer.push("<!--[-1-->");
28094
+ $$renderer.push(`<!--]--> <div class="seg-group svelte-1c0ydto" role="group"${attr("aria-label", t(skillsshelftitle2))} data-testid="shelf-fold-toggle"><button type="button" class="seg left svelte-1c0ydto"${attr("aria-label", t(skillsshelfcollapseall3))}${attr("title", t(skillsshelfcollapseall3))} data-testid="shelf-collapse-all">`);
28095
+ Chevrons_down_up($$renderer, {
28096
+ size: 12,
28097
+ "aria-hidden": "true"
28098
+ });
28099
+ $$renderer.push(`<!----></button> <button type="button" class="seg right svelte-1c0ydto"${attr("aria-label", t(skillsshelfexpandall3))}${attr("title", t(skillsshelfexpandall3))} data-testid="shelf-expand-all">`);
28100
+ Chevrons_up_down($$renderer, {
28101
+ size: 12,
28102
+ "aria-hidden": "true"
28103
+ });
28104
+ $$renderer.push(`<!----></button></div></div>`);
27142
28105
  });
27143
28106
  }
27144
28107
  //#endregion
27145
- //#region src/lib/utils/skill-shelf-reload-machine.ts
28108
+ //#region src/lib/components/settings-skills/SettingsSkillsHeader.svelte
28109
+ function SettingsSkillsHeader($$renderer, $$props) {
28110
+ /**
28111
+ * SettingsSkillsHeader - the shelf chrome's header row (The Shelf
28112
+ * Chrome ADR): tab group on the left, action cluster on the right —
28113
+ * the reload verb + progress/cancel (install tab only) and the
28114
+ * lineage-fold pill (cross-tab by contract, ADR D2). Presentational:
28115
+ * every verb and all state are owned by SettingsSkillsPanel.
28116
+ */
28117
+ let { tab, reloadState, busy} = $$props;
28118
+ $$renderer.push(`<div data-svelte="SettingsSkillsHeader" class="shelf-header svelte-17gmpcz" data-testid="shelf-header">`);
28119
+ SettingsSkillsHeaderTabs($$renderer, {
28120
+ tab});
28121
+ $$renderer.push(`<!----> `);
28122
+ SettingsSkillsHeaderActions($$renderer, {
28123
+ tab,
28124
+ reloadState,
28125
+ busy});
28126
+ $$renderer.push(`<!----></div>`);
28127
+ }
27146
28128
  /**
27147
28129
  * What the button should show RIGHT NOW. The deadline, not the mount moment,
27148
28130
  * is the contract: a done blob past its doneAt reads idle even before the
@@ -27156,7 +28138,6 @@ function visiblePhase(state, now) {
27156
28138
  function SettingsSkillsPanel($$renderer, $$props) {
27157
28139
  $$renderer.component(($$renderer) => {
27158
28140
  let busy = false;
27159
- let progress = null;
27160
28141
  const reloadState = derived(() => visiblePhase());
27161
28142
  /** Persisted reload feedback (hard-reload survival): a restored
27162
28143
  * 'done' lives out its remaining 5s window; a restored 'loading'
@@ -27181,64 +28162,149 @@ function SettingsSkillsPanel($$renderer, $$props) {
27181
28162
  $$settled = false;
27182
28163
  }
27183
28164
  });
27184
- $$renderer.push(`<!----> <div class="shelf-header svelte-lnunga" data-testid="shelf-header">`);
27185
- SettingsSkillsTabgroup($$renderer, {
27186
- tab});
27187
- $$renderer.push(`<!----> <div class="shelf-header-actions svelte-lnunga">`);
27188
- if (tab === "install") {
28165
+ $$renderer.push(`<!----> `);
28166
+ SettingsSkillsHeader($$renderer, {
28167
+ tab,
28168
+ reloadState: reloadState(),
28169
+ busy});
28170
+ $$renderer.push(`<!----> `);
28171
+ {
27189
28172
  $$renderer.push("<!--[0-->");
27190
- $$renderer.push(`<button type="button"${attr_class("shelf-reload svelte-lnunga", void 0, {
27191
- "reloading": reloadState() === "loading",
27192
- "reloaded": reloadState() === "done"
27193
- })} data-testid="shelf-reload"${attr("data-reload-state", reloadState())}${attr("title", reloadState() === "loading" ? t(skillsshelfreloading2) : reloadState() === "done" ? t(skillsshelfreloaded2) : t(skillsshelfreload2))}${attr("aria-label", reloadState() === "loading" ? t(skillsshelfreloading2) : reloadState() === "done" ? t(skillsshelfreloaded2) : t(skillsshelfreload2))}${attr("disabled", busy, true)}>`);
27194
- if (reloadState() === "loading") {
27195
- $$renderer.push("<!--[0-->");
27196
- Loader_circle($$renderer, {
27197
- size: 13,
27198
- "aria-hidden": "true"
27199
- });
27200
- } else if (reloadState() === "done") {
27201
- $$renderer.push("<!--[1-->");
27202
- Check($$renderer, {
27203
- size: 13,
27204
- "aria-hidden": "true"
27205
- });
27206
- } else {
27207
- $$renderer.push("<!--[-1-->");
27208
- Rotate_cw($$renderer, {
27209
- size: 13,
27210
- "aria-hidden": "true"
27211
- });
28173
+ $$renderer.push(`<p class="shelf-note svelte-lnunga" data-testid="shelf-loading">${escape_html(t(skillsshelfloading2))}</p>`);
28174
+ }
28175
+ $$renderer.push(`<!--]--></div>`);
28176
+ }
28177
+ do {
28178
+ $$settled = true;
28179
+ $$inner_renderer = $$renderer.copy();
28180
+ $$render_inner($$inner_renderer);
28181
+ } while (!$$settled);
28182
+ $$renderer.subsume($$inner_renderer);
28183
+ });
28184
+ }
28185
+ //#endregion
28186
+ //#region src/lib/components/settings-plugins/PluginManagerHeaderTabs.svelte
28187
+ function PluginManagerHeaderTabs($$renderer, $$props) {
28188
+ $$renderer.component(($$renderer) => {
28189
+ /**
28190
+ * PluginManagerHeaderTabs - the rack's install/uninstall tab pill
28191
+ * (The Plugin Rack ADR, 2026-09-27, D1), the shelf HeaderTabs'
28192
+ * joined-pill segmented grammar (SettingsSkillsHeaderTabs, D3):
28193
+ * presentational - tab state lives in PluginManagerPanel, this only
28194
+ * renders the two segments and reports picks.
28195
+ */
28196
+ let { tab} = $$props;
28197
+ $$renderer.push(`<div data-svelte="PluginManagerHeaderTabs" class="seg-group svelte-srf628" role="group"${attr("aria-label", t(pluginracktitle2))} data-testid="rack-tabs"><button type="button"${attr_class("seg left svelte-srf628", void 0, { "on": tab === "install" })}${attr("aria-pressed", tab === "install")} data-testid="rack-tab-install">${escape_html(t(pluginrackinstall2))}</button> <button type="button"${attr_class("seg right svelte-srf628", void 0, { "on": tab === "uninstall" })}${attr("aria-pressed", tab === "uninstall")} data-testid="rack-tab-uninstall">${escape_html(t(pluginrackuninstall2))}</button></div>`);
28198
+ });
28199
+ }
28200
+ //#endregion
28201
+ //#region src/lib/components/settings-plugins/PluginManagerHeaderActions.svelte
28202
+ function PluginManagerHeaderActions($$renderer, $$props) {
28203
+ $$renderer.component(($$renderer) => {
28204
+ /**
28205
+ * PluginManagerHeaderActions - the rack header's action cluster,
28206
+ * the shelf HeaderActions' grammar (SettingsSkillsHeaderActions,
28207
+ * The Shelf Chrome ADR): the reload verb. Presentational: every
28208
+ * verb and all state are owned by PluginManagerPanel.
28209
+ */
28210
+ let { loading, floorBounce} = $$props;
28211
+ $$renderer.push(`<div data-svelte="PluginManagerHeaderActions" class="rack-header-actions svelte-1g0idp7"><button class="rack-reload svelte-1g0idp7" type="button"${attr("title", t(pluginrackreload2))}${attr("aria-label", t(pluginrackreload2))} data-testid="rack-reload"${attr("disabled", loading || floorBounce, true)}>`);
28212
+ Rotate_cw($$renderer, { size: 14 });
28213
+ $$renderer.push(`<!----></button></div>`);
28214
+ });
28215
+ }
28216
+ //#endregion
28217
+ //#region src/lib/components/settings-plugins/PluginManagerHeader.svelte
28218
+ function PluginManagerHeader($$renderer, $$props) {
28219
+ /**
28220
+ * PluginManagerHeader - the rack chrome's header row (The Plugin Rack
28221
+ * ADR, 2026-09-27, D1), the shelf Header's grammar: the tab group on
28222
+ * the left, the action cluster on the right.
28223
+ * Presentational: every verb and all state are owned by
28224
+ * PluginManagerPanel.
28225
+ */
28226
+ let { tab, loading, floorBounce} = $$props;
28227
+ $$renderer.push(`<div data-svelte="PluginManagerHeader" class="rack-head svelte-1lc924" data-testid="rack-header">`);
28228
+ PluginManagerHeaderTabs($$renderer, {
28229
+ tab});
28230
+ $$renderer.push(`<!----> `);
28231
+ PluginManagerHeaderActions($$renderer, {
28232
+ loading,
28233
+ floorBounce});
28234
+ $$renderer.push(`<!----></div>`);
28235
+ }
28236
+ //#endregion
28237
+ //#region src/lib/components/settings-plugins/PluginManagerToolbar.svelte
28238
+ function PluginManagerToolbar($$renderer, $$props) {
28239
+ $$renderer.component(($$renderer) => {
28240
+ /**
28241
+ * PluginManagerToolbar — the rack's first chrome row, the shelf
28242
+ * Toolbar's grammar (SettingsSkillsToolbar, The Shelf Chrome ADR D2):
28243
+ * LEFT the snapshot timestamp; RIGHT the search input and the panel
28244
+ * capture. Presentational: the panel owns searchQ ($bindable — the
28245
+ * box owns keystrokes, the panel owns the value); this renders the row.
28246
+ */
28247
+ let { generatedAt, searchQ = "", container } = $$props;
28248
+ $$renderer.push(`<div data-svelte="PluginManagerToolbar" class="rack-toolbar svelte-m789m0" data-testid="rack-toolbar"><span class="rack-generated-label svelte-m789m0" data-testid="rack-generated">${escape_html(t(skillsshelfgeneratedat3))}: ${escape_html(generatedAt)}</span> <div class="rack-toolbar-actions svelte-m789m0"><input class="rack-search svelte-m789m0" type="search"${attr("placeholder", t(pluginracksearch2))}${attr("aria-label", t(pluginracksearch2))}${attr("value", searchQ)} data-testid="rack-search"/> <span class="copy-slot svelte-m789m0">`);
28249
+ CanvasCopyButton($$renderer, {
28250
+ container,
28251
+ mode: "visible",
28252
+ title: t(copypanelasimage3),
28253
+ size: 12
28254
+ });
28255
+ $$renderer.push(`<!----></span></div></div>`);
28256
+ bind_props($$props, { searchQ });
28257
+ });
28258
+ }
28259
+ //#endregion
28260
+ //#region src/lib/components/settings-plugins/PluginManagerPanel.svelte
28261
+ function PluginManagerPanel($$renderer, $$props) {
28262
+ $$renderer.component(($$renderer) => {
28263
+ /**
28264
+ * PluginManagerPanel — The Plugin Rack (ADR 2026-09-27, D1): the
28265
+ * panel is the STATE OWNER and owns its fetches (/api/plugins/*);
28266
+ * it never touches the engine or dsh. One list, per-row verb: an
28267
+ * uninstalled row offers install, an installed row offers uninstall
28268
+ * (the manifest is the uninstall authority, D4 — the snapshot's
28269
+ * installed flag is the API's derived copy). A successful apply ends
28270
+ * with the DSH restart chain: the floor goes down and re-attaches on
28271
+ * the same URL (D5) — the banner says so BEFORE the fetch storms.
28272
+ */
28273
+ /** Persisted chrome (the explorer-tab pattern): the active pill tab.
28274
+ * Junk sanitizes to 'install'. */
28275
+ /** Reports the active tab up to the panel entry (hard-reload survival). */
28276
+ let { initialTab = "install"} = $$props;
28277
+ let loading = true;
28278
+ let floorBounce = false;
28279
+ let tab = initialTab === "uninstall" ? "uninstall" : "install";
28280
+ let searchQ = "";
28281
+ let rootEl = null;
28282
+ let $$settled = true;
28283
+ let $$inner_renderer;
28284
+ function $$render_inner($$renderer) {
28285
+ $$renderer.push(`<div data-svelte="PluginManagerPanel" class="rack svelte-z3jis1" data-testid="rack-body">`);
28286
+ PluginManagerToolbar($$renderer, {
28287
+ generatedAt: "",
28288
+ container: rootEl,
28289
+ get searchQ() {
28290
+ return searchQ;
28291
+ },
28292
+ set searchQ($$value) {
28293
+ searchQ = $$value;
28294
+ $$settled = false;
27212
28295
  }
27213
- $$renderer.push(`<!--]--> `);
27214
- if (reloadState() === "loading" && progress);
27215
- else $$renderer.push("<!--[-1-->");
27216
- $$renderer.push(`<!--]--></button> `);
27217
- if (tab === "install" && reloadState() === "loading") {
27218
- $$renderer.push("<!--[0-->");
27219
- $$renderer.push(`<button type="button" class="shelf-reload-cancel svelte-lnunga" data-testid="shelf-reload-cancel"${attr("title", t(skillsshelfreloadcancel3))}${attr("aria-label", t(skillsshelfreloadcancel3))}>`);
27220
- X($$renderer, {
27221
- size: 13,
27222
- "aria-hidden": "true"
27223
- });
27224
- $$renderer.push(`<!----></button>`);
27225
- } else $$renderer.push("<!--[-1-->");
27226
- $$renderer.push(`<!--]-->`);
27227
- } else $$renderer.push("<!--[-1-->");
27228
- $$renderer.push(`<!--]--> <div class="seg-group svelte-lnunga" role="group"${attr("aria-label", t(skillsshelftitle2))} data-testid="shelf-fold-toggle"><button type="button" class="seg left svelte-lnunga"${attr("aria-label", t(skillsshelfcollapseall3))}${attr("title", t(skillsshelfcollapseall3))} data-testid="shelf-collapse-all">`);
27229
- Chevrons_down_up($$renderer, {
27230
- size: 12,
27231
- "aria-hidden": "true"
27232
- });
27233
- $$renderer.push(`<!----></button> <button type="button" class="seg right svelte-lnunga"${attr("aria-label", t(skillsshelfexpandall3))}${attr("title", t(skillsshelfexpandall3))} data-testid="shelf-expand-all">`);
27234
- Chevrons_up_down($$renderer, {
27235
- size: 12,
27236
- "aria-hidden": "true"
27237
28296
  });
27238
- $$renderer.push(`<!----></button></div></div></div> `);
28297
+ $$renderer.push(`<!----> `);
28298
+ PluginManagerHeader($$renderer, {
28299
+ tab,
28300
+ loading,
28301
+ floorBounce});
28302
+ $$renderer.push(`<!----> `);
27239
28303
  {
27240
- $$renderer.push("<!--[0-->");
27241
- $$renderer.push(`<p class="shelf-note svelte-lnunga" data-testid="shelf-loading">${escape_html(t(skillsshelfloading2))}</p>`);
28304
+ $$renderer.push("<!--[1-->");
28305
+ $$renderer.push(`<div class="rack-note svelte-z3jis1"><span class="spin svelte-z3jis1">`);
28306
+ Loader_circle($$renderer, { size: 14 });
28307
+ $$renderer.push(`<!----></span></div>`);
27242
28308
  }
27243
28309
  $$renderer.push(`<!--]--></div>`);
27244
28310
  }
@@ -28330,7 +29396,7 @@ function isPanelEntry(value) {
28330
29396
  if (value === null || typeof value !== "object") return false;
28331
29397
  const entry = value;
28332
29398
  if (typeof entry.id !== "string" || entry.id.length === 0) return false;
28333
- if (entry.kind !== void 0 && entry.kind !== "conversation" && entry.kind !== "prompt-manager" && entry.kind !== "settings-editor" && entry.kind !== "injected-doc" && entry.kind !== "skill-shelf" && entry.kind !== "workspace-explorer" && entry.kind !== "workspace-file" && entry.kind !== "terminal") return false;
29399
+ if (entry.kind !== void 0 && entry.kind !== "conversation" && entry.kind !== "prompt-manager" && entry.kind !== "settings-editor" && entry.kind !== "injected-doc" && entry.kind !== "skill-shelf" && entry.kind !== "plugin-rack" && entry.kind !== "workspace-explorer" && entry.kind !== "workspace-file" && entry.kind !== "terminal") return false;
28334
29400
  if (entry.kind === "settings-editor" && entry.target !== "dsi" && entry.target !== "dsh") return false;
28335
29401
  if (entry.kind === "workspace-explorer") {
28336
29402
  if (entry.sessionId !== null && (typeof entry.sessionId !== "string" || entry.sessionId.length === 0)) return false;
@@ -28347,7 +29413,7 @@ function isPanelEntry(value) {
28347
29413
  if (typeof entry.sourceSessionId !== "string" || entry.sourceSessionId.length === 0) return false;
28348
29414
  if (typeof entry.displayPath !== "string" || entry.displayPath.length === 0) return false;
28349
29415
  }
28350
- if (entry.kind !== "prompt-manager" && entry.kind !== "settings-editor" && entry.kind !== "skill-shelf" && entry.kind !== "injected-doc" && entry.kind !== "workspace-explorer" && entry.kind !== "workspace-file" && entry.kind !== "terminal") {
29416
+ if (entry.kind !== "prompt-manager" && entry.kind !== "settings-editor" && entry.kind !== "skill-shelf" && entry.kind !== "plugin-rack" && entry.kind !== "injected-doc" && entry.kind !== "workspace-explorer" && entry.kind !== "workspace-file" && entry.kind !== "terminal") {
28351
29417
  if (typeof entry.sessionId !== "string" || entry.sessionId.length === 0) return false;
28352
29418
  if (entry.agentPreset !== void 0 && typeof entry.agentPreset !== "string" && entry.agentPreset !== null) return false;
28353
29419
  }
@@ -28367,7 +29433,7 @@ function sanitizePanels(raw) {
28367
29433
  if (!Array.isArray(raw)) return [];
28368
29434
  const seen = /* @__PURE__ */ new Set();
28369
29435
  return raw.filter((entry) => isPanelEntry(entry)).map((entry) => {
28370
- const kindDefault = entry.kind === "skill-shelf" ? shelfPanelWidth() : entry.kind === "workspace-explorer" ? 850 : entry.kind === "workspace-file" ? 850 : defaultPanelWidth();
29436
+ const kindDefault = entry.kind === "skill-shelf" ? shelfPanelWidth() : entry.kind === "plugin-rack" ? shelfPanelWidth() : entry.kind === "workspace-explorer" ? 850 : entry.kind === "workspace-file" ? 850 : defaultPanelWidth();
28371
29437
  const width = clampPanelWidth(typeof entry.width === "number" && Number.isFinite(entry.width) ? entry.width : kindDefault, entry.kind);
28372
29438
  if (entry.kind === "prompt-manager") return {
28373
29439
  id: entry.id,
@@ -28411,6 +29477,12 @@ function sanitizePanels(raw) {
28411
29477
  width
28412
29478
  };
28413
29479
  }
29480
+ if (entry.kind === "plugin-rack") return {
29481
+ id: entry.id,
29482
+ kind: "plugin-rack",
29483
+ tab: entry.tab === "uninstall" ? "uninstall" : "install",
29484
+ width
29485
+ };
28414
29486
  if (entry.kind === "injected-doc") return {
28415
29487
  id: entry.id,
28416
29488
  kind: "injected-doc",
@@ -29671,8 +30743,14 @@ function _page($$renderer, $$props) {
29671
30743
  host: "panel"
29672
30744
  });
29673
30745
  $$renderer.push(`<!----></div>`);
29674
- } else if (panel.kind === "skill-shelf") {
30746
+ } else if (panel.kind === "plugin-rack") {
29675
30747
  $$renderer.push("<!--[2-->");
30748
+ $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-plugins">`);
30749
+ PluginManagerPanel($$renderer, {
30750
+ initialTab: panel.tab ?? "install"});
30751
+ $$renderer.push(`<!----></div>`);
30752
+ } else if (panel.kind === "skill-shelf") {
30753
+ $$renderer.push("<!--[3-->");
29676
30754
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-skills">`);
29677
30755
  SettingsSkillsPanel($$renderer, {
29678
30756
  initialTab: panel.tab ?? "install",
@@ -29681,13 +30759,13 @@ function _page($$renderer, $$props) {
29681
30759
  initialReload: panel.reload ?? null});
29682
30760
  $$renderer.push(`<!----></div>`);
29683
30761
  } else if (panel.kind === "settings-editor") {
29684
- $$renderer.push("<!--[3-->");
30762
+ $$renderer.push("<!--[4-->");
29685
30763
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag" data-testid="panel-settings">`);
29686
30764
  SettingsEditorPanel($$renderer, {
29687
30765
  target: panel.target});
29688
30766
  $$renderer.push(`<!----></div>`);
29689
30767
  } else if (panel.kind === "injected-doc") {
29690
- $$renderer.push("<!--[4-->");
30768
+ $$renderer.push("<!--[5-->");
29691
30769
  $$renderer.push(`<div class="panel-manager-body svelte-1uha8ag">`);
29692
30770
  InjectedDocPanel($$renderer, {
29693
30771
  sourceSessionId: panel.sourceSessionId,
@@ -29695,7 +30773,7 @@ function _page($$renderer, $$props) {
29695
30773
  entries: coldCache[panel.sourceSessionId]?.entries ?? []});
29696
30774
  $$renderer.push(`<!----></div>`);
29697
30775
  } else if (panel.kind === "workspace-explorer") {
29698
- $$renderer.push("<!--[5-->");
30776
+ $$renderer.push("<!--[6-->");
29699
30777
  WorkspaceExplorerPanel($$renderer, {
29700
30778
  sessionId: panel.sessionId,
29701
30779
  root: panel.root,
@@ -29726,7 +30804,7 @@ function _page($$renderer, $$props) {
29726
30804
  onActivateTab: (path) => activateExplorerTab(panel.id, path)
29727
30805
  });
29728
30806
  } else if (panel.kind === "workspace-file") {
29729
- $$renderer.push("<!--[6-->");
30807
+ $$renderer.push("<!--[7-->");
29730
30808
  WorkspaceFilePanel($$renderer, {
29731
30809
  sessionId: panel.sessionId,
29732
30810
  path: panel.path,
@@ -29736,7 +30814,7 @@ function _page($$renderer, $$props) {
29736
30814
  onclose: () => removePanel(panel.id)
29737
30815
  });
29738
30816
  } else if (panel.kind === "conversation") {
29739
- $$renderer.push("<!--[7-->");
30817
+ $$renderer.push("<!--[8-->");
29740
30818
  const p = panel;
29741
30819
  $$renderer.push(`<!---->`);
29742
30820
  if (deadSessions[p.sessionId]) {
@@ -29898,4 +30976,4 @@ function _page($$renderer, $$props) {
29898
30976
  }
29899
30977
 
29900
30978
  export { _page as default };
29901
- //# sourceMappingURL=_page.svelte.js-DoOQ17mk.js.map
30979
+ //# sourceMappingURL=_page.svelte.js-BJ7eKmkS.js.map