shelfware 0.1.1 → 0.1.3

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 (32) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BZuUK3cr.js → Bzmuhhqm.js} +1 -1
  3. package/.output/public/_nuxt/{6IstVYrV.js → CJmYvhe6.js} +1 -1
  4. package/.output/public/_nuxt/CMk5jOCS.js +1 -0
  5. package/.output/public/_nuxt/DJQqUjJu.js +2 -0
  6. package/.output/public/_nuxt/DfJzPSBi.js +1 -0
  7. package/.output/public/_nuxt/EBA28doP.js +14 -0
  8. package/.output/public/_nuxt/builds/latest.json +1 -1
  9. package/.output/public/_nuxt/builds/meta/87d7ca63-ebd6-4c54-a087-e23ce5bed209.json +1 -0
  10. package/.output/public/_nuxt/entry.CKteCcdN.css +2 -0
  11. package/.output/public/_nuxt/error-404.1qC5mjOI.css +1 -0
  12. package/.output/public/_nuxt/error-500.BcOmuN7K.css +1 -0
  13. package/.output/public/_nuxt/rWsrwf2L.js +36 -0
  14. package/.output/public/_nuxt/{C_VgD9ZI.js → sK9Xse3o.js} +1 -1
  15. package/.output/server/chunks/_/catalog.mjs +33 -8
  16. package/.output/server/chunks/nitro/nitro.mjs +96 -96
  17. package/.output/server/chunks/routes/renderer.mjs +1 -1
  18. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  19. package/.output/server/package.json +1 -1
  20. package/README.md +18 -4
  21. package/bin/launch.d.mts +54 -0
  22. package/bin/launch.mjs +46 -17
  23. package/package.json +7 -3
  24. package/.output/public/_nuxt/9C5WUlLE.js +0 -36
  25. package/.output/public/_nuxt/BXXtFil5.js +0 -1
  26. package/.output/public/_nuxt/BeLyMmd4.js +0 -1
  27. package/.output/public/_nuxt/DB5Vxbte.js +0 -2
  28. package/.output/public/_nuxt/DMg0j7gv.js +0 -14
  29. package/.output/public/_nuxt/builds/meta/e0d2b6a3-3a30-44b7-8c79-a56f66400005.json +0 -1
  30. package/.output/public/_nuxt/entry.b3_DJTEt.css +0 -2
  31. package/.output/public/_nuxt/error-404.CHsn7XF-.css +0 -1
  32. package/.output/public/_nuxt/error-500.Bawx2bLr.css +0 -1
@@ -4056,7 +4056,7 @@ function _expandFromEnv(value) {
4056
4056
  const _inlineRuntimeConfig = {
4057
4057
  "app": {
4058
4058
  "baseURL": "/",
4059
- "buildId": "e0d2b6a3-3a30-44b7-8c79-a56f66400005",
4059
+ "buildId": "87d7ca63-ebd6-4c54-a087-e23ce5bed209",
4060
4060
  "buildAssetsDir": "/_nuxt/",
4061
4061
  "cdnURL": ""
4062
4062
  },
@@ -4500,7 +4500,7 @@ async function errorHandler(error, event) {
4500
4500
 
4501
4501
  const script = "\"use strict\";(()=>{const o=window,e=document.documentElement,c=[\"dark\",\"light\"],s=getStorageValue(\"localStorage\",\"nuxt-color-mode\")||\"system\";let r=s===\"system\"?f():s;const l=e.getAttribute(\"data-color-mode-forced\");l&&(r=l),i(r),o[\"__NUXT_COLOR_MODE__\"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=\"\"+t+\"\",n=\"\";e.classList?e.classList.add(a):e.className+=\" \"+a,n&&e.setAttribute(\"data-\"+n,t)}function d(t){const a=\"\"+t+\"\",n=\"\";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,\"g\"),\"\"),n&&e.removeAttribute(\"data-\"+n)}function u(t){return o.matchMedia(\"(prefers-color-scheme\"+t+\")\")}function f(){if(o.matchMedia&&u(\"\").media!==\"not all\"){for(const t of c)if(u(\":\"+t).matches)return t}return\"light\"}})();function getStorageValue(o,e){switch(o){case\"localStorage\":try{return window.localStorage.getItem(e)}catch{return null}case\"sessionStorage\":try{return window.sessionStorage.getItem(e)}catch{return null}case\"cookie\":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=(\"; \"+window.document.cookie).split(\"; \"+o+\"=\");if(c.length===2){const s=c.pop();return s?s.split(\";\").shift():null}}";
4502
4502
 
4503
- const _sy8WL5gvfy834j9E8qs4pEkXtOnD5hjDQZM7n5pkxM = (function(nitro) {
4503
+ const _4H4culGvQ1Dp8myD2WdjQ3S6IGUumm_St2Zw0wwTTE = (function(nitro) {
4504
4504
  nitro.hooks.hook("render:html", (htmlContext) => {
4505
4505
  htmlContext.head.push(`<script>${script}<\/script>`);
4506
4506
  });
@@ -4559,122 +4559,122 @@ function tokenMatches(actual, expected) {
4559
4559
  return timingSafeEqual(a, b);
4560
4560
  }
4561
4561
 
4562
- const _QOaOEwx81eDlZeFZjWojtfFoitcjIhtHIqt37VdYuSg = defineNitroPlugin(() => {
4562
+ const _YY93QxfadySKCpwmDM6dAIPqjH6q5NYi1I7q0CwP0w = defineNitroPlugin(() => {
4563
4563
  if (!isWellFormedToken(process.env.NUXT_PUBLIC_SHELFWARE_TOKEN)) {
4564
4564
  process.env.NUXT_PUBLIC_SHELFWARE_TOKEN = `sw_${randomBytes(32).toString("hex")}`;
4565
4565
  }
4566
4566
  });
4567
4567
 
4568
4568
  const plugins = [
4569
- _sy8WL5gvfy834j9E8qs4pEkXtOnD5hjDQZM7n5pkxM,
4570
- _QOaOEwx81eDlZeFZjWojtfFoitcjIhtHIqt37VdYuSg
4569
+ _4H4culGvQ1Dp8myD2WdjQ3S6IGUumm_St2Zw0wwTTE,
4570
+ _YY93QxfadySKCpwmDM6dAIPqjH6q5NYi1I7q0CwP0w
4571
4571
  ];
4572
4572
 
4573
4573
  const assets = {
4574
- "/_nuxt/6IstVYrV.js": {
4575
- "type": "text/javascript; charset=utf-8",
4576
- "etag": "\"e90-QSo0QKAvkvHEus5Dhcj+CyKCqD4\"",
4577
- "mtime": "2026-09-06T14:46:29.734Z",
4578
- "size": 3728,
4579
- "path": "../public/_nuxt/6IstVYrV.js"
4580
- },
4581
4574
  "/_nuxt/BDNMzG2s.js": {
4582
4575
  "type": "text/javascript; charset=utf-8",
4583
4576
  "etag": "\"54-MasMfSk/A98C3Gn9uIOxtFxkWNw\"",
4584
- "mtime": "2026-09-06T14:46:29.734Z",
4577
+ "mtime": "2026-09-20T15:39:53.933Z",
4585
4578
  "size": 84,
4586
4579
  "path": "../public/_nuxt/BDNMzG2s.js"
4587
4580
  },
4588
4581
  "/_nuxt/BW3xJdEx.js": {
4589
4582
  "type": "text/javascript; charset=utf-8",
4590
4583
  "etag": "\"2da-zDmvCG/tLW/peRiDRHBkm+3Edw4\"",
4591
- "mtime": "2026-09-06T14:46:29.735Z",
4584
+ "mtime": "2026-09-20T15:39:53.933Z",
4592
4585
  "size": 730,
4593
4586
  "path": "../public/_nuxt/BW3xJdEx.js"
4594
4587
  },
4595
- "/_nuxt/BXXtFil5.js": {
4588
+ "/_nuxt/Bzmuhhqm.js": {
4596
4589
  "type": "text/javascript; charset=utf-8",
4597
- "etag": "\"1bd2-NDdun38lYj0OD2wayMdetDX3ehc\"",
4598
- "mtime": "2026-09-06T14:46:29.735Z",
4599
- "size": 7122,
4600
- "path": "../public/_nuxt/BXXtFil5.js"
4590
+ "etag": "\"d4e-gP63vGSa9YNUx8rX9IMYEHDofck\"",
4591
+ "mtime": "2026-09-20T15:39:53.933Z",
4592
+ "size": 3406,
4593
+ "path": "../public/_nuxt/Bzmuhhqm.js"
4601
4594
  },
4602
- "/_nuxt/BeLyMmd4.js": {
4595
+ "/_nuxt/CJmYvhe6.js": {
4603
4596
  "type": "text/javascript; charset=utf-8",
4604
- "etag": "\"1c1-HX03BAMzK3TbabTUt+zazZac6jY\"",
4605
- "mtime": "2026-09-06T14:46:29.735Z",
4606
- "size": 449,
4607
- "path": "../public/_nuxt/BeLyMmd4.js"
4597
+ "etag": "\"e90-WCRBrvGTpCy77xWxtXI2/olAzuA\"",
4598
+ "mtime": "2026-09-20T15:39:53.933Z",
4599
+ "size": 3728,
4600
+ "path": "../public/_nuxt/CJmYvhe6.js"
4608
4601
  },
4609
- "/_nuxt/BZuUK3cr.js": {
4602
+ "/_nuxt/CMk5jOCS.js": {
4610
4603
  "type": "text/javascript; charset=utf-8",
4611
- "etag": "\"d4e-rtWL1k144ZrYuBUrIE7FN7q4gDI\"",
4612
- "mtime": "2026-09-06T14:46:29.735Z",
4613
- "size": 3406,
4614
- "path": "../public/_nuxt/BZuUK3cr.js"
4604
+ "etag": "\"1c01-lGS5cFf7bjhmRvkeRxUtYYhz3dw\"",
4605
+ "mtime": "2026-09-20T15:39:53.933Z",
4606
+ "size": 7169,
4607
+ "path": "../public/_nuxt/CMk5jOCS.js"
4615
4608
  },
4616
- "/_nuxt/C_VgD9ZI.js": {
4609
+ "/_nuxt/DfJzPSBi.js": {
4617
4610
  "type": "text/javascript; charset=utf-8",
4618
- "etag": "\"16e9b-CaBNJIMBZbSuSxfSRmsiBioAcZc\"",
4619
- "mtime": "2026-09-06T14:46:29.735Z",
4620
- "size": 93851,
4621
- "path": "../public/_nuxt/C_VgD9ZI.js"
4611
+ "etag": "\"1c1-4bfhhLtFN8RKoheWCeIIphoXgv0\"",
4612
+ "mtime": "2026-09-20T15:39:53.933Z",
4613
+ "size": 449,
4614
+ "path": "../public/_nuxt/DfJzPSBi.js"
4622
4615
  },
4623
- "/_nuxt/DB5Vxbte.js": {
4616
+ "/_nuxt/DJQqUjJu.js": {
4624
4617
  "type": "text/javascript; charset=utf-8",
4625
- "etag": "\"9f1f-lZvm375DqcFM+vOcKc2rvEVowVM\"",
4626
- "mtime": "2026-09-06T14:46:29.735Z",
4627
- "size": 40735,
4628
- "path": "../public/_nuxt/DB5Vxbte.js"
4618
+ "etag": "\"9f1d-Ja0Ka8FFBfh/wxDphcm6zq2k/Aw\"",
4619
+ "mtime": "2026-09-20T15:39:53.933Z",
4620
+ "size": 40733,
4621
+ "path": "../public/_nuxt/DJQqUjJu.js"
4629
4622
  },
4630
- "/_nuxt/error-404.CHsn7XF-.css": {
4623
+ "/_nuxt/error-404.1qC5mjOI.css": {
4631
4624
  "type": "text/css; charset=utf-8",
4632
- "etag": "\"97d-2Jv1I5SVRWWiHcs7d0fjdFylhP4\"",
4633
- "mtime": "2026-09-06T14:46:29.735Z",
4625
+ "etag": "\"97d-ClY1xVMSVUOi3w+npB6k6oGQGlM\"",
4626
+ "mtime": "2026-09-20T15:39:53.933Z",
4634
4627
  "size": 2429,
4635
- "path": "../public/_nuxt/error-404.CHsn7XF-.css"
4628
+ "path": "../public/_nuxt/error-404.1qC5mjOI.css"
4636
4629
  },
4637
- "/_nuxt/error-500.Bawx2bLr.css": {
4630
+ "/_nuxt/error-500.BcOmuN7K.css": {
4638
4631
  "type": "text/css; charset=utf-8",
4639
- "etag": "\"772-1WbEnJKsOodm+94L4M1TNGEMGdA\"",
4640
- "mtime": "2026-09-06T14:46:29.735Z",
4632
+ "etag": "\"772-O0XjmZiN9Tmmh4xccNArXpeMXMg\"",
4633
+ "mtime": "2026-09-20T15:39:53.933Z",
4641
4634
  "size": 1906,
4642
- "path": "../public/_nuxt/error-500.Bawx2bLr.css"
4635
+ "path": "../public/_nuxt/error-500.BcOmuN7K.css"
4643
4636
  },
4644
- "/_nuxt/9C5WUlLE.js": {
4637
+ "/_nuxt/EBA28doP.js": {
4645
4638
  "type": "text/javascript; charset=utf-8",
4646
- "etag": "\"76057-x5s6sLzHAii+nwAfxpSA3vSHenw\"",
4647
- "mtime": "2026-09-06T14:46:29.735Z",
4648
- "size": 483415,
4649
- "path": "../public/_nuxt/9C5WUlLE.js"
4639
+ "etag": "\"25526-S2M2g51QVQiD0lfERMcQ2TJCNvo\"",
4640
+ "mtime": "2026-09-20T15:39:53.933Z",
4641
+ "size": 152870,
4642
+ "path": "../public/_nuxt/EBA28doP.js"
4643
+ },
4644
+ "/_nuxt/entry.CKteCcdN.css": {
4645
+ "type": "text/css; charset=utf-8",
4646
+ "etag": "\"300c8-0WAu9DRw8xrNZdnpJNGrjxOdjtk\"",
4647
+ "mtime": "2026-09-20T15:39:53.933Z",
4648
+ "size": 196808,
4649
+ "path": "../public/_nuxt/entry.CKteCcdN.css"
4650
4650
  },
4651
4651
  "/_nuxt/builds/latest.json": {
4652
4652
  "type": "application/json",
4653
- "etag": "\"47-gnWfjO3atXpuKHcTeevtRdg7IRg\"",
4654
- "mtime": "2026-09-06T14:46:29.732Z",
4653
+ "etag": "\"47-tWu0moVuUg+mZHEvO0WlAqsbf7Q\"",
4654
+ "mtime": "2026-09-20T15:39:53.925Z",
4655
4655
  "size": 71,
4656
4656
  "path": "../public/_nuxt/builds/latest.json"
4657
4657
  },
4658
- "/_nuxt/entry.b3_DJTEt.css": {
4659
- "type": "text/css; charset=utf-8",
4660
- "etag": "\"2fd30-a1fPhKsI3m5s3WkUz/aQvIKj6Ow\"",
4661
- "mtime": "2026-09-06T14:46:29.735Z",
4662
- "size": 195888,
4663
- "path": "../public/_nuxt/entry.b3_DJTEt.css"
4658
+ "/_nuxt/sK9Xse3o.js": {
4659
+ "type": "text/javascript; charset=utf-8",
4660
+ "etag": "\"16ebc-llACAH/LeVfHtbCyV/Od8ae+rn8\"",
4661
+ "mtime": "2026-09-20T15:39:53.933Z",
4662
+ "size": 93884,
4663
+ "path": "../public/_nuxt/sK9Xse3o.js"
4664
4664
  },
4665
- "/_nuxt/builds/meta/e0d2b6a3-3a30-44b7-8c79-a56f66400005.json": {
4665
+ "/_nuxt/builds/meta/87d7ca63-ebd6-4c54-a087-e23ce5bed209.json": {
4666
4666
  "type": "application/json",
4667
- "etag": "\"58-/O8b6cy7JVz90KrikBRsiFQaWdI\"",
4668
- "mtime": "2026-09-06T14:46:29.731Z",
4667
+ "etag": "\"58-4wd6NcE3wBxF/Zfjr3lBrhnNofg\"",
4668
+ "mtime": "2026-09-20T15:39:53.921Z",
4669
4669
  "size": 88,
4670
- "path": "../public/_nuxt/builds/meta/e0d2b6a3-3a30-44b7-8c79-a56f66400005.json"
4670
+ "path": "../public/_nuxt/builds/meta/87d7ca63-ebd6-4c54-a087-e23ce5bed209.json"
4671
4671
  },
4672
- "/_nuxt/DMg0j7gv.js": {
4672
+ "/_nuxt/rWsrwf2L.js": {
4673
4673
  "type": "text/javascript; charset=utf-8",
4674
- "etag": "\"25529-MrmjBHZKW5MJ6UC+MAR50nTTq7U\"",
4675
- "mtime": "2026-09-06T14:46:29.735Z",
4676
- "size": 152873,
4677
- "path": "../public/_nuxt/DMg0j7gv.js"
4674
+ "etag": "\"7606d-30wm5zPsBwgXACgEnaCLHx2ZHVk\"",
4675
+ "mtime": "2026-09-20T15:39:53.933Z",
4676
+ "size": 483437,
4677
+ "path": "../public/_nuxt/rWsrwf2L.js"
4678
4678
  }
4679
4679
  };
4680
4680
 
@@ -4821,7 +4821,7 @@ function getAsset (id) {
4821
4821
 
4822
4822
  const METHODS = /* @__PURE__ */ new Set(["HEAD", "GET"]);
4823
4823
  const EncodingMap = { gzip: ".gz", br: ".br" };
4824
- const _tlswgW = eventHandler((event) => {
4824
+ const _WmhSKo = eventHandler((event) => {
4825
4825
  if (event.method && !METHODS.has(event.method)) {
4826
4826
  return;
4827
4827
  }
@@ -4885,14 +4885,14 @@ const _tlswgW = eventHandler((event) => {
4885
4885
  return readAsset(id);
4886
4886
  });
4887
4887
 
4888
- const _v67BtD = defineEventHandler((event) => {
4888
+ const _bZ6qrV = defineEventHandler((event) => {
4889
4889
  if (!isAllowedHost(getRequestHeader(event, "host"), expectedPort(process.env))) {
4890
4890
  setResponseStatus(event, 403);
4891
4891
  return { error: "Host not allowed" };
4892
4892
  }
4893
4893
  });
4894
4894
 
4895
- const _5cPz3u = defineEventHandler((event) => {
4895
+ const _IXLPhU = defineEventHandler((event) => {
4896
4896
  var _a;
4897
4897
  const method = event.method.toUpperCase();
4898
4898
  if (method === "GET" || method === "HEAD" || method === "OPTIONS") return;
@@ -4915,33 +4915,33 @@ const _5cPz3u = defineEventHandler((event) => {
4915
4915
 
4916
4916
  const _SxA8c9 = defineEventHandler(() => {});
4917
4917
 
4918
- const _lazy_qOPFff = () => import('../routes/api/_..._.mjs');
4919
- const _lazy_Sow6wq = () => import('../routes/api/health.get.mjs');
4920
- const _lazy_iUT6p9 = () => import('../routes/api/skills.get.mjs');
4921
- const _lazy_N1Eb6F = () => import('../routes/api/skills/_id_.get.mjs');
4922
- const _lazy_gDlnHU = () => import('../routes/api/skills/_id_.put.mjs');
4923
- const _lazy_WLPUzg = () => import('../routes/api/skills/_id/file.get.mjs');
4924
- const _lazy_BDJKLn = () => import('../routes/api/skills/delete.post.mjs');
4925
- const _lazy_5j2vs5 = () => import('../routes/api/skills/quarantine.post.mjs');
4926
- const _lazy_p56u7_ = () => import('../routes/api/skills/restore.post.mjs');
4927
- const _lazy_U5uhtF = () => import('../routes/renderer.mjs');
4918
+ const _lazy_i3xXvc = () => import('../routes/api/_..._.mjs');
4919
+ const _lazy_ODywhX = () => import('../routes/api/health.get.mjs');
4920
+ const _lazy_QLBXsz = () => import('../routes/api/skills.get.mjs');
4921
+ const _lazy_phqsH7 = () => import('../routes/api/skills/_id_.get.mjs');
4922
+ const _lazy_E5xWx6 = () => import('../routes/api/skills/_id_.put.mjs');
4923
+ const _lazy_zp4eSy = () => import('../routes/api/skills/_id/file.get.mjs');
4924
+ const _lazy_GSqKbk = () => import('../routes/api/skills/delete.post.mjs');
4925
+ const _lazy_8aROGo = () => import('../routes/api/skills/quarantine.post.mjs');
4926
+ const _lazy_Z7y_Vb = () => import('../routes/api/skills/restore.post.mjs');
4927
+ const _lazy_ZyvLhi = () => import('../routes/renderer.mjs');
4928
4928
 
4929
4929
  const handlers = [
4930
- { route: '', handler: _tlswgW, lazy: false, middleware: true, method: undefined },
4931
- { route: '', handler: _v67BtD, lazy: false, middleware: true, method: undefined },
4932
- { route: '', handler: _5cPz3u, lazy: false, middleware: true, method: undefined },
4933
- { route: '/api/**', handler: _lazy_qOPFff, lazy: true, middleware: false, method: undefined },
4934
- { route: '/api/health', handler: _lazy_Sow6wq, lazy: true, middleware: false, method: "get" },
4935
- { route: '/api/skills', handler: _lazy_iUT6p9, lazy: true, middleware: false, method: "get" },
4936
- { route: '/api/skills/:id', handler: _lazy_N1Eb6F, lazy: true, middleware: false, method: "get" },
4937
- { route: '/api/skills/:id', handler: _lazy_gDlnHU, lazy: true, middleware: false, method: "put" },
4938
- { route: '/api/skills/:id/file', handler: _lazy_WLPUzg, lazy: true, middleware: false, method: "get" },
4939
- { route: '/api/skills/delete', handler: _lazy_BDJKLn, lazy: true, middleware: false, method: "post" },
4940
- { route: '/api/skills/quarantine', handler: _lazy_5j2vs5, lazy: true, middleware: false, method: "post" },
4941
- { route: '/api/skills/restore', handler: _lazy_p56u7_, lazy: true, middleware: false, method: "post" },
4942
- { route: '/__nuxt_error', handler: _lazy_U5uhtF, lazy: true, middleware: false, method: undefined },
4930
+ { route: '', handler: _WmhSKo, lazy: false, middleware: true, method: undefined },
4931
+ { route: '', handler: _bZ6qrV, lazy: false, middleware: true, method: undefined },
4932
+ { route: '', handler: _IXLPhU, lazy: false, middleware: true, method: undefined },
4933
+ { route: '/api/**', handler: _lazy_i3xXvc, lazy: true, middleware: false, method: undefined },
4934
+ { route: '/api/health', handler: _lazy_ODywhX, lazy: true, middleware: false, method: "get" },
4935
+ { route: '/api/skills', handler: _lazy_QLBXsz, lazy: true, middleware: false, method: "get" },
4936
+ { route: '/api/skills/:id', handler: _lazy_phqsH7, lazy: true, middleware: false, method: "get" },
4937
+ { route: '/api/skills/:id', handler: _lazy_E5xWx6, lazy: true, middleware: false, method: "put" },
4938
+ { route: '/api/skills/:id/file', handler: _lazy_zp4eSy, lazy: true, middleware: false, method: "get" },
4939
+ { route: '/api/skills/delete', handler: _lazy_GSqKbk, lazy: true, middleware: false, method: "post" },
4940
+ { route: '/api/skills/quarantine', handler: _lazy_8aROGo, lazy: true, middleware: false, method: "post" },
4941
+ { route: '/api/skills/restore', handler: _lazy_Z7y_Vb, lazy: true, middleware: false, method: "post" },
4942
+ { route: '/__nuxt_error', handler: _lazy_ZyvLhi, lazy: true, middleware: false, method: undefined },
4943
4943
  { route: '/__nuxt_island/**', handler: _SxA8c9, lazy: false, middleware: false, method: undefined },
4944
- { route: '/**', handler: _lazy_U5uhtF, lazy: true, middleware: false, method: undefined }
4944
+ { route: '/**', handler: _lazy_ZyvLhi, lazy: true, middleware: false, method: undefined }
4945
4945
  ];
4946
4946
 
4947
4947
  function createNitroApp() {
@@ -185,7 +185,7 @@ function encodeForwardSlashes(str) {
185
185
 
186
186
  const renderSSRHeadOptions = {"omitLineBreaks":true};
187
187
 
188
- const entryFileName = "9C5WUlLE.js";
188
+ const entryFileName = "rWsrwf2L.js";
189
189
 
190
190
  //#region src/runtime/handlers/renderer.ts
191
191
  globalThis.__buildAssetsURL = buildAssetsURL;
@@ -1,3 +1,3 @@
1
- const client_precomputed = ((h,j,k,m,o,q,u,x,z,A)=>({dependencies:{"_C_VgD9ZI.js":{scripts:{},styles:{},preload:{"_C_VgD9ZI.js":h={resourceType:"script",module:true,prefetch:true,preload:true,file:"C_VgD9ZI.js",name:"nuxt"}},prefetch:{}},"_BW3xJdEx.js":{scripts:{},styles:{},preload:{"_BW3xJdEx.js":j={resourceType:"script",module:true,prefetch:true,preload:true,file:"BW3xJdEx.js",name:"defu"}},prefetch:{}},"_DB5Vxbte.js":{scripts:{},styles:{},preload:{"_DB5Vxbte.js":k={resourceType:"script",module:true,prefetch:true,preload:true,file:"DB5Vxbte.js",name:"ready",imports:["_C_VgD9ZI.js","_BW3xJdEx.js"]},"_C_VgD9ZI.js":h,"_BW3xJdEx.js":j},prefetch:{}},"_BXXtFil5.js":{scripts:{},styles:{},preload:{"_BXXtFil5.js":m={resourceType:"script",module:true,prefetch:true,preload:true,file:"BXXtFil5.js",name:"config",imports:["_C_VgD9ZI.js","_BW3xJdEx.js"]},"_C_VgD9ZI.js":h,"_BW3xJdEx.js":j},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":{scripts:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q={resourceType:"script",module:true,prefetch:true,preload:true,file:"9C5WUlLE.js",name:"entry",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js",isEntry:true,imports:["_C_VgD9ZI.js","_DB5Vxbte.js","_BW3xJdEx.js","_BXXtFil5.js"],dynamicImports:o=["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue"],css:["entry.b3_DJTEt.css"]}},styles:{"entry.b3_DJTEt.css":u={file:"entry.b3_DJTEt.css",resourceType:"style",prefetch:true,preload:true}},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_C_VgD9ZI.js":h,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m},prefetch:{"entry.b3_DJTEt.css":u}},"_BDNMzG2s.js":{scripts:{},styles:{},preload:{"_BDNMzG2s.js":x={resourceType:"script",module:true,prefetch:true,preload:true,file:"BDNMzG2s.js",name:"_plugin-vue_export-helper"}},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{scripts:{},styles:{"error-404.CHsn7XF-.css":z={file:"error-404.CHsn7XF-.css",resourceType:"style",prefetch:true,preload:true},"entry.b3_DJTEt.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"6IstVYrV.js",name:"error-404",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-404.CHsn7XF-.css"]},"error-404.CHsn7XF-.css":z,"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"error-404.CHsn7XF-.css":z,"entry.b3_DJTEt.css":u}},"error-404.CHsn7XF-.css":{scripts:{},styles:{},preload:{"error-404.CHsn7XF-.css":z},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{scripts:{},styles:{"error-500.Bawx2bLr.css":A={file:"error-500.Bawx2bLr.css",resourceType:"style",prefetch:true,preload:true},"entry.b3_DJTEt.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"BZuUK3cr.js",name:"error-500",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-500.Bawx2bLr.css"]},"error-500.Bawx2bLr.css":A,"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"error-500.Bawx2bLr.css":A,"entry.b3_DJTEt.css":u}},"error-500.Bawx2bLr.css":{scripts:{},styles:{},preload:{"error-500.Bawx2bLr.css":A},prefetch:{}},"entry.b3_DJTEt.css":{scripts:{},styles:{},preload:{"entry.b3_DJTEt.css":u},prefetch:{}},"pages/index.vue":{scripts:{},styles:{"entry.b3_DJTEt.css":u},preload:{"pages/index.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"BeLyMmd4.js",name:"pages",src:"pages/index.vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"]},"_C_VgD9ZI.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"_BDNMzG2s.js":x},prefetch:{"entry.b3_DJTEt.css":u}},"pages/skills/[id].vue":{scripts:{},styles:{"entry.b3_DJTEt.css":u},preload:{"pages/skills/[id].vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"DMg0j7gv.js",name:"_id_",src:"pages/skills/[id].vue",isDynamicEntry:true,imports:["_C_VgD9ZI.js","_DB5Vxbte.js","_BXXtFil5.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js"]},"_C_VgD9ZI.js":h,"_DB5Vxbte.js":k,"_BW3xJdEx.js":j,"_BXXtFil5.js":m,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":q,"entry.b3_DJTEt.css":u},prefetch:{"entry.b3_DJTEt.css":u}}},entrypoints:["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js"],modules:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-404.vue":{file:"6IstVYrV.js",resourceType:"script",mimeType:void 0,module:true},"error-404.CHsn7XF-.css":{file:"error-404.CHsn7XF-.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/components/error-500.vue":{file:"BZuUK3cr.js",resourceType:"script",mimeType:void 0,module:true},"error-500.Bawx2bLr.css":{file:"error-500.Bawx2bLr.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_7873c345affe15219d14831c3a4018df/node_modules/nuxt/dist/app/entry.js":{file:"9C5WUlLE.js",resourceType:"script",mimeType:void 0,module:true,dynamicImports:o},"entry.b3_DJTEt.css":{file:"entry.b3_DJTEt.css",resourceType:"style",mimeType:void 0,module:void 0},"_BDNMzG2s.js":{file:"BDNMzG2s.js",resourceType:"script",mimeType:void 0,module:true},"_BW3xJdEx.js":{file:"BW3xJdEx.js",resourceType:"script",mimeType:void 0,module:true},"_BXXtFil5.js":{file:"BXXtFil5.js",resourceType:"script",mimeType:void 0,module:true},"_C_VgD9ZI.js":{file:"C_VgD9ZI.js",resourceType:"script",mimeType:void 0,module:true},"_DB5Vxbte.js":{file:"DB5Vxbte.js",resourceType:"script",mimeType:void 0,module:true},"pages/index.vue":{file:"BeLyMmd4.js",resourceType:"script",mimeType:void 0,module:true},"pages/skills/[id].vue":{file:"DMg0j7gv.js",resourceType:"script",mimeType:void 0,module:true}}}))();
1
+ const client_precomputed = ((h,j,k,m,o,q,u,x,z,A)=>({dependencies:{"_sK9Xse3o.js":{scripts:{},styles:{},preload:{"_sK9Xse3o.js":h={resourceType:"script",module:true,prefetch:true,preload:true,file:"sK9Xse3o.js",name:"nuxt"}},prefetch:{}},"_BW3xJdEx.js":{scripts:{},styles:{},preload:{"_BW3xJdEx.js":j={resourceType:"script",module:true,prefetch:true,preload:true,file:"BW3xJdEx.js",name:"defu"}},prefetch:{}},"_DJQqUjJu.js":{scripts:{},styles:{},preload:{"_DJQqUjJu.js":k={resourceType:"script",module:true,prefetch:true,preload:true,file:"DJQqUjJu.js",name:"ready",imports:["_sK9Xse3o.js","_BW3xJdEx.js"]},"_sK9Xse3o.js":h,"_BW3xJdEx.js":j},prefetch:{}},"_CMk5jOCS.js":{scripts:{},styles:{},preload:{"_CMk5jOCS.js":m={resourceType:"script",module:true,prefetch:true,preload:true,file:"CMk5jOCS.js",name:"config",imports:["_sK9Xse3o.js","_BW3xJdEx.js"]},"_sK9Xse3o.js":h,"_BW3xJdEx.js":j},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":{scripts:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q={resourceType:"script",module:true,prefetch:true,preload:true,file:"rWsrwf2L.js",name:"entry",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js",isEntry:true,imports:["_sK9Xse3o.js","_DJQqUjJu.js","_BW3xJdEx.js","_CMk5jOCS.js"],dynamicImports:o=["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue"],css:["entry.CKteCcdN.css"]}},styles:{"entry.CKteCcdN.css":u={file:"entry.CKteCcdN.css",resourceType:"style",prefetch:true,preload:true}},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_sK9Xse3o.js":h,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m},prefetch:{"entry.CKteCcdN.css":u}},"_BDNMzG2s.js":{scripts:{},styles:{},preload:{"_BDNMzG2s.js":x={resourceType:"script",module:true,prefetch:true,preload:true,file:"BDNMzG2s.js",name:"_plugin-vue_export-helper"}},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{scripts:{},styles:{"error-404.1qC5mjOI.css":z={file:"error-404.1qC5mjOI.css",resourceType:"style",prefetch:true,preload:true},"entry.CKteCcdN.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"CJmYvhe6.js",name:"error-404",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-404.1qC5mjOI.css"]},"error-404.1qC5mjOI.css":z,"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"error-404.1qC5mjOI.css":z,"entry.CKteCcdN.css":u}},"error-404.1qC5mjOI.css":{scripts:{},styles:{},preload:{"error-404.1qC5mjOI.css":z},prefetch:{}},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{scripts:{},styles:{"error-500.BcOmuN7K.css":A={file:"error-500.BcOmuN7K.css",resourceType:"style",prefetch:true,preload:true},"entry.CKteCcdN.css":u},preload:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"Bzmuhhqm.js",name:"error-500",src:"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"],css:["error-500.BcOmuN7K.css"]},"error-500.BcOmuN7K.css":A,"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"error-500.BcOmuN7K.css":A,"entry.CKteCcdN.css":u}},"error-500.BcOmuN7K.css":{scripts:{},styles:{},preload:{"error-500.BcOmuN7K.css":A},prefetch:{}},"entry.CKteCcdN.css":{scripts:{},styles:{},preload:{"entry.CKteCcdN.css":u},prefetch:{}},"pages/index.vue":{scripts:{},styles:{"entry.CKteCcdN.css":u},preload:{"pages/index.vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"DfJzPSBi.js",name:"pages",src:"pages/index.vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js","_BDNMzG2s.js"]},"_sK9Xse3o.js":h,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"_BDNMzG2s.js":x},prefetch:{"entry.CKteCcdN.css":u}},"pages/skills/[id].vue":{scripts:{},styles:{"entry.CKteCcdN.css":u},preload:{"pages/skills/[id].vue":{resourceType:"script",module:true,prefetch:true,preload:true,file:"EBA28doP.js",name:"_id_",src:"pages/skills/[id].vue",isDynamicEntry:true,imports:["_sK9Xse3o.js","_DJQqUjJu.js","_CMk5jOCS.js","../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js"]},"_sK9Xse3o.js":h,"_DJQqUjJu.js":k,"_BW3xJdEx.js":j,"_CMk5jOCS.js":m,"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":q,"entry.CKteCcdN.css":u},prefetch:{"entry.CKteCcdN.css":u}}},entrypoints:["../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js"],modules:{"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-404.vue":{file:"CJmYvhe6.js",resourceType:"script",mimeType:void 0,module:true},"error-404.1qC5mjOI.css":{file:"error-404.1qC5mjOI.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/components/error-500.vue":{file:"Bzmuhhqm.js",resourceType:"script",mimeType:void 0,module:true},"error-500.BcOmuN7K.css":{file:"error-500.BcOmuN7K.css",resourceType:"style",mimeType:void 0,module:void 0},"../node_modules/.pnpm/nuxt@4.5.2_@babel+plugin-syntax-jsx@7.29.7_@babel+core@7.29.7__@babel+plugin-syntax-typ_fa55ea51c020cff6ad35d86710859083/node_modules/nuxt/dist/app/entry.js":{file:"rWsrwf2L.js",resourceType:"script",mimeType:void 0,module:true,dynamicImports:o},"entry.CKteCcdN.css":{file:"entry.CKteCcdN.css",resourceType:"style",mimeType:void 0,module:void 0},"_BDNMzG2s.js":{file:"BDNMzG2s.js",resourceType:"script",mimeType:void 0,module:true},"_BW3xJdEx.js":{file:"BW3xJdEx.js",resourceType:"script",mimeType:void 0,module:true},"_CMk5jOCS.js":{file:"CMk5jOCS.js",resourceType:"script",mimeType:void 0,module:true},"_DJQqUjJu.js":{file:"DJQqUjJu.js",resourceType:"script",mimeType:void 0,module:true},"_sK9Xse3o.js":{file:"sK9Xse3o.js",resourceType:"script",mimeType:void 0,module:true},"pages/index.vue":{file:"DfJzPSBi.js",resourceType:"script",mimeType:void 0,module:true},"pages/skills/[id].vue":{file:"EBA28doP.js",resourceType:"script",mimeType:void 0,module:true}}}))();
2
2
 
3
3
  export { client_precomputed as default };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shelfware-prod",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
package/README.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  shelfware finds the shelfware in your skill drawers.
4
4
 
5
- A local catalog of the AI-agent skills installed on this machine: every `~/.<tool>/skills` drawer (`~/.claude/skills`, `~/.cursor/skills`, `~/.codex/skills`, `~/.agents/skills`, a custom `~/.claude-work/skills`, …), Cursor plugins, Gemini Antigravity, Hermes profiles, and friends. It scans, lists, searches, renders, **edits**, audits, quarantines, restores, and permanently deletes skills, from a browser tab that only your machine can reach.
5
+ A local catalog of the AI-agent skills installed on this machine: every `~/.<tool>/skills` drawer (`~/.claude/skills`, `~/.cursor/skills`, `~/.codex/skills`, `~/.agents/skills`, a custom `~/.claude-work/skills`, …), the plugin trees beside them (`~/.<tool>/plugins`, split into the installed `cache` and `marketplaces` checkouts where a tool keeps them apart — one `plugins` drawer otherwise), Cursor's own builtin drawer (`~/.cursor/skills-cursor`), Gemini Antigravity, Hermes profiles, and friends. It scans, lists, searches, renders, **edits**, audits, quarantines, restores, and permanently deletes skills, from a browser tab that only your machine can reach.
6
+
7
+ ![shelfware in dark mode: drawers on the left, the card list in the middle, the selected skill with its audit finding on the right](docs/screenshot_dark.png)
8
+
9
+ ![shelfware in light mode](docs/screenshot_light.png)
6
10
 
7
11
  ## Run it
8
12
 
@@ -16,16 +20,16 @@ Node 20 or newer. No build step: the package ships the prebuilt app. For a perma
16
20
 
17
21
  ### First run
18
22
 
19
- Starting shelfware only reads. It walks the hidden directories directly under your home (`$HOME`), skipping caches and toolchains, and picks up every `skills/` (or `skill/`) folder it finds, plus the Cursor, Gemini Antigravity and Hermes locations above. Nothing on disk changes until you quarantine, restore, delete or save a skill yourself.
23
+ Starting shelfware only reads. It walks the hidden directories directly under your home (`$HOME`), skipping caches and toolchains, and picks up every `skills/` (or `skill/`) folder it finds — including skills grouped into sub-folders inside it, such as `~/.codex/skills/.system/<skill>` — plus each tool's `plugins/` tree and the Cursor, Gemini Antigravity and Hermes locations above. Inside a plugin tree only folders named `skills/` (or `skill/`) are read, so a plugin's own README, its `docs/`, and its source outside those folders are never catalogued; inside those folders, familiar repository documents — README, CHANGELOG, LICENCE, CONTRIBUTING, SECURITY and the rest of a short ignore list — are skipped, while any other loose `*.md` still becomes a card. Nothing on disk changes until you quarantine, restore, delete or save a skill yourself.
20
24
 
21
- Skills outside your home directory (project-level `.claude/skills` inside a repository, an arbitrary path) are not scanned in v0.1; a `--root <path>` flag is planned. To scan a different home, run `HOME=/other/home npx shelfware@latest`.
25
+ Skills outside your home directory (project-level `.claude/skills` inside a repository, an arbitrary path) are not scanned; a `--root <path>` flag is planned. To scan a different home, run `HOME=/other/home npx shelfware@latest`.
22
26
 
23
27
  ### Troubleshooting
24
28
 
25
29
  - **`npx shelfware` prints "coming soon".** Your npx cache still holds the `0.0.1` placeholder. Run `npx shelfware@latest` once; npx then caches the real release.
26
30
  - **The browser did not open.** Copy the URL from the `shelfware at http://127.0.0.1:<port>` line, or start with `--no-open` and open it yourself.
27
31
  - **Port in use.** An explicit `--port <n>` that is taken is refused at once with a one-line message; without either the flag or PORT shelfware tries 3781 through 3800. A typo in a flag prints the message and the help text instead of a stack trace.
28
- - **The catalog is empty.** Check that your skills live under `$HOME/.<tool>/skills`; other locations are not scanned yet.
32
+ - **The catalog is empty.** Check that your skills live under `$HOME/.<tool>/skills`, `$HOME/.<tool>/plugins`, or one of the Cursor, Gemini Antigravity or Hermes locations above; other locations are not scanned yet.
29
33
 
30
34
  ## What you get
31
35
 
@@ -42,6 +46,16 @@ Skills outside your home directory (project-level `.claude/skills` inside a repo
42
46
  - No CORS headers, ever. File reads and saves are contained to the skill's directory; symlinks are never followed for destructive actions.
43
47
  - Nothing leaves the machine. There is no network feature.
44
48
 
49
+ ## Security scanners
50
+
51
+ Supply-chain scanners such as Socket.dev raise a few alerts on this package. None of them is shelfware's own code; all come from the prebuilt Nuxt server that ships in `.output/`:
52
+
53
+ - **"Obfuscated code"** in `entities/…/decode-data-html.js`: the HTML entity table of the `entities` library, stored as Base64 and decoded into a `Uint16Array` at load time. Byte-identical to the published `entities` package.
54
+ - **"Dynamic code execution"** in `source-map-js` and the Vue compiler: `new Function` used by a sort routine and by Vue's template compiler. shelfware never compiles templates at runtime (`ssr: false`, no runtime compiler).
55
+ - **"URL strings"**: the Iconify API hosts baked into `@nuxt/icon` (the provider is disabled and every icon is bundled), XML namespaces, documentation links in framework error messages, and file names such as `SKILL.md` that merely contain a dot.
56
+
57
+ The launcher itself uses only Node built-ins, binds `127.0.0.1`, spawns nothing but your browser opener, and has no `preinstall`/`install`/`postinstall` scripts. `pnpm pack:verify` packs and runs the exact tarball through `npx` before every release, refusing to run against a stale build, and releases are published from GitHub Actions with npm provenance.
58
+
45
59
  ## Credits
46
60
 
47
61
  Scanner rules, audit heuristics and the quarantine format are ported from [skill-cabinet](https://github.com/subsy/skill-cabinet) (MIT), whose audit rules were adapted from [Adaptive Skills](https://github.com/wangsoft/Adaptive-Skills) (MIT). shelfware is a rebuild in Nuxt 4 with an editor and a hardened local security model.
@@ -0,0 +1,54 @@
1
+ // Types for bin/launch.mjs. Hand-written: keep every export here in step with the .mjs.
2
+
3
+ export const DEFAULT_PORT: 3781
4
+ export const PORT_ATTEMPTS: 20
5
+ export const HOST: '127.0.0.1'
6
+ export const TOKEN_ENV: 'NUXT_PUBLIC_SHELFWARE_TOKEN'
7
+ export const HELP: string
8
+
9
+ export type Env = Record<string, string | undefined>
10
+
11
+ export interface ParsedArgs {
12
+ help: boolean
13
+ port: number | null
14
+ open: boolean
15
+ }
16
+
17
+ /** The subset of child_process.spawn the launcher relies on, so tests can pass a stub. */
18
+ export type SpawnLike = (
19
+ cmd: string,
20
+ args: string[],
21
+ options: { stdio: 'ignore', detached: true, env: Env },
22
+ ) => { unref?: () => void, on?: (event: 'error', listener: (err: Error) => unknown) => unknown }
23
+
24
+ export interface LaunchOptions {
25
+ argv?: string[]
26
+ env?: Env
27
+ importServer: () => Promise<unknown>
28
+ log?: (line: string) => void
29
+ exit?: (code: number) => unknown
30
+ entry?: string
31
+ spawn?: SpawnLike
32
+ }
33
+
34
+ export function makeToken(): string
35
+ export function parseArgs(argv?: string[], env?: Env): ParsedArgs
36
+ export function portReason(code: string): string
37
+ export function checkPort(port: number, host?: string): Promise<string | null>
38
+ export function isPortFree(port: number, host?: string): Promise<boolean>
39
+ export function pickPort(start?: number, options?: { attempts?: number, host?: string }): Promise<number>
40
+ export function probeHealth(port: number, host?: string): Promise<boolean>
41
+ export function waitForHealth(
42
+ port: number,
43
+ options?: {
44
+ timeoutMs?: number
45
+ intervalMs?: number
46
+ host?: string
47
+ probe?: (port: number, host: string) => Promise<boolean>
48
+ signal?: AbortSignal
49
+ },
50
+ ): Promise<boolean>
51
+ export function openBrowser(url: string, options?: { platform?: string, spawn?: SpawnLike, env?: Env }): { cmd: string, args: string[] }
52
+ export function serverEntry(binDir?: string): string
53
+ export function describeError(err: unknown): string
54
+ export function launch(options: LaunchOptions): Promise<{ port: number, url: string } | null>