@hasna/skills 0.1.13 → 0.1.14

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 (197) hide show
  1. package/bin/index.js +639 -291
  2. package/bin/mcp.js +301 -180
  3. package/dist/index.d.ts +4 -2
  4. package/dist/index.js +190 -2
  5. package/dist/lib/config.d.ts +27 -0
  6. package/dist/lib/config.test.d.ts +1 -0
  7. package/dist/lib/installer.d.ts +25 -0
  8. package/dist/lib/registry.d.ts +4 -0
  9. package/dist/types/api.d.ts +74 -0
  10. package/package.json +5 -2
  11. package/skills/skill-academic-journal-matcher/bin/cli.ts +34 -0
  12. package/skills/skill-action-item-router/bin/cli.ts +34 -0
  13. package/skills/skill-ad-creative-generator/bin/cli.ts +34 -0
  14. package/skills/skill-advanced-math/bin/cli.ts +34 -0
  15. package/skills/skill-analyze-data/bin/cli.ts +19 -0
  16. package/skills/skill-anomaly-investigator/bin/cli.ts +34 -0
  17. package/skills/skill-api-test-suite/bin/cli.ts +34 -0
  18. package/skills/skill-apidocs/bin/cli.ts +87 -0
  19. package/skills/skill-audio-cleanup-lab/bin/cli.ts +6 -0
  20. package/skills/skill-audiobook-chapter-proofer/bin/cli.ts +34 -0
  21. package/skills/skill-banner-ad-suite/bin/cli.ts +34 -0
  22. package/skills/skill-benchmark-finder/bin/cli.ts +34 -0
  23. package/skills/skill-bio-sequence-tool/bin/cli.ts +34 -0
  24. package/skills/skill-blog-topic-cluster/bin/cli.ts +34 -0
  25. package/skills/skill-brand-style-guide/bin/cli.ts +19 -0
  26. package/skills/skill-brand-voice-audit/bin/cli.ts +34 -0
  27. package/skills/skill-budget-variance-analyzer/bin/cli.ts +6 -0
  28. package/skills/skill-businessactivity/bin/cli.ts +28 -0
  29. package/skills/skill-calendar-events/bin/cli.ts +34 -0
  30. package/skills/skill-campaign-metric-brief/bin/cli.ts +34 -0
  31. package/skills/skill-campaign-moodboard/bin/cli.ts +34 -0
  32. package/skills/skill-caption-style-stylist/bin/cli.ts +34 -0
  33. package/skills/skill-chemistry-calculator/bin/cli.ts +34 -0
  34. package/skills/skill-churn-risk-notifier/bin/cli.ts +34 -0
  35. package/skills/skill-citation-formatter/bin/cli.ts +34 -0
  36. package/skills/skill-classroom-newsletter-kit/bin/cli.ts +34 -0
  37. package/skills/skill-color-palette-harmonizer/bin/cli.ts +34 -0
  38. package/skills/skill-competitor-ad-analyzer/bin/cli.ts +34 -0
  39. package/skills/skill-compliance-copy-check/bin/cli.ts +34 -0
  40. package/skills/skill-compliance-report-pack/bin/cli.ts +34 -0
  41. package/skills/skill-compress-video/bin/cli.ts +19 -0
  42. package/skills/skill-consolelog/bin/cli.ts +884 -0
  43. package/skills/skill-contract-plainlanguage/bin/cli.ts +34 -0
  44. package/skills/skill-copytone-translator/bin/cli.ts +34 -0
  45. package/skills/skill-create-blog-article/bin/cli.ts +34 -0
  46. package/skills/skill-create-ebook/bin/cli.ts +34 -0
  47. package/skills/skill-crm-note-enhancer/bin/cli.ts +34 -0
  48. package/skills/skill-customer-journey-mapper/bin/cli.ts +34 -0
  49. package/skills/skill-dashboard-builder/bin/cli.ts +34 -0
  50. package/skills/skill-dashboard-narrator/bin/cli.ts +34 -0
  51. package/skills/skill-data-anonymizer/bin/cli.ts +34 -0
  52. package/skills/skill-database-explorer/bin/cli.ts +34 -0
  53. package/skills/skill-dataset-health-check/bin/cli.ts +34 -0
  54. package/skills/skill-decision-journal/bin/cli.ts +34 -0
  55. package/skills/skill-delegation-brief-writer/bin/cli.ts +34 -0
  56. package/skills/skill-destination-briefing/bin/cli.ts +34 -0
  57. package/skills/skill-diff-viewer/bin/cli.ts +34 -0
  58. package/skills/skill-domainpurchase/SKILL.md +46 -0
  59. package/skills/skill-domainpurchase/bin/cli.ts +683 -0
  60. package/skills/skill-domainsearch/SKILL.md +41 -0
  61. package/skills/skill-domainsearch/bin/cli.ts +410 -0
  62. package/skills/skill-educational-resource-finder/bin/cli.ts +34 -0
  63. package/skills/skill-email-campaign/bin/cli.ts +34 -0
  64. package/skills/skill-exam-readiness-check/bin/cli.ts +34 -0
  65. package/skills/skill-experiment-power-calculator/bin/cli.ts +34 -0
  66. package/skills/skill-extract-audio/bin/cli.ts +19 -0
  67. package/skills/skill-extract-frames/bin/cli.ts +34 -0
  68. package/skills/skill-extract-invoice/bin/cli.ts +34 -0
  69. package/skills/skill-family-activity-curator/bin/cli.ts +34 -0
  70. package/skills/skill-faq-packager/bin/cli.ts +34 -0
  71. package/skills/skill-feedback-survey-designer/bin/cli.ts +34 -0
  72. package/skills/skill-field-trip-planner/bin/cli.ts +34 -0
  73. package/skills/skill-file-organizer/bin/cli.ts +34 -0
  74. package/skills/skill-folder-tree/bin/cli.ts +34 -0
  75. package/skills/skill-forecast-scenario-lab/bin/cli.ts +34 -0
  76. package/skills/skill-form-filler/bin/cli.ts +34 -0
  77. package/skills/skill-generate-api-client/bin/cli.ts +34 -0
  78. package/skills/skill-generate-book-cover/bin/cli.ts +34 -0
  79. package/skills/skill-generate-chart/bin/cli.ts +34 -0
  80. package/skills/skill-generate-diagram/bin/cli.ts +34 -0
  81. package/skills/skill-generate-dockerfile/bin/cli.ts +34 -0
  82. package/skills/skill-generate-documentation/bin/cli.ts +34 -0
  83. package/skills/skill-generate-docx/bin/cli.ts +6 -0
  84. package/skills/skill-generate-env/bin/cli.ts +34 -0
  85. package/skills/skill-generate-excel/bin/cli.ts +34 -0
  86. package/skills/skill-generate-favicon/bin/cli.ts +34 -0
  87. package/skills/skill-generate-mock-data/bin/cli.ts +34 -0
  88. package/skills/skill-generate-pdf/bin/cli.ts +6 -0
  89. package/skills/skill-generate-pr-description/bin/cli.ts +34 -0
  90. package/skills/skill-generate-presentation/bin/cli.ts +34 -0
  91. package/skills/skill-generate-qrcode/bin/cli.ts +34 -0
  92. package/skills/skill-generate-regex/bin/cli.ts +34 -0
  93. package/skills/skill-generate-resume/bin/cli.ts +34 -0
  94. package/skills/skill-generate-sitemap/bin/cli.ts +34 -0
  95. package/skills/skill-generate-social-posts/bin/cli.ts +34 -0
  96. package/skills/skill-generate-sql/bin/cli.ts +34 -0
  97. package/skills/skill-gif-maker/bin/cli.ts +34 -0
  98. package/skills/skill-github-manager/bin/cli.ts +34 -0
  99. package/skills/skill-gmail/bin/cli.ts +34 -0
  100. package/skills/skill-goal-quarterly-roadmap/bin/cli.ts +34 -0
  101. package/skills/skill-grant-application-drafter/bin/cli.ts +34 -0
  102. package/skills/skill-grocery-basket-optimizer/bin/cli.ts +34 -0
  103. package/skills/skill-guest-communication-suite/bin/cli.ts +34 -0
  104. package/skills/skill-habit-reflection-digest/bin/cli.ts +34 -0
  105. package/skills/skill-highlight-reel-generator/bin/cli.ts +34 -0
  106. package/skills/skill-homework-feedback-coach/bin/cli.ts +34 -0
  107. package/skills/skill-hook/bunfig.toml +5 -0
  108. package/skills/skill-household-maintenance-mgr/bin/cli.ts +34 -0
  109. package/skills/skill-http-server/bin/cli.ts +34 -0
  110. package/skills/skill-implementation/bunfig.toml +5 -0
  111. package/skills/skill-implementation-agent/bin/cli.ts +34 -0
  112. package/skills/skill-implementation-plan/bin/cli.ts +34 -0
  113. package/skills/skill-implementation-todo/bin/cli.ts +34 -0
  114. package/skills/skill-inbox-priority-planner/bin/cli.ts +34 -0
  115. package/skills/skill-invoice/bin/cli.ts +20 -0
  116. package/skills/skill-invoice-dispute-helper/bin/cli.ts +34 -0
  117. package/skills/skill-itinerary-architect/bin/cli.ts +34 -0
  118. package/skills/skill-jingle-composer/bin/cli.ts +34 -0
  119. package/skills/skill-kpi-digest-generator/bin/cli.ts +34 -0
  120. package/skills/skill-lab-notebook-formatter/bin/cli.ts +34 -0
  121. package/skills/skill-landing-page-copy/bin/cli.ts +34 -0
  122. package/skills/skill-latex-table-generator/bin/cli.ts +34 -0
  123. package/skills/skill-learning-style-profiler/bin/cli.ts +34 -0
  124. package/skills/skill-lesson-plan-customizer/bin/cli.ts +34 -0
  125. package/skills/skill-livestream-runofshow/bin/cli.ts +34 -0
  126. package/skills/skill-longform-structurer/bin/cli.ts +34 -0
  127. package/skills/skill-lorem-generator/bin/cli.ts +34 -0
  128. package/skills/skill-managehook/bin/cli.ts +241 -0
  129. package/skills/skill-managemcp/bin/cli.ts +241 -0
  130. package/skills/skill-manageskill/bin/cli.ts +241 -0
  131. package/skills/skill-markdown-validator/bin/cli.ts +34 -0
  132. package/skills/skill-mcp-builder/bin/cli.ts +34 -0
  133. package/skills/skill-meal-plan-designer/bin/cli.ts +34 -0
  134. package/skills/skill-meeting-insight-summarizer/bin/cli.ts +34 -0
  135. package/skills/skill-merge-pdfs/bin/cli.ts +34 -0
  136. package/skills/skill-microcopy-generator/bin/cli.ts +34 -0
  137. package/skills/skill-mindfulness-prompt-cache/bin/cli.ts +34 -0
  138. package/skills/skill-notion-manager/bin/cli.ts +34 -0
  139. package/skills/skill-onboarding-sequence-builder/bin/cli.ts +34 -0
  140. package/skills/skill-onsite-ops-checklist/bin/cli.ts +34 -0
  141. package/skills/skill-outreach-cadence-designer/bin/cli.ts +34 -0
  142. package/skills/skill-packaging-concept-studio/bin/cli.ts +34 -0
  143. package/skills/skill-packing-plan-pro/bin/cli.ts +34 -0
  144. package/skills/skill-parent-teacher-brief/bin/cli.ts +34 -0
  145. package/skills/skill-partner-kit-assembler/bin/cli.ts +34 -0
  146. package/skills/skill-payroll-change-prepper/bin/cli.ts +34 -0
  147. package/skills/skill-persona-based-adwriter/bin/cli.ts +34 -0
  148. package/skills/skill-persona-generator/bin/cli.ts +34 -0
  149. package/skills/skill-personal-daily-ops/bin/cli.ts +34 -0
  150. package/skills/skill-pet-care-scheduler/bin/cli.ts +34 -0
  151. package/skills/skill-podcast-show-notes/bin/cli.ts +34 -0
  152. package/skills/skill-presentation-theme-maker/bin/cli.ts +34 -0
  153. package/skills/skill-press-release-drafter/bin/cli.ts +34 -0
  154. package/skills/skill-print-collateral-designer/bin/cli.ts +34 -0
  155. package/skills/skill-procurement-scorecard/bin/cli.ts +34 -0
  156. package/skills/skill-product-demo-script/bin/cli.ts +34 -0
  157. package/skills/skill-product-mockup/bin/cli.ts +34 -0
  158. package/skills/skill-project-retro-companion/bin/cli.ts +34 -0
  159. package/skills/skill-proposal-redline-advisor/bin/cli.ts +34 -0
  160. package/skills/skill-regex-tester/bin/cli.ts +34 -0
  161. package/skills/skill-remove-background/bin/cli.ts +34 -0
  162. package/skills/skill-risk-disclosure-kit/bin/cli.ts +34 -0
  163. package/skills/skill-roi-comparison-tool/bin/cli.ts +34 -0
  164. package/skills/skill-sales-call-recapper/bin/cli.ts +34 -0
  165. package/skills/skill-salescopy/bin/cli.ts +20 -0
  166. package/skills/skill-scaffold-project/bin/cli.ts +34 -0
  167. package/skills/skill-scholarship-tracker/bin/cli.ts +34 -0
  168. package/skills/skill-scientific-figure-check/bin/cli.ts +34 -0
  169. package/skills/skill-seating-chart-maker/bin/cli.ts +34 -0
  170. package/skills/skill-security-audit/bin/cli.ts +34 -0
  171. package/skills/skill-seo-brief-builder/bin/cli.ts +34 -0
  172. package/skills/skill-slack-assistant/bin/cli.ts +34 -0
  173. package/skills/skill-sleep-routine-analyzer/bin/cli.ts +34 -0
  174. package/skills/skill-social-media-kit/bin/cli.ts +34 -0
  175. package/skills/skill-split-pdf/bin/cli.ts +34 -0
  176. package/skills/skill-sponsorship-proposal-lab/bin/cli.ts +34 -0
  177. package/skills/skill-spreadsheet-cleanroom/bin/cli.ts +34 -0
  178. package/skills/skill-statistical-test-selector/bin/cli.ts +34 -0
  179. package/skills/skill-stress-relief-playbook/bin/cli.ts +34 -0
  180. package/skills/skill-study-guide-builder/bin/cli.ts +34 -0
  181. package/skills/skill-subscription-spend-watcher/bin/cli.ts +34 -0
  182. package/skills/skill-subtitle/bin/cli.ts +20 -0
  183. package/skills/skill-survey-insight-extractor/bin/cli.ts +34 -0
  184. package/skills/skill-terraform-generator/bin/cli.ts +34 -0
  185. package/skills/skill-testimonial-graphics/bin/cli.ts +34 -0
  186. package/skills/skill-timesheet/bin/cli.ts +47 -0
  187. package/skills/skill-travel-budget-balancer/bin/cli.ts +34 -0
  188. package/skills/skill-validate-config/bin/cli.ts +34 -0
  189. package/skills/skill-video-cut-suggester/bin/cli.ts +34 -0
  190. package/skills/skill-video-downloader/bin/cli.ts +34 -0
  191. package/skills/skill-video-thumbnail/bin/cli.ts +34 -0
  192. package/skills/skill-voiceover-casting-assistant/bin/cli.ts +34 -0
  193. package/skills/skill-watermark/bin/cli.ts +34 -0
  194. package/skills/skill-webcrawling/bin/cli.ts +21 -0
  195. package/skills/skill-webinar-script-coach/bin/cli.ts +34 -0
  196. package/skills/skill-wellness-progress-reporter/bin/cli.ts +34 -0
  197. package/skills/skill-workout-cycle-planner/bin/cli.ts +34 -0
package/bin/mcp.js CHANGED
@@ -5,25 +5,43 @@ var __getProtoOf = Object.getPrototypeOf;
5
5
  var __defProp = Object.defineProperty;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ function __accessProp(key) {
9
+ return this[key];
10
+ }
11
+ var __toESMCache_node;
12
+ var __toESMCache_esm;
8
13
  var __toESM = (mod, isNodeMode, target) => {
14
+ var canCache = mod != null && typeof mod === "object";
15
+ if (canCache) {
16
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
+ var cached = cache.get(mod);
18
+ if (cached)
19
+ return cached;
20
+ }
9
21
  target = mod != null ? __create(__getProtoOf(mod)) : {};
10
22
  const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
23
  for (let key of __getOwnPropNames(mod))
12
24
  if (!__hasOwnProp.call(to, key))
13
25
  __defProp(to, key, {
14
- get: () => mod[key],
26
+ get: __accessProp.bind(mod, key),
15
27
  enumerable: true
16
28
  });
29
+ if (canCache)
30
+ cache.set(mod, to);
17
31
  return to;
18
32
  };
19
33
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
34
+ var __returnValue = (v) => v;
35
+ function __exportSetter(name, newValue) {
36
+ this[name] = __returnValue.bind(null, newValue);
37
+ }
20
38
  var __export = (target, all) => {
21
39
  for (var name in all)
22
40
  __defProp(target, name, {
23
41
  get: all[name],
24
42
  enumerable: true,
25
43
  configurable: true,
26
- set: (newValue) => all[name] = () => newValue
44
+ set: __exportSetter.bind(all, name)
27
45
  });
28
46
  };
29
47
 
@@ -6277,7 +6295,7 @@ var require_formats = __commonJS((exports) => {
6277
6295
  }
6278
6296
  var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;
6279
6297
  function getTime(strictTimeZone) {
6280
- return function time(str) {
6298
+ return function time3(str) {
6281
6299
  const matches = TIME.exec(str);
6282
6300
  if (!matches)
6283
6301
  return false;
@@ -6490,7 +6508,7 @@ var require_dist = __commonJS((exports, module) => {
6490
6508
  exports.default = formatsPlugin;
6491
6509
  });
6492
6510
 
6493
- // node_modules/zod/v3/helpers/util.js
6511
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/helpers/util.js
6494
6512
  var util;
6495
6513
  (function(util2) {
6496
6514
  util2.assertEqual = (_) => {};
@@ -6621,7 +6639,7 @@ var getParsedType = (data) => {
6621
6639
  }
6622
6640
  };
6623
6641
 
6624
- // node_modules/zod/v3/ZodError.js
6642
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/ZodError.js
6625
6643
  var ZodIssueCode = util.arrayToEnum([
6626
6644
  "invalid_type",
6627
6645
  "invalid_literal",
@@ -6735,7 +6753,7 @@ ZodError.create = (issues) => {
6735
6753
  return error;
6736
6754
  };
6737
6755
 
6738
- // node_modules/zod/v3/locales/en.js
6756
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/locales/en.js
6739
6757
  var errorMap = (issue, _ctx) => {
6740
6758
  let message;
6741
6759
  switch (issue.code) {
@@ -6838,13 +6856,13 @@ var errorMap = (issue, _ctx) => {
6838
6856
  };
6839
6857
  var en_default = errorMap;
6840
6858
 
6841
- // node_modules/zod/v3/errors.js
6859
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/errors.js
6842
6860
  var overrideErrorMap = en_default;
6843
6861
  function getErrorMap() {
6844
6862
  return overrideErrorMap;
6845
6863
  }
6846
6864
 
6847
- // node_modules/zod/v3/helpers/parseUtil.js
6865
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/helpers/parseUtil.js
6848
6866
  var makeIssue = (params) => {
6849
6867
  const { data, path, errorMaps, issueData } = params;
6850
6868
  const fullPath = [...path, ...issueData.path || []];
@@ -6950,14 +6968,14 @@ var isDirty = (x) => x.status === "dirty";
6950
6968
  var isValid = (x) => x.status === "valid";
6951
6969
  var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
6952
6970
 
6953
- // node_modules/zod/v3/helpers/errorUtil.js
6971
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/helpers/errorUtil.js
6954
6972
  var errorUtil;
6955
6973
  (function(errorUtil2) {
6956
6974
  errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
6957
6975
  errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message;
6958
6976
  })(errorUtil || (errorUtil = {}));
6959
6977
 
6960
- // node_modules/zod/v3/types.js
6978
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v3/types.js
6961
6979
  class ParseInputLazyPath {
6962
6980
  constructor(parent, value, path, key) {
6963
6981
  this._cachedPath = [];
@@ -10301,7 +10319,7 @@ var nullableType = ZodNullable.create;
10301
10319
  var preprocessType = ZodEffects.createWithPreprocess;
10302
10320
  var pipelineType = ZodPipeline.create;
10303
10321
 
10304
- // node_modules/zod/v4/core/index.js
10322
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js
10305
10323
  var exports_core2 = {};
10306
10324
  __export(exports_core2, {
10307
10325
  version: () => version,
@@ -10579,7 +10597,7 @@ __export(exports_core2, {
10579
10597
  $ZodAny: () => $ZodAny
10580
10598
  });
10581
10599
 
10582
- // node_modules/zod/v4/core/core.js
10600
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js
10583
10601
  var NEVER = Object.freeze({
10584
10602
  status: "aborted"
10585
10603
  });
@@ -10655,7 +10673,7 @@ function config(newConfig) {
10655
10673
  Object.assign(globalConfig, newConfig);
10656
10674
  return globalConfig;
10657
10675
  }
10658
- // node_modules/zod/v4/core/util.js
10676
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js
10659
10677
  var exports_util = {};
10660
10678
  __export(exports_util, {
10661
10679
  unwrapMessage: () => unwrapMessage,
@@ -11329,7 +11347,7 @@ class Class {
11329
11347
  constructor(..._args) {}
11330
11348
  }
11331
11349
 
11332
- // node_modules/zod/v4/core/errors.js
11350
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js
11333
11351
  var initializer = (inst, def) => {
11334
11352
  inst.name = "$ZodError";
11335
11353
  Object.defineProperty(inst, "_zod", {
@@ -11466,7 +11484,7 @@ function prettifyError(error) {
11466
11484
  `);
11467
11485
  }
11468
11486
 
11469
- // node_modules/zod/v4/core/parse.js
11487
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js
11470
11488
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
11471
11489
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
11472
11490
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -11553,7 +11571,7 @@ var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
11553
11571
  return _safeParseAsync(_Err)(schema, value, _ctx);
11554
11572
  };
11555
11573
  var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
11556
- // node_modules/zod/v4/core/regexes.js
11574
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js
11557
11575
  var exports_regexes = {};
11558
11576
  __export(exports_regexes, {
11559
11577
  xid: () => xid,
@@ -11710,7 +11728,7 @@ var sha512_hex = /^[0-9a-fA-F]{128}$/;
11710
11728
  var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
11711
11729
  var sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
11712
11730
 
11713
- // node_modules/zod/v4/core/checks.js
11731
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js
11714
11732
  var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
11715
11733
  var _a;
11716
11734
  inst._zod ?? (inst._zod = {});
@@ -12257,7 +12275,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
12257
12275
  };
12258
12276
  });
12259
12277
 
12260
- // node_modules/zod/v4/core/doc.js
12278
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js
12261
12279
  class Doc {
12262
12280
  constructor(args = []) {
12263
12281
  this.content = [];
@@ -12295,14 +12313,14 @@ class Doc {
12295
12313
  }
12296
12314
  }
12297
12315
 
12298
- // node_modules/zod/v4/core/versions.js
12316
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js
12299
12317
  var version = {
12300
12318
  major: 4,
12301
12319
  minor: 3,
12302
12320
  patch: 6
12303
12321
  };
12304
12322
 
12305
- // node_modules/zod/v4/core/schemas.js
12323
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js
12306
12324
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
12307
12325
  var _a;
12308
12326
  inst ?? (inst = {});
@@ -14264,7 +14282,7 @@ function handleRefineResult(result, payload, input, inst) {
14264
14282
  payload.issues.push(issue(_iss));
14265
14283
  }
14266
14284
  }
14267
- // node_modules/zod/v4/locales/index.js
14285
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js
14268
14286
  var exports_locales = {};
14269
14287
  __export(exports_locales, {
14270
14288
  zhTW: () => zh_TW_default,
@@ -14318,7 +14336,7 @@ __export(exports_locales, {
14318
14336
  ar: () => ar_default
14319
14337
  });
14320
14338
 
14321
- // node_modules/zod/v4/locales/ar.js
14339
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js
14322
14340
  var error = () => {
14323
14341
  const Sizable = {
14324
14342
  string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
@@ -14424,7 +14442,7 @@ function ar_default() {
14424
14442
  localeError: error()
14425
14443
  };
14426
14444
  }
14427
- // node_modules/zod/v4/locales/az.js
14445
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js
14428
14446
  var error2 = () => {
14429
14447
  const Sizable = {
14430
14448
  string: { unit: "simvol", verb: "olmal\u0131d\u0131r" },
@@ -14529,7 +14547,7 @@ function az_default() {
14529
14547
  localeError: error2()
14530
14548
  };
14531
14549
  }
14532
- // node_modules/zod/v4/locales/be.js
14550
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js
14533
14551
  function getBelarusianPlural(count, one, few, many) {
14534
14552
  const absCount = Math.abs(count);
14535
14553
  const lastDigit = absCount % 10;
@@ -14685,7 +14703,7 @@ function be_default() {
14685
14703
  localeError: error3()
14686
14704
  };
14687
14705
  }
14688
- // node_modules/zod/v4/locales/bg.js
14706
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js
14689
14707
  var error4 = () => {
14690
14708
  const Sizable = {
14691
14709
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
@@ -14805,7 +14823,7 @@ function bg_default() {
14805
14823
  localeError: error4()
14806
14824
  };
14807
14825
  }
14808
- // node_modules/zod/v4/locales/ca.js
14826
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js
14809
14827
  var error5 = () => {
14810
14828
  const Sizable = {
14811
14829
  string: { unit: "car\xE0cters", verb: "contenir" },
@@ -14912,7 +14930,7 @@ function ca_default() {
14912
14930
  localeError: error5()
14913
14931
  };
14914
14932
  }
14915
- // node_modules/zod/v4/locales/cs.js
14933
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js
14916
14934
  var error6 = () => {
14917
14935
  const Sizable = {
14918
14936
  string: { unit: "znak\u016F", verb: "m\xEDt" },
@@ -15023,7 +15041,7 @@ function cs_default() {
15023
15041
  localeError: error6()
15024
15042
  };
15025
15043
  }
15026
- // node_modules/zod/v4/locales/da.js
15044
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js
15027
15045
  var error7 = () => {
15028
15046
  const Sizable = {
15029
15047
  string: { unit: "tegn", verb: "havde" },
@@ -15138,7 +15156,7 @@ function da_default() {
15138
15156
  localeError: error7()
15139
15157
  };
15140
15158
  }
15141
- // node_modules/zod/v4/locales/de.js
15159
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js
15142
15160
  var error8 = () => {
15143
15161
  const Sizable = {
15144
15162
  string: { unit: "Zeichen", verb: "zu haben" },
@@ -15246,7 +15264,7 @@ function de_default() {
15246
15264
  localeError: error8()
15247
15265
  };
15248
15266
  }
15249
- // node_modules/zod/v4/locales/en.js
15267
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js
15250
15268
  var error9 = () => {
15251
15269
  const Sizable = {
15252
15270
  string: { unit: "characters", verb: "to have" },
@@ -15352,7 +15370,7 @@ function en_default2() {
15352
15370
  localeError: error9()
15353
15371
  };
15354
15372
  }
15355
- // node_modules/zod/v4/locales/eo.js
15373
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js
15356
15374
  var error10 = () => {
15357
15375
  const Sizable = {
15358
15376
  string: { unit: "karaktrojn", verb: "havi" },
@@ -15461,7 +15479,7 @@ function eo_default() {
15461
15479
  localeError: error10()
15462
15480
  };
15463
15481
  }
15464
- // node_modules/zod/v4/locales/es.js
15482
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js
15465
15483
  var error11 = () => {
15466
15484
  const Sizable = {
15467
15485
  string: { unit: "caracteres", verb: "tener" },
@@ -15593,7 +15611,7 @@ function es_default() {
15593
15611
  localeError: error11()
15594
15612
  };
15595
15613
  }
15596
- // node_modules/zod/v4/locales/fa.js
15614
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js
15597
15615
  var error12 = () => {
15598
15616
  const Sizable = {
15599
15617
  string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
@@ -15707,7 +15725,7 @@ function fa_default() {
15707
15725
  localeError: error12()
15708
15726
  };
15709
15727
  }
15710
- // node_modules/zod/v4/locales/fi.js
15728
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js
15711
15729
  var error13 = () => {
15712
15730
  const Sizable = {
15713
15731
  string: { unit: "merkki\xE4", subject: "merkkijonon" },
@@ -15819,7 +15837,7 @@ function fi_default() {
15819
15837
  localeError: error13()
15820
15838
  };
15821
15839
  }
15822
- // node_modules/zod/v4/locales/fr.js
15840
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js
15823
15841
  var error14 = () => {
15824
15842
  const Sizable = {
15825
15843
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -15927,7 +15945,7 @@ function fr_default() {
15927
15945
  localeError: error14()
15928
15946
  };
15929
15947
  }
15930
- // node_modules/zod/v4/locales/fr-CA.js
15948
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js
15931
15949
  var error15 = () => {
15932
15950
  const Sizable = {
15933
15951
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -16034,7 +16052,7 @@ function fr_CA_default() {
16034
16052
  localeError: error15()
16035
16053
  };
16036
16054
  }
16037
- // node_modules/zod/v4/locales/he.js
16055
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js
16038
16056
  var error16 = () => {
16039
16057
  const TypeNames = {
16040
16058
  string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" },
@@ -16227,7 +16245,7 @@ function he_default() {
16227
16245
  localeError: error16()
16228
16246
  };
16229
16247
  }
16230
- // node_modules/zod/v4/locales/hu.js
16248
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js
16231
16249
  var error17 = () => {
16232
16250
  const Sizable = {
16233
16251
  string: { unit: "karakter", verb: "legyen" },
@@ -16335,7 +16353,7 @@ function hu_default() {
16335
16353
  localeError: error17()
16336
16354
  };
16337
16355
  }
16338
- // node_modules/zod/v4/locales/hy.js
16356
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js
16339
16357
  function getArmenianPlural(count, one, many) {
16340
16358
  return Math.abs(count) === 1 ? one : many;
16341
16359
  }
@@ -16482,7 +16500,7 @@ function hy_default() {
16482
16500
  localeError: error18()
16483
16501
  };
16484
16502
  }
16485
- // node_modules/zod/v4/locales/id.js
16503
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js
16486
16504
  var error19 = () => {
16487
16505
  const Sizable = {
16488
16506
  string: { unit: "karakter", verb: "memiliki" },
@@ -16588,7 +16606,7 @@ function id_default() {
16588
16606
  localeError: error19()
16589
16607
  };
16590
16608
  }
16591
- // node_modules/zod/v4/locales/is.js
16609
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js
16592
16610
  var error20 = () => {
16593
16611
  const Sizable = {
16594
16612
  string: { unit: "stafi", verb: "a\xF0 hafa" },
@@ -16697,7 +16715,7 @@ function is_default() {
16697
16715
  localeError: error20()
16698
16716
  };
16699
16717
  }
16700
- // node_modules/zod/v4/locales/it.js
16718
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js
16701
16719
  var error21 = () => {
16702
16720
  const Sizable = {
16703
16721
  string: { unit: "caratteri", verb: "avere" },
@@ -16805,7 +16823,7 @@ function it_default() {
16805
16823
  localeError: error21()
16806
16824
  };
16807
16825
  }
16808
- // node_modules/zod/v4/locales/ja.js
16826
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js
16809
16827
  var error22 = () => {
16810
16828
  const Sizable = {
16811
16829
  string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
@@ -16912,7 +16930,7 @@ function ja_default() {
16912
16930
  localeError: error22()
16913
16931
  };
16914
16932
  }
16915
- // node_modules/zod/v4/locales/ka.js
16933
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js
16916
16934
  var error23 = () => {
16917
16935
  const Sizable = {
16918
16936
  string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
@@ -17024,7 +17042,7 @@ function ka_default() {
17024
17042
  localeError: error23()
17025
17043
  };
17026
17044
  }
17027
- // node_modules/zod/v4/locales/km.js
17045
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js
17028
17046
  var error24 = () => {
17029
17047
  const Sizable = {
17030
17048
  string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
@@ -17135,11 +17153,11 @@ function km_default() {
17135
17153
  };
17136
17154
  }
17137
17155
 
17138
- // node_modules/zod/v4/locales/kh.js
17156
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js
17139
17157
  function kh_default() {
17140
17158
  return km_default();
17141
17159
  }
17142
- // node_modules/zod/v4/locales/ko.js
17160
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js
17143
17161
  var error25 = () => {
17144
17162
  const Sizable = {
17145
17163
  string: { unit: "\uBB38\uC790", verb: "to have" },
@@ -17250,7 +17268,7 @@ function ko_default() {
17250
17268
  localeError: error25()
17251
17269
  };
17252
17270
  }
17253
- // node_modules/zod/v4/locales/lt.js
17271
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js
17254
17272
  var capitalizeFirstCharacter = (text) => {
17255
17273
  return text.charAt(0).toUpperCase() + text.slice(1);
17256
17274
  };
@@ -17453,7 +17471,7 @@ function lt_default() {
17453
17471
  localeError: error26()
17454
17472
  };
17455
17473
  }
17456
- // node_modules/zod/v4/locales/mk.js
17474
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js
17457
17475
  var error27 = () => {
17458
17476
  const Sizable = {
17459
17477
  string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
@@ -17562,7 +17580,7 @@ function mk_default() {
17562
17580
  localeError: error27()
17563
17581
  };
17564
17582
  }
17565
- // node_modules/zod/v4/locales/ms.js
17583
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js
17566
17584
  var error28 = () => {
17567
17585
  const Sizable = {
17568
17586
  string: { unit: "aksara", verb: "mempunyai" },
@@ -17669,7 +17687,7 @@ function ms_default() {
17669
17687
  localeError: error28()
17670
17688
  };
17671
17689
  }
17672
- // node_modules/zod/v4/locales/nl.js
17690
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js
17673
17691
  var error29 = () => {
17674
17692
  const Sizable = {
17675
17693
  string: { unit: "tekens", verb: "heeft" },
@@ -17779,7 +17797,7 @@ function nl_default() {
17779
17797
  localeError: error29()
17780
17798
  };
17781
17799
  }
17782
- // node_modules/zod/v4/locales/no.js
17800
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js
17783
17801
  var error30 = () => {
17784
17802
  const Sizable = {
17785
17803
  string: { unit: "tegn", verb: "\xE5 ha" },
@@ -17887,7 +17905,7 @@ function no_default() {
17887
17905
  localeError: error30()
17888
17906
  };
17889
17907
  }
17890
- // node_modules/zod/v4/locales/ota.js
17908
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js
17891
17909
  var error31 = () => {
17892
17910
  const Sizable = {
17893
17911
  string: { unit: "harf", verb: "olmal\u0131d\u0131r" },
@@ -17996,7 +18014,7 @@ function ota_default() {
17996
18014
  localeError: error31()
17997
18015
  };
17998
18016
  }
17999
- // node_modules/zod/v4/locales/ps.js
18017
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js
18000
18018
  var error32 = () => {
18001
18019
  const Sizable = {
18002
18020
  string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
@@ -18110,7 +18128,7 @@ function ps_default() {
18110
18128
  localeError: error32()
18111
18129
  };
18112
18130
  }
18113
- // node_modules/zod/v4/locales/pl.js
18131
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js
18114
18132
  var error33 = () => {
18115
18133
  const Sizable = {
18116
18134
  string: { unit: "znak\xF3w", verb: "mie\u0107" },
@@ -18219,7 +18237,7 @@ function pl_default() {
18219
18237
  localeError: error33()
18220
18238
  };
18221
18239
  }
18222
- // node_modules/zod/v4/locales/pt.js
18240
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js
18223
18241
  var error34 = () => {
18224
18242
  const Sizable = {
18225
18243
  string: { unit: "caracteres", verb: "ter" },
@@ -18327,7 +18345,7 @@ function pt_default() {
18327
18345
  localeError: error34()
18328
18346
  };
18329
18347
  }
18330
- // node_modules/zod/v4/locales/ru.js
18348
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js
18331
18349
  function getRussianPlural(count, one, few, many) {
18332
18350
  const absCount = Math.abs(count);
18333
18351
  const lastDigit = absCount % 10;
@@ -18483,7 +18501,7 @@ function ru_default() {
18483
18501
  localeError: error35()
18484
18502
  };
18485
18503
  }
18486
- // node_modules/zod/v4/locales/sl.js
18504
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js
18487
18505
  var error36 = () => {
18488
18506
  const Sizable = {
18489
18507
  string: { unit: "znakov", verb: "imeti" },
@@ -18592,7 +18610,7 @@ function sl_default() {
18592
18610
  localeError: error36()
18593
18611
  };
18594
18612
  }
18595
- // node_modules/zod/v4/locales/sv.js
18613
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js
18596
18614
  var error37 = () => {
18597
18615
  const Sizable = {
18598
18616
  string: { unit: "tecken", verb: "att ha" },
@@ -18702,7 +18720,7 @@ function sv_default() {
18702
18720
  localeError: error37()
18703
18721
  };
18704
18722
  }
18705
- // node_modules/zod/v4/locales/ta.js
18723
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js
18706
18724
  var error38 = () => {
18707
18725
  const Sizable = {
18708
18726
  string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" },
@@ -18812,7 +18830,7 @@ function ta_default() {
18812
18830
  localeError: error38()
18813
18831
  };
18814
18832
  }
18815
- // node_modules/zod/v4/locales/th.js
18833
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js
18816
18834
  var error39 = () => {
18817
18835
  const Sizable = {
18818
18836
  string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
@@ -18922,7 +18940,7 @@ function th_default() {
18922
18940
  localeError: error39()
18923
18941
  };
18924
18942
  }
18925
- // node_modules/zod/v4/locales/tr.js
18943
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js
18926
18944
  var error40 = () => {
18927
18945
  const Sizable = {
18928
18946
  string: { unit: "karakter", verb: "olmal\u0131" },
@@ -19027,7 +19045,7 @@ function tr_default() {
19027
19045
  localeError: error40()
19028
19046
  };
19029
19047
  }
19030
- // node_modules/zod/v4/locales/uk.js
19048
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js
19031
19049
  var error41 = () => {
19032
19050
  const Sizable = {
19033
19051
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
@@ -19136,11 +19154,11 @@ function uk_default() {
19136
19154
  };
19137
19155
  }
19138
19156
 
19139
- // node_modules/zod/v4/locales/ua.js
19157
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js
19140
19158
  function ua_default() {
19141
19159
  return uk_default();
19142
19160
  }
19143
- // node_modules/zod/v4/locales/ur.js
19161
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js
19144
19162
  var error42 = () => {
19145
19163
  const Sizable = {
19146
19164
  string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" },
@@ -19250,7 +19268,7 @@ function ur_default() {
19250
19268
  localeError: error42()
19251
19269
  };
19252
19270
  }
19253
- // node_modules/zod/v4/locales/uz.js
19271
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js
19254
19272
  var error43 = () => {
19255
19273
  const Sizable = {
19256
19274
  string: { unit: "belgi", verb: "bo\u2018lishi kerak" },
@@ -19359,7 +19377,7 @@ function uz_default() {
19359
19377
  localeError: error43()
19360
19378
  };
19361
19379
  }
19362
- // node_modules/zod/v4/locales/vi.js
19380
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js
19363
19381
  var error44 = () => {
19364
19382
  const Sizable = {
19365
19383
  string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" },
@@ -19467,7 +19485,7 @@ function vi_default() {
19467
19485
  localeError: error44()
19468
19486
  };
19469
19487
  }
19470
- // node_modules/zod/v4/locales/zh-CN.js
19488
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js
19471
19489
  var error45 = () => {
19472
19490
  const Sizable = {
19473
19491
  string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" },
@@ -19576,7 +19594,7 @@ function zh_CN_default() {
19576
19594
  localeError: error45()
19577
19595
  };
19578
19596
  }
19579
- // node_modules/zod/v4/locales/zh-TW.js
19597
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js
19580
19598
  var error46 = () => {
19581
19599
  const Sizable = {
19582
19600
  string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" },
@@ -19683,7 +19701,7 @@ function zh_TW_default() {
19683
19701
  localeError: error46()
19684
19702
  };
19685
19703
  }
19686
- // node_modules/zod/v4/locales/yo.js
19704
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js
19687
19705
  var error47 = () => {
19688
19706
  const Sizable = {
19689
19707
  string: { unit: "\xE0mi", verb: "n\xED" },
@@ -19790,7 +19808,7 @@ function yo_default() {
19790
19808
  localeError: error47()
19791
19809
  };
19792
19810
  }
19793
- // node_modules/zod/v4/core/registries.js
19811
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js
19794
19812
  var _a;
19795
19813
  var $output = Symbol("ZodOutput");
19796
19814
  var $input = Symbol("ZodInput");
@@ -19840,7 +19858,7 @@ function registry() {
19840
19858
  }
19841
19859
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
19842
19860
  var globalRegistry = globalThis.__zod_globalRegistry;
19843
- // node_modules/zod/v4/core/api.js
19861
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js
19844
19862
  function _string(Class2, params) {
19845
19863
  return new Class2({
19846
19864
  type: "string",
@@ -20760,7 +20778,7 @@ function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
20760
20778
  const inst = new Class2(def);
20761
20779
  return inst;
20762
20780
  }
20763
- // node_modules/zod/v4/core/to-json-schema.js
20781
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
20764
20782
  function initializeContext(params) {
20765
20783
  let target = params?.target ?? "draft-2020-12";
20766
20784
  if (target === "draft-4")
@@ -21105,7 +21123,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) =
21105
21123
  extractDefs(ctx, schema);
21106
21124
  return finalize(ctx, schema);
21107
21125
  };
21108
- // node_modules/zod/v4/core/json-schema-processors.js
21126
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
21109
21127
  var formatMap = {
21110
21128
  guid: "uuid",
21111
21129
  url: "uri",
@@ -21650,7 +21668,7 @@ function toJSONSchema(input, params) {
21650
21668
  extractDefs(ctx, input);
21651
21669
  return finalize(ctx, input);
21652
21670
  }
21653
- // node_modules/zod/v4/core/json-schema-generator.js
21671
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js
21654
21672
  class JSONSchemaGenerator {
21655
21673
  get metadataRegistry() {
21656
21674
  return this.ctx.metadataRegistry;
@@ -21709,9 +21727,9 @@ class JSONSchemaGenerator {
21709
21727
  return plainResult;
21710
21728
  }
21711
21729
  }
21712
- // node_modules/zod/v4/core/json-schema.js
21730
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js
21713
21731
  var exports_json_schema = {};
21714
- // node_modules/zod/v4/mini/schemas.js
21732
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/mini/schemas.js
21715
21733
  var ZodMiniType = /* @__PURE__ */ $constructor("ZodMiniType", (inst, def) => {
21716
21734
  if (!inst._zod)
21717
21735
  throw new Error("Uninitialized schema in ZodMiniType.");
@@ -21897,7 +21915,7 @@ function getLiteralValue(schema) {
21897
21915
  return;
21898
21916
  }
21899
21917
 
21900
- // node_modules/zod/v4/classic/external.js
21918
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js
21901
21919
  var exports_external = {};
21902
21920
  __export(exports_external, {
21903
21921
  xor: () => xor,
@@ -22138,7 +22156,7 @@ __export(exports_external, {
22138
22156
  $brand: () => $brand
22139
22157
  });
22140
22158
 
22141
- // node_modules/zod/v4/classic/schemas.js
22159
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
22142
22160
  var exports_schemas2 = {};
22143
22161
  __export(exports_schemas2, {
22144
22162
  xor: () => xor,
@@ -22307,7 +22325,7 @@ __export(exports_schemas2, {
22307
22325
  ZodAny: () => ZodAny2
22308
22326
  });
22309
22327
 
22310
- // node_modules/zod/v4/classic/checks.js
22328
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js
22311
22329
  var exports_checks2 = {};
22312
22330
  __export(exports_checks2, {
22313
22331
  uppercase: () => _uppercase,
@@ -22341,7 +22359,7 @@ __export(exports_checks2, {
22341
22359
  endsWith: () => _endsWith
22342
22360
  });
22343
22361
 
22344
- // node_modules/zod/v4/classic/iso.js
22362
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js
22345
22363
  var exports_iso2 = {};
22346
22364
  __export(exports_iso2, {
22347
22365
  time: () => time2,
@@ -22382,7 +22400,7 @@ function duration2(params) {
22382
22400
  return _isoDuration(ZodISODuration, params);
22383
22401
  }
22384
22402
 
22385
- // node_modules/zod/v4/classic/errors.js
22403
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js
22386
22404
  var initializer2 = (inst, issues) => {
22387
22405
  $ZodError.init(inst, issues);
22388
22406
  inst.name = "ZodError";
@@ -22417,7 +22435,7 @@ var ZodRealError = $constructor("ZodError", initializer2, {
22417
22435
  Parent: Error
22418
22436
  });
22419
22437
 
22420
- // node_modules/zod/v4/classic/parse.js
22438
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js
22421
22439
  var parse4 = /* @__PURE__ */ _parse(ZodRealError);
22422
22440
  var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
22423
22441
  var safeParse3 = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -22431,7 +22449,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
22431
22449
  var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
22432
22450
  var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
22433
22451
 
22434
- // node_modules/zod/v4/classic/schemas.js
22452
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
22435
22453
  var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
22436
22454
  $ZodType.init(inst, def);
22437
22455
  Object.assign(inst["~standard"], {
@@ -23507,7 +23525,7 @@ function json(params) {
23507
23525
  function preprocess(fn, schema) {
23508
23526
  return pipe(transform(fn), schema);
23509
23527
  }
23510
- // node_modules/zod/v4/classic/compat.js
23528
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js
23511
23529
  var ZodIssueCode2 = {
23512
23530
  invalid_type: "invalid_type",
23513
23531
  too_big: "too_big",
@@ -23531,7 +23549,7 @@ function getErrorMap2() {
23531
23549
  }
23532
23550
  var ZodFirstPartyTypeKind2;
23533
23551
  (function(ZodFirstPartyTypeKind3) {})(ZodFirstPartyTypeKind2 || (ZodFirstPartyTypeKind2 = {}));
23534
- // node_modules/zod/v4/classic/from-json-schema.js
23552
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js
23535
23553
  var z = {
23536
23554
  ...exports_schemas2,
23537
23555
  ...exports_checks2,
@@ -23992,7 +24010,7 @@ function fromJSONSchema(schema, params) {
23992
24010
  };
23993
24011
  return convertSchema(schema, ctx);
23994
24012
  }
23995
- // node_modules/zod/v4/classic/coerce.js
24013
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js
23996
24014
  var exports_coerce2 = {};
23997
24015
  __export(exports_coerce2, {
23998
24016
  string: () => string3,
@@ -24017,7 +24035,7 @@ function date4(params) {
24017
24035
  return _coercedDate(ZodDate2, params);
24018
24036
  }
24019
24037
 
24020
- // node_modules/zod/v4/classic/external.js
24038
+ // ../../../../hasnastudio/hasnastudio-alumia/platform/platformdev/platform-alumia/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js
24021
24039
  config(en_default2());
24022
24040
 
24023
24041
  // node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
@@ -27028,62 +27046,6 @@ class ExperimentalServerTasks {
27028
27046
  requestStream(request, resultSchema, options) {
27029
27047
  return this._server.requestStream(request, resultSchema, options);
27030
27048
  }
27031
- createMessageStream(params, options) {
27032
- const clientCapabilities = this._server.getClientCapabilities();
27033
- if ((params.tools || params.toolChoice) && !clientCapabilities?.sampling?.tools) {
27034
- throw new Error("Client does not support sampling tools capability.");
27035
- }
27036
- if (params.messages.length > 0) {
27037
- const lastMessage = params.messages[params.messages.length - 1];
27038
- const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];
27039
- const hasToolResults = lastContent.some((c) => c.type === "tool_result");
27040
- const previousMessage = params.messages.length > 1 ? params.messages[params.messages.length - 2] : undefined;
27041
- const previousContent = previousMessage ? Array.isArray(previousMessage.content) ? previousMessage.content : [previousMessage.content] : [];
27042
- const hasPreviousToolUse = previousContent.some((c) => c.type === "tool_use");
27043
- if (hasToolResults) {
27044
- if (lastContent.some((c) => c.type !== "tool_result")) {
27045
- throw new Error("The last message must contain only tool_result content if any is present");
27046
- }
27047
- if (!hasPreviousToolUse) {
27048
- throw new Error("tool_result blocks are not matching any tool_use from the previous message");
27049
- }
27050
- }
27051
- if (hasPreviousToolUse) {
27052
- const toolUseIds = new Set(previousContent.filter((c) => c.type === "tool_use").map((c) => c.id));
27053
- const toolResultIds = new Set(lastContent.filter((c) => c.type === "tool_result").map((c) => c.toolUseId));
27054
- if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every((id) => toolResultIds.has(id))) {
27055
- throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match");
27056
- }
27057
- }
27058
- }
27059
- return this.requestStream({
27060
- method: "sampling/createMessage",
27061
- params
27062
- }, CreateMessageResultSchema, options);
27063
- }
27064
- elicitInputStream(params, options) {
27065
- const clientCapabilities = this._server.getClientCapabilities();
27066
- const mode = params.mode ?? "form";
27067
- switch (mode) {
27068
- case "url": {
27069
- if (!clientCapabilities?.elicitation?.url) {
27070
- throw new Error("Client does not support url elicitation.");
27071
- }
27072
- break;
27073
- }
27074
- case "form": {
27075
- if (!clientCapabilities?.elicitation?.form) {
27076
- throw new Error("Client does not support form elicitation.");
27077
- }
27078
- break;
27079
- }
27080
- }
27081
- const normalizedParams = mode === "form" && params.mode === undefined ? { ...params, mode: "form" } : params;
27082
- return this.requestStream({
27083
- method: "elicitation/create",
27084
- params: normalizedParams
27085
- }, ElicitResultSchema, options);
27086
- }
27087
27049
  async getTask(taskId, options) {
27088
27050
  return this._server.getTask({ taskId }, options);
27089
27051
  }
@@ -28604,7 +28566,7 @@ import { homedir as homedir2 } from "os";
28604
28566
  // package.json
28605
28567
  var package_default = {
28606
28568
  name: "@hasna/skills",
28607
- version: "0.1.13",
28569
+ version: "0.1.14",
28608
28570
  description: "Skills library for AI coding agents",
28609
28571
  type: "module",
28610
28572
  bin: {
@@ -28627,9 +28589,12 @@ var package_default = {
28627
28589
  main: "./dist/index.js",
28628
28590
  types: "./dist/index.d.ts",
28629
28591
  scripts: {
28630
- build: "bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk && bun build ./src/mcp/index.ts --outfile ./bin/mcp.js --target bun && bun build ./src/index.ts --outdir ./dist --target bun && tsc --emitDeclarationOnly --declaration --outDir dist",
28592
+ clean: "rm -rf bin/ dist/",
28593
+ build: "bun run clean && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk && bun build ./src/mcp/index.ts --outfile ./bin/mcp.js --target bun && bun build ./src/index.ts --outdir ./dist --target bun && tsc --emitDeclarationOnly --declaration --outDir dist",
28631
28594
  test: "bun test",
28632
28595
  dev: "bun run ./src/cli/index.tsx",
28596
+ "dev:watch": "bun --watch run ./src/cli/index.tsx",
28597
+ "dev:mcp": "bun --watch run ./src/mcp/index.ts",
28633
28598
  typecheck: "tsc --noEmit",
28634
28599
  prepublishOnly: "bun run build",
28635
28600
  "dashboard:dev": "cd dashboard && bun run dev",
@@ -30206,9 +30171,24 @@ function searchSkills(query) {
30206
30171
  function getSkill(name) {
30207
30172
  return SKILLS.find((s) => s.name === name);
30208
30173
  }
30174
+ function levenshtein(a, b) {
30175
+ const m = a.length, n = b.length;
30176
+ const dp = Array.from({ length: m + 1 }, (_, i) => Array.from({ length: n + 1 }, (_2, j) => i === 0 ? j : j === 0 ? i : 0));
30177
+ for (let i = 1;i <= m; i++) {
30178
+ for (let j = 1;j <= n; j++) {
30179
+ dp[i][j] = a[i - 1] === b[j - 1] ? dp[i - 1][j - 1] : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
30180
+ }
30181
+ }
30182
+ return dp[m][n];
30183
+ }
30184
+ function findSimilarSkills(query, maxResults = 3) {
30185
+ const q = query.toLowerCase();
30186
+ const scored = SKILLS.map((s) => ({ name: s.name, dist: levenshtein(q, s.name.toLowerCase()) })).filter((s) => s.dist <= Math.max(3, Math.floor(q.length / 2))).sort((a, b) => a.dist - b.dist);
30187
+ return scored.slice(0, maxResults).map((s) => s.name);
30188
+ }
30209
30189
 
30210
30190
  // src/lib/installer.ts
30211
- import { existsSync, cpSync, mkdirSync, writeFileSync, rmSync, readdirSync, statSync, readFileSync } from "fs";
30191
+ import { existsSync, cpSync, mkdirSync, writeFileSync, rmSync, readdirSync, statSync, readFileSync, accessSync, constants } from "fs";
30212
30192
  import { join, dirname } from "path";
30213
30193
  import { homedir } from "os";
30214
30194
  import { fileURLToPath } from "url";
@@ -30272,6 +30252,7 @@ function installSkill(name, options = {}) {
30272
30252
  }
30273
30253
  });
30274
30254
  updateSkillsIndex(destDir);
30255
+ recordInstall(destDir, name);
30275
30256
  const meta3 = getSkill(name);
30276
30257
  if (meta3?.dependencies && meta3.dependencies.length > 0) {
30277
30258
  const installed = getInstalledSkills(targetDir);
@@ -30297,7 +30278,9 @@ function installSkill(name, options = {}) {
30297
30278
  }
30298
30279
  function updateSkillsIndex(skillsDir) {
30299
30280
  const indexPath = join(skillsDir, "index.ts");
30300
- const skills = readdirSync(skillsDir).filter((f) => f.startsWith("skill-") && !f.includes("."));
30281
+ const meta3 = loadMeta(skillsDir);
30282
+ const disabledSet = new Set(meta3.disabled || []);
30283
+ const skills = readdirSync(skillsDir).filter((f) => f.startsWith("skill-") && !f.includes(".") && !disabledSet.has(f.replace("skill-", "")));
30301
30284
  const exports = skills.map((s) => {
30302
30285
  const name = s.replace("skill-", "").replace(/-/g, "_");
30303
30286
  return `export * as ${name} from './${s}/src/index.js';`;
@@ -30312,6 +30295,40 @@ ${exports}
30312
30295
  `;
30313
30296
  writeFileSync(indexPath, content);
30314
30297
  }
30298
+ function getMetaPath(skillsDir) {
30299
+ return join(skillsDir, ".meta.json");
30300
+ }
30301
+ function loadMeta(skillsDir) {
30302
+ const metaPath = getMetaPath(skillsDir);
30303
+ if (existsSync(metaPath)) {
30304
+ try {
30305
+ return JSON.parse(readFileSync(metaPath, "utf-8"));
30306
+ } catch {}
30307
+ }
30308
+ return { skills: {} };
30309
+ }
30310
+ function saveMeta(skillsDir, meta3) {
30311
+ writeFileSync(getMetaPath(skillsDir), JSON.stringify(meta3, null, 2));
30312
+ }
30313
+ function recordInstall(skillsDir, name) {
30314
+ const meta3 = loadMeta(skillsDir);
30315
+ const skillName = normalizeSkillName(name);
30316
+ let version2 = "unknown";
30317
+ try {
30318
+ const pkgPath = join(skillsDir, skillName, "package.json");
30319
+ if (existsSync(pkgPath)) {
30320
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
30321
+ version2 = pkg.version || "unknown";
30322
+ }
30323
+ } catch {}
30324
+ meta3.skills[name] = { installedAt: new Date().toISOString(), version: version2 };
30325
+ saveMeta(skillsDir, meta3);
30326
+ }
30327
+ function recordRemove(skillsDir, name) {
30328
+ const meta3 = loadMeta(skillsDir);
30329
+ delete meta3.skills[name];
30330
+ saveMeta(skillsDir, meta3);
30331
+ }
30315
30332
  function getInstalledSkills(targetDir = process.cwd()) {
30316
30333
  const skillsDir = join(targetDir, ".skills");
30317
30334
  if (!existsSync(skillsDir)) {
@@ -30331,6 +30348,7 @@ function removeSkill(name, targetDir = process.cwd()) {
30331
30348
  }
30332
30349
  rmSync(skillPath, { recursive: true, force: true });
30333
30350
  updateSkillsIndex(skillsDir);
30351
+ recordRemove(skillsDir, name);
30334
30352
  return true;
30335
30353
  }
30336
30354
  var AGENT_TARGETS = ["claude", "codex", "gemini"];
@@ -30372,6 +30390,30 @@ function installSkillForAgent(name, options, generateSkillMd) {
30372
30390
  return { skill: name, success: false, error: `No SKILL.md found and could not generate one for '${name}'` };
30373
30391
  }
30374
30392
  const destDir = getAgentSkillPath(name, agent, scope, projectDir);
30393
+ if (scope === "global") {
30394
+ const agentBaseDir = join(homedir(), `.${agent}`);
30395
+ if (!existsSync(agentBaseDir)) {
30396
+ const agentLabels = {
30397
+ claude: "Claude Code",
30398
+ codex: "Codex CLI",
30399
+ gemini: "Gemini CLI"
30400
+ };
30401
+ return {
30402
+ skill: name,
30403
+ success: false,
30404
+ error: `Agent directory ${agentBaseDir} does not exist. Is ${agentLabels[agent]} installed?`
30405
+ };
30406
+ }
30407
+ try {
30408
+ accessSync(agentBaseDir, constants.W_OK);
30409
+ } catch {
30410
+ return {
30411
+ skill: name,
30412
+ success: false,
30413
+ error: `Agent directory ${agentBaseDir} is not writable. Check permissions.`
30414
+ };
30415
+ }
30416
+ }
30375
30417
  try {
30376
30418
  mkdirSync(destDir, { recursive: true });
30377
30419
  writeFileSync(join(destDir, "SKILL.md"), skillMdContent);
@@ -30633,30 +30675,90 @@ var server = new McpServer({
30633
30675
  function stripNulls(obj) {
30634
30676
  return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== null && v !== undefined && !(Array.isArray(v) && v.length === 0)));
30635
30677
  }
30678
+ var searchCache = new Map;
30679
+ var CACHE_MAX = 100;
30680
+ function cacheGet(key) {
30681
+ return searchCache.get(key);
30682
+ }
30683
+ function cacheSet(key, value) {
30684
+ if (searchCache.size >= CACHE_MAX) {
30685
+ const first = searchCache.keys().next().value;
30686
+ if (first !== undefined)
30687
+ searchCache.delete(first);
30688
+ }
30689
+ searchCache.set(key, value);
30690
+ }
30691
+ function cacheClear() {
30692
+ searchCache.clear();
30693
+ }
30694
+ function mcpError(code, message, suggestions) {
30695
+ const obj = { code, message };
30696
+ if (suggestions && suggestions.length > 0)
30697
+ obj.suggestions = suggestions;
30698
+ return {
30699
+ content: [{ type: "text", text: JSON.stringify(obj) }],
30700
+ isError: true
30701
+ };
30702
+ }
30636
30703
  server.registerTool("list_skills", {
30637
30704
  title: "List Skills",
30638
- description: "List skills. Returns {name,category} by default; detail:true for full objects.",
30705
+ description: "List skills. Returns {name,category} by default; detail:true for full objects. Supports limit/offset pagination.",
30639
30706
  inputSchema: {
30640
30707
  category: exports_external.string().optional(),
30641
- detail: exports_external.boolean().optional()
30708
+ detail: exports_external.boolean().optional(),
30709
+ limit: exports_external.number().optional(),
30710
+ offset: exports_external.number().optional()
30642
30711
  }
30643
- }, async ({ category, detail }) => {
30712
+ }, async ({ category, detail, limit, offset }) => {
30644
30713
  const skills = category ? getSkillsByCategory(category) : SKILLS;
30645
- const result = detail ? skills : skills.map((s) => ({ name: s.name, category: s.category }));
30714
+ const mapped = detail ? skills : skills.map((s) => ({ name: s.name, category: s.category }));
30715
+ if (limit !== undefined || offset !== undefined) {
30716
+ const start = offset || 0;
30717
+ const sliced = limit !== undefined ? mapped.slice(start, start + limit) : mapped.slice(start);
30718
+ return {
30719
+ content: [{ type: "text", text: JSON.stringify({ skills: sliced, total: mapped.length, offset: start, limit: limit ?? null }) }]
30720
+ };
30721
+ }
30646
30722
  return {
30647
- content: [{ type: "text", text: JSON.stringify(result) }]
30723
+ content: [{ type: "text", text: JSON.stringify(mapped) }]
30724
+ };
30725
+ });
30726
+ server.registerTool("list_installed_skills", {
30727
+ title: "List Installed Skills",
30728
+ description: "List skills installed in the current project's .skills/ directory.",
30729
+ inputSchema: {
30730
+ directory: exports_external.string().optional()
30731
+ }
30732
+ }, async ({ directory }) => {
30733
+ const dir = directory || process.cwd();
30734
+ const installed = getInstalledSkills(dir);
30735
+ return {
30736
+ content: [{ type: "text", text: JSON.stringify({ directory: dir, count: installed.length, skills: installed }) }]
30648
30737
  };
30649
30738
  });
30650
30739
  server.registerTool("search_skills", {
30651
30740
  title: "Search Skills",
30652
- description: "Search skills by name, description, or tags. Returns compact list by default.",
30741
+ description: "Search skills by name, description, or tags. Returns compact list by default. Supports limit/offset pagination.",
30653
30742
  inputSchema: {
30654
30743
  query: exports_external.string(),
30655
- detail: exports_external.boolean().optional()
30656
- }
30657
- }, async ({ query, detail }) => {
30658
- const results = searchSkills(query);
30744
+ detail: exports_external.boolean().optional(),
30745
+ limit: exports_external.number().optional(),
30746
+ offset: exports_external.number().optional()
30747
+ }
30748
+ }, async ({ query, detail, limit, offset }) => {
30749
+ const cacheKey = `${query}:${detail ?? false}`;
30750
+ const cached2 = cacheGet(cacheKey);
30751
+ const results = cached2 ? cached2 : searchSkills(query);
30752
+ if (!cached2)
30753
+ cacheSet(cacheKey, results);
30659
30754
  const out = detail ? results : results.map((s) => ({ name: s.name, category: s.category }));
30755
+ if (limit !== undefined || offset !== undefined) {
30756
+ const start = offset || 0;
30757
+ const sliced = limit !== undefined ? out.slice(start, start + limit) : out.slice(start);
30758
+ return {
30759
+ content: [{ type: "text", text: JSON.stringify({ skills: sliced, total: out.length, offset: start, limit: limit ?? null }) }]
30760
+ };
30761
+ }
30660
30762
  return {
30661
30763
  content: [{ type: "text", text: JSON.stringify(out) }]
30662
30764
  };
@@ -30670,7 +30772,7 @@ server.registerTool("get_skill_info", {
30670
30772
  }, async ({ name }) => {
30671
30773
  const skill = getSkill(name);
30672
30774
  if (!skill) {
30673
- return { content: [{ type: "text", text: `Skill '${name}' not found` }], isError: true };
30775
+ return mcpError("SKILL_NOT_FOUND", `Skill '${name}' not found`, findSimilarSkills(name));
30674
30776
  }
30675
30777
  const reqs = getSkillRequirements(name);
30676
30778
  const result = stripNulls({ ...skill, ...reqs });
@@ -30687,7 +30789,7 @@ server.registerTool("get_skill_docs", {
30687
30789
  }, async ({ name }) => {
30688
30790
  const doc2 = getSkillBestDoc(name);
30689
30791
  if (!doc2) {
30690
- return { content: [{ type: "text", text: `No documentation found for '${name}'` }], isError: true };
30792
+ return mcpError("NO_DOCS", `No documentation found for '${name}'`);
30691
30793
  }
30692
30794
  return { content: [{ type: "text", text: doc2 }] };
30693
30795
  });
@@ -30705,10 +30807,7 @@ server.registerTool("install_skill", {
30705
30807
  try {
30706
30808
  agents = resolveAgents(agentArg);
30707
30809
  } catch (err) {
30708
- return {
30709
- content: [{ type: "text", text: err.message }],
30710
- isError: true
30711
- };
30810
+ return mcpError("INVALID_AGENT", err.message, ["claude", "codex", "gemini", "all"]);
30712
30811
  }
30713
30812
  const results = agents.map((a) => installSkillForAgent(name, { agent: a, scope: scope || "global" }, generateSkillMd));
30714
30813
  return {
@@ -30717,6 +30816,8 @@ server.registerTool("install_skill", {
30717
30816
  };
30718
30817
  }
30719
30818
  const result = installSkill(name);
30819
+ if (result.success)
30820
+ cacheClear();
30720
30821
  return {
30721
30822
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
30722
30823
  isError: !result.success
@@ -30734,8 +30835,7 @@ server.registerTool("install_category", {
30734
30835
  const matchedCategory = CATEGORIES.find((c) => c.toLowerCase() === category.toLowerCase());
30735
30836
  if (!matchedCategory) {
30736
30837
  return {
30737
- content: [{ type: "text", text: `Unknown category: ${category}. Available: ${CATEGORIES.join(", ")}` }],
30738
- isError: true
30838
+ ...mcpError("UNKNOWN_CATEGORY", `Unknown category: ${category}`, CATEGORIES.slice())
30739
30839
  };
30740
30840
  }
30741
30841
  const categorySkills = getSkillsByCategory(matchedCategory);
@@ -30745,10 +30845,7 @@ server.registerTool("install_category", {
30745
30845
  try {
30746
30846
  agents = resolveAgents(agentArg);
30747
30847
  } catch (err) {
30748
- return {
30749
- content: [{ type: "text", text: err.message }],
30750
- isError: true
30751
- };
30848
+ return mcpError("INVALID_AGENT", err.message, ["claude", "codex", "gemini", "all"]);
30752
30849
  }
30753
30850
  const results2 = [];
30754
30851
  for (const name of names) {
@@ -30782,10 +30879,7 @@ server.registerTool("remove_skill", {
30782
30879
  try {
30783
30880
  agents = resolveAgents(agentArg);
30784
30881
  } catch (err) {
30785
- return {
30786
- content: [{ type: "text", text: err.message }],
30787
- isError: true
30788
- };
30882
+ return mcpError("INVALID_AGENT", err.message, ["claude", "codex", "gemini", "all"]);
30789
30883
  }
30790
30884
  const results = agents.map((a) => ({
30791
30885
  skill: name,
@@ -30797,6 +30891,8 @@ server.registerTool("remove_skill", {
30797
30891
  };
30798
30892
  }
30799
30893
  const removed = removeSkill(name);
30894
+ if (removed)
30895
+ cacheClear();
30800
30896
  return {
30801
30897
  content: [{ type: "text", text: JSON.stringify({ skill: name, removed }, null, 2) }]
30802
30898
  };
@@ -30833,7 +30929,7 @@ server.registerTool("get_requirements", {
30833
30929
  }, async ({ name }) => {
30834
30930
  const reqs = getSkillRequirements(name);
30835
30931
  if (!reqs) {
30836
- return { content: [{ type: "text", text: `Skill '${name}' not found` }], isError: true };
30932
+ return mcpError("SKILL_NOT_FOUND", `Skill '${name}' not found`, findSimilarSkills(name));
30837
30933
  }
30838
30934
  return { content: [{ type: "text", text: JSON.stringify(reqs, null, 2) }] };
30839
30935
  });
@@ -30847,7 +30943,7 @@ server.registerTool("run_skill", {
30847
30943
  }, async ({ name, args }) => {
30848
30944
  const skill = getSkill(name);
30849
30945
  if (!skill) {
30850
- return { content: [{ type: "text", text: `Skill '${name}' not found` }], isError: true };
30946
+ return mcpError("SKILL_NOT_FOUND", `Skill '${name}' not found`, findSimilarSkills(name));
30851
30947
  }
30852
30948
  const result = await runSkill(name, args || []);
30853
30949
  if (result.error) {
@@ -30890,10 +30986,7 @@ server.registerTool("import_skills", {
30890
30986
  try {
30891
30987
  agents = resolveAgents(agentArg);
30892
30988
  } catch (err) {
30893
- return {
30894
- content: [{ type: "text", text: err.message }],
30895
- isError: true
30896
- };
30989
+ return mcpError("INVALID_AGENT", err.message, ["claude", "codex", "gemini", "all"]);
30897
30990
  }
30898
30991
  for (const name of skillList) {
30899
30992
  const agentResults = agents.map((a) => installSkillForAgent(name, { agent: a, scope: scope || "global" }, generateSkillMd));
@@ -30978,6 +31071,7 @@ server.registerTool("search_tools", {
30978
31071
  }, async ({ query }) => {
30979
31072
  const all = [
30980
31073
  "list_skills",
31074
+ "list_installed_skills",
30981
31075
  "search_skills",
30982
31076
  "get_skill_info",
30983
31077
  "get_skill_docs",
@@ -31004,6 +31098,7 @@ server.registerTool("describe_tools", {
31004
31098
  }, async ({ names }) => {
31005
31099
  const descriptions = {
31006
31100
  list_skills: "List skills {name,category}. Params: category?, detail?",
31101
+ list_installed_skills: "List installed skills in .skills/. Params: directory?",
31007
31102
  search_skills: "Search skills by name/tags. Params: query, detail?",
31008
31103
  get_skill_info: "Get skill metadata and env vars. Params: name",
31009
31104
  get_skill_docs: "Get skill documentation. Params: name",
@@ -31022,6 +31117,32 @@ server.registerTool("describe_tools", {
31022
31117
  `);
31023
31118
  return { content: [{ type: "text", text: result }] };
31024
31119
  });
31120
+ var _agentReg = new Map;
31121
+ server.tool("register_agent", "Register this agent session. Returns agent_id for use in heartbeat/set_focus.", { name: exports_external.string(), session_id: exports_external.string().optional() }, async (a) => {
31122
+ const existing = [..._agentReg.values()].find((x) => x.name === a.name);
31123
+ if (existing) {
31124
+ existing.last_seen_at = new Date().toISOString();
31125
+ return { content: [{ type: "text", text: JSON.stringify(existing) }] };
31126
+ }
31127
+ const id = Math.random().toString(36).slice(2, 10);
31128
+ const ag = { id, name: a.name, last_seen_at: new Date().toISOString() };
31129
+ _agentReg.set(id, ag);
31130
+ return { content: [{ type: "text", text: JSON.stringify(ag) }] };
31131
+ });
31132
+ server.tool("heartbeat", "Update last_seen_at to signal agent is active.", { agent_id: exports_external.string() }, async (a) => {
31133
+ const ag = _agentReg.get(a.agent_id);
31134
+ if (!ag)
31135
+ return { content: [{ type: "text", text: `Agent not found: ${a.agent_id}` }], isError: true };
31136
+ ag.last_seen_at = new Date().toISOString();
31137
+ return { content: [{ type: "text", text: `\u2665 ${ag.name} \u2014 active` }] };
31138
+ });
31139
+ server.tool("set_focus", "Set active project context for this agent session.", { agent_id: exports_external.string(), project_id: exports_external.string().optional() }, async (a) => {
31140
+ const ag = _agentReg.get(a.agent_id);
31141
+ if (!ag)
31142
+ return { content: [{ type: "text", text: `Agent not found: ${a.agent_id}` }], isError: true };
31143
+ ag.project_id = a.project_id;
31144
+ return { content: [{ type: "text", text: a.project_id ? `Focus: ${a.project_id}` : "Focus cleared" }] };
31145
+ });
31025
31146
  async function main() {
31026
31147
  const transport = new StdioServerTransport;
31027
31148
  await server.connect(transport);