@hasna/skills 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +48 -18
  2. package/bin/index.js +1271 -2090
  3. package/bin/mcp.js +1135 -1955
  4. package/bin/migrate.js +22 -60
  5. package/bin/server.js +73576 -20339
  6. package/bin/worker.js +65159 -19251
  7. package/dist/admin-contract.js +8 -8
  8. package/dist/index.js +489 -1184
  9. package/dist/lib/config.d.ts +3 -23
  10. package/dist/lib/installer.d.ts +1 -1
  11. package/dist/lib/portable-skills.d.ts +1 -1
  12. package/dist/lib/registry-data/index.d.ts +1 -0
  13. package/dist/lib/registry-types.d.ts +2 -1
  14. package/dist/lib/registry.d.ts +2 -12
  15. package/dist/lib/release-dependencies.d.ts +3 -0
  16. package/dist/lib/skill-aliases.d.ts +2 -3
  17. package/dist/mcp/mcp-test-client.d.ts +2 -2
  18. package/dist/sdk/executor.d.ts +5 -5
  19. package/dist/sdk/index.js +89739 -40379
  20. package/dist/sdk/registry.d.ts +3 -3
  21. package/dist/server/config.d.ts +1 -2
  22. package/dist/server/handlers.d.ts +5 -2
  23. package/dist/server/registry.d.ts +6 -3
  24. package/dist/server/skills-api.d.ts +6 -38
  25. package/dist/storage.js +5 -42
  26. package/package.json +3 -2
  27. package/dist/lib/registry-data/business-marketing.d.ts +0 -2
  28. package/dist/lib/registry-data/communication.d.ts +0 -2
  29. package/dist/lib/registry-data/content-generation.d.ts +0 -2
  30. package/dist/lib/registry-data/data-analysis.d.ts +0 -2
  31. package/dist/lib/registry-data/design-branding.d.ts +0 -2
  32. package/dist/lib/registry-data/development-tools.d.ts +0 -2
  33. package/dist/lib/registry-data/education-learning.d.ts +0 -2
  34. package/dist/lib/registry-data/event-management.d.ts +0 -2
  35. package/dist/lib/registry-data/finance-compliance.d.ts +0 -2
  36. package/dist/lib/registry-data/health-wellness.d.ts +0 -2
  37. package/dist/lib/registry-data/media-processing.d.ts +0 -2
  38. package/dist/lib/registry-data/productivity-organization.d.ts +0 -2
  39. package/dist/lib/registry-data/project-management.d.ts +0 -2
  40. package/dist/lib/registry-data/research-writing.d.ts +0 -2
  41. package/dist/lib/registry-data/science-academic.d.ts +0 -2
  42. package/dist/lib/registry-data/travel-lifestyle.d.ts +0 -2
  43. package/dist/lib/registry-data/web-browser.d.ts +0 -2
  44. package/dist/server/seed-bundled.d.ts +0 -20
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ var __export = (target, all) => {
46
46
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
47
47
  var __require = import.meta.require;
48
48
 
49
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/identity.js
49
+ // node_modules/yaml/dist/nodes/identity.js
50
50
  var require_identity = __commonJS((exports) => {
51
51
  var ALIAS = Symbol.for("yaml.alias");
52
52
  var DOC = Symbol.for("yaml.document");
@@ -100,7 +100,7 @@ var require_identity = __commonJS((exports) => {
100
100
  exports.isSeq = isSeq;
101
101
  });
102
102
 
103
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/visit.js
103
+ // node_modules/yaml/dist/visit.js
104
104
  var require_visit = __commonJS((exports) => {
105
105
  var identity = require_identity();
106
106
  var BREAK = Symbol("break visit");
@@ -255,7 +255,7 @@ var require_visit = __commonJS((exports) => {
255
255
  exports.visitAsync = visitAsync;
256
256
  });
257
257
 
258
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/doc/directives.js
258
+ // node_modules/yaml/dist/doc/directives.js
259
259
  var require_directives = __commonJS((exports) => {
260
260
  var identity = require_identity();
261
261
  var visit = require_visit();
@@ -407,7 +407,7 @@ var require_directives = __commonJS((exports) => {
407
407
  exports.Directives = Directives;
408
408
  });
409
409
 
410
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/doc/anchors.js
410
+ // node_modules/yaml/dist/doc/anchors.js
411
411
  var require_anchors = __commonJS((exports) => {
412
412
  var identity = require_identity();
413
413
  var visit = require_visit();
@@ -469,7 +469,7 @@ var require_anchors = __commonJS((exports) => {
469
469
  exports.findNewAnchor = findNewAnchor;
470
470
  });
471
471
 
472
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/doc/applyReviver.js
472
+ // node_modules/yaml/dist/doc/applyReviver.js
473
473
  var require_applyReviver = __commonJS((exports) => {
474
474
  function applyReviver(reviver, obj, key, val) {
475
475
  if (val && typeof val === "object") {
@@ -516,7 +516,7 @@ var require_applyReviver = __commonJS((exports) => {
516
516
  exports.applyReviver = applyReviver;
517
517
  });
518
518
 
519
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/toJS.js
519
+ // node_modules/yaml/dist/nodes/toJS.js
520
520
  var require_toJS = __commonJS((exports) => {
521
521
  var identity = require_identity();
522
522
  function toJS(value, arg, ctx) {
@@ -543,7 +543,7 @@ var require_toJS = __commonJS((exports) => {
543
543
  exports.toJS = toJS;
544
544
  });
545
545
 
546
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/Node.js
546
+ // node_modules/yaml/dist/nodes/Node.js
547
547
  var require_Node = __commonJS((exports) => {
548
548
  var applyReviver = require_applyReviver();
549
549
  var identity = require_identity();
@@ -580,7 +580,7 @@ var require_Node = __commonJS((exports) => {
580
580
  exports.NodeBase = NodeBase;
581
581
  });
582
582
 
583
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/Alias.js
583
+ // node_modules/yaml/dist/nodes/Alias.js
584
584
  var require_Alias = __commonJS((exports) => {
585
585
  var anchors = require_anchors();
586
586
  var visit = require_visit();
@@ -690,7 +690,7 @@ var require_Alias = __commonJS((exports) => {
690
690
  exports.Alias = Alias;
691
691
  });
692
692
 
693
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/Scalar.js
693
+ // node_modules/yaml/dist/nodes/Scalar.js
694
694
  var require_Scalar = __commonJS((exports) => {
695
695
  var identity = require_identity();
696
696
  var Node = require_Node();
@@ -718,7 +718,7 @@ var require_Scalar = __commonJS((exports) => {
718
718
  exports.isScalarValue = isScalarValue;
719
719
  });
720
720
 
721
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/doc/createNode.js
721
+ // node_modules/yaml/dist/doc/createNode.js
722
722
  var require_createNode = __commonJS((exports) => {
723
723
  var Alias = require_Alias();
724
724
  var identity = require_identity();
@@ -790,7 +790,7 @@ var require_createNode = __commonJS((exports) => {
790
790
  exports.createNode = createNode;
791
791
  });
792
792
 
793
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/Collection.js
793
+ // node_modules/yaml/dist/nodes/Collection.js
794
794
  var require_Collection = __commonJS((exports) => {
795
795
  var createNode = require_createNode();
796
796
  var identity = require_identity();
@@ -905,7 +905,7 @@ var require_Collection = __commonJS((exports) => {
905
905
  exports.isEmptyPath = isEmptyPath;
906
906
  });
907
907
 
908
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyComment.js
908
+ // node_modules/yaml/dist/stringify/stringifyComment.js
909
909
  var require_stringifyComment = __commonJS((exports) => {
910
910
  var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
911
911
  function indentComment(comment, indent) {
@@ -922,7 +922,7 @@ var require_stringifyComment = __commonJS((exports) => {
922
922
  exports.stringifyComment = stringifyComment;
923
923
  });
924
924
 
925
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/foldFlowLines.js
925
+ // node_modules/yaml/dist/stringify/foldFlowLines.js
926
926
  var require_foldFlowLines = __commonJS((exports) => {
927
927
  var FOLD_FLOW = "flow";
928
928
  var FOLD_BLOCK = "block";
@@ -1059,7 +1059,7 @@ ${indent}${text2.slice(fold + 1, end2)}`;
1059
1059
  exports.foldFlowLines = foldFlowLines;
1060
1060
  });
1061
1061
 
1062
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyString.js
1062
+ // node_modules/yaml/dist/stringify/stringifyString.js
1063
1063
  var require_stringifyString = __commonJS((exports) => {
1064
1064
  var Scalar = require_Scalar();
1065
1065
  var foldFlowLines = require_foldFlowLines();
@@ -1357,7 +1357,7 @@ ${indent}`);
1357
1357
  exports.stringifyString = stringifyString;
1358
1358
  });
1359
1359
 
1360
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringify.js
1360
+ // node_modules/yaml/dist/stringify/stringify.js
1361
1361
  var require_stringify = __commonJS((exports) => {
1362
1362
  var anchors = require_anchors();
1363
1363
  var identity = require_identity();
@@ -1478,7 +1478,7 @@ ${ctx.indent}${str}`;
1478
1478
  exports.stringify = stringify;
1479
1479
  });
1480
1480
 
1481
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyPair.js
1481
+ // node_modules/yaml/dist/stringify/stringifyPair.js
1482
1482
  var require_stringifyPair = __commonJS((exports) => {
1483
1483
  var identity = require_identity();
1484
1484
  var Scalar = require_Scalar();
@@ -1614,7 +1614,7 @@ ${ctx.indent}`;
1614
1614
  exports.stringifyPair = stringifyPair;
1615
1615
  });
1616
1616
 
1617
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/log.js
1617
+ // node_modules/yaml/dist/log.js
1618
1618
  var require_log = __commonJS((exports) => {
1619
1619
  var node_process = __require("process");
1620
1620
  function debug(logLevel, ...messages) {
@@ -1633,7 +1633,7 @@ var require_log = __commonJS((exports) => {
1633
1633
  exports.warn = warn;
1634
1634
  });
1635
1635
 
1636
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/merge.js
1636
+ // node_modules/yaml/dist/schema/yaml-1.1/merge.js
1637
1637
  var require_merge = __commonJS((exports) => {
1638
1638
  var identity = require_identity();
1639
1639
  var Scalar = require_Scalar();
@@ -1690,7 +1690,7 @@ var require_merge = __commonJS((exports) => {
1690
1690
  exports.merge = merge;
1691
1691
  });
1692
1692
 
1693
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/addPairToJSMap.js
1693
+ // node_modules/yaml/dist/nodes/addPairToJSMap.js
1694
1694
  var require_addPairToJSMap = __commonJS((exports) => {
1695
1695
  var log = require_log();
1696
1696
  var merge = require_merge();
@@ -1751,7 +1751,7 @@ var require_addPairToJSMap = __commonJS((exports) => {
1751
1751
  exports.addPairToJSMap = addPairToJSMap;
1752
1752
  });
1753
1753
 
1754
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/Pair.js
1754
+ // node_modules/yaml/dist/nodes/Pair.js
1755
1755
  var require_Pair = __commonJS((exports) => {
1756
1756
  var createNode = require_createNode();
1757
1757
  var stringifyPair = require_stringifyPair();
@@ -1789,7 +1789,7 @@ var require_Pair = __commonJS((exports) => {
1789
1789
  exports.createPair = createPair;
1790
1790
  });
1791
1791
 
1792
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyCollection.js
1792
+ // node_modules/yaml/dist/stringify/stringifyCollection.js
1793
1793
  var require_stringifyCollection = __commonJS((exports) => {
1794
1794
  var identity = require_identity();
1795
1795
  var stringify = require_stringify();
@@ -1941,7 +1941,7 @@ ${indent}${end}`;
1941
1941
  exports.stringifyCollection = stringifyCollection;
1942
1942
  });
1943
1943
 
1944
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/YAMLMap.js
1944
+ // node_modules/yaml/dist/nodes/YAMLMap.js
1945
1945
  var require_YAMLMap = __commonJS((exports) => {
1946
1946
  var stringifyCollection = require_stringifyCollection();
1947
1947
  var addPairToJSMap = require_addPairToJSMap();
@@ -2068,7 +2068,7 @@ var require_YAMLMap = __commonJS((exports) => {
2068
2068
  exports.findPair = findPair;
2069
2069
  });
2070
2070
 
2071
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/common/map.js
2071
+ // node_modules/yaml/dist/schema/common/map.js
2072
2072
  var require_map = __commonJS((exports) => {
2073
2073
  var identity = require_identity();
2074
2074
  var YAMLMap = require_YAMLMap();
@@ -2087,7 +2087,7 @@ var require_map = __commonJS((exports) => {
2087
2087
  exports.map = map;
2088
2088
  });
2089
2089
 
2090
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/nodes/YAMLSeq.js
2090
+ // node_modules/yaml/dist/nodes/YAMLSeq.js
2091
2091
  var require_YAMLSeq = __commonJS((exports) => {
2092
2092
  var createNode = require_createNode();
2093
2093
  var stringifyCollection = require_stringifyCollection();
@@ -2180,7 +2180,7 @@ var require_YAMLSeq = __commonJS((exports) => {
2180
2180
  exports.YAMLSeq = YAMLSeq;
2181
2181
  });
2182
2182
 
2183
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/common/seq.js
2183
+ // node_modules/yaml/dist/schema/common/seq.js
2184
2184
  var require_seq = __commonJS((exports) => {
2185
2185
  var identity = require_identity();
2186
2186
  var YAMLSeq = require_YAMLSeq();
@@ -2199,7 +2199,7 @@ var require_seq = __commonJS((exports) => {
2199
2199
  exports.seq = seq;
2200
2200
  });
2201
2201
 
2202
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/common/string.js
2202
+ // node_modules/yaml/dist/schema/common/string.js
2203
2203
  var require_string = __commonJS((exports) => {
2204
2204
  var stringifyString = require_stringifyString();
2205
2205
  var string = {
@@ -2215,7 +2215,7 @@ var require_string = __commonJS((exports) => {
2215
2215
  exports.string = string;
2216
2216
  });
2217
2217
 
2218
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/common/null.js
2218
+ // node_modules/yaml/dist/schema/common/null.js
2219
2219
  var require_null = __commonJS((exports) => {
2220
2220
  var Scalar = require_Scalar();
2221
2221
  var nullTag = {
@@ -2230,7 +2230,7 @@ var require_null = __commonJS((exports) => {
2230
2230
  exports.nullTag = nullTag;
2231
2231
  });
2232
2232
 
2233
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/core/bool.js
2233
+ // node_modules/yaml/dist/schema/core/bool.js
2234
2234
  var require_bool = __commonJS((exports) => {
2235
2235
  var Scalar = require_Scalar();
2236
2236
  var boolTag = {
@@ -2251,7 +2251,7 @@ var require_bool = __commonJS((exports) => {
2251
2251
  exports.boolTag = boolTag;
2252
2252
  });
2253
2253
 
2254
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyNumber.js
2254
+ // node_modules/yaml/dist/stringify/stringifyNumber.js
2255
2255
  var require_stringifyNumber = __commonJS((exports) => {
2256
2256
  function stringifyNumber({ format, minFractionDigits, tag, value }) {
2257
2257
  if (typeof value === "bigint")
@@ -2275,7 +2275,7 @@ var require_stringifyNumber = __commonJS((exports) => {
2275
2275
  exports.stringifyNumber = stringifyNumber;
2276
2276
  });
2277
2277
 
2278
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/core/float.js
2278
+ // node_modules/yaml/dist/schema/core/float.js
2279
2279
  var require_float = __commonJS((exports) => {
2280
2280
  var Scalar = require_Scalar();
2281
2281
  var stringifyNumber = require_stringifyNumber();
@@ -2318,7 +2318,7 @@ var require_float = __commonJS((exports) => {
2318
2318
  exports.floatNaN = floatNaN;
2319
2319
  });
2320
2320
 
2321
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/core/int.js
2321
+ // node_modules/yaml/dist/schema/core/int.js
2322
2322
  var require_int = __commonJS((exports) => {
2323
2323
  var stringifyNumber = require_stringifyNumber();
2324
2324
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -2360,7 +2360,7 @@ var require_int = __commonJS((exports) => {
2360
2360
  exports.intOct = intOct;
2361
2361
  });
2362
2362
 
2363
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/core/schema.js
2363
+ // node_modules/yaml/dist/schema/core/schema.js
2364
2364
  var require_schema = __commonJS((exports) => {
2365
2365
  var map = require_map();
2366
2366
  var _null = require_null();
@@ -2385,7 +2385,7 @@ var require_schema = __commonJS((exports) => {
2385
2385
  exports.schema = schema;
2386
2386
  });
2387
2387
 
2388
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/json/schema.js
2388
+ // node_modules/yaml/dist/schema/json/schema.js
2389
2389
  var require_schema2 = __commonJS((exports) => {
2390
2390
  var Scalar = require_Scalar();
2391
2391
  var map = require_map();
@@ -2449,7 +2449,7 @@ var require_schema2 = __commonJS((exports) => {
2449
2449
  exports.schema = schema;
2450
2450
  });
2451
2451
 
2452
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/binary.js
2452
+ // node_modules/yaml/dist/schema/yaml-1.1/binary.js
2453
2453
  var require_binary = __commonJS((exports) => {
2454
2454
  var node_buffer = __require("buffer");
2455
2455
  var Scalar = require_Scalar();
@@ -2504,7 +2504,7 @@ var require_binary = __commonJS((exports) => {
2504
2504
  exports.binary = binary;
2505
2505
  });
2506
2506
 
2507
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/pairs.js
2507
+ // node_modules/yaml/dist/schema/yaml-1.1/pairs.js
2508
2508
  var require_pairs = __commonJS((exports) => {
2509
2509
  var identity = require_identity();
2510
2510
  var Pair = require_Pair();
@@ -2579,7 +2579,7 @@ ${cn.comment}` : item.comment;
2579
2579
  exports.resolvePairs = resolvePairs;
2580
2580
  });
2581
2581
 
2582
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/omap.js
2582
+ // node_modules/yaml/dist/schema/yaml-1.1/omap.js
2583
2583
  var require_omap = __commonJS((exports) => {
2584
2584
  var identity = require_identity();
2585
2585
  var toJS = require_toJS();
@@ -2651,7 +2651,7 @@ var require_omap = __commonJS((exports) => {
2651
2651
  exports.omap = omap;
2652
2652
  });
2653
2653
 
2654
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/bool.js
2654
+ // node_modules/yaml/dist/schema/yaml-1.1/bool.js
2655
2655
  var require_bool2 = __commonJS((exports) => {
2656
2656
  var Scalar = require_Scalar();
2657
2657
  function boolStringify({ value, source }, ctx) {
@@ -2680,7 +2680,7 @@ var require_bool2 = __commonJS((exports) => {
2680
2680
  exports.trueTag = trueTag;
2681
2681
  });
2682
2682
 
2683
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/float.js
2683
+ // node_modules/yaml/dist/schema/yaml-1.1/float.js
2684
2684
  var require_float2 = __commonJS((exports) => {
2685
2685
  var Scalar = require_Scalar();
2686
2686
  var stringifyNumber = require_stringifyNumber();
@@ -2726,7 +2726,7 @@ var require_float2 = __commonJS((exports) => {
2726
2726
  exports.floatNaN = floatNaN;
2727
2727
  });
2728
2728
 
2729
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/int.js
2729
+ // node_modules/yaml/dist/schema/yaml-1.1/int.js
2730
2730
  var require_int2 = __commonJS((exports) => {
2731
2731
  var stringifyNumber = require_stringifyNumber();
2732
2732
  var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value);
@@ -2802,7 +2802,7 @@ var require_int2 = __commonJS((exports) => {
2802
2802
  exports.intOct = intOct;
2803
2803
  });
2804
2804
 
2805
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/set.js
2805
+ // node_modules/yaml/dist/schema/yaml-1.1/set.js
2806
2806
  var require_set = __commonJS((exports) => {
2807
2807
  var identity = require_identity();
2808
2808
  var Pair = require_Pair();
@@ -2885,7 +2885,7 @@ var require_set = __commonJS((exports) => {
2885
2885
  exports.set = set;
2886
2886
  });
2887
2887
 
2888
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
2888
+ // node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
2889
2889
  var require_timestamp = __commonJS((exports) => {
2890
2890
  var stringifyNumber = require_stringifyNumber();
2891
2891
  function parseSexagesimal(str, asBigInt) {
@@ -2967,7 +2967,7 @@ var require_timestamp = __commonJS((exports) => {
2967
2967
  exports.timestamp = timestamp;
2968
2968
  });
2969
2969
 
2970
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/yaml-1.1/schema.js
2970
+ // node_modules/yaml/dist/schema/yaml-1.1/schema.js
2971
2971
  var require_schema3 = __commonJS((exports) => {
2972
2972
  var map = require_map();
2973
2973
  var _null = require_null();
@@ -3008,7 +3008,7 @@ var require_schema3 = __commonJS((exports) => {
3008
3008
  exports.schema = schema;
3009
3009
  });
3010
3010
 
3011
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/tags.js
3011
+ // node_modules/yaml/dist/schema/tags.js
3012
3012
  var require_tags = __commonJS((exports) => {
3013
3013
  var map = require_map();
3014
3014
  var _null = require_null();
@@ -3099,7 +3099,7 @@ var require_tags = __commonJS((exports) => {
3099
3099
  exports.getTags = getTags;
3100
3100
  });
3101
3101
 
3102
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/schema/Schema.js
3102
+ // node_modules/yaml/dist/schema/Schema.js
3103
3103
  var require_Schema = __commonJS((exports) => {
3104
3104
  var identity = require_identity();
3105
3105
  var map = require_map();
@@ -3129,7 +3129,7 @@ var require_Schema = __commonJS((exports) => {
3129
3129
  exports.Schema = Schema;
3130
3130
  });
3131
3131
 
3132
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/stringify/stringifyDocument.js
3132
+ // node_modules/yaml/dist/stringify/stringifyDocument.js
3133
3133
  var require_stringifyDocument = __commonJS((exports) => {
3134
3134
  var identity = require_identity();
3135
3135
  var stringify = require_stringify();
@@ -3209,7 +3209,7 @@ var require_stringifyDocument = __commonJS((exports) => {
3209
3209
  exports.stringifyDocument = stringifyDocument;
3210
3210
  });
3211
3211
 
3212
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/doc/Document.js
3212
+ // node_modules/yaml/dist/doc/Document.js
3213
3213
  var require_Document = __commonJS((exports) => {
3214
3214
  var Alias = require_Alias();
3215
3215
  var Collection = require_Collection();
@@ -3444,7 +3444,7 @@ var require_Document = __commonJS((exports) => {
3444
3444
  exports.Document = Document;
3445
3445
  });
3446
3446
 
3447
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/errors.js
3447
+ // node_modules/yaml/dist/errors.js
3448
3448
  var require_errors = __commonJS((exports) => {
3449
3449
  class YAMLError extends Error {
3450
3450
  constructor(name, pos, code, message) {
@@ -3509,7 +3509,7 @@ ${pointer}
3509
3509
  exports.prettifyError = prettifyError;
3510
3510
  });
3511
3511
 
3512
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-props.js
3512
+ // node_modules/yaml/dist/compose/resolve-props.js
3513
3513
  var require_resolve_props = __commonJS((exports) => {
3514
3514
  function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
3515
3515
  let spaceBefore = false;
@@ -3639,7 +3639,7 @@ var require_resolve_props = __commonJS((exports) => {
3639
3639
  exports.resolveProps = resolveProps;
3640
3640
  });
3641
3641
 
3642
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/util-contains-newline.js
3642
+ // node_modules/yaml/dist/compose/util-contains-newline.js
3643
3643
  var require_util_contains_newline = __commonJS((exports) => {
3644
3644
  function containsNewline(key) {
3645
3645
  if (!key)
@@ -3679,7 +3679,7 @@ var require_util_contains_newline = __commonJS((exports) => {
3679
3679
  exports.containsNewline = containsNewline;
3680
3680
  });
3681
3681
 
3682
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/util-flow-indent-check.js
3682
+ // node_modules/yaml/dist/compose/util-flow-indent-check.js
3683
3683
  var require_util_flow_indent_check = __commonJS((exports) => {
3684
3684
  var utilContainsNewline = require_util_contains_newline();
3685
3685
  function flowIndentCheck(indent, fc, onError) {
@@ -3694,7 +3694,7 @@ var require_util_flow_indent_check = __commonJS((exports) => {
3694
3694
  exports.flowIndentCheck = flowIndentCheck;
3695
3695
  });
3696
3696
 
3697
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/util-map-includes.js
3697
+ // node_modules/yaml/dist/compose/util-map-includes.js
3698
3698
  var require_util_map_includes = __commonJS((exports) => {
3699
3699
  var identity = require_identity();
3700
3700
  function mapIncludes(ctx, items, search) {
@@ -3707,7 +3707,7 @@ var require_util_map_includes = __commonJS((exports) => {
3707
3707
  exports.mapIncludes = mapIncludes;
3708
3708
  });
3709
3709
 
3710
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-block-map.js
3710
+ // node_modules/yaml/dist/compose/resolve-block-map.js
3711
3711
  var require_resolve_block_map = __commonJS((exports) => {
3712
3712
  var Pair = require_Pair();
3713
3713
  var YAMLMap = require_YAMLMap();
@@ -3814,7 +3814,7 @@ var require_resolve_block_map = __commonJS((exports) => {
3814
3814
  exports.resolveBlockMap = resolveBlockMap;
3815
3815
  });
3816
3816
 
3817
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-block-seq.js
3817
+ // node_modules/yaml/dist/compose/resolve-block-seq.js
3818
3818
  var require_resolve_block_seq = __commonJS((exports) => {
3819
3819
  var YAMLSeq = require_YAMLSeq();
3820
3820
  var resolveProps = require_resolve_props();
@@ -3862,7 +3862,7 @@ var require_resolve_block_seq = __commonJS((exports) => {
3862
3862
  exports.resolveBlockSeq = resolveBlockSeq;
3863
3863
  });
3864
3864
 
3865
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-end.js
3865
+ // node_modules/yaml/dist/compose/resolve-end.js
3866
3866
  var require_resolve_end = __commonJS((exports) => {
3867
3867
  function resolveEnd(end, offset, reqSpace, onError) {
3868
3868
  let comment = "";
@@ -3902,7 +3902,7 @@ var require_resolve_end = __commonJS((exports) => {
3902
3902
  exports.resolveEnd = resolveEnd;
3903
3903
  });
3904
3904
 
3905
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-flow-collection.js
3905
+ // node_modules/yaml/dist/compose/resolve-flow-collection.js
3906
3906
  var require_resolve_flow_collection = __commonJS((exports) => {
3907
3907
  var identity = require_identity();
3908
3908
  var Pair = require_Pair();
@@ -4093,7 +4093,7 @@ var require_resolve_flow_collection = __commonJS((exports) => {
4093
4093
  exports.resolveFlowCollection = resolveFlowCollection;
4094
4094
  });
4095
4095
 
4096
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/compose-collection.js
4096
+ // node_modules/yaml/dist/compose/compose-collection.js
4097
4097
  var require_compose_collection = __commonJS((exports) => {
4098
4098
  var identity = require_identity();
4099
4099
  var Scalar = require_Scalar();
@@ -4155,7 +4155,7 @@ var require_compose_collection = __commonJS((exports) => {
4155
4155
  exports.composeCollection = composeCollection;
4156
4156
  });
4157
4157
 
4158
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-block-scalar.js
4158
+ // node_modules/yaml/dist/compose/resolve-block-scalar.js
4159
4159
  var require_resolve_block_scalar = __commonJS((exports) => {
4160
4160
  var Scalar = require_Scalar();
4161
4161
  function resolveBlockScalar(ctx, scalar, onError) {
@@ -4348,7 +4348,7 @@ var require_resolve_block_scalar = __commonJS((exports) => {
4348
4348
  exports.resolveBlockScalar = resolveBlockScalar;
4349
4349
  });
4350
4350
 
4351
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/resolve-flow-scalar.js
4351
+ // node_modules/yaml/dist/compose/resolve-flow-scalar.js
4352
4352
  var require_resolve_flow_scalar = __commonJS((exports) => {
4353
4353
  var Scalar = require_Scalar();
4354
4354
  var resolveEnd = require_resolve_end();
@@ -4565,7 +4565,7 @@ var require_resolve_flow_scalar = __commonJS((exports) => {
4565
4565
  exports.resolveFlowScalar = resolveFlowScalar;
4566
4566
  });
4567
4567
 
4568
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/compose-scalar.js
4568
+ // node_modules/yaml/dist/compose/compose-scalar.js
4569
4569
  var require_compose_scalar = __commonJS((exports) => {
4570
4570
  var identity = require_identity();
4571
4571
  var Scalar = require_Scalar();
@@ -4643,7 +4643,7 @@ var require_compose_scalar = __commonJS((exports) => {
4643
4643
  exports.composeScalar = composeScalar;
4644
4644
  });
4645
4645
 
4646
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/util-empty-scalar-position.js
4646
+ // node_modules/yaml/dist/compose/util-empty-scalar-position.js
4647
4647
  var require_util_empty_scalar_position = __commonJS((exports) => {
4648
4648
  function emptyScalarPosition(offset, before, pos) {
4649
4649
  if (before) {
@@ -4670,7 +4670,7 @@ var require_util_empty_scalar_position = __commonJS((exports) => {
4670
4670
  exports.emptyScalarPosition = emptyScalarPosition;
4671
4671
  });
4672
4672
 
4673
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/compose-node.js
4673
+ // node_modules/yaml/dist/compose/compose-node.js
4674
4674
  var require_compose_node = __commonJS((exports) => {
4675
4675
  var Alias = require_Alias();
4676
4676
  var identity = require_identity();
@@ -4773,7 +4773,7 @@ var require_compose_node = __commonJS((exports) => {
4773
4773
  exports.composeNode = composeNode;
4774
4774
  });
4775
4775
 
4776
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/compose-doc.js
4776
+ // node_modules/yaml/dist/compose/compose-doc.js
4777
4777
  var require_compose_doc = __commonJS((exports) => {
4778
4778
  var Document = require_Document();
4779
4779
  var composeNode = require_compose_node();
@@ -4813,7 +4813,7 @@ var require_compose_doc = __commonJS((exports) => {
4813
4813
  exports.composeDoc = composeDoc;
4814
4814
  });
4815
4815
 
4816
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/compose/composer.js
4816
+ // node_modules/yaml/dist/compose/composer.js
4817
4817
  var require_composer = __commonJS((exports) => {
4818
4818
  var node_process = __require("process");
4819
4819
  var directives = require_directives();
@@ -5004,7 +5004,7 @@ ${end.comment}` : end.comment;
5004
5004
  exports.Composer = Composer;
5005
5005
  });
5006
5006
 
5007
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/cst-scalar.js
5007
+ // node_modules/yaml/dist/parse/cst-scalar.js
5008
5008
  var require_cst_scalar = __commonJS((exports) => {
5009
5009
  var resolveBlockScalar = require_resolve_block_scalar();
5010
5010
  var resolveFlowScalar = require_resolve_flow_scalar();
@@ -5194,7 +5194,7 @@ var require_cst_scalar = __commonJS((exports) => {
5194
5194
  exports.setScalarValue = setScalarValue;
5195
5195
  });
5196
5196
 
5197
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/cst-stringify.js
5197
+ // node_modules/yaml/dist/parse/cst-stringify.js
5198
5198
  var require_cst_stringify = __commonJS((exports) => {
5199
5199
  var stringify = (cst) => ("type" in cst) ? stringifyToken(cst) : stringifyItem(cst);
5200
5200
  function stringifyToken(token) {
@@ -5252,7 +5252,7 @@ var require_cst_stringify = __commonJS((exports) => {
5252
5252
  exports.stringify = stringify;
5253
5253
  });
5254
5254
 
5255
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/cst-visit.js
5255
+ // node_modules/yaml/dist/parse/cst-visit.js
5256
5256
  var require_cst_visit = __commonJS((exports) => {
5257
5257
  var BREAK = Symbol("break visit");
5258
5258
  var SKIP = Symbol("skip children");
@@ -5311,7 +5311,7 @@ var require_cst_visit = __commonJS((exports) => {
5311
5311
  exports.visit = visit;
5312
5312
  });
5313
5313
 
5314
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/cst.js
5314
+ // node_modules/yaml/dist/parse/cst.js
5315
5315
  var require_cst = __commonJS((exports) => {
5316
5316
  var cstScalar = require_cst_scalar();
5317
5317
  var cstStringify = require_cst_stringify();
@@ -5412,7 +5412,7 @@ var require_cst = __commonJS((exports) => {
5412
5412
  exports.tokenType = tokenType;
5413
5413
  });
5414
5414
 
5415
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/lexer.js
5415
+ // node_modules/yaml/dist/parse/lexer.js
5416
5416
  var require_lexer = __commonJS((exports) => {
5417
5417
  var cst = require_cst();
5418
5418
  function isEmpty(ch) {
@@ -6009,7 +6009,7 @@ var require_lexer = __commonJS((exports) => {
6009
6009
  exports.Lexer = Lexer;
6010
6010
  });
6011
6011
 
6012
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/line-counter.js
6012
+ // node_modules/yaml/dist/parse/line-counter.js
6013
6013
  var require_line_counter = __commonJS((exports) => {
6014
6014
  class LineCounter {
6015
6015
  constructor() {
@@ -6037,7 +6037,7 @@ var require_line_counter = __commonJS((exports) => {
6037
6037
  exports.LineCounter = LineCounter;
6038
6038
  });
6039
6039
 
6040
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/parse/parser.js
6040
+ // node_modules/yaml/dist/parse/parser.js
6041
6041
  var require_parser = __commonJS((exports) => {
6042
6042
  var node_process = __require("process");
6043
6043
  var cst = require_cst();
@@ -6893,7 +6893,7 @@ var require_parser = __commonJS((exports) => {
6893
6893
  exports.Parser = Parser;
6894
6894
  });
6895
6895
 
6896
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/public-api.js
6896
+ // node_modules/yaml/dist/public-api.js
6897
6897
  var require_public_api = __commonJS((exports) => {
6898
6898
  var composer = require_composer();
6899
6899
  var Document = require_Document();
@@ -6988,11 +6988,11 @@ var require_public_api = __commonJS((exports) => {
6988
6988
  });
6989
6989
 
6990
6990
  // src/lib/registry.ts
6991
- import { existsSync as existsSync8, readFileSync as readFileSync6, readdirSync as readdirSync6 } from "fs";
6991
+ import { existsSync as existsSync8, readFileSync as readFileSync6, readdirSync as readdirSync5 } from "fs";
6992
6992
  import { join as join8 } from "path";
6993
6993
 
6994
6994
  // src/lib/config.ts
6995
- import { existsSync as existsSync2, readFileSync, writeFileSync, mkdirSync, copyFileSync, readdirSync, statSync } from "fs";
6995
+ import { existsSync as existsSync2, readFileSync, writeFileSync, mkdirSync } from "fs";
6996
6996
  import { join as join2, dirname } from "path";
6997
6997
 
6998
6998
  // src/lib/retired-settings.ts
@@ -7104,12 +7104,6 @@ function exactDataRoot() {
7104
7104
  }
7105
7105
  return;
7106
7106
  }
7107
- function hasExactOverride(env = process.env) {
7108
- return Boolean(env[DATA_DIR_ENV]?.trim()) || Boolean(env[HASNA_SKILLS_HOME_ENV]?.trim()) || Boolean(env[SKILLS_HOME_ENV]?.trim());
7109
- }
7110
- function hasOperatorOverride(env = process.env) {
7111
- return hasExactOverride(env) || Boolean(env.HASNA_DATA_HOME?.trim());
7112
- }
7113
7107
  function getDataRoot() {
7114
7108
  const exact = exactDataRoot();
7115
7109
  if (exact)
@@ -7143,24 +7137,6 @@ function validKeys() {
7143
7137
  function allowedValues(key) {
7144
7138
  return ENUM_KEYS[key];
7145
7139
  }
7146
- function mergeDirectoryContents(sourceDir, targetDir) {
7147
- if (!existsSync2(sourceDir))
7148
- return;
7149
- mkdirSync(targetDir, { recursive: true });
7150
- for (const entry of readdirSync(sourceDir)) {
7151
- const sourcePath = join2(sourceDir, entry);
7152
- const targetPath = join2(targetDir, entry);
7153
- try {
7154
- const sourceStat = statSync(sourcePath);
7155
- if (sourceStat.isDirectory()) {
7156
- mergeDirectoryContents(sourcePath, targetPath);
7157
- continue;
7158
- }
7159
- if (!existsSync2(targetPath))
7160
- copyFileSync(sourcePath, targetPath);
7161
- } catch {}
7162
- }
7163
- }
7164
7140
  function normalizeConfigValue(key, value) {
7165
7141
  if (typeof value !== "string")
7166
7142
  return;
@@ -7182,19 +7158,6 @@ function getDataDir() {
7182
7158
  try {
7183
7159
  mkdirSync(root, { recursive: true });
7184
7160
  } catch {}
7185
- if (hasOperatorOverride())
7186
- return root;
7187
- const home = effectiveHome();
7188
- const oldDir = join2(home, ".skills");
7189
- const oldConfigFile = join2(home, ".skillsrc");
7190
- try {
7191
- mergeDirectoryContents(oldDir, root);
7192
- } catch {}
7193
- if (existsSync2(oldConfigFile) && !existsSync2(join2(root, "config.json"))) {
7194
- try {
7195
- copyFileSync(oldConfigFile, join2(root, "config.json"));
7196
- } catch {}
7197
- }
7198
7161
  return root;
7199
7162
  }
7200
7163
  function getDataDirReadOnly() {
@@ -7289,730 +7252,23 @@ function unsetConfig(key, scope = "project") {
7289
7252
 
7290
7253
  // src/lib/portable-skills.ts
7291
7254
  import {
7292
- cpSync as cpSync2,
7293
7255
  existsSync as existsSync7,
7294
7256
  mkdirSync as mkdirSync3,
7295
7257
  mkdtempSync,
7296
- readdirSync as readdirSync5,
7258
+ readdirSync as readdirSync4,
7297
7259
  realpathSync as realpathSync2,
7298
7260
  renameSync,
7299
7261
  rmSync,
7300
- statSync as statSync6,
7262
+ statSync as statSync5,
7301
7263
  writeFileSync as writeFileSync3
7302
7264
  } from "fs";
7303
7265
  import { basename as basename2, dirname as dirname3, isAbsolute as isAbsolute2, join as join7, normalize as normalize2, relative as relative2, resolve as resolve2, sep as sep2 } from "path";
7304
7266
 
7305
- // src/lib/registry-data/development-tools.ts
7306
- var DEVELOPMENT_TOOLS_SKILLS = [
7307
- {
7308
- name: "repo-onboarding-report",
7309
- displayName: "Repo Onboarding Report",
7310
- description: "Generate repository onboarding packages with architecture maps, setup guides, risk registers, and first-week plans",
7311
- category: "Development Tools",
7312
- kind: "instruction",
7313
- tags: ["repository", "onboarding", "architecture", "developer-tools"]
7314
- },
7315
- {
7316
- name: "security-audit-report",
7317
- displayName: "Security Audit Report",
7318
- description: "Generate application security hardening reports covering auth, secrets, headers, webhooks, RLS, permissions, dependencies, and prioritized fixes",
7319
- category: "Development Tools",
7320
- kind: "instruction",
7321
- tags: ["security", "audit", "hardening", "rls", "webhooks"]
7322
- },
7323
- {
7324
- name: "performance-audit-report",
7325
- displayName: "Performance Audit Report",
7326
- description: "Generate performance audit reports with metrics, findings, budgets, remediation plans, and manifest artifacts",
7327
- category: "Development Tools",
7328
- kind: "instruction",
7329
- tags: ["performance", "audit", "latency", "budget", "web"]
7330
- },
7331
- {
7332
- name: "migration-plan-pack",
7333
- displayName: "Migration Plan Pack",
7334
- description: "Generate migration plans for frameworks, libraries, databases, infrastructure, and architecture upgrades with risk matrix, checklist, rollout, and test strategy artifacts",
7335
- category: "Development Tools",
7336
- kind: "instruction",
7337
- tags: ["migration", "upgrade", "planning", "frameworks", "databases"]
7338
- },
7339
- {
7340
- name: "test-suite-generator",
7341
- displayName: "Test Suite Generator",
7342
- description: "Generate runnable API, unit, and browser test suite packages with coverage notes",
7343
- category: "Development Tools",
7344
- kind: "instruction",
7345
- tags: ["testing", "qa", "api-tests", "browser-tests", "coverage"]
7346
- },
7347
- {
7348
- name: "api-test-suite",
7349
- displayName: "API Test Suite",
7350
- description: "Generate and run API test suites with comprehensive endpoint coverage",
7351
- category: "Development Tools",
7352
- tags: ["api", "testing", "automation", "qa"]
7353
- },
7354
- {
7355
- name: "api-docs-portal",
7356
- displayName: "API Docs Portal",
7357
- description: "Generate static API documentation portals from OpenAPI specs, route lists, and endpoint examples",
7358
- category: "Development Tools",
7359
- tags: ["api", "documentation", "openapi", "portal"]
7360
- },
7361
- {
7362
- name: "codefix",
7363
- displayName: "Code Fix",
7364
- description: "Code quality CLI for auto-linting, formatting, fixing, and style enforcement",
7365
- category: "Development Tools",
7366
- tags: ["code", "linting", "formatting", "quality"]
7367
- },
7368
- {
7369
- name: "commitpush",
7370
- displayName: "Commit Push",
7371
- description: "Create logical commits from repo changes and push directly to the main branch",
7372
- category: "Development Tools",
7373
- tags: ["git", "commit", "push", "automation"]
7374
- },
7375
- {
7376
- name: "commitpushpr",
7377
- displayName: "Commit Push PR",
7378
- description: "Create logical commits, push a feature branch, and open a GitHub pull request",
7379
- category: "Development Tools",
7380
- dependencies: ["commitpush"],
7381
- tags: ["git", "commit", "pull-request", "github", "automation"]
7382
- },
7383
- {
7384
- name: "database-explorer",
7385
- displayName: "Database Explorer",
7386
- description: "Explore and query databases with an interactive interface",
7387
- category: "Development Tools",
7388
- tags: ["database", "explorer", "sql", "query"]
7389
- },
7390
- {
7391
- name: "diff-viewer",
7392
- displayName: "Diff Viewer",
7393
- description: "View and analyze file differences with visual diff representation",
7394
- category: "Development Tools",
7395
- tags: ["diff", "comparison", "files", "code-review"]
7396
- },
7397
- {
7398
- name: "generate-api-client",
7399
- displayName: "Generate API Client",
7400
- description: "Generate API client libraries from OpenAPI specs and documentation",
7401
- category: "Development Tools",
7402
- tags: ["api", "client", "code-generation", "openapi"]
7403
- },
7404
- {
7405
- name: "generate-dockerfile",
7406
- displayName: "Generate Dockerfile",
7407
- description: "Generate optimized Dockerfiles for containerized applications",
7408
- category: "Development Tools",
7409
- tags: ["docker", "dockerfile", "containers", "devops"]
7410
- },
7411
- {
7412
- name: "generate-env",
7413
- displayName: "Generate Env",
7414
- description: "Generate environment variable files from templates and configurations",
7415
- category: "Development Tools",
7416
- tags: ["env", "environment", "configuration", "dotenv"]
7417
- },
7418
- {
7419
- name: "generate-sitemap",
7420
- displayName: "Generate Sitemap",
7421
- description: "Generate XML sitemaps for websites and web applications",
7422
- category: "Development Tools",
7423
- tags: ["sitemap", "seo", "xml", "web"]
7424
- },
7425
- {
7426
- name: "hook",
7427
- displayName: "Hook",
7428
- description: "Claude Code hook creation skill - generates standardized hook scaffolds",
7429
- category: "Development Tools",
7430
- tags: ["hooks", "scaffold", "claude-code", "automation"]
7431
- },
7432
- {
7433
- name: "http-server",
7434
- displayName: "HTTP Server",
7435
- description: "Spin up local HTTP servers for development and testing",
7436
- category: "Development Tools",
7437
- tags: ["http", "server", "development", "local"]
7438
- },
7439
- {
7440
- name: "lorem-generator",
7441
- displayName: "Lorem Generator",
7442
- description: "Generate placeholder text in various styles and lengths",
7443
- category: "Development Tools",
7444
- tags: ["lorem", "placeholder", "text", "mockup"]
7445
- },
7446
- {
7447
- name: "managemcp",
7448
- displayName: "Manage MCP",
7449
- description: "Manage MCP servers with install, configure, and lifecycle operations",
7450
- category: "Development Tools",
7451
- tags: ["mcp", "management", "servers", "configuration"]
7452
- },
7453
- {
7454
- name: "markdown-validator",
7455
- displayName: "Markdown Validator",
7456
- description: "Validate markdown files for syntax, links, and formatting issues",
7457
- category: "Development Tools",
7458
- tags: ["markdown", "validation", "linting", "formatting"]
7459
- },
7460
- {
7461
- name: "monitor",
7462
- displayName: "Monitor",
7463
- description: "Operate the monitor MCP for machine health, processes, cron jobs, and cleanup workflows",
7464
- category: "Development Tools",
7465
- tags: ["monitoring", "mcp", "processes", "operations"]
7466
- },
7467
- {
7468
- name: "regex-tester",
7469
- displayName: "Regex Tester",
7470
- description: "Test and validate regular expressions with sample inputs",
7471
- category: "Development Tools",
7472
- tags: ["regex", "testing", "validation", "patterns"]
7473
- },
7474
- {
7475
- name: "scancommitpr",
7476
- displayName: "Scan Commit PR",
7477
- description: "Scan repo changes, group into logical commits, push, and optionally create a PR",
7478
- category: "Development Tools",
7479
- dependencies: ["scancommitpush"],
7480
- tags: ["git", "commit", "push", "pull-request", "automation"]
7481
- },
7482
- {
7483
- name: "scancommitpush",
7484
- displayName: "Scan Commit Push",
7485
- description: "Scan repo changes, group into logical commits with conventional messages, and push to GitHub",
7486
- category: "Development Tools",
7487
- tags: ["git", "commit", "push", "automation"]
7488
- },
7489
- {
7490
- name: "security-audit",
7491
- displayName: "Security Audit",
7492
- description: "Perform security audits on codebases and infrastructure configurations",
7493
- category: "Development Tools",
7494
- tags: ["security", "audit", "vulnerabilities", "scanning"]
7495
- },
7496
- {
7497
- name: "tmux-session",
7498
- displayName: "Tmux Session",
7499
- description: "Create and manage grouped tmux sessions with workspace-aware naming and window layout guidance",
7500
- category: "Development Tools",
7501
- tags: ["tmux", "terminal", "sessions", "workspace"]
7502
- },
7503
- {
7504
- name: "validate-config",
7505
- displayName: "Validate Config",
7506
- description: "Validate configuration files for syntax and schema compliance",
7507
- category: "Development Tools",
7508
- tags: ["config", "validation", "schema", "linting"]
7509
- },
7510
- {
7511
- name: "oss-app-two-backend-storage",
7512
- displayName: "OSS App Two-Backend Storage",
7513
- description: "Recipe for the Hasna two-backend storage contract: client transport + HTTP store, server PG/SQLite backend, pg-migrations + apply script, fail-closed URL-without-key, bun bins, contract manifest, Dockerfile",
7514
- category: "Development Tools",
7515
- tags: ["storage", "backend", "postgresql", "sqlite", "two-backend", "oss-app"],
7516
- kind: "instruction"
7517
- }
7518
- ];
7519
-
7520
- // src/lib/registry-data/business-marketing.ts
7521
- var BUSINESS_MARKETING_SKILLS = [
7522
- {
7523
- name: "customer-feedback-report",
7524
- displayName: "Customer Feedback Report",
7525
- description: "Generate customer feedback reports with clusters, sentiment, root causes, roadmap recommendations, evidence, and PDF/Markdown artifacts",
7526
- category: "Business & Marketing",
7527
- kind: "instruction",
7528
- tags: ["feedback", "customer", "sentiment", "roadmap", "report"]
7529
- },
7530
- {
7531
- name: "pitch-deck",
7532
- displayName: "Pitch Deck",
7533
- description: "Generate investor and sales deck packages with slides, speaker notes, design direction, PDF, and PPTX artifacts",
7534
- category: "Business & Marketing",
7535
- kind: "instruction",
7536
- dependencies: ["market-research-report"],
7537
- tags: ["deck", "presentation", "investor", "sales", "pptx"]
7538
- },
7539
- {
7540
- name: "proposal-pack",
7541
- displayName: "Proposal Pack",
7542
- description: "Generate client proposal packages with proposal, statement of work, pricing, timeline, assumptions, cover email, and PDF/Markdown artifacts",
7543
- category: "Business & Marketing",
7544
- kind: "instruction",
7545
- tags: ["proposal", "sow", "sales", "pricing", "timeline"]
7546
- },
7547
- {
7548
- name: "seo-content-pack",
7549
- displayName: "SEO Content Pack",
7550
- description: "Generate SEO content packages with topic clusters, articles, metadata, internal links, FAQs, and publishing cadence",
7551
- category: "Business & Marketing",
7552
- kind: "instruction",
7553
- tags: ["seo", "content", "articles", "metadata"]
7554
- },
7555
- {
7556
- name: "landing-page-pack",
7557
- displayName: "Landing Page Pack",
7558
- description: "Generate landing page packages with conversion copy, wireframes, CTA maps, experiments, preview HTML, and implementation notes",
7559
- category: "Business & Marketing",
7560
- kind: "instruction",
7561
- tags: ["landing-page", "sales", "copywriting", "conversion"]
7562
- },
7563
- {
7564
- name: "ad-creative-pack",
7565
- displayName: "Ad Creative Pack",
7566
- description: "Generate paid ad packages with platform copy, creative concepts, image prompts, audience angles, and test matrices",
7567
- category: "Business & Marketing",
7568
- kind: "instruction",
7569
- tags: ["ads", "creative", "marketing", "copywriting"]
7570
- },
7571
- {
7572
- name: "email-sequence",
7573
- displayName: "Email Sequence",
7574
- description: "Generate email campaign packages with subject lines, preview text, body copy, segmentation notes, CTA variants, HTML emails, and send plans",
7575
- category: "Business & Marketing",
7576
- kind: "instruction",
7577
- tags: ["email", "marketing", "campaign", "copywriting"]
7578
- },
7579
- {
7580
- name: "social-content-calendar",
7581
- displayName: "Social Content Calendar",
7582
- description: "Generate social content calendars with daily posts, channel strategy, asset briefs, hooks, publishing schedules, and repurposing maps",
7583
- category: "Business & Marketing",
7584
- kind: "instruction",
7585
- tags: ["social", "content", "calendar", "marketing"]
7586
- },
7587
- {
7588
- name: "one-page-website",
7589
- displayName: "One Page Website",
7590
- description: "Generate static one-page website bundles with HTML, CSS, JavaScript, copy, section maps, deploy notes, and manifest",
7591
- category: "Business & Marketing",
7592
- tags: ["website", "landing-page", "static-site", "html"]
7593
- }
7594
- ];
7595
-
7596
- // src/lib/registry-data/productivity-organization.ts
7597
- var PRODUCTIVITY_ORGANIZATION_SKILLS = [
7598
- {
7599
- name: "meeting-pack",
7600
- displayName: "Meeting Pack",
7601
- description: "Generate meeting artifact packages with summaries, decisions, action items, follow-up email, timeline, project export, and manifest",
7602
- category: "Productivity & Organization",
7603
- kind: "instruction",
7604
- tags: ["meeting", "summary", "action-items", "decisions"]
7605
- },
7606
- {
7607
- name: "file-organizer",
7608
- displayName: "File Organizer",
7609
- description: "Organize files into structured directories based on type, date, or content",
7610
- category: "Productivity & Organization",
7611
- tags: ["files", "organization", "sorting", "cleanup"]
7612
- },
7613
- {
7614
- name: "folder-tree",
7615
- displayName: "Folder Tree",
7616
- description: "Generate and display folder tree structures for documentation",
7617
- category: "Productivity & Organization",
7618
- tags: ["folder", "tree", "structure", "visualization"]
7619
- },
7620
- {
7621
- name: "form-filler",
7622
- displayName: "Form Filler",
7623
- description: "Automatically fill out web forms and document templates",
7624
- category: "Productivity & Organization",
7625
- tags: ["forms", "automation", "filling", "data-entry"]
7626
- },
7627
- {
7628
- name: "merge-pdfs",
7629
- displayName: "Merge PDFs",
7630
- description: "Merge multiple PDF files into a single document",
7631
- category: "Productivity & Organization",
7632
- tags: ["pdf", "merge", "documents", "combining"]
7633
- },
7634
- {
7635
- name: "split-pdf",
7636
- displayName: "Split PDF",
7637
- description: "Split PDF documents into separate pages or sections",
7638
- category: "Productivity & Organization",
7639
- tags: ["pdf", "split", "documents", "pages"]
7640
- }
7641
- ];
7642
-
7643
- // src/lib/registry-data/project-management.ts
7644
- var PROJECT_MANAGEMENT_SKILLS = [
7645
- {
7646
- name: "businessactivity",
7647
- displayName: "Business Activity",
7648
- description: "Business activity, workflow, and ownership management service",
7649
- category: "Project Management",
7650
- tags: ["business", "workflow", "activities", "management"]
7651
- },
7652
- {
7653
- name: "implementation",
7654
- displayName: "Implementation",
7655
- description: "Create .implementation scaffold for project development tracking",
7656
- category: "Project Management",
7657
- tags: ["implementation", "tracking", "scaffold", "project"]
7658
- },
7659
- {
7660
- name: "implementation-plan",
7661
- displayName: "Implementation Plan",
7662
- description: "Generate detailed implementation plans with phases and milestones",
7663
- category: "Project Management",
7664
- tags: ["implementation", "planning", "milestones", "phases"]
7665
- },
7666
- {
7667
- name: "implementation-todo",
7668
- displayName: "Implementation Todo",
7669
- description: "Manage implementation task lists and todo items",
7670
- category: "Project Management",
7671
- tags: ["implementation", "todo", "tasks", "tracking"]
7672
- },
7673
- {
7674
- name: "todos-plan",
7675
- displayName: "Todos Plan",
7676
- description: "Author, sync, route, and verify Todos plans using Todos CLI plan IDs as source of truth",
7677
- category: "Project Management",
7678
- tags: ["todos", "plans", "tasks", "verification", "workflow"]
7679
- }
7680
- ];
7681
-
7682
- // src/lib/registry-data/content-generation.ts
7683
- var CONTENT_GENERATION_SKILLS = [
7684
- {
7685
- name: "pdf-generate",
7686
- displayName: "PDF Generate",
7687
- description: "Generate PDF documents with rich formatting and layouts",
7688
- category: "Content Generation",
7689
- tags: ["pdf", "document", "generation", "formatting"]
7690
- },
7691
- {
7692
- name: "slide-deck-generator",
7693
- displayName: "Slide Deck Generator",
7694
- description: "Generate slide decks from briefs, docs, or outlines with PDF, PPTX, speaker notes, and structured slide metadata",
7695
- category: "Content Generation",
7696
- tags: ["presentation", "slides", "deck", "documents"]
7697
- },
7698
- {
7699
- name: "generate-qrcode",
7700
- displayName: "Generate QR Code",
7701
- description: "Generate QR codes with custom styling and embedded data",
7702
- category: "Content Generation",
7703
- tags: ["qrcode", "generation", "encoding", "visual"]
7704
- },
7705
- {
7706
- name: "generate-resume",
7707
- displayName: "Generate Resume",
7708
- description: "Generate professional resumes with formatting and content optimization",
7709
- category: "Content Generation",
7710
- tags: ["resume", "cv", "career", "generation"]
7711
- }
7712
- ];
7713
-
7714
- // src/lib/registry-data/finance-compliance.ts
7715
- var FINANCE_COMPLIANCE_SKILLS = [
7716
- {
7717
- name: "contract-review-report",
7718
- displayName: "Contract Review Report",
7719
- description: "Generate contract review reports with risk register, clause summary, redline suggestions, negotiation email, and manifest artifacts",
7720
- category: "Finance & Compliance",
7721
- kind: "instruction",
7722
- tags: ["contract", "legal", "review", "risk"]
7723
- },
7724
- {
7725
- name: "invoice",
7726
- displayName: "Invoice",
7727
- description: "Generate professional invoices with company management and PDF export",
7728
- category: "Finance & Compliance",
7729
- tags: ["invoice", "billing", "pdf", "finance"]
7730
- },
7731
- {
7732
- name: "invoice-reconciliation",
7733
- displayName: "Invoice Reconciliation",
7734
- description: "Generate invoice reconciliation reports with matched payments, discrepancies, anomaly notes, summaries, and manifest artifacts",
7735
- category: "Finance & Compliance",
7736
- tags: ["invoice", "payments", "reconciliation", "finance"]
7737
- }
7738
- ];
7739
-
7740
- // src/lib/registry-data/data-analysis.ts
7741
- var DATA_ANALYSIS_SKILLS = [
7742
- {
7743
- name: "analyze-data",
7744
- displayName: "Analyze Data",
7745
- description: "Data science insights for CSV and JSON datasets with statistical analysis",
7746
- category: "Data & Analysis",
7747
- tags: ["data", "analysis", "csv", "json", "statistics"]
7748
- },
7749
- {
7750
- name: "dashboard-builder",
7751
- displayName: "Dashboard Builder",
7752
- description: "Build data dashboards with charts, metrics, and visualizations",
7753
- category: "Data & Analysis",
7754
- tags: ["dashboard", "visualization", "charts", "metrics"]
7755
- },
7756
- {
7757
- name: "data-anonymizer",
7758
- displayName: "Data Anonymizer",
7759
- description: "Anonymize sensitive data in datasets for privacy compliance",
7760
- category: "Data & Analysis",
7761
- tags: ["anonymization", "privacy", "data", "compliance"]
7762
- },
7763
- {
7764
- name: "generate-chart",
7765
- displayName: "Generate Chart",
7766
- description: "Generate data charts and visualizations from datasets",
7767
- category: "Data & Analysis",
7768
- tags: ["charts", "visualization", "data", "graphs"]
7769
- },
7770
- {
7771
- name: "read-csv",
7772
- displayName: "Read CSV",
7773
- description: "Parse CSV files into structured JSON with delimiter and encoding detection",
7774
- category: "Data & Analysis",
7775
- tags: ["csv", "parsing", "tabular", "data"]
7776
- },
7777
- {
7778
- name: "read-excel",
7779
- displayName: "Read Excel",
7780
- description: "Parse XLS and XLSX workbooks into structured JSON with sheet and formatted cell metadata",
7781
- category: "Data & Analysis",
7782
- tags: ["excel", "spreadsheet", "xlsx", "data"]
7783
- },
7784
- {
7785
- name: "pdf-to-markdown",
7786
- displayName: "PDF to Markdown",
7787
- description: "Convert PDFs into clean markdown with remote extraction and structure cleanup",
7788
- category: "Data & Analysis",
7789
- tags: ["pdf", "markdown", "conversion"]
7790
- },
7791
- {
7792
- name: "pdf-to-dataset",
7793
- displayName: "PDF to Dataset",
7794
- description: "Extract PDF tables, forms, invoices, and semi-structured content into CSV and JSON datasets",
7795
- category: "Data & Analysis",
7796
- tags: ["pdf", "dataset", "csv", "json", "extraction"]
7797
- },
7798
- {
7799
- name: "doc-read",
7800
- displayName: "Doc Read",
7801
- description: "Read and extract text from DOCX files with section parsing and metadata extraction",
7802
- category: "Data & Analysis",
7803
- tags: ["docx", "reader", "extraction", "word"]
7804
- }
7805
- ];
7806
-
7807
- // src/lib/registry-data/media-processing.ts
7808
- var MEDIA_PROCESSING_SKILLS = [
7809
- {
7810
- name: "video-highlight-pack",
7811
- displayName: "Video Highlight Pack",
7812
- description: "Generate video highlight packages with clip plans, captions, thumbnail briefs, chapter markers, social posts, and edit decisions",
7813
- category: "Media Processing",
7814
- kind: "instruction",
7815
- tags: ["video", "highlights", "clips", "captions"]
7816
- },
7817
- {
7818
- name: "compress-video",
7819
- displayName: "Compress Video",
7820
- description: "Compress video files while preserving visual quality using ffmpeg",
7821
- category: "Media Processing",
7822
- tags: ["video", "compression", "ffmpeg", "optimization"]
7823
- },
7824
- {
7825
- name: "audio-extract",
7826
- displayName: "Audio Extract",
7827
- description: "Extract audio tracks from video files with multiple format support",
7828
- category: "Media Processing",
7829
- tags: ["audio", "extraction", "video", "conversion"]
7830
- },
7831
- {
7832
- name: "extract-frames",
7833
- displayName: "Extract Frames",
7834
- description: "Extract frames from video files at specified intervals or timestamps",
7835
- category: "Media Processing",
7836
- tags: ["frames", "video", "extraction", "images"]
7837
- },
7838
- {
7839
- name: "gif-maker",
7840
- displayName: "GIF Maker",
7841
- description: "Create animated GIFs from images, videos, or screen recordings",
7842
- category: "Media Processing",
7843
- tags: ["gif", "animation", "images", "video"]
7844
- },
7845
- {
7846
- name: "video-downloader",
7847
- displayName: "Video Downloader",
7848
- description: "Download videos from various online platforms and services",
7849
- category: "Media Processing",
7850
- tags: ["video", "download", "platforms", "media"]
7851
- },
7852
- {
7853
- name: "watermark",
7854
- displayName: "Watermark",
7855
- description: "Add watermarks to images and documents for copyright protection",
7856
- category: "Media Processing",
7857
- tags: ["watermark", "protection", "copyright", "images"]
7858
- }
7859
- ];
7860
-
7861
- // src/lib/registry-data/design-branding.ts
7862
- var DESIGN_BRANDING_SKILLS = [
7863
- {
7864
- name: "brand-kit",
7865
- displayName: "Brand Kit",
7866
- description: "Generate brand kits with logo usage, palette, typography, brand voice, sample applications, Markdown guide, PDF guide, and SVG assets",
7867
- category: "Design & Branding",
7868
- kind: "instruction",
7869
- tags: ["brand", "design", "palette", "typography"]
7870
- },
7871
- {
7872
- name: "brand-assets",
7873
- displayName: "Brand Assets",
7874
- description: "Fetch official brand assets from a website or brand name with logos, PNG sizes, palette, typography, source metadata, and manifests",
7875
- category: "Design & Branding",
7876
- tags: ["brand", "logo", "assets", "palette", "typography"]
7877
- },
7878
- {
7879
- name: "logo-design",
7880
- displayName: "Logo Design",
7881
- description: "Generate multi-variant logo packages with transparent PNGs, vector-style SVGs, usage notes, and manifests",
7882
- category: "Design & Branding",
7883
- tags: ["logo", "design", "branding", "identity"]
7884
- },
7885
- {
7886
- name: "generate-favicon",
7887
- displayName: "Generate Favicon",
7888
- description: "Generate favicons in multiple sizes and formats for websites",
7889
- category: "Design & Branding",
7890
- tags: ["favicon", "icon", "design", "web"]
7891
- },
7892
- {
7893
- name: "product-mockup",
7894
- displayName: "Product Mockup",
7895
- description: "Generate product mockup packages with visual variants, prompts, usage notes, and asset metadata",
7896
- category: "Design & Branding",
7897
- tags: ["product", "mockup", "visualization", "marketing"]
7898
- },
7899
- {
7900
- name: "siteanalyze",
7901
- displayName: "Site Analyze",
7902
- description: "Analyze any website's design system \u2014 detects shadcn/ui, Tailwind, extracts colors, typography, and components via Playwright + Claude Vision.",
7903
- category: "Design & Branding",
7904
- tags: ["design", "shadcn", "tailwind", "colors", "typography", "playwright", "analysis", "styles"]
7905
- }
7906
- ];
7907
-
7908
- // src/lib/registry-data/web-browser.ts
7909
- var WEB_BROWSER_SKILLS = [
7910
- {
7911
- name: "domainpurchase",
7912
- displayName: "Domain Purchase",
7913
- description: "Purchase and manage domains via registrar connectors",
7914
- category: "Web & Browser",
7915
- tags: ["domain", "purchase", "registrar", "management"]
7916
- }
7917
- ];
7918
-
7919
- // src/lib/registry-data/research-writing.ts
7920
- var RESEARCH_WRITING_SKILLS = [
7921
- {
7922
- name: "blog-article",
7923
- displayName: "Blog Article",
7924
- description: "Create SEO-optimized blog article artifact packages",
7925
- category: "Research & Writing",
7926
- kind: "instruction",
7927
- tags: ["blog", "article", "writing", "seo"]
7928
- },
7929
- {
7930
- name: "market-research-report",
7931
- displayName: "Market Research Report",
7932
- description: "Generate market research packages with competitor tables, positioning, pricing notes, source notes, and PDF/Markdown artifacts",
7933
- category: "Research & Writing",
7934
- kind: "instruction",
7935
- tags: ["market-research", "competitors", "positioning", "pricing", "report"]
7936
- }
7937
- ];
7938
-
7939
- // src/lib/registry-data/science-academic.ts
7940
- var SCIENCE_ACADEMIC_SKILLS = [
7941
- {
7942
- name: "bio-sequence-tool",
7943
- displayName: "Bio Sequence Tool",
7944
- description: "Analyze and manipulate biological sequences including DNA, RNA, and protein data",
7945
- category: "Science & Academic",
7946
- tags: ["biology", "dna", "sequence", "bioinformatics"]
7947
- },
7948
- {
7949
- name: "experiment-power-calculator",
7950
- displayName: "Experiment Power Calculator",
7951
- description: "Calculate statistical power and sample size for experiments",
7952
- category: "Science & Academic",
7953
- tags: ["experiment", "statistics", "power-analysis", "sample-size"]
7954
- },
7955
- {
7956
- name: "latex-table-generator",
7957
- displayName: "LaTeX Table Generator",
7958
- description: "Generate formatted LaTeX tables from data for academic papers",
7959
- category: "Science & Academic",
7960
- tags: ["latex", "tables", "academic", "formatting"]
7961
- },
7962
- {
7963
- name: "scientific-figure-check",
7964
- displayName: "Scientific Figure Check",
7965
- description: "Validate scientific figures for accuracy, formatting, and publication standards",
7966
- category: "Science & Academic",
7967
- tags: ["scientific", "figures", "validation", "publishing"]
7968
- },
7969
- {
7970
- name: "statistical-test-selector",
7971
- displayName: "Statistical Test Selector",
7972
- description: "Recommend appropriate statistical tests based on data and research questions",
7973
- category: "Science & Academic",
7974
- tags: ["statistics", "test-selection", "research", "analysis"]
7975
- }
7976
- ];
7977
-
7978
- // src/lib/registry-data/education-learning.ts
7979
- var EDUCATION_LEARNING_SKILLS = [];
7980
-
7981
- // src/lib/registry-data/communication.ts
7982
- var COMMUNICATION_SKILLS = [];
7983
-
7984
- // src/lib/registry-data/health-wellness.ts
7985
- var HEALTH_WELLNESS_SKILLS = [];
7986
-
7987
- // src/lib/registry-data/travel-lifestyle.ts
7988
- var TRAVEL_LIFESTYLE_SKILLS = [];
7989
-
7990
- // src/lib/registry-data/event-management.ts
7991
- var EVENT_MANAGEMENT_SKILLS = [];
7992
-
7993
7267
  // src/lib/registry-data/index.ts
7994
- var SKILLS = [
7995
- ...DEVELOPMENT_TOOLS_SKILLS,
7996
- ...BUSINESS_MARKETING_SKILLS,
7997
- ...PRODUCTIVITY_ORGANIZATION_SKILLS,
7998
- ...PROJECT_MANAGEMENT_SKILLS,
7999
- ...CONTENT_GENERATION_SKILLS,
8000
- ...FINANCE_COMPLIANCE_SKILLS,
8001
- ...DATA_ANALYSIS_SKILLS,
8002
- ...MEDIA_PROCESSING_SKILLS,
8003
- ...DESIGN_BRANDING_SKILLS,
8004
- ...WEB_BROWSER_SKILLS,
8005
- ...RESEARCH_WRITING_SKILLS,
8006
- ...SCIENCE_ACADEMIC_SKILLS,
8007
- ...EDUCATION_LEARNING_SKILLS,
8008
- ...COMMUNICATION_SKILLS,
8009
- ...HEALTH_WELLNESS_SKILLS,
8010
- ...TRAVEL_LIFESTYLE_SKILLS,
8011
- ...EVENT_MANAGEMENT_SKILLS
8012
- ];
7268
+ var SKILLS = [];
8013
7269
 
8014
7270
  // src/lib/hosted-skill-set.ts
8015
- import { existsSync as existsSync3, readFileSync as readFileSync2, readdirSync as readdirSync2, statSync as statSync2 } from "fs";
7271
+ import { existsSync as existsSync3, readFileSync as readFileSync2, readdirSync, statSync } from "fs";
8016
7272
  import { join as join3 } from "path";
8017
7273
  var HOSTED_RUNTIMES = new Set(["hosted"]);
8018
7274
  var HOSTED_SOURCES = new Set(["remote", "private-hosted"]);
@@ -8051,7 +7307,7 @@ var BRACE_SOURCE_EXCLUSION = new RegExp(`^!skills/\\{(${SLUG}(?:,${SLUG})+)\\}/s
8051
7307
  var SINGLE_SOURCE_EXCLUSION = new RegExp(`^!skills/(${SLUG})/src$`);
8052
7308
 
8053
7309
  // src/lib/skill-validation.ts
8054
- import { existsSync as existsSync4, lstatSync, readFileSync as readFileSync3, readdirSync as readdirSync3, statSync as statSync3 } from "fs";
7310
+ import { existsSync as existsSync4, lstatSync, readFileSync as readFileSync3, readdirSync as readdirSync2, statSync as statSync2 } from "fs";
8055
7311
  import { isAbsolute, join as join4, normalize } from "path";
8056
7312
  var VALID_SKILL_KINDS = ["executable", "instruction"];
8057
7313
  var DOC_FILES = ["SKILL.md", "README.md", "CLAUDE.md"];
@@ -8214,7 +7470,7 @@ function validateSkillDirectory(name, skillPath, registryMeta) {
8214
7470
  if (!VALID_BIN_COMMAND.test(bareName)) {
8215
7471
  add(issues, "skill.name_invalid", `Skill name '${bareName}' must use lowercase letters, numbers, dots, underscores, or hyphens`);
8216
7472
  }
8217
- for (const entry of readdirSync3(skillPath).sort()) {
7473
+ for (const entry of readdirSync2(skillPath).sort()) {
8218
7474
  const entryPath = join4(skillPath, entry);
8219
7475
  if (RESERVED_SKILL_ENTRIES.has(entry)) {
8220
7476
  add(issues, "skill.reserved_file", `Reserved file '${entry}' is not allowed in skill packages`);
@@ -8339,7 +7595,7 @@ function validateSkillDirectory(name, skillPath, registryMeta) {
8339
7595
  const targetPath = join4(skillPath, target);
8340
7596
  if (!existsSync4(targetPath)) {
8341
7597
  add(warnings, "package.bin_target_missing", `package.json bin '${command}' target '${target}' is not present before build`);
8342
- } else if (statSync3(targetPath).isDirectory()) {
7598
+ } else if (statSync2(targetPath).isDirectory()) {
8343
7599
  add(issues, "package.bin_target_directory", `package.json bin '${command}' target '${target}' must point to a file, not a directory`);
8344
7600
  }
8345
7601
  }
@@ -8365,7 +7621,7 @@ function validateSkillDirectory(name, skillPath, registryMeta) {
8365
7621
  add(issues, "skill.src_index_missing", "Missing src/index.ts or src/index.js");
8366
7622
  } else {
8367
7623
  const indexPath = existsSync4(join4(srcDir, "index.ts")) ? join4(srcDir, "index.ts") : join4(srcDir, "index.js");
8368
- const size = statSync3(indexPath).size;
7624
+ const size = statSync2(indexPath).size;
8369
7625
  if (size < 50)
8370
7626
  add(warnings, "skill.src_index_minimal", `Source entry point is very small (${size}B)`);
8371
7627
  }
@@ -8388,9 +7644,9 @@ function validateRegistryConsistency(registry, skillsDir) {
8388
7644
  seen.add(name);
8389
7645
  return false;
8390
7646
  })));
8391
- const skillDirs = existsSync4(skillsDir) ? readdirSync3(skillsDir).filter((entry) => {
7647
+ const skillDirs = existsSync4(skillsDir) ? readdirSync2(skillsDir).filter((entry) => {
8392
7648
  const fullPath = join4(skillsDir, entry);
8393
- return !entry.startsWith(".") && entry !== "_common" && statSync3(fullPath).isDirectory();
7649
+ return !entry.startsWith(".") && entry !== "_common" && statSync2(fullPath).isDirectory();
8394
7650
  }) : [];
8395
7651
  const directoryNames = new Set(skillDirs);
8396
7652
  const registryNameSet = new Set(registryNames);
@@ -8406,7 +7662,7 @@ function validateRegistryConsistency(registry, skillsDir) {
8406
7662
 
8407
7663
  // src/lib/skill-hash.ts
8408
7664
  import { createHash } from "crypto";
8409
- import { existsSync as existsSync5, readdirSync as readdirSync4, readFileSync as readFileSync4, statSync as statSync4 } from "fs";
7665
+ import { existsSync as existsSync5, readdirSync as readdirSync3, readFileSync as readFileSync4, statSync as statSync3 } from "fs";
8410
7666
  import { join as join5, sep } from "path";
8411
7667
 
8412
7668
  // src/lib/skill-entry-path.ts
@@ -8506,7 +7762,7 @@ function collectBundleFiles(skillPath) {
8506
7762
  const absolute = join5(skillPath, entry);
8507
7763
  if (!existsSync5(absolute))
8508
7764
  continue;
8509
- if (statSync4(absolute).isDirectory())
7765
+ if (statSync3(absolute).isDirectory())
8510
7766
  collectDirectory(files, absolute, entry);
8511
7767
  else
8512
7768
  collectFile(files, absolute, entry);
@@ -8514,14 +7770,14 @@ function collectBundleFiles(skillPath) {
8514
7770
  return files.sort((a, b) => a.rel < b.rel ? -1 : a.rel > b.rel ? 1 : 0);
8515
7771
  }
8516
7772
  function collectDirectory(files, dir, rel) {
8517
- for (const entry of readdirSync4(dir).sort()) {
7773
+ for (const entry of readdirSync3(dir).sort()) {
8518
7774
  if (entry.startsWith("."))
8519
7775
  continue;
8520
7776
  const absolute = join5(dir, entry);
8521
7777
  const childRel = `${rel}/${entry}`;
8522
7778
  let stats;
8523
7779
  try {
8524
- stats = statSync4(absolute);
7780
+ stats = statSync3(absolute);
8525
7781
  } catch {
8526
7782
  continue;
8527
7783
  }
@@ -9595,7 +8851,6 @@ function escapeJsString(value) {
9595
8851
  return value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\r?\n/g, " ");
9596
8852
  }
9597
8853
  // src/lib/portable-skills.ts
9598
- var LEGACY_CUSTOM_DIRNAME = "custom";
9599
8854
  function getPortableSkillsRoot(options = {}) {
9600
8855
  return resolvePortableSkillsRoot(options, true);
9601
8856
  }
@@ -9607,60 +8862,8 @@ function resolvePortableSkillsRoot(options, migrate) {
9607
8862
  if (isOwnerLayoutMigrated(appDir) && safeIsDirectory(cache))
9608
8863
  return cache;
9609
8864
  const installed = join7(appDir, INSTALLED_SKILLS_DIRNAME);
9610
- if (migrate)
9611
- migrateLegacySkillLayout(appDir, installed);
9612
8865
  return installed;
9613
8866
  }
9614
- function looksLikeSkillDirectory(path) {
9615
- if (!safeIsDirectory(path))
9616
- return false;
9617
- return existsSync7(join7(path, "SKILL.md")) || existsSync7(join7(path, "skill.json")) || existsSync7(join7(path, "package.json"));
9618
- }
9619
- function migrateLegacySkillLayout(appDir, installed) {
9620
- if (!safeIsDirectory(appDir))
9621
- return;
9622
- const candidates = [];
9623
- try {
9624
- for (const entry of readdirSync5(appDir)) {
9625
- if (entry.startsWith(".") || entry === INSTALLED_SKILLS_DIRNAME)
9626
- continue;
9627
- const path = join7(appDir, entry);
9628
- if (entry === LEGACY_CUSTOM_DIRNAME) {
9629
- if (!safeIsDirectory(path))
9630
- continue;
9631
- try {
9632
- for (const nested of readdirSync5(path)) {
9633
- if (nested.startsWith("."))
9634
- continue;
9635
- const nestedPath = join7(path, nested);
9636
- if (looksLikeSkillDirectory(nestedPath))
9637
- candidates.push({ from: nestedPath, name: nested });
9638
- }
9639
- } catch {}
9640
- continue;
9641
- }
9642
- if (looksLikeSkillDirectory(path))
9643
- candidates.push({ from: path, name: entry });
9644
- }
9645
- } catch {
9646
- return;
9647
- }
9648
- for (const { from, name } of candidates) {
9649
- const target = join7(installed, name);
9650
- if (existsSync7(target))
9651
- continue;
9652
- const staging = join7(installed, `.migrating-${name}-${process.pid}`);
9653
- try {
9654
- rmSync(staging, { recursive: true, force: true });
9655
- cpSync2(from, staging, { recursive: true, errorOnExist: false });
9656
- renameSync(staging, target);
9657
- } catch {
9658
- try {
9659
- rmSync(staging, { recursive: true, force: true });
9660
- } catch {}
9661
- }
9662
- }
9663
- }
9664
8867
  function getPortableSkillPath(name, options = {}) {
9665
8868
  return join7(getPortableSkillsRoot(options), normalizePortableSkillName(name));
9666
8869
  }
@@ -9672,7 +8875,7 @@ function findPortableSkill(name, options = {}) {
9672
8875
  return null;
9673
8876
  }
9674
8877
  const path = getPortableSkillPath(normalized, options);
9675
- if (!existsSync7(path) || !statSync6(path).isDirectory())
8878
+ if (!existsSync7(path) || !statSync5(path).isDirectory())
9676
8879
  return null;
9677
8880
  try {
9678
8881
  return summarizePortableSkill(path, normalized);
@@ -9685,7 +8888,7 @@ function listPortableSkills(options = {}) {
9685
8888
  if (!safeIsDirectory(root))
9686
8889
  return [];
9687
8890
  const skills = [];
9688
- for (const entry of readdirSync5(root).sort()) {
8891
+ for (const entry of readdirSync4(root).sort()) {
9689
8892
  if (entry.startsWith("."))
9690
8893
  continue;
9691
8894
  const path = join7(root, entry);
@@ -9741,7 +8944,7 @@ function scaffoldPortableSkill(name, options = {}) {
9741
8944
  }
9742
8945
  function portPortableSkillDirectory(sourceDir, options = {}) {
9743
8946
  const absoluteSource = normalize2(sourceDir);
9744
- if (!existsSync7(absoluteSource) || !statSync6(absoluteSource).isDirectory()) {
8947
+ if (!existsSync7(absoluteSource) || !statSync5(absoluteSource).isDirectory()) {
9745
8948
  throw new Error(`Import directory not found: ${sourceDir}`);
9746
8949
  }
9747
8950
  const continueOnError = options.continueOnError ?? true;
@@ -9753,7 +8956,7 @@ function portPortableSkillDirectory(sourceDir, options = {}) {
9753
8956
  };
9754
8957
  const imported = [];
9755
8958
  const skipped = [];
9756
- const entries = readdirSync5(absoluteSource, { withFileTypes: true }).map((entry) => entry.name).filter((entryName) => !entryName.startsWith(".")).sort();
8959
+ const entries = readdirSync4(absoluteSource, { withFileTypes: true }).map((entry) => entry.name).filter((entryName) => !entryName.startsWith(".")).sort();
9757
8960
  for (const entryName of entries) {
9758
8961
  const childPath = join7(absoluteSource, entryName);
9759
8962
  if (!safeIsDirectory(childPath))
@@ -9808,7 +9011,7 @@ function assertDisjointImportPaths(source, destination) {
9808
9011
  }
9809
9012
  function portPortableSkill(sourcePath, options = {}) {
9810
9013
  const absoluteSource = normalize2(sourcePath);
9811
- if (!existsSync7(absoluteSource) || !statSync6(absoluteSource).isDirectory()) {
9014
+ if (!existsSync7(absoluteSource) || !statSync5(absoluteSource).isDirectory()) {
9812
9015
  throw new Error(`Skill source directory not found: ${sourcePath}`);
9813
9016
  }
9814
9017
  const inferred = readPortableSkillManifestForImport(absoluteSource);
@@ -9972,7 +9175,7 @@ function validatePortableSkillDirectory(name, skillPath) {
9972
9175
  const entryPath = join7(skillPath, command.entry);
9973
9176
  if (!existsSync7(entryPath))
9974
9177
  add3(issues, "portable.command_entry_missing", `Command '${command.name}' entry '${command.entry}' is missing`);
9975
- else if (statSync6(entryPath).isDirectory())
9178
+ else if (statSync5(entryPath).isDirectory())
9976
9179
  add3(issues, "portable.command_entry_directory", `Command '${command.name}' entry '${command.entry}' must be a file`);
9977
9180
  }
9978
9181
  }
@@ -10062,7 +9265,7 @@ function summarizePortableSkill(skillPath, fallbackName) {
10062
9265
  }
10063
9266
  function safeIsDirectory(path) {
10064
9267
  try {
10065
- return statSync6(path).isDirectory();
9268
+ return statSync5(path).isDirectory();
10066
9269
  } catch {
10067
9270
  return false;
10068
9271
  }
@@ -10128,9 +9331,7 @@ function mergeSkillRegistryLists(...groups) {
10128
9331
  }
10129
9332
 
10130
9333
  // src/lib/skill-aliases.ts
10131
- var SKILL_ALIASES = {
10132
- "create-blog-article": "blog-article"
10133
- };
9334
+ var SKILL_ALIASES = {};
10134
9335
  function normalizeSkillSlug(name) {
10135
9336
  return name.trim();
10136
9337
  }
@@ -10159,16 +9360,7 @@ var CATEGORIES = [
10159
9360
  "Travel & Lifestyle",
10160
9361
  "Event Management"
10161
9362
  ];
10162
- var BASIC_SKILL_NAMES = [
10163
- "blog-article",
10164
- "ad-creative-pack",
10165
- "email-sequence",
10166
- "seo-content-pack",
10167
- "social-content-calendar",
10168
- "pitch-deck",
10169
- "proposal-pack",
10170
- "market-research-report"
10171
- ];
9363
+ var BASIC_SKILL_NAMES = [];
10172
9364
 
10173
9365
  // src/lib/search.ts
10174
9366
  function editDistance(a, b) {
@@ -10295,7 +9487,7 @@ function discoverSkillsInDir(dir, source = "custom") {
10295
9487
  return [];
10296
9488
  const result = [];
10297
9489
  try {
10298
- const entries = readdirSync6(dir, { withFileTypes: true });
9490
+ const entries = readdirSync5(dir, { withFileTypes: true });
10299
9491
  for (const entry of entries) {
10300
9492
  if (!entry.isDirectory())
10301
9493
  continue;
@@ -10331,7 +9523,7 @@ function findExtensionSkillPath(name) {
10331
9523
  if (!config.extensionsDir || !existsSync8(config.extensionsDir))
10332
9524
  return null;
10333
9525
  try {
10334
- const entries = readdirSync6(config.extensionsDir, { withFileTypes: true });
9526
+ const entries = readdirSync5(config.extensionsDir, { withFileTypes: true });
10335
9527
  for (const entry of entries) {
10336
9528
  if (!entry.isDirectory())
10337
9529
  continue;
@@ -10357,11 +9549,7 @@ var registryCacheTime = 0;
10357
9549
  var registryCacheKey = null;
10358
9550
  var REGISTRY_CACHE_TTL = 5000;
10359
9551
  function registryRootKey() {
10360
- return JSON.stringify([
10361
- process.env[DATA_DIR_ENV] ?? "",
10362
- process.env["HOME"] ?? "",
10363
- process.env["USERPROFILE"] ?? ""
10364
- ]);
9552
+ return JSON.stringify([getDataDirReadOnly(), process.cwd()]);
10365
9553
  }
10366
9554
  function loadRegistry(cwd) {
10367
9555
  const now = Date.now();
@@ -10369,22 +9557,16 @@ function loadRegistry(cwd) {
10369
9557
  if (registryCache && registryCacheKey === rootKey && now - registryCacheTime < REGISTRY_CACHE_TTL) {
10370
9558
  return registryCache;
10371
9559
  }
10372
- const dataDir2 = getDataDir();
10373
9560
  const config = loadConfig();
10374
- const official = SKILLS.map((s) => ({ ...s, source: "official" }));
10375
9561
  const extensions = config.extensionsDir ? discoverSkillsInDir(config.extensionsDir, "extension") : [];
10376
- const portableCustom = listPortableSkillMetas();
10377
- const legacyCustom = discoverSkillsInDir(join8(dataDir2, "custom"));
10378
- const globalCustom = mergeCustomSkills([...legacyCustom, ...portableCustom]);
10379
- registryCache = mergeSkillRegistryLists(official, extensions, globalCustom);
9562
+ const owned = listPortableSkillMetas();
9563
+ registryCache = mergeSkillRegistryLists(extensions, owned);
10380
9564
  registryCacheTime = now;
10381
9565
  registryCacheKey = rootKey;
10382
9566
  return registryCache;
10383
9567
  }
10384
9568
  function loadBasicRegistry(cwd) {
10385
- const registry = loadRegistry(cwd);
10386
- const byName = new Map(registry.map((skill) => [skill.name, skill]));
10387
- return BASIC_SKILL_NAMES.map((name) => byName.get(name)).filter((skill) => skill !== undefined);
9569
+ return loadRegistry(cwd);
10388
9570
  }
10389
9571
  function loadRegistryProfile(profile = "basic", cwd) {
10390
9572
  return profile === "all" ? loadRegistry(cwd) : loadBasicRegistry(cwd);
@@ -10402,12 +9584,6 @@ function getSkill(name) {
10402
9584
  const slug = normalizeSkillSlug(name);
10403
9585
  return registry.find((s) => s.name === slug) ?? registry.find((s) => s.name === resolveSkillAlias(slug));
10404
9586
  }
10405
- function mergeCustomSkills(skills) {
10406
- const byName = new Map;
10407
- for (const skill of skills)
10408
- byName.set(skill.name, skill);
10409
- return Array.from(byName.values()).sort((a, b) => a.name.localeCompare(b.name));
10410
- }
10411
9587
  function getSkillsByTag(tag) {
10412
9588
  const needle = tag.toLowerCase();
10413
9589
  return loadRegistry().filter((s) => s.tags.some((t) => t.toLowerCase().includes(needle)));
@@ -10422,22 +9598,21 @@ function getAllTags() {
10422
9598
  }
10423
9599
  // src/lib/installer.ts
10424
9600
  import { existsSync as existsSync13, readFileSync as readFileSync14, rmSync as rmSync3 } from "fs";
10425
- import { dirname as dirname12, join as join20 } from "path";
9601
+ import { join as join20 } from "path";
10426
9602
  import { homedir as homedir4 } from "os";
10427
- import { fileURLToPath } from "url";
10428
9603
 
10429
9604
  // src/lib/agent-sync.ts
10430
9605
  import {
10431
- cpSync as cpSync3,
9606
+ cpSync as cpSync2,
10432
9607
  existsSync as existsSync11,
10433
9608
  lstatSync as lstatSync12,
10434
9609
  mkdirSync as mkdirSync6,
10435
9610
  mkdtempSync as mkdtempSync2,
10436
9611
  readFileSync as readFileSync12,
10437
- readdirSync as readdirSync11,
9612
+ readdirSync as readdirSync10,
10438
9613
  renameSync as renameSync4,
10439
9614
  rmSync as rmSync2,
10440
- statSync as statSync9,
9615
+ statSync as statSync8,
10441
9616
  writeFileSync as writeFileSync6
10442
9617
  } from "fs";
10443
9618
  import { homedir as homedir3 } from "os";
@@ -10445,7 +9620,7 @@ import { basename as basename3, dirname as dirname11, join as join18 } from "pat
10445
9620
 
10446
9621
  // src/lib/agent-integration.ts
10447
9622
  import { createHash as createHash9, randomUUID as randomUUID2 } from "crypto";
10448
- import { existsSync as existsSync10, lstatSync as lstatSync11, statSync as statSync8, mkdirSync as mkdirSync5, readFileSync as readFileSync11, readdirSync as readdirSync10, opendirSync as opendirSync3, readlinkSync as readlinkSync2, realpathSync as realpathSync4, renameSync as renameSync3, rmdirSync, writeFileSync as writeFileSync5, unlinkSync as unlinkSync2, chmodSync, openSync as openSync4, closeSync as closeSync4, fsyncSync, fstatSync as fstatSync4, readSync as readSync4, constants as constants4, linkSync } from "fs";
9623
+ import { existsSync as existsSync10, lstatSync as lstatSync11, statSync as statSync7, mkdirSync as mkdirSync5, readFileSync as readFileSync11, readdirSync as readdirSync9, opendirSync as opendirSync3, readlinkSync as readlinkSync2, realpathSync as realpathSync4, renameSync as renameSync3, rmdirSync, writeFileSync as writeFileSync5, unlinkSync as unlinkSync2, chmodSync, openSync as openSync4, closeSync as closeSync4, fsyncSync, fstatSync as fstatSync4, readSync as readSync4, constants as constants4, linkSync } from "fs";
10449
9624
  import { dirname as dirname10, join as join17, resolve as resolve9, relative as relative4, isAbsolute as isAbsolute8, sep as sep5 } from "path";
10450
9625
  import { homedir as homedir2 } from "os";
10451
9626
 
@@ -10460,7 +9635,7 @@ import { dirname as dirname4, join as join10, parse, resolve as resolve3 } from
10460
9635
 
10461
9636
  // src/lib/skill-bundle.ts
10462
9637
  import { createHash as createHash2 } from "crypto";
10463
- import { readFileSync as readFileSync7, readdirSync as readdirSync7, statSync as statSync7 } from "fs";
9638
+ import { readFileSync as readFileSync7, readdirSync as readdirSync6, statSync as statSync6 } from "fs";
10464
9639
  import { join as join9, relative as relative3 } from "path";
10465
9640
  import { createGunzip } from "zlib";
10466
9641
  var BLOCK = 512;
@@ -10622,7 +9797,7 @@ function collectSkillBundleEntries(dir) {
10622
9797
  return entries.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
10623
9798
  }
10624
9799
  function walk(root, current, out) {
10625
- for (const entry of readdirSync7(current, { withFileTypes: true })) {
9800
+ for (const entry of readdirSync6(current, { withFileTypes: true })) {
10626
9801
  const absolute = join9(current, entry.name);
10627
9802
  const rel = relative3(root, absolute).split("\\").join("/");
10628
9803
  const isRootLevel = !rel.includes("/");
@@ -10644,7 +9819,7 @@ function walk(root, current, out) {
10644
9819
  continue;
10645
9820
  if (isCredentialFile(entry.name))
10646
9821
  continue;
10647
- const stats = statSync7(absolute);
9822
+ const stats = statSync6(absolute);
10648
9823
  out.push({
10649
9824
  path: rel,
10650
9825
  bytes: ownBytes(readFileSync7(absolute)),
@@ -11501,7 +10676,7 @@ function requiresCliSkillLoading(dataDir2 = getDataDirReadOnly()) {
11501
10676
 
11502
10677
  // src/lib/agent-bridge.ts
11503
10678
  import { createHash as createHash4 } from "crypto";
11504
- import { lstatSync as lstatSync5, readFileSync as readFileSync8, readdirSync as readdirSync8 } from "fs";
10679
+ import { lstatSync as lstatSync5, readFileSync as readFileSync8, readdirSync as readdirSync7 } from "fs";
11505
10680
  import { join as join12 } from "path";
11506
10681
  var CLI_BRIDGE_NAME = "skills-cli";
11507
10682
  var CLI_BRIDGE_VERSION = 1;
@@ -11531,7 +10706,7 @@ function isOwnedCliBridge(path, expectedPaths) {
11531
10706
  try {
11532
10707
  if (!lstatSync5(path).isDirectory())
11533
10708
  return false;
11534
- if (JSON.stringify(readdirSync8(path).sort()) !== JSON.stringify(Object.keys(CLI_BRIDGE_FILES).sort()))
10709
+ if (JSON.stringify(readdirSync7(path).sort()) !== JSON.stringify(Object.keys(CLI_BRIDGE_FILES).sort()))
11535
10710
  return false;
11536
10711
  return Object.entries(CLI_BRIDGE_FILES).every(([name, content]) => {
11537
10712
  const file = join12(path, name), stat = lstatSync5(file);
@@ -11544,10 +10719,10 @@ function isOwnedCliBridge(path, expectedPaths) {
11544
10719
 
11545
10720
  // src/lib/agent-discovery.ts
11546
10721
  import { createHash as createHash8 } from "crypto";
11547
- import { lstatSync as lstatSync10, readFileSync as readFileSync10, readdirSync as readdirSync9, realpathSync as realpathSync3 } from "fs";
10722
+ import { lstatSync as lstatSync10, readFileSync as readFileSync10, readdirSync as readdirSync8, realpathSync as realpathSync3 } from "fs";
11548
10723
  import { dirname as dirname9, isAbsolute as isAbsolute7, join as join16, resolve as resolve8, sep as sep4 } from "path";
11549
10724
 
11550
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/yaml/dist/index.js
10725
+ // node_modules/yaml/dist/index.js
11551
10726
  var composer = require_composer();
11552
10727
  var Document = require_Document();
11553
10728
  var Schema = require_Schema();
@@ -12156,7 +11331,7 @@ function resolveAgentDiscovery(options) {
12156
11331
  safe3(builtinRoot);
12157
11332
  if (!lstatSync10(builtinRoot, { throwIfNoEntry: false })?.isDirectory())
12158
11333
  unresolved("installed Gemini builtin root is missing");
12159
- for (const name of readdirSync9(builtinRoot).sort()) {
11334
+ for (const name of readdirSync8(builtinRoot).sort()) {
12160
11335
  const text2 = witness(join16(builtinRoot, name, "SKILL.md"));
12161
11336
  const match = text2?.match(/^---\r?\n[\s\S]*?^name:\s*([a-z0-9][a-z0-9-]*)\s*$/m);
12162
11337
  if (!match?.[1] || builtinNames.includes(match[1]))
@@ -12192,7 +11367,7 @@ function resolveAgentDiscovery(options) {
12192
11367
  unresolved("plugin hooks require a separate no-skill-injection review");
12193
11368
  const commands = join16(root, "commands");
12194
11369
  safe3(commands);
12195
- if (agent === "claude" && (manifest.commands !== undefined || lstatSync10(commands, { throwIfNoEntry: false })?.isDirectory() && readdirSync9(commands).length))
11370
+ if (agent === "claude" && (manifest.commands !== undefined || lstatSync10(commands, { throwIfNoEntry: false })?.isDirectory() && readdirSync8(commands).length))
12196
11371
  unresolved("legacy command discovery requires retirement or a dedicated format adapter");
12197
11372
  const rootSkill = witness(join16(root, "SKILL.md"));
12198
11373
  if (rootSkill !== null)
@@ -12214,7 +11389,7 @@ function resolveAgentDiscovery(options) {
12214
11389
  const installed = registrations === null ? {} : parseConfig(registrations, join16(home, ".claude/plugins/installed_plugins.json")).plugins;
12215
11390
  const commands = canonical2(join16(home, ".claude/commands"));
12216
11391
  safe3(commands);
12217
- if (lstatSync10(commands, { throwIfNoEntry: false })?.isDirectory() && readdirSync9(commands).length)
11392
+ if (lstatSync10(commands, { throwIfNoEntry: false })?.isDirectory() && readdirSync8(commands).length)
12218
11393
  unresolved("legacy home command discovery requires a dedicated format adapter");
12219
11394
  for (const [id, enabled] of Object.entries(config.enabledPlugins ?? {})) {
12220
11395
  if (enabled === false)
@@ -12256,7 +11431,7 @@ function resolveAgentDiscovery(options) {
12256
11431
  }
12257
11432
  const localPlugins = join16(home, ".config/opencode/plugins");
12258
11433
  safe3(localPlugins);
12259
- if (lstatSync10(localPlugins, { throwIfNoEntry: false }) && readdirSync9(localPlugins).some((name) => name !== "skills-cli.js"))
11434
+ if (lstatSync10(localPlugins, { throwIfNoEntry: false }) && readdirSync8(localPlugins).some((name) => name !== "skills-cli.js"))
12260
11435
  unresolved("additional local plugin hooks require review");
12261
11436
  } else if (agent === "hermes") {
12262
11437
  for (const directory of [join16(home, ".hermes/plugins"), join16(home, ".hermes/hermes-agent")]) {
@@ -12272,7 +11447,7 @@ function resolveAgentDiscovery(options) {
12272
11447
  const directory = join16(home, ".gemini/extensions");
12273
11448
  safe3(directory);
12274
11449
  if (lstatSync10(directory, { throwIfNoEntry: false }))
12275
- for (const name of readdirSync9(directory)) {
11450
+ for (const name of readdirSync8(directory)) {
12276
11451
  const root = join16(directory, name);
12277
11452
  safe3(root);
12278
11453
  if (!lstatSync10(root)?.isDirectory())
@@ -12456,7 +11631,7 @@ function treeHash(root) {
12456
11631
  const rel = relative4(root, path);
12457
11632
  if (stat.isDirectory()) {
12458
11633
  hash2.update(`d\x00${rel}\x00`);
12459
- for (const name of readdirSync10(path).sort())
11634
+ for (const name of readdirSync9(path).sort())
12460
11635
  visit2(join17(path, name));
12461
11636
  return;
12462
11637
  }
@@ -12554,7 +11729,7 @@ function inventoryNativeSkills(home = homedir2(), options = {}) {
12554
11729
  continue;
12555
11730
  const child = join17(path, name);
12556
11731
  if (isVendor && lstatSync11(child, { throwIfNoEntry: false })?.isSymbolicLink()) {
12557
- const target = statSync8(child, { throwIfNoEntry: false });
11732
+ const target = statSync7(child, { throwIfNoEntry: false });
12558
11733
  if (target?.isFile() || pluginCache && target?.isDirectory() && emptySiblingCacheAlias(child, path)) {
12559
11734
  scan.entries++;
12560
11735
  continue;
@@ -13154,7 +12329,7 @@ function packageSourceRoots(source) {
13154
12329
  function containsSkillDirectories(path) {
13155
12330
  let entries;
13156
12331
  try {
13157
- entries = readdirSync11(path);
12332
+ entries = readdirSync10(path);
13158
12333
  } catch {
13159
12334
  return false;
13160
12335
  }
@@ -13167,7 +12342,7 @@ function containsSkillDirectories(path) {
13167
12342
  }
13168
12343
  function isDirectory(path) {
13169
12344
  try {
13170
- return statSync9(path).isDirectory();
12345
+ return statSync8(path).isDirectory();
13171
12346
  } catch {
13172
12347
  return false;
13173
12348
  }
@@ -13304,7 +12479,7 @@ function writeManagedSkillDir(dir, skillMd, options) {
13304
12479
  let preserveTransaction = false;
13305
12480
  try {
13306
12481
  if (options.resourceDir) {
13307
- cpSync3(options.resourceDir, candidateDir, { recursive: true, force: true });
12482
+ cpSync2(options.resourceDir, candidateDir, { recursive: true, force: true });
13308
12483
  } else {
13309
12484
  mkdirSync6(candidateDir, { recursive: true });
13310
12485
  }
@@ -13521,30 +12696,15 @@ function isPinSource(value) {
13521
12696
  }
13522
12697
 
13523
12698
  // src/lib/installer.ts
13524
- var __dirname2 = dirname12(fileURLToPath(import.meta.url));
13525
- function findSkillsDir() {
13526
- let dir = __dirname2;
13527
- for (let i = 0;i < 5; i++) {
13528
- const candidate = join20(dir, "skills");
13529
- if (existsSync13(candidate) && !dir.includes(".skills"))
13530
- return candidate;
13531
- dir = dirname12(dir);
13532
- }
13533
- return join20(__dirname2, "..", "skills");
13534
- }
13535
- var SKILLS_DIR = findSkillsDir();
13536
12699
  function getSkillPath(name) {
13537
12700
  const skillName = normalizeSkillName(getCanonicalSkillName(name));
13538
12701
  const portable = findPortableSkill(skillName);
13539
12702
  if (portable)
13540
12703
  return portable.path;
13541
- const legacyCustomPath = join20(getDataDir(), "custom", skillName);
13542
- if (existsSync13(legacyCustomPath))
13543
- return legacyCustomPath;
13544
12704
  const extensionPath = findExtensionSkillPath(skillName);
13545
12705
  if (extensionPath)
13546
12706
  return extensionPath;
13547
- return join20(SKILLS_DIR, skillName);
12707
+ return join20(getPortableSkillsRoot(), skillName);
13548
12708
  }
13549
12709
  function getCanonicalSkillName(name) {
13550
12710
  return getSkill(name)?.name ?? resolveSkillAlias(normalizeSkillSlug(name));
@@ -13798,7 +12958,7 @@ function loadProjectConfigCompat(targetDir) {
13798
12958
  }
13799
12959
  // src/lib/run-state.ts
13800
12960
  import { createHash as createHash10, randomBytes } from "crypto";
13801
- import { existsSync as existsSync14, mkdirSync as mkdirSync8, readFileSync as readFileSync15, readdirSync as readdirSync12, statSync as statSync10, writeFileSync as writeFileSync8 } from "fs";
12961
+ import { existsSync as existsSync14, mkdirSync as mkdirSync8, readFileSync as readFileSync15, readdirSync as readdirSync11, statSync as statSync9, writeFileSync as writeFileSync8 } from "fs";
13802
12962
  import { extname, join as join21, relative as relative5 } from "path";
13803
12963
  function createSkillRun(params, targetDir = process.cwd()) {
13804
12964
  const now = new Date;
@@ -13878,11 +13038,11 @@ function listSkillRuns(targetDir = process.cwd(), limit = 50) {
13878
13038
  if (!existsSync14(runsRoot))
13879
13039
  return [];
13880
13040
  const records = [];
13881
- for (const day of readdirSync12(runsRoot).sort().reverse()) {
13041
+ for (const day of readdirSync11(runsRoot).sort().reverse()) {
13882
13042
  const dayDir = join21(runsRoot, day);
13883
- if (!statSync10(dayDir).isDirectory())
13043
+ if (!statSync9(dayDir).isDirectory())
13884
13044
  continue;
13885
- for (const runId of readdirSync12(dayDir).sort().reverse()) {
13045
+ for (const runId of readdirSync11(dayDir).sort().reverse()) {
13886
13046
  const record2 = readRunRecord(join21(dayDir, runId));
13887
13047
  if (record2)
13888
13048
  records.push(record2);
@@ -13896,7 +13056,7 @@ function findSkillRun(runId, targetDir = process.cwd()) {
13896
13056
  const runsRoot = join21(getProjectStateDir(targetDir), "runs");
13897
13057
  if (!existsSync14(runsRoot))
13898
13058
  return null;
13899
- for (const day of readdirSync12(runsRoot)) {
13059
+ for (const day of readdirSync11(runsRoot)) {
13900
13060
  const record2 = readRunRecord(join21(runsRoot, day, runId));
13901
13061
  if (record2)
13902
13062
  return record2;
@@ -13919,7 +13079,7 @@ function collectRunArtifacts(context) {
13919
13079
  return [];
13920
13080
  const artifacts = [];
13921
13081
  for (const path of walkFiles(context.exportDir)) {
13922
- const stat = statSync10(path);
13082
+ const stat = statSync9(path);
13923
13083
  const bytes = readFileSync15(path);
13924
13084
  artifacts.push({
13925
13085
  path: toProjectRelative(context.targetDir, path),
@@ -13942,9 +13102,9 @@ function readRunRecord(runDir) {
13942
13102
  }
13943
13103
  function walkFiles(dir) {
13944
13104
  const files = [];
13945
- for (const entry of readdirSync12(dir)) {
13105
+ for (const entry of readdirSync11(dir)) {
13946
13106
  const full = join21(dir, entry);
13947
- if (statSync10(full).isDirectory())
13107
+ if (statSync9(full).isDirectory())
13948
13108
  files.push(...walkFiles(full));
13949
13109
  else
13950
13110
  files.push(full);
@@ -13989,7 +13149,7 @@ function mimeForPath(path) {
13989
13149
  }
13990
13150
  }
13991
13151
  // src/lib/dependency-preparation.ts
13992
- import { constants as constants5, closeSync as closeSync5, fstatSync as fstatSync5, lstatSync as lstatSync13, mkdirSync as mkdirSync9, openSync as openSync5, readFileSync as readFileSync16, readdirSync as readdirSync13, rmdirSync as rmdirSync2, unlinkSync as unlinkSync3, ftruncateSync, writeSync } from "fs";
13152
+ import { constants as constants5, closeSync as closeSync5, fstatSync as fstatSync5, lstatSync as lstatSync13, mkdirSync as mkdirSync9, openSync as openSync5, readFileSync as readFileSync16, readdirSync as readdirSync12, rmdirSync as rmdirSync2, unlinkSync as unlinkSync3, ftruncateSync, writeSync } from "fs";
13993
13153
  import { join as join22 } from "path";
13994
13154
 
13995
13155
  // src/lib/preparation-process.ts
@@ -14059,7 +13219,7 @@ function claimPreparation(skillPath) {
14059
13219
  if (!lstatSync13(marker).isDirectory() || lstatSync13(marker).isSymbolicLink())
14060
13220
  return;
14061
13221
  if (!created) {
14062
- if (readdirSync13(marker).some((name) => name !== "state.json"))
13222
+ if (readdirSync12(marker).some((name) => name !== "state.json"))
14063
13223
  return;
14064
13224
  if (!lstatSync13(state).isFile() || lstatSync13(state).isSymbolicLink() || lstatSync13(state).size > 1024)
14065
13225
  return;
@@ -14507,7 +13667,7 @@ function readIfExists(path) {
14507
13667
  } catch {}
14508
13668
  return null;
14509
13669
  }
14510
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/external.js
13670
+ // node_modules/zod/v4/classic/external.js
14511
13671
  var exports_external = {};
14512
13672
  __export(exports_external, {
14513
13673
  xor: () => xor,
@@ -14764,7 +13924,7 @@ __export(exports_external, {
14764
13924
  $brand: () => $brand
14765
13925
  });
14766
13926
 
14767
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/index.js
13927
+ // node_modules/zod/v4/core/index.js
14768
13928
  var exports_core2 = {};
14769
13929
  __export(exports_core2, {
14770
13930
  version: () => version,
@@ -15071,7 +14231,7 @@ __export(exports_core2, {
15071
14231
  $ZodAny: () => $ZodAny
15072
14232
  });
15073
14233
 
15074
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/util.js
14234
+ // node_modules/zod/v4/core/util.js
15075
14235
  var exports_util = {};
15076
14236
  __export(exports_util, {
15077
14237
  unwrapMessage: () => unwrapMessage,
@@ -15904,7 +15064,7 @@ function constantCatch(value) {
15904
15064
  return fn;
15905
15065
  }
15906
15066
 
15907
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/core.js
15067
+ // node_modules/zod/v4/core/core.js
15908
15068
  var _a;
15909
15069
  var NEVER = /* @__PURE__ */ Object.freeze({
15910
15070
  status: "aborted"
@@ -16028,7 +15188,7 @@ function config(newConfig) {
16028
15188
  Object.assign(globalConfig, newConfig);
16029
15189
  return globalConfig;
16030
15190
  }
16031
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/errors.js
15191
+ // node_modules/zod/v4/core/errors.js
16032
15192
  function _getMessage() {
16033
15193
  const internals = this._zod;
16034
15194
  internals.message ?? (internals.message = JSON.stringify(internals.def, jsonStringifyReplacer, 2));
@@ -16225,7 +15385,7 @@ function prettifyError(error) {
16225
15385
  `);
16226
15386
  }
16227
15387
 
16228
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/parse.js
15388
+ // node_modules/zod/v4/core/parse.js
16229
15389
  function finalizeParams(callee, params) {
16230
15390
  return { callee: params?.callee ?? callee, Err: params?.Err };
16231
15391
  }
@@ -16367,7 +15527,7 @@ var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
16367
15527
  return _safeParseAsync(_Err)(schema, value, _ctx);
16368
15528
  };
16369
15529
  var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
16370
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/regexes.js
15530
+ // node_modules/zod/v4/core/regexes.js
16371
15531
  var exports_regexes = {};
16372
15532
  __export(exports_regexes, {
16373
15533
  xid: () => xid,
@@ -16533,7 +15693,7 @@ var sha512_hex = /^[0-9a-fA-F]{128}$/;
16533
15693
  var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
16534
15694
  var sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
16535
15695
 
16536
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/checks.js
15696
+ // node_modules/zod/v4/core/checks.js
16537
15697
  var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
16538
15698
  var _a2;
16539
15699
  inst._zod ?? (inst._zod = {});
@@ -17073,7 +16233,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
17073
16233
  };
17074
16234
  });
17075
16235
 
17076
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/doc.js
16236
+ // node_modules/zod/v4/core/doc.js
17077
16237
  class Doc {
17078
16238
  constructor(args = [], closed = {}) {
17079
16239
  this.content = [];
@@ -17112,14 +16272,14 @@ ${content.join(`
17112
16272
  }
17113
16273
  }
17114
16274
 
17115
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/versions.js
16275
+ // node_modules/zod/v4/core/versions.js
17116
16276
  var version = {
17117
16277
  major: 4,
17118
16278
  minor: 5,
17119
16279
  patch: 4
17120
16280
  };
17121
16281
 
17122
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/schemas.js
16282
+ // node_modules/zod/v4/core/schemas.js
17123
16283
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
17124
16284
  var _a2;
17125
16285
  inst ?? (inst = {});
@@ -19371,7 +18531,7 @@ function handleRefineResult(result, payload, input, inst) {
19371
18531
  payload.issues.push(issue(_iss));
19372
18532
  }
19373
18533
  }
19374
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/memoizer.js
18534
+ // node_modules/zod/v4/core/memoizer.js
19375
18535
  class $ZodCyclicError extends Error {
19376
18536
  constructor() {
19377
18537
  super(`Cannot parse a reference cycle that closes through a transform`);
@@ -19607,7 +18767,7 @@ function isBackEdge(ctx, value) {
19607
18767
  const backEdges = ctx[STATE]?.backEdges;
19608
18768
  return backEdges !== undefined && value !== null && typeof value === "object" && backEdges.has(value);
19609
18769
  }
19610
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/index.js
18770
+ // node_modules/zod/v4/locales/index.js
19611
18771
  var exports_locales = {};
19612
18772
  __export(exports_locales, {
19613
18773
  zhTW: () => zh_TW_default,
@@ -19674,7 +18834,7 @@ __export(exports_locales, {
19674
18834
  ar: () => ar_default
19675
18835
  });
19676
18836
 
19677
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ar.js
18837
+ // node_modules/zod/v4/locales/ar.js
19678
18838
  var error = () => {
19679
18839
  const Sizable = {
19680
18840
  string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
@@ -19783,7 +18943,7 @@ function ar_default() {
19783
18943
  localeError: error()
19784
18944
  };
19785
18945
  }
19786
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/az.js
18946
+ // node_modules/zod/v4/locales/az.js
19787
18947
  var error2 = () => {
19788
18948
  const Sizable = {
19789
18949
  string: { unit: "simvol", verb: "olmal\u0131d\u0131r" },
@@ -19891,7 +19051,7 @@ function az_default() {
19891
19051
  localeError: error2()
19892
19052
  };
19893
19053
  }
19894
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/be.js
19054
+ // node_modules/zod/v4/locales/be.js
19895
19055
  function getBelarusianPlural(count, one, few, many) {
19896
19056
  const absCount = Math.abs(count);
19897
19057
  const lastDigit = absCount % 10;
@@ -20057,7 +19217,7 @@ function be_default() {
20057
19217
  localeError: error3()
20058
19218
  };
20059
19219
  }
20060
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/bg.js
19220
+ // node_modules/zod/v4/locales/bg.js
20061
19221
  var error4 = () => {
20062
19222
  const Sizable = {
20063
19223
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" },
@@ -20180,7 +19340,7 @@ function bg_default() {
20180
19340
  localeError: error4()
20181
19341
  };
20182
19342
  }
20183
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/bn.js
19343
+ // node_modules/zod/v4/locales/bn.js
20184
19344
  var error5 = () => {
20185
19345
  const Sizable = {
20186
19346
  string: { unit: "\u0985\u0995\u09CD\u09B7\u09B0", verb: "\u09A5\u09BE\u0995\u09A4\u09C7 \u09B9\u09AC\u09C7" },
@@ -20291,7 +19451,7 @@ function bn_default() {
20291
19451
  localeError: error5()
20292
19452
  };
20293
19453
  }
20294
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ca.js
19454
+ // node_modules/zod/v4/locales/ca.js
20295
19455
  var error6 = () => {
20296
19456
  const Sizable = {
20297
19457
  string: { unit: "car\xE0cters", verb: "contenir" },
@@ -20401,7 +19561,7 @@ function ca_default() {
20401
19561
  localeError: error6()
20402
19562
  };
20403
19563
  }
20404
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ckb.js
19564
+ // node_modules/zod/v4/locales/ckb.js
20405
19565
  var error7 = () => {
20406
19566
  const Sizable = {
20407
19567
  string: { unit: "\u067E\u06CC\u062A", verb: "\u0628\u06CE\u062A" },
@@ -20531,7 +19691,7 @@ function ckb_default() {
20531
19691
  localeError: error7()
20532
19692
  };
20533
19693
  }
20534
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/cs.js
19694
+ // node_modules/zod/v4/locales/cs.js
20535
19695
  var error8 = () => {
20536
19696
  const Sizable = {
20537
19697
  string: { unit: "znak\u016F", verb: "m\xEDt" },
@@ -20645,7 +19805,7 @@ function cs_default() {
20645
19805
  localeError: error8()
20646
19806
  };
20647
19807
  }
20648
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/da.js
19808
+ // node_modules/zod/v4/locales/da.js
20649
19809
  var error9 = () => {
20650
19810
  const Sizable = {
20651
19811
  string: { unit: "tegn", verb: "havde" },
@@ -20763,7 +19923,7 @@ function da_default() {
20763
19923
  localeError: error9()
20764
19924
  };
20765
19925
  }
20766
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/de.js
19926
+ // node_modules/zod/v4/locales/de.js
20767
19927
  var error10 = () => {
20768
19928
  const Sizable = {
20769
19929
  string: { unit: "Zeichen", verb: "zu haben" },
@@ -20874,7 +20034,7 @@ function de_default() {
20874
20034
  localeError: error10()
20875
20035
  };
20876
20036
  }
20877
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/el.js
20037
+ // node_modules/zod/v4/locales/el.js
20878
20038
  var error11 = () => {
20879
20039
  const Sizable = {
20880
20040
  string: { unit: "\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03B5\u03C2", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" },
@@ -20984,7 +20144,7 @@ function el_default() {
20984
20144
  localeError: error11()
20985
20145
  };
20986
20146
  }
20987
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/en.js
20147
+ // node_modules/zod/v4/locales/en.js
20988
20148
  var error12 = () => {
20989
20149
  const Sizable = {
20990
20150
  string: { unit: "characters", verb: "to have" },
@@ -21104,7 +20264,7 @@ function en_default() {
21104
20264
  localeError: error12()
21105
20265
  };
21106
20266
  }
21107
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/eo.js
20267
+ // node_modules/zod/v4/locales/eo.js
21108
20268
  var error13 = () => {
21109
20269
  const Sizable = {
21110
20270
  string: { unit: "karaktrojn", verb: "havi" },
@@ -21216,7 +20376,7 @@ function eo_default() {
21216
20376
  localeError: error13()
21217
20377
  };
21218
20378
  }
21219
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/es.js
20379
+ // node_modules/zod/v4/locales/es.js
21220
20380
  var error14 = () => {
21221
20381
  const Sizable = {
21222
20382
  string: { unit: "caracteres", verb: "tener" },
@@ -21350,7 +20510,7 @@ function es_default() {
21350
20510
  localeError: error14()
21351
20511
  };
21352
20512
  }
21353
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/fa.js
20513
+ // node_modules/zod/v4/locales/fa.js
21354
20514
  var error15 = () => {
21355
20515
  const Sizable = {
21356
20516
  string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
@@ -21467,7 +20627,7 @@ function fa_default() {
21467
20627
  localeError: error15()
21468
20628
  };
21469
20629
  }
21470
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/fi.js
20630
+ // node_modules/zod/v4/locales/fi.js
21471
20631
  var error16 = () => {
21472
20632
  const Sizable = {
21473
20633
  string: { unit: "merkki\xE4", subject: "merkkijonon" },
@@ -21582,7 +20742,7 @@ function fi_default() {
21582
20742
  localeError: error16()
21583
20743
  };
21584
20744
  }
21585
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/fr.js
20745
+ // node_modules/zod/v4/locales/fr.js
21586
20746
  var error17 = () => {
21587
20747
  const Sizable = {
21588
20748
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -21709,7 +20869,7 @@ function fr_default() {
21709
20869
  localeError: error17()
21710
20870
  };
21711
20871
  }
21712
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/fr-CA.js
20872
+ // node_modules/zod/v4/locales/fr-CA.js
21713
20873
  var error18 = () => {
21714
20874
  const Sizable = {
21715
20875
  string: { unit: "caract\xE8res", verb: "avoir" },
@@ -21819,7 +20979,7 @@ function fr_CA_default() {
21819
20979
  localeError: error18()
21820
20980
  };
21821
20981
  }
21822
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/gu.js
20982
+ // node_modules/zod/v4/locales/gu.js
21823
20983
  var error19 = () => {
21824
20984
  const Sizable = {
21825
20985
  string: { unit: "\u0A85\u0A95\u0ACD\u0AB7\u0AB0", verb: "\u0AB9\u0ACB\u0AB5\u0ABE \u0A9C\u0ACB\u0A88\u0A8F" },
@@ -21930,7 +21090,7 @@ function gu_default() {
21930
21090
  localeError: error19()
21931
21091
  };
21932
21092
  }
21933
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/he.js
21093
+ // node_modules/zod/v4/locales/he.js
21934
21094
  var error20 = () => {
21935
21095
  const TypeNames = {
21936
21096
  string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" },
@@ -22128,7 +21288,7 @@ function he_default() {
22128
21288
  localeError: error20()
22129
21289
  };
22130
21290
  }
22131
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/hi.js
21291
+ // node_modules/zod/v4/locales/hi.js
22132
21292
  var error21 = () => {
22133
21293
  const Sizable = {
22134
21294
  string: { unit: "\u0905\u0915\u094D\u0937\u0930", verb: "\u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F" },
@@ -22237,7 +21397,7 @@ function hi_default() {
22237
21397
  localeError: error21()
22238
21398
  };
22239
21399
  }
22240
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/hr.js
21400
+ // node_modules/zod/v4/locales/hr.js
22241
21401
  var error22 = () => {
22242
21402
  const Sizable = {
22243
21403
  string: { unit: "znakova", verb: "imati" },
@@ -22361,7 +21521,7 @@ function hr_default() {
22361
21521
  localeError: error22()
22362
21522
  };
22363
21523
  }
22364
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/hu.js
21524
+ // node_modules/zod/v4/locales/hu.js
22365
21525
  var error23 = () => {
22366
21526
  const Sizable = {
22367
21527
  string: { unit: "karakter", verb: "legyen" },
@@ -22472,7 +21632,7 @@ function hu_default() {
22472
21632
  localeError: error23()
22473
21633
  };
22474
21634
  }
22475
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/hy.js
21635
+ // node_modules/zod/v4/locales/hy.js
22476
21636
  function getArmenianPlural(count, one, many) {
22477
21637
  return Math.abs(count) === 1 ? one : many;
22478
21638
  }
@@ -22628,7 +21788,7 @@ function hy_default() {
22628
21788
  localeError: error24()
22629
21789
  };
22630
21790
  }
22631
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/id.js
21791
+ // node_modules/zod/v4/locales/id.js
22632
21792
  var error25 = () => {
22633
21793
  const Sizable = {
22634
21794
  string: { unit: "karakter", verb: "memiliki" },
@@ -22737,7 +21897,7 @@ function id_default() {
22737
21897
  localeError: error25()
22738
21898
  };
22739
21899
  }
22740
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/is.js
21900
+ // node_modules/zod/v4/locales/is.js
22741
21901
  var error26 = () => {
22742
21902
  const Sizable = {
22743
21903
  string: { unit: "stafi", verb: "a\xF0 hafa" },
@@ -22849,7 +22009,7 @@ function is_default() {
22849
22009
  localeError: error26()
22850
22010
  };
22851
22011
  }
22852
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/it.js
22012
+ // node_modules/zod/v4/locales/it.js
22853
22013
  var error27 = () => {
22854
22014
  const Sizable = {
22855
22015
  string: { unit: "caratteri", verb: "avere" },
@@ -22960,7 +22120,7 @@ function it_default() {
22960
22120
  localeError: error27()
22961
22121
  };
22962
22122
  }
22963
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ja.js
22123
+ // node_modules/zod/v4/locales/ja.js
22964
22124
  var error28 = () => {
22965
22125
  const Sizable = {
22966
22126
  string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
@@ -23070,7 +22230,7 @@ function ja_default() {
23070
22230
  localeError: error28()
23071
22231
  };
23072
22232
  }
23073
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ka.js
22233
+ // node_modules/zod/v4/locales/ka.js
23074
22234
  var error29 = () => {
23075
22235
  const Sizable = {
23076
22236
  string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" },
@@ -23185,7 +22345,7 @@ function ka_default() {
23185
22345
  localeError: error29()
23186
22346
  };
23187
22347
  }
23188
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/km.js
22348
+ // node_modules/zod/v4/locales/km.js
23189
22349
  var error30 = () => {
23190
22350
  const Sizable = {
23191
22351
  string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
@@ -23299,11 +22459,11 @@ function km_default() {
23299
22459
  };
23300
22460
  }
23301
22461
 
23302
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/kh.js
22462
+ // node_modules/zod/v4/locales/kh.js
23303
22463
  function kh_default() {
23304
22464
  return km_default();
23305
22465
  }
23306
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/kn.js
22466
+ // node_modules/zod/v4/locales/kn.js
23307
22467
  var error31 = () => {
23308
22468
  const Sizable = {
23309
22469
  string: { unit: "\u0C85\u0C95\u0CCD\u0CB7\u0CB0\u0C97\u0CB3\u0CC1", verb: "\u0CB9\u0CCA\u0C82\u0CA6\u0CB2\u0CC1" },
@@ -23414,7 +22574,7 @@ function kn_default() {
23414
22574
  localeError: error31()
23415
22575
  };
23416
22576
  }
23417
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ko.js
22577
+ // node_modules/zod/v4/locales/ko.js
23418
22578
  var error32 = () => {
23419
22579
  const Sizable = {
23420
22580
  string: { unit: "\uBB38\uC790", verb: "to have" },
@@ -23528,7 +22688,7 @@ function ko_default() {
23528
22688
  localeError: error32()
23529
22689
  };
23530
22690
  }
23531
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/lt.js
22691
+ // node_modules/zod/v4/locales/lt.js
23532
22692
  var capitalizeFirstCharacter = (text2) => {
23533
22693
  return text2.charAt(0).toUpperCase() + text2.slice(1);
23534
22694
  };
@@ -23733,7 +22893,7 @@ function lt_default() {
23733
22893
  localeError: error33()
23734
22894
  };
23735
22895
  }
23736
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/mk.js
22896
+ // node_modules/zod/v4/locales/mk.js
23737
22897
  var error34 = () => {
23738
22898
  const Sizable = {
23739
22899
  string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
@@ -23845,7 +23005,7 @@ function mk_default() {
23845
23005
  localeError: error34()
23846
23006
  };
23847
23007
  }
23848
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ms.js
23008
+ // node_modules/zod/v4/locales/ms.js
23849
23009
  var error35 = () => {
23850
23010
  const Sizable = {
23851
23011
  string: { unit: "aksara", verb: "mempunyai" },
@@ -23955,7 +23115,7 @@ function ms_default() {
23955
23115
  localeError: error35()
23956
23116
  };
23957
23117
  }
23958
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ne.js
23118
+ // node_modules/zod/v4/locales/ne.js
23959
23119
  var error36 = () => {
23960
23120
  const Sizable = {
23961
23121
  string: { unit: "\u0905\u0915\u094D\u0937\u0930", verb: "\u0939\u0941\u0928\u0941\u092A\u0930\u094D\u091B" },
@@ -24064,7 +23224,7 @@ function ne_default() {
24064
23224
  localeError: error36()
24065
23225
  };
24066
23226
  }
24067
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/nl.js
23227
+ // node_modules/zod/v4/locales/nl.js
24068
23228
  var error37 = () => {
24069
23229
  const Sizable = {
24070
23230
  string: { unit: "tekens", verb: "heeft" },
@@ -24177,7 +23337,7 @@ function nl_default() {
24177
23337
  localeError: error37()
24178
23338
  };
24179
23339
  }
24180
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/nn.js
23340
+ // node_modules/zod/v4/locales/nn.js
24181
23341
  var error38 = () => {
24182
23342
  const Sizable = {
24183
23343
  string: { unit: "teikn", verb: "\xE5 ha" },
@@ -24288,7 +23448,7 @@ function nn_default() {
24288
23448
  localeError: error38()
24289
23449
  };
24290
23450
  }
24291
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/no.js
23451
+ // node_modules/zod/v4/locales/no.js
24292
23452
  var error39 = () => {
24293
23453
  const Sizable = {
24294
23454
  string: { unit: "tegn", verb: "\xE5 ha" },
@@ -24399,7 +23559,7 @@ function no_default() {
24399
23559
  localeError: error39()
24400
23560
  };
24401
23561
  }
24402
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ota.js
23562
+ // node_modules/zod/v4/locales/ota.js
24403
23563
  var error40 = () => {
24404
23564
  const Sizable = {
24405
23565
  string: { unit: "harf", verb: "olmal\u0131d\u0131r" },
@@ -24511,7 +23671,7 @@ function ota_default() {
24511
23671
  localeError: error40()
24512
23672
  };
24513
23673
  }
24514
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ps.js
23674
+ // node_modules/zod/v4/locales/ps.js
24515
23675
  var error41 = () => {
24516
23676
  const Sizable = {
24517
23677
  string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
@@ -24628,7 +23788,7 @@ function ps_default() {
24628
23788
  localeError: error41()
24629
23789
  };
24630
23790
  }
24631
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/pl.js
23791
+ // node_modules/zod/v4/locales/pl.js
24632
23792
  var error42 = () => {
24633
23793
  const Sizable = {
24634
23794
  string: { unit: "znak\xF3w", verb: "mie\u0107" },
@@ -24740,7 +23900,7 @@ function pl_default() {
24740
23900
  localeError: error42()
24741
23901
  };
24742
23902
  }
24743
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/pt.js
23903
+ // node_modules/zod/v4/locales/pt.js
24744
23904
  var error43 = () => {
24745
23905
  const Sizable = {
24746
23906
  string: { unit: "caracteres" },
@@ -24880,7 +24040,7 @@ function pt_default() {
24880
24040
  localeError: error43()
24881
24041
  };
24882
24042
  }
24883
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/pt-BR.js
24043
+ // node_modules/zod/v4/locales/pt-BR.js
24884
24044
  var error44 = () => {
24885
24045
  const Sizable = {
24886
24046
  string: { unit: "caracteres" },
@@ -25021,7 +24181,7 @@ function pt_BR_default() {
25021
24181
  localeError: error44()
25022
24182
  };
25023
24183
  }
25024
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ro.js
24184
+ // node_modules/zod/v4/locales/ro.js
25025
24185
  var error45 = () => {
25026
24186
  const Sizable = {
25027
24187
  string: { unit: "caractere", verb: "s\u0103 aib\u0103" },
@@ -25141,7 +24301,7 @@ function ro_default() {
25141
24301
  localeError: error45()
25142
24302
  };
25143
24303
  }
25144
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ru.js
24304
+ // node_modules/zod/v4/locales/ru.js
25145
24305
  function getRussianPlural(count, one, few, many) {
25146
24306
  const absCount = Math.abs(count);
25147
24307
  const lastDigit = absCount % 10;
@@ -25307,7 +24467,7 @@ function ru_default() {
25307
24467
  localeError: error46()
25308
24468
  };
25309
24469
  }
25310
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/sk.js
24470
+ // node_modules/zod/v4/locales/sk.js
25311
24471
  var error47 = () => {
25312
24472
  const Sizable = {
25313
24473
  string: { unit: "znakov", verb: "ma\u0165" },
@@ -25421,7 +24581,7 @@ function sk_default() {
25421
24581
  localeError: error47()
25422
24582
  };
25423
24583
  }
25424
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/sl.js
24584
+ // node_modules/zod/v4/locales/sl.js
25425
24585
  var error48 = () => {
25426
24586
  const Sizable = {
25427
24587
  string: { unit: "znakov", verb: "imeti" },
@@ -25533,7 +24693,7 @@ function sl_default() {
25533
24693
  localeError: error48()
25534
24694
  };
25535
24695
  }
25536
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/sv.js
24696
+ // node_modules/zod/v4/locales/sv.js
25537
24697
  var error49 = () => {
25538
24698
  const Sizable = {
25539
24699
  string: { unit: "tecken", verb: "att ha" },
@@ -25646,7 +24806,7 @@ function sv_default() {
25646
24806
  localeError: error49()
25647
24807
  };
25648
24808
  }
25649
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ta.js
24809
+ // node_modules/zod/v4/locales/ta.js
25650
24810
  var error50 = () => {
25651
24811
  const Sizable = {
25652
24812
  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" },
@@ -25759,7 +24919,7 @@ function ta_default() {
25759
24919
  localeError: error50()
25760
24920
  };
25761
24921
  }
25762
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/th.js
24922
+ // node_modules/zod/v4/locales/th.js
25763
24923
  var error51 = () => {
25764
24924
  const Sizable = {
25765
24925
  string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
@@ -25872,7 +25032,7 @@ function th_default() {
25872
25032
  localeError: error51()
25873
25033
  };
25874
25034
  }
25875
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/tk.js
25035
+ // node_modules/zod/v4/locales/tk.js
25876
25036
  var error52 = () => {
25877
25037
  const Sizable = {
25878
25038
  string: { unit: "simwol", verb: "bolmaly" },
@@ -25977,7 +25137,7 @@ function tk_default() {
25977
25137
  localeError: error52()
25978
25138
  };
25979
25139
  }
25980
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/tr.js
25140
+ // node_modules/zod/v4/locales/tr.js
25981
25141
  var error53 = () => {
25982
25142
  const Sizable = {
25983
25143
  string: { unit: "karakter", verb: "olmal\u0131" },
@@ -26085,7 +25245,7 @@ function tr_default() {
26085
25245
  localeError: error53()
26086
25246
  };
26087
25247
  }
26088
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/uk.js
25248
+ // node_modules/zod/v4/locales/uk.js
26089
25249
  var error54 = () => {
26090
25250
  const Sizable = {
26091
25251
  string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
@@ -26197,11 +25357,11 @@ function uk_default() {
26197
25357
  };
26198
25358
  }
26199
25359
 
26200
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ua.js
25360
+ // node_modules/zod/v4/locales/ua.js
26201
25361
  function ua_default() {
26202
25362
  return uk_default();
26203
25363
  }
26204
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/ur.js
25364
+ // node_modules/zod/v4/locales/ur.js
26205
25365
  var error55 = () => {
26206
25366
  const Sizable = {
26207
25367
  string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" },
@@ -26314,7 +25474,7 @@ function ur_default() {
26314
25474
  localeError: error55()
26315
25475
  };
26316
25476
  }
26317
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/uz.js
25477
+ // node_modules/zod/v4/locales/uz.js
26318
25478
  var error56 = () => {
26319
25479
  const Sizable = {
26320
25480
  string: { unit: "belgi", verb: "bo\u2018lishi kerak" },
@@ -26425,7 +25585,7 @@ function uz_default() {
26425
25585
  localeError: error56()
26426
25586
  };
26427
25587
  }
26428
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/vi.js
25588
+ // node_modules/zod/v4/locales/vi.js
26429
25589
  var error57 = () => {
26430
25590
  const Sizable = {
26431
25591
  string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" },
@@ -26536,7 +25696,7 @@ function vi_default() {
26536
25696
  localeError: error57()
26537
25697
  };
26538
25698
  }
26539
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/zh-CN.js
25699
+ // node_modules/zod/v4/locales/zh-CN.js
26540
25700
  var error58 = () => {
26541
25701
  const Sizable = {
26542
25702
  string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" },
@@ -26648,7 +25808,7 @@ function zh_CN_default() {
26648
25808
  localeError: error58()
26649
25809
  };
26650
25810
  }
26651
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/zh-TW.js
25811
+ // node_modules/zod/v4/locales/zh-TW.js
26652
25812
  var error59 = () => {
26653
25813
  const Sizable = {
26654
25814
  string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" },
@@ -26758,7 +25918,7 @@ function zh_TW_default() {
26758
25918
  localeError: error59()
26759
25919
  };
26760
25920
  }
26761
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/locales/yo.js
25921
+ // node_modules/zod/v4/locales/yo.js
26762
25922
  var error60 = () => {
26763
25923
  const Sizable = {
26764
25924
  string: { unit: "\xE0mi", verb: "n\xED" },
@@ -26868,7 +26028,7 @@ function yo_default() {
26868
26028
  localeError: error60()
26869
26029
  };
26870
26030
  }
26871
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/registries.js
26031
+ // node_modules/zod/v4/core/registries.js
26872
26032
  var _a2;
26873
26033
  var $output = /* @__PURE__ */ Symbol("ZodOutput");
26874
26034
  var $input = /* @__PURE__ */ Symbol("ZodInput");
@@ -26918,7 +26078,7 @@ function registry() {
26918
26078
  }
26919
26079
  (_a2 = globalThis).__zod_globalRegistry ?? (_a2.__zod_globalRegistry = registry());
26920
26080
  var globalRegistry = globalThis.__zod_globalRegistry;
26921
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/compile.js
26081
+ // node_modules/zod/v4/core/compile.js
26922
26082
  var INVALID = Symbol.for("zod.compile.invalid");
26923
26083
  var FALLBACK_FLAG = Symbol.for("zod.compile.fallback");
26924
26084
 
@@ -28457,7 +27617,7 @@ function generateTransformCheck(doc, ctx, schema, accessor) {
28457
27617
  }
28458
27618
  return accessor;
28459
27619
  }
28460
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/api.js
27620
+ // node_modules/zod/v4/core/api.js
28461
27621
  function _string(Class2, params) {
28462
27622
  return new Class2({
28463
27623
  type: "string",
@@ -29392,7 +28552,7 @@ function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
29392
28552
  const inst = new Class2(def);
29393
28553
  return inst;
29394
28554
  }
29395
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/to-json-schema.js
28555
+ // node_modules/zod/v4/core/to-json-schema.js
29396
28556
  function assignProps(target, ...sources) {
29397
28557
  for (const source of sources) {
29398
28558
  for (const key of Reflect.ownKeys(source)) {
@@ -29916,7 +29076,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) =
29916
29076
  extractDefs(ctx, schema);
29917
29077
  return finalize(ctx, schema);
29918
29078
  };
29919
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/json-schema-processors.js
29079
+ // node_modules/zod/v4/core/json-schema-processors.js
29920
29080
  var formatMap = {
29921
29081
  guid: "uuid",
29922
29082
  url: "uri",
@@ -30569,7 +29729,7 @@ function toJSONSchema(input, params) {
30569
29729
  extractDefs(ctx, input);
30570
29730
  return finalize(ctx, input);
30571
29731
  }
30572
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/json-schema-generator.js
29732
+ // node_modules/zod/v4/core/json-schema-generator.js
30573
29733
  class JSONSchemaGenerator {
30574
29734
  get metadataRegistry() {
30575
29735
  return this.ctx.metadataRegistry;
@@ -30630,9 +29790,9 @@ class JSONSchemaGenerator {
30630
29790
  return plainResult;
30631
29791
  }
30632
29792
  }
30633
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/json-schema.js
29793
+ // node_modules/zod/v4/core/json-schema.js
30634
29794
  var exports_json_schema = {};
30635
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/schemas.js
29795
+ // node_modules/zod/v4/classic/schemas.js
30636
29796
  var exports_schemas2 = {};
30637
29797
  __export(exports_schemas2, {
30638
29798
  xor: () => xor,
@@ -30809,7 +29969,7 @@ __export(exports_schemas2, {
30809
29969
  ZodAny: () => ZodAny
30810
29970
  });
30811
29971
 
30812
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/checks.js
29972
+ // node_modules/zod/v4/classic/checks.js
30813
29973
  var exports_checks2 = {};
30814
29974
  __export(exports_checks2, {
30815
29975
  uppercase: () => _uppercase,
@@ -30844,7 +30004,7 @@ __export(exports_checks2, {
30844
30004
  endsWith: () => _endsWith
30845
30005
  });
30846
30006
 
30847
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/errors.js
30007
+ // node_modules/zod/v4/classic/errors.js
30848
30008
  var _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);
30849
30009
  function _lazyMethod(proto, key, make) {
30850
30010
  Object.defineProperty(proto, key, {
@@ -30890,7 +30050,7 @@ var ZodRealError = /* @__PURE__ */ $constructor("ZodError", initializer2, undefi
30890
30050
  Parent: Error
30891
30051
  });
30892
30052
 
30893
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/parse.js
30053
+ // node_modules/zod/v4/classic/parse.js
30894
30054
  var parse5 = /* @__PURE__ */ _parse(ZodRealError);
30895
30055
  var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
30896
30056
  var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -30904,7 +30064,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
30904
30064
  var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
30905
30065
  var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
30906
30066
 
30907
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/schemas.js
30067
+ // node_modules/zod/v4/classic/schemas.js
30908
30068
  function _ensureDefaultLocale() {
30909
30069
  if (!globalConfig.localeError)
30910
30070
  config(en_default());
@@ -32308,7 +31468,7 @@ function preprocess(fn, schema) {
32308
31468
  out: schema
32309
31469
  });
32310
31470
  }
32311
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/compat.js
31471
+ // node_modules/zod/v4/classic/compat.js
32312
31472
  var ZodIssueCode = {
32313
31473
  invalid_type: "invalid_type",
32314
31474
  too_big: "too_big",
@@ -32332,7 +31492,7 @@ function getErrorMap() {
32332
31492
  }
32333
31493
  var ZodFirstPartyTypeKind;
32334
31494
  (function(ZodFirstPartyTypeKind2) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
32335
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/iso.js
31495
+ // node_modules/zod/v4/classic/iso.js
32336
31496
  var exports_iso = {};
32337
31497
  __export(exports_iso, {
32338
31498
  time: () => time2,
@@ -32357,7 +31517,7 @@ function duration2(params) {
32357
31517
  return _isoDuration(ZodISODuration, params);
32358
31518
  }
32359
31519
 
32360
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/from-json-schema.js
31520
+ // node_modules/zod/v4/classic/from-json-schema.js
32361
31521
  var z = {
32362
31522
  ...exports_schemas2,
32363
31523
  ...exports_checks2,
@@ -32884,7 +32044,7 @@ function fromJSONSchema(schema, params) {
32884
32044
  };
32885
32045
  return convertSchema(normalized, ctx);
32886
32046
  }
32887
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/core/visit.js
32047
+ // node_modules/zod/v4/core/visit.js
32888
32048
  var RESOLVING = Symbol("z.visit/resolving");
32889
32049
  function visit2(schema, fnOrHandlers) {
32890
32050
  const fn = typeof fnOrHandlers === "function" ? fnOrHandlers : (node2, rewritten) => {
@@ -33036,7 +32196,7 @@ function visit2(schema, fnOrHandlers) {
33036
32196
  return run(schema);
33037
32197
  }
33038
32198
 
33039
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/deep-partial.js
32199
+ // node_modules/zod/v4/classic/deep-partial.js
33040
32200
  function deepPartial(schema) {
33041
32201
  return visit2(schema, {
33042
32202
  object: (s) => s.partial(),
@@ -33046,7 +32206,7 @@ function deepPartial(schema) {
33046
32206
  }
33047
32207
  });
33048
32208
  }
33049
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/in-out.js
32209
+ // node_modules/zod/v4/classic/in-out.js
33050
32210
  function withChecks(side, checks2) {
33051
32211
  if (!checks2?.length)
33052
32212
  return side;
@@ -33072,7 +32232,7 @@ function output(schema) {
33072
32232
  prefault: (s, rewritten) => rewritten ? s._zod.def.innerType : s
33073
32233
  });
33074
32234
  }
33075
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/zod/v4/classic/coerce.js
32235
+ // node_modules/zod/v4/classic/coerce.js
33076
32236
  var exports_coerce = {};
33077
32237
  __export(exports_coerce, {
33078
32238
  string: () => string3,
@@ -33096,14 +32256,19 @@ function bigint3(params) {
33096
32256
  function date4(params) {
33097
32257
  return _coercedDate(ZodDate, params);
33098
32258
  }
33099
- // ../../../../../../../skills/launch-evidence/20260908-resume/skills-recurring-wire-sdk-20260915/frozen-dependency-graph/node_modules/@hasna/contracts/dist/client/transport.js
32259
+ // node_modules/@hasna/contracts/dist/client/transport.js
33100
32260
  import { isIP } from "net";
33101
32261
  import { spawnSync } from "child_process";
33102
- import { closeSync as closeSync6, fstatSync as fstatSync6, openSync as openSync6, readFileSync as readFileSync18 } from "fs";
33103
- import { O_NOFOLLOW, O_NONBLOCK, O_RDONLY } from "constants";
33104
- import { createRequire } from "module";
32262
+ import { closeSync as closeSync22, fstatSync as fstatSync22, openSync as openSync22, readFileSync as readFileSync22 } from "fs";
32263
+ import { O_NOFOLLOW as O_NOFOLLOW2, O_NONBLOCK as O_NONBLOCK2, O_RDONLY as O_RDONLY2 } from "constants";
33105
32264
  import { hostname as osHostname } from "os";
33106
32265
  import { isAbsolute as isAbsolute9, join as join24 } from "path";
32266
+ import { createRequire } from "module";
32267
+ import { fileURLToPath as fileURLToPath2 } from "url";
32268
+ import { closeSync as closeSync6, fstatSync as fstatSync6, lstatSync as lstatSync14, openSync as openSync6, readFileSync as readFileSync18, realpathSync as realpathSync5, statSync as statSync10 } from "fs";
32269
+ import { O_NOFOLLOW, O_NONBLOCK, O_RDONLY } from "constants";
32270
+ import { basename as basename4, dirname as dirname12, join as join25, relative as relative6, sep as sep6 } from "path";
32271
+ import { fileURLToPath, pathToFileURL } from "url";
33107
32272
  function envToken(name) {
33108
32273
  return name.toUpperCase().replace(/-/g, "_");
33109
32274
  }
@@ -33121,6 +32286,114 @@ var CREDENTIAL_PROFILE_ENV_KEY = "HASNA_PROFILE";
33121
32286
  function credentialPointerEnvKey(name) {
33122
32287
  return `HASNA_${envToken(name)}_API_KEY_REF`;
33123
32288
  }
32289
+ function e(e2, n, r) {
32290
+ throw new Error(r ? `No known conditions for "${n}" specifier in "${e2}" package` : `Missing "${n}" specifier in "${e2}" package`);
32291
+ }
32292
+ function n(n2, i, o, f) {
32293
+ let s, u, l = r(n2, o), c = function(e2) {
32294
+ let n3 = new Set(["default", ...e2.conditions || []]);
32295
+ return e2.unsafe || n3.add(e2.require ? "require" : "import"), e2.unsafe || n3.add(e2.browser ? "browser" : "node"), n3;
32296
+ }(f || {}), a = i[l];
32297
+ if (a === undefined) {
32298
+ let e2, n3, r, t;
32299
+ for (t in i)
32300
+ n3 && t.length < n3.length || (t[t.length - 1] === "/" && l.startsWith(t) ? (u = l.substring(t.length), n3 = t) : t.length > 1 && (r = t.indexOf("*", 1), ~r && (e2 = RegExp("^" + t.substring(0, r) + "(.*)" + t.substring(1 + r) + "$").exec(l), e2 && e2[1] && (u = e2[1], n3 = t))));
32301
+ a = i[n3];
32302
+ }
32303
+ return a || e(n2, l), s = t(a, c), s || e(n2, l, 1), u && function(e2, n3) {
32304
+ let r, t = 0, i2 = e2.length, o2 = /[*]/g, f2 = /[/]$/;
32305
+ for (;t < i2; t++)
32306
+ e2[t] = o2.test(r = e2[t]) ? r.replace(o2, n3) : f2.test(r) ? r + n3 : r;
32307
+ }(s, u), s;
32308
+ }
32309
+ function r(e2, n2, r2) {
32310
+ if (e2 === n2 || n2 === ".")
32311
+ return ".";
32312
+ let t = e2 + "/", i = t.length, o = n2.slice(0, i) === t, f = o ? n2.slice(i) : n2;
32313
+ return f[0] === "#" ? f : o || !r2 ? f.slice(0, 2) === "./" ? f : "./" + f : f;
32314
+ }
32315
+ function t(e2, n2, r2) {
32316
+ if (e2) {
32317
+ if (typeof e2 == "string")
32318
+ return r2 && r2.add(e2), [e2];
32319
+ let i, o;
32320
+ if (Array.isArray(e2)) {
32321
+ for (o = r2 || new Set, i = 0;i < e2.length; i++)
32322
+ t(e2[i], n2, o);
32323
+ if (!r2 && o.size)
32324
+ return [...o];
32325
+ } else
32326
+ for (i in e2)
32327
+ if (n2.has(i))
32328
+ return t(e2[i], n2, r2);
32329
+ }
32330
+ }
32331
+ function o(e2, r2, t2) {
32332
+ let i, o2 = e2.exports;
32333
+ if (o2) {
32334
+ if (typeof o2 == "string")
32335
+ o2 = { ".": o2 };
32336
+ else
32337
+ for (i in o2) {
32338
+ i[0] !== "." && (o2 = { ".": o2 });
32339
+ break;
32340
+ }
32341
+ return n(e2.name, o2, r2 || ".", t2);
32342
+ }
32343
+ }
32344
+ var PACKAGE = "@hasna/secrets";
32345
+ var MAX_PACKAGE_BYTES = 1024 * 1024;
32346
+ function entryPoint(directory) {
32347
+ const root = realpathSync5(directory);
32348
+ const fd = openSync6(join25(root, "package.json"), O_RDONLY | O_NOFOLLOW | O_NONBLOCK);
32349
+ let pkg;
32350
+ try {
32351
+ const stat = fstatSync6(fd);
32352
+ if (!stat.isFile() || stat.size > MAX_PACKAGE_BYTES)
32353
+ throw new Error("Invalid Secrets package metadata");
32354
+ pkg = JSON.parse(readFileSync18(fd, "utf8"));
32355
+ } finally {
32356
+ closeSync6(fd);
32357
+ }
32358
+ if (!pkg || typeof pkg !== "object" || !("name" in pkg) || pkg.name !== PACKAGE) {
32359
+ throw new Error("Invalid Secrets package identity");
32360
+ }
32361
+ const target = o(pkg, ".")?.[0];
32362
+ if (typeof target !== "string" || !target.startsWith("./"))
32363
+ throw new Error("Missing Secrets import export");
32364
+ const parts = target.slice(2).split("/");
32365
+ if (/[\\%?#\0]/.test(target) || parts.some((part) => !part || part === "." || part === ".." || part === "node_modules")) {
32366
+ throw new Error("Invalid Secrets import export");
32367
+ }
32368
+ const file2 = realpathSync5(join25(root, ...parts));
32369
+ const within = relative6(root, file2);
32370
+ if (!within || within === ".." || within.startsWith(`..${sep6}`) || !statSync10(file2).isFile()) {
32371
+ throw new Error("Secrets import export escapes its package or is not a file");
32372
+ }
32373
+ return pathToFileURL(file2).href;
32374
+ }
32375
+ function resolveInstalledSecrets(parentUrl) {
32376
+ let directory = dirname12(fileURLToPath(parentUrl));
32377
+ for (;; ) {
32378
+ if (basename4(directory) !== "node_modules") {
32379
+ const candidate = join25(directory, "node_modules", PACKAGE);
32380
+ let absent = false;
32381
+ try {
32382
+ lstatSync14(candidate);
32383
+ } catch (error61) {
32384
+ if (error61.code !== "ENOENT")
32385
+ throw error61;
32386
+ absent = true;
32387
+ }
32388
+ if (!absent)
32389
+ return entryPoint(candidate);
32390
+ }
32391
+ const parent = dirname12(directory);
32392
+ if (parent === directory)
32393
+ throw new Error("Secrets SDK is not installed for this consumer");
32394
+ directory = parent;
32395
+ }
32396
+ }
33124
32397
 
33125
32398
  class CredentialResolutionError extends Error {
33126
32399
  appName;
@@ -33239,7 +32512,7 @@ function readAppConfigFile(path) {
33239
32512
  };
33240
32513
  let fd = -1;
33241
32514
  try {
33242
- fd = openSync6(path, O_RDONLY | O_NOFOLLOW | O_NONBLOCK);
32515
+ fd = openSync22(path, O_RDONLY2 | O_NOFOLLOW2 | O_NONBLOCK2);
33243
32516
  } catch (error61) {
33244
32517
  const code = error61.code;
33245
32518
  if (code === "ENOENT" || code === "ENOTDIR")
@@ -33249,7 +32522,7 @@ function readAppConfigFile(path) {
33249
32522
  unsafe(`the path could not be opened (${code ?? "unknown error"})`);
33250
32523
  }
33251
32524
  try {
33252
- const before = fstatSync6(fd);
32525
+ const before = fstatSync22(fd);
33253
32526
  if (!before.isFile())
33254
32527
  unsafe("the path is not a regular file");
33255
32528
  if (!configFileModeAllowed(before.mode)) {
@@ -33260,31 +32533,39 @@ function readAppConfigFile(path) {
33260
32533
  unsafe("the file is not owned by the current user");
33261
32534
  if (before.size > MAX_CREDENTIAL_FILE_BYTES)
33262
32535
  unsafe("the file exceeds the size limit");
33263
- const bytes = readFileSync18(fd);
33264
- const after = fstatSync6(fd);
32536
+ const bytes = readFileSync22(fd);
32537
+ const after = fstatSync22(fd);
33265
32538
  if (!configFileReadsCoherent(before, after)) {
33266
32539
  unsafe("the file changed while being read");
33267
32540
  }
33268
32541
  return parseEnvFile(bytes.toString("utf8"));
33269
32542
  } finally {
33270
32543
  if (fd !== -1)
33271
- closeSync6(fd);
32544
+ closeSync22(fd);
33272
32545
  }
33273
32546
  }
33274
- function readCredentialFile(path, apiKeyKeys) {
32547
+ function readCredentialFile(path, apiKeyKeys, pointerKey) {
33275
32548
  const parsed = readAppConfigFile(path);
33276
32549
  if (!parsed)
33277
32550
  return null;
33278
- for (const key of apiKeyKeys) {
32551
+ for (const key of [...apiKeyKeys, pointerKey]) {
33279
32552
  if (parsed.unusable.has(key)) {
33280
32553
  throw new CredentialFileUnsafeError(path, `${key} is declared but blank or malformed`);
33281
32554
  }
33282
32555
  }
33283
32556
  const values = apiKeyKeys.map((key) => parsed.values.get(key)?.trim()).filter((value) => Boolean(value));
32557
+ const pointer = parsed.values.get(pointerKey)?.trim();
32558
+ if (pointer !== undefined) {
32559
+ if (!VAULT_POINTER_SHAPE.test(pointer))
32560
+ throw new CredentialFileUnsafeError(path, `${pointerKey} must name a vault item`);
32561
+ if (values.length)
32562
+ throw new CredentialFileUnsafeError(path, "a credential file cannot select both a literal key and a vault reference");
32563
+ return { apiKey: "", pointerVaultKey: pointer };
32564
+ }
33284
32565
  if (new Set(values).size > 1) {
33285
32566
  throw new CredentialFileUnsafeError(path, "credential aliases disagree");
33286
32567
  }
33287
- return values[0] ?? null;
32568
+ return values[0] === undefined ? null : { apiKey: values[0] };
33288
32569
  }
33289
32570
  var CREDENTIAL_SHAPED_KEY = /(?:^|_)(?:API_KEY|KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIAL|AUTH)(?:_|$)/;
33290
32571
  function appConfigDiskValue(name, env, keys) {
@@ -33545,12 +32826,13 @@ function resolveCredential(name, env, options = {}) {
33545
32826
  }
33546
32827
  const paths = profileDiskSources(name, env, profile);
33547
32828
  for (const path of paths) {
33548
- const value = readCredentialFile(path, apiKeyKeys);
32829
+ const value = readCredentialFile(path, apiKeyKeys, pointerKeyName);
33549
32830
  if (value) {
33550
- assertUsableCredential(name, path, value);
32831
+ if (!value.pointerVaultKey)
32832
+ assertUsableCredential(name, path, value.apiKey);
33551
32833
  return sealCredential({
33552
- apiKey: value,
33553
- tier: "profile",
32834
+ ...value,
32835
+ tier: value.pointerVaultKey ? "pointer" : "profile",
33554
32836
  source: path,
33555
32837
  deliberate: true,
33556
32838
  diskCandidates: paths,
@@ -33558,7 +32840,7 @@ function resolveCredential(name, env, options = {}) {
33558
32840
  });
33559
32841
  }
33560
32842
  }
33561
- throw new CredentialResolutionError(name, `Profile '${profile}' (from ${profileSource}) has no ${apiKeyKeys[0]} for '${name}'. ` + `Looked in: ${paths.join(", ") || "<no HOME in this environment>"}. ` + `A profile names WHICH identity to use, so it is never resolved around \u2014 ` + `create the profile's credential file or unset ${CREDENTIAL_PROFILE_ENV_KEY}.`, paths);
32843
+ throw new CredentialResolutionError(name, `Profile '${profile}' (from ${profileSource}) has no ${apiKeyKeys[0]} or ${pointerKeyName} for '${name}'. ` + `Looked in: ${paths.join(", ") || "<no HOME in this environment>"}. ` + `A profile names WHICH identity to use, so it is never resolved around \u2014 ` + `create the profile's credential file or unset ${CREDENTIAL_PROFILE_ENV_KEY}.`, paths);
33562
32844
  }
33563
32845
  const definedEnvEntries = apiKeyKeys.filter((key) => Object.prototype.hasOwnProperty.call(env, key) && env[key] !== undefined).map((key) => ({ key, value: String(env[key]).trim() }));
33564
32846
  const blankEnv = definedEnvEntries.find((entry) => entry.value.length === 0);
@@ -33583,17 +32865,27 @@ function resolveCredential(name, env, options = {}) {
33583
32865
  });
33584
32866
  }
33585
32867
  const diskSourceList = credentialDiskSourceList(name, env, null);
33586
- const diskHits = diskSourceList.map((src) => ({ src, value: readCredentialFile(src.path, apiKeyKeys) })).filter((hit) => hit.value !== null);
32868
+ const diskHits = diskSourceList.map((src) => ({ src, value: readCredentialFile(src.path, apiKeyKeys, pointerKeyName) })).filter((hit) => hit.value !== null);
33587
32869
  if (diskHits.length > 0) {
33588
32870
  const winner = diskHits[0];
33589
- assertUsableCredential(name, winner.src.path, winner.value);
32871
+ if (winner.value.pointerVaultKey) {
32872
+ return sealCredential({
32873
+ ...winner.value,
32874
+ tier: "pointer",
32875
+ source: winner.src.path,
32876
+ deliberate: false,
32877
+ diskCandidates: diskPaths,
32878
+ warning: null
32879
+ });
32880
+ }
32881
+ assertUsableCredential(name, winner.src.path, winner.value.apiKey);
33590
32882
  const divergentSources = [
33591
- ...diskHits.slice(1).filter((hit) => hit.value !== winner.value).map((hit) => hit.src.path),
33592
- ...envHit && envHit.value !== winner.value ? [envHit.key] : []
32883
+ ...diskHits.slice(1).filter((hit) => hit.value.apiKey !== winner.value.apiKey || hit.value.pointerVaultKey !== winner.value.pointerVaultKey).map((hit) => hit.src.path),
32884
+ ...envHit && envHit.value !== winner.value.apiKey ? [envHit.key] : []
33593
32885
  ];
33594
32886
  const warning = divergentSources.length > 0 ? `Credential sources disagree for '${name}': ${winner.src.path} and ` + `${divergentSources.join(", ")} hold different keys. ${winner.src.path} wins, because a file on ` + `disk is re-read on every call while an environment variable is a snapshot. Reconcile them \u2014 ` + `a rotation that updated only one leaves the other to fail 401 wherever it is loaded first.` : null;
33595
32887
  return sealCredential({
33596
- apiKey: winner.value,
32888
+ apiKey: winner.value.apiKey,
33597
32889
  tier: winner.src.tier,
33598
32890
  source: winner.src.path,
33599
32891
  deliberate: false,
@@ -33614,23 +32906,31 @@ function resolveCredential(name, env, options = {}) {
33614
32906
  }
33615
32907
  return null;
33616
32908
  }
33617
- var SECRETS_PACKAGE_SPECIFIER = "@hasna/" + "secrets";
33618
32909
  var requireSecretsSdk = createRequire(import.meta.url);
33619
32910
  async function completePointerCredential(name, pointerResolution, env = process.env) {
32911
+ const secretsEnv = snapshotClientEnvironment("secrets", env);
33620
32912
  const vaultKey = pointerResolution.pointerVaultKey;
33621
32913
  const pointerEnvKey = pointerResolution.source;
33622
32914
  if (!vaultKey) {
33623
32915
  throw new CredentialResolutionError(name, `Pointer resolution from ${pointerEnvKey} carries no vault item key; this is a defect in the resolver.`, [pointerEnvKey]);
33624
32916
  }
32917
+ if (name === "secrets") {
32918
+ throw new CredentialResolutionError(name, "The Secrets bootstrap credential cannot reference the same hosted vault; configure an independent bootstrap provider.", [pointerEnvKey]);
32919
+ }
33625
32920
  let secretsSdk;
33626
32921
  try {
33627
- secretsSdk = requireSecretsSdk(SECRETS_PACKAGE_SPECIFIER);
32922
+ const sdkUrl = resolveInstalledSecrets(import.meta.url);
32923
+ secretsSdk = requireSecretsSdk(fileURLToPath2(sdkUrl));
33628
32924
  } catch {
33629
32925
  throw new CredentialResolutionError(name, `${pointerEnvKey} names vault item '${vaultKey}', but the secrets SDK (@hasna/secrets) is not installed ` + `in this process. A vault pointer is TERMINAL: install @hasna/secrets to resolve it, or unset ${pointerEnvKey}.`, [pointerEnvKey]);
33630
32926
  }
33631
32927
  let client;
33632
32928
  try {
33633
- client = secretsSdk.createSecretsClientFromEnv(env);
32929
+ const bootstrap = resolveCredential("secrets", secretsEnv);
32930
+ if (!bootstrap || bootstrap.tier === "pointer") {
32931
+ throw new CredentialResolutionError("secrets", "The Secrets vault requires an independent, non-reference bootstrap credential.", bootstrap ? [bootstrap.source] : []);
32932
+ }
32933
+ client = secretsSdk.createSecretsClientFromEnv(secretsEnv);
33634
32934
  } catch {
33635
32935
  throw new CredentialResolutionError(name, `${pointerEnvKey} names vault item '${vaultKey}', but the secrets client could not be configured from this ` + `environment (the secrets service URL and key env are missing or invalid). A vault pointer is TERMINAL and ` + `never falls through to a literal or disk credential.`, [pointerEnvKey]);
33636
32936
  }
@@ -33649,7 +32949,7 @@ async function completePointerCredential(name, pointerResolution, env = process.
33649
32949
  apiKey: value,
33650
32950
  tier: "pointer",
33651
32951
  source: `${pointerEnvKey} -> vault:${vaultKey}`,
33652
- deliberate: true,
32952
+ deliberate: pointerResolution.deliberate,
33653
32953
  diskCandidates: pointerResolution.diskCandidates,
33654
32954
  warning: null
33655
32955
  });
@@ -33783,7 +33083,7 @@ var AUTHORITY_OVERRIDE_HEADERS = new Set([
33783
33083
  ]);
33784
33084
 
33785
33085
  // src/lib/instance-credentials.ts
33786
- import { closeSync as closeSync7, constants as constants6, fstatSync as fstatSync7, lstatSync as lstatSync14, openSync as openSync7, readSync as readSync5 } from "fs";
33086
+ import { closeSync as closeSync7, constants as constants6, fstatSync as fstatSync7, lstatSync as lstatSync15, openSync as openSync7, readSync as readSync5 } from "fs";
33787
33087
  var SKILLS_BOUND_API_URL = "HASNA_SKILLS_BOUND_API_URL";
33788
33088
  function selectedSkillsProfile(env, explicit) {
33789
33089
  const selected = explicit ?? env.HASNA_PROFILE;
@@ -33799,7 +33099,7 @@ function skillsProfileCredentialFiles(env, explicit) {
33799
33099
  }
33800
33100
  function fileIdentity(file2) {
33801
33101
  try {
33802
- return lstatSync14(file2);
33102
+ return lstatSync15(file2);
33803
33103
  } catch (error61) {
33804
33104
  if (["ENOENT", "ENOTDIR"].includes(error61.code ?? ""))
33805
33105
  return null;
@@ -33997,7 +33297,7 @@ function noticeLocalSkillsMode(write = (line) => console.error(line)) {
33997
33297
  if (localNoticePrinted)
33998
33298
  return;
33999
33299
  localNoticePrinted = true;
34000
- write(`skills: local mode (${SKILLS_LOCAL_OPT_IN_ENV_KEYS[0]}=1) \u2014 running on this machine against the bundled corpus.`);
33300
+ write(`skills: local mode (${SKILLS_LOCAL_OPT_IN_ENV_KEYS[0]}=1) \u2014 running on this machine against the Skills-owned local cache.`);
34001
33301
  }
34002
33302
  function resolveSkillsFleet(env = process.env, options = {}) {
34003
33303
  try {
@@ -34071,7 +33371,7 @@ function credentialLocations(env) {
34071
33371
  }
34072
33372
  function assertCredentialInstance(credential, apiOrigin, env, options) {
34073
33373
  let bound;
34074
- if (credential.tier === "disk" || credential.tier === "profile") {
33374
+ if (credential.tier === "disk" || credential.tier === "profile" || credential.tier === "pointer" && credential.diskCandidates.includes(credential.source)) {
34075
33375
  const metadata = readSkillsInstanceMetadata(credential.source);
34076
33376
  bound = metadata.binding ?? metadata.apiUrl ?? defaultFleetGatewayBaseUrl(SKILLS_APP);
34077
33377
  } else if (credential.tier === "keychain") {
@@ -34086,6 +33386,7 @@ async function resolveSkillsApiKey(env = process.env, options = {}) {
34086
33386
  }
34087
33387
  async function resolveSkillsConnection(env = process.env, options = {}) {
34088
33388
  const snapshotEnv = snapshotSkillsEnvironment(env);
33389
+ const assertFilesUnchanged = selectsSkillsLocalMode(snapshotEnv) ? () => {} : captureSkillsCredentialFiles(skillsProfileCredentialFiles(snapshotEnv, options.credentials?.profile));
34089
33390
  const fleet = resolveSkillsFleet(snapshotEnv, snapshotSkillsOptions(env, options));
34090
33391
  if (fleet.mode === "local" && env === process.env)
34091
33392
  noticeLocalSkillsMode();
@@ -34099,7 +33400,7 @@ async function resolveSkillsConnection(env = process.env, options = {}) {
34099
33400
  }
34100
33401
  let completed;
34101
33402
  try {
34102
- completed = await completePointerCredential(SKILLS_APP, pointer, snapshotEnv);
33403
+ completed = await completePointerCredential(SKILLS_APP, pointer, env);
34103
33404
  } catch (error61) {
34104
33405
  const translated = asSkillsFleetCredentialError(error61);
34105
33406
  if (translated)
@@ -34109,6 +33410,7 @@ async function resolveSkillsConnection(env = process.env, options = {}) {
34109
33410
  if (!completed.apiKey?.trim()) {
34110
33411
  throw new SkillsFleetCredentialError(`${credentialPointerEnvKey(SKILLS_APP)} names a vault item that produced an empty Skills API key \u2014 ` + `refusing to send an unauthenticated request.`);
34111
33412
  }
33413
+ assertFilesUnchanged();
34112
33414
  return { ...fleet, apiKey: completed.apiKey, apiKeyPointer: null };
34113
33415
  }
34114
33416
  async function requireSkillsApiKey(action = "This command", env = process.env, options = {}) {
@@ -35069,7 +34371,7 @@ function parseInvitationResult(action, value, input2, organizationId) {
35069
34371
  if (value.organizationId !== organizationId || !Array.isArray(value.invitations) || value.invitations.length > 50 || value.nextCursor !== null && !uuid3(value.nextCursor))
35070
34372
  return invalid();
35071
34373
  const invitations = value.invitations.map((v) => projection(v, organizationId));
35072
- if (invitations.some((v, n) => v.id <= String(n ? invitations[n - 1].id : request.after ?? "")) || value.nextCursor !== null && (invitations.length !== 50 || value.nextCursor !== invitations.at(-1)?.id))
34374
+ if (invitations.some((v, n2) => v.id <= String(n2 ? invitations[n2 - 1].id : request.after ?? "")) || value.nextCursor !== null && (invitations.length !== 50 || value.nextCursor !== invitations.at(-1)?.id))
35073
34375
  return invalid();
35074
34376
  return { organizationId, invitations, nextCursor: value.nextCursor };
35075
34377
  }
@@ -35344,7 +34646,9 @@ function parseWorkspaceLeaveResult(value, membershipId, organizationId) {
35344
34646
  throw new RemoteWorkspaceLeaveUnconfirmedError;
35345
34647
  return { membershipId, organizationId, removed: true, signInRequired: true };
35346
34648
  }
34649
+
35347
34650
  // src/lib/auth-store.ts
34651
+ var SKILLS_API_KEY_REF = credentialPointerEnvKey("skills");
35348
34652
  function getApiUrl(action, env = process.env, options = {}) {
35349
34653
  return requireSkillsApiOrigin(action, env, options);
35350
34654
  }
@@ -36408,9 +35712,9 @@ async function createRemoteSkillsClient(env = process.env) {
36408
35712
  }
36409
35713
  // src/lib/scheduler.ts
36410
35714
  import { existsSync as existsSync16, readFileSync as readFileSync19, writeFileSync as writeFileSync9, mkdirSync as mkdirSync10 } from "fs";
36411
- import { join as join25 } from "path";
35715
+ import { join as join27 } from "path";
36412
35716
  function getSchedulesPath(targetDir = process.cwd()) {
36413
- return join25(targetDir, ".skills", "schedules.json");
35717
+ return join27(targetDir, ".skills", "schedules.json");
36414
35718
  }
36415
35719
  function loadSchedules(targetDir = process.cwd()) {
36416
35720
  const path = getSchedulesPath(targetDir);
@@ -36423,7 +35727,7 @@ function loadSchedules(targetDir = process.cwd()) {
36423
35727
  }
36424
35728
  function saveSchedules(data, targetDir = process.cwd()) {
36425
35729
  const path = getSchedulesPath(targetDir);
36426
- const dir = join25(targetDir, ".skills");
35730
+ const dir = join27(targetDir, ".skills");
36427
35731
  if (!existsSync16(dir))
36428
35732
  mkdirSync10(dir, { recursive: true });
36429
35733
  writeFileSync9(path, JSON.stringify(data, null, 2));
@@ -36456,11 +35760,11 @@ function validateCronField(expr, min, max, label) {
36456
35760
  }
36457
35761
  continue;
36458
35762
  }
36459
- const n = parseInt(valuePart);
36460
- if (isNaN(n))
35763
+ const n2 = parseInt(valuePart);
35764
+ if (isNaN(n2))
36461
35765
  return { valid: false, error: `Invalid value "${valuePart}" in ${label}` };
36462
- if (n < min || n > max) {
36463
- return { valid: false, error: `Value ${n} outside valid ${min}-${max} in ${label}` };
35766
+ if (n2 < min || n2 > max) {
35767
+ return { valid: false, error: `Value ${n2} outside valid ${min}-${max} in ${label}` };
36464
35768
  }
36465
35769
  }
36466
35770
  return { valid: true };
@@ -36507,8 +35811,8 @@ function getNextRun(cron, from = new Date) {
36507
35811
  const [lo, hi] = part.split("-").map(Number);
36508
35812
  return Array.from({ length: hi - lo + 1 }, (_, i) => i + lo);
36509
35813
  }
36510
- const n = parseInt(part);
36511
- return isNaN(n) ? [] : [n];
35814
+ const n2 = parseInt(part);
35815
+ return isNaN(n2) ? [] : [n2];
36512
35816
  });
36513
35817
  }
36514
35818
  const minutes = parseField(minuteF, 0, 59);
@@ -36634,7 +35938,7 @@ function revisionIdOfRecord(record6) {
36634
35938
  }
36635
35939
  // src/lib/pull.ts
36636
35940
  import { existsSync as existsSync17, mkdirSync as mkdirSync11, mkdtempSync as mkdtempSync3, readFileSync as readFileSync20, renameSync as renameSync5, rmSync as rmSync4, writeFileSync as writeFileSync10 } from "fs";
36637
- import { dirname as dirname13, join as join26 } from "path";
35941
+ import { dirname as dirname13, join as join28 } from "path";
36638
35942
 
36639
35943
  // src/lib/skill-bundles.ts
36640
35944
  import { createHmac, timingSafeEqual } from "crypto";
@@ -36728,7 +36032,7 @@ async function pullOne(client, rawName, corpusOptions, verify) {
36728
36032
  return reconcileTombstone(slug, corpusOptions);
36729
36033
  }
36730
36034
  if (bundleResponse.status === 404) {
36731
- const marker = readPullMarker(join26(getPortableSkillsRoot(corpusOptions), slug));
36035
+ const marker = readPullMarker(join28(getPortableSkillsRoot(corpusOptions), slug));
36732
36036
  if (isPublishedInstallMarker(marker)) {
36733
36037
  return { name: slug, success: true, purged: true, removed: false };
36734
36038
  }
@@ -36767,7 +36071,7 @@ async function pullOne(client, rawName, corpusOptions, verify) {
36767
36071
  return { name: slug, success: false, error: `Skill '${slug}' was not found on the configured Skills instance.` };
36768
36072
  }
36769
36073
  if (!meta3?.revisionId) {
36770
- const marker = readPullMarker(join26(getPortableSkillsRoot(corpusOptions), slug));
36074
+ const marker = readPullMarker(join28(getPortableSkillsRoot(corpusOptions), slug));
36771
36075
  if (isPublishedInstallMarker(marker)) {
36772
36076
  return { name: slug, success: true, purged: true, removed: false };
36773
36077
  }
@@ -36824,7 +36128,7 @@ function provenRevision(meta3, slug, bundle) {
36824
36128
  return declared;
36825
36129
  }
36826
36130
  function reconcileTombstone(slug, corpusOptions) {
36827
- const target = join26(getPortableSkillsRoot(corpusOptions), slug);
36131
+ const target = join28(getPortableSkillsRoot(corpusOptions), slug);
36828
36132
  if (!hasSkillsOwnershipMarker(target)) {
36829
36133
  return { name: slug, success: true, tombstoned: true, removed: false, leftInPlace: true };
36830
36134
  }
@@ -36833,7 +36137,7 @@ function reconcileTombstone(slug, corpusOptions) {
36833
36137
  }
36834
36138
  function readPullMarker(dir) {
36835
36139
  try {
36836
- return JSON.parse(readFileSync20(join26(dir, PULL_MARKER_FILE), "utf-8"));
36140
+ return JSON.parse(readFileSync20(join28(dir, PULL_MARKER_FILE), "utf-8"));
36837
36141
  } catch {
36838
36142
  return null;
36839
36143
  }
@@ -36968,14 +36272,14 @@ function verifyBundleResponseBytes(buffer, response, verify = {}) {
36968
36272
  function installBundleAtomically(name, entries, options = {}, marker = {}) {
36969
36273
  const root = getPortableSkillsRoot(options);
36970
36274
  mkdirSync11(root, { recursive: true });
36971
- const target = join26(root, name);
36275
+ const target = join28(root, name);
36972
36276
  const created = !existsSync17(target);
36973
- const staging = mkdtempSync3(join26(root, `.pull-${name}-`));
36277
+ const staging = mkdtempSync3(join28(root, `.pull-${name}-`));
36974
36278
  let moved = false;
36975
36279
  let backup = null;
36976
36280
  try {
36977
36281
  for (const entry of entries) {
36978
- const destination = join26(staging, entry.path);
36282
+ const destination = join28(staging, entry.path);
36979
36283
  mkdirSync11(dirname13(destination), { recursive: true });
36980
36284
  writeFileSync10(destination, entry.bytes, { mode: entry.mode });
36981
36285
  }
@@ -36988,8 +36292,8 @@ function installBundleAtomically(name, entries, options = {}, marker = {}) {
36988
36292
  ...marker.revisionId ? { revisionId: marker.revisionId } : {}
36989
36293
  });
36990
36294
  if (existsSync17(target)) {
36991
- backup = mkdtempSync3(join26(root, `.pull-backup-${name}-`));
36992
- renameSync5(target, join26(backup, name));
36295
+ backup = mkdtempSync3(join28(root, `.pull-backup-${name}-`));
36296
+ renameSync5(target, join28(backup, name));
36993
36297
  moved = true;
36994
36298
  }
36995
36299
  renameSync5(staging, target);
@@ -36997,9 +36301,9 @@ function installBundleAtomically(name, entries, options = {}, marker = {}) {
36997
36301
  rmSync4(backup, { recursive: true, force: true });
36998
36302
  } catch (error61) {
36999
36303
  rmSync4(staging, { recursive: true, force: true });
37000
- if (moved && backup && existsSync17(join26(backup, name))) {
36304
+ if (moved && backup && existsSync17(join28(backup, name))) {
37001
36305
  try {
37002
- renameSync5(join26(backup, name), target);
36306
+ renameSync5(join28(backup, name), target);
37003
36307
  } catch {}
37004
36308
  }
37005
36309
  throw error61;
@@ -37018,7 +36322,7 @@ function writePullMarker(dir, record6) {
37018
36322
  ...record6.revisionId ? { revisionId: record6.revisionId } : {},
37019
36323
  syncedAt: new Date().toISOString()
37020
36324
  };
37021
- writeFileSync10(join26(dir, PULL_MARKER_FILE), `${JSON.stringify(marker, null, 2)}
36325
+ writeFileSync10(join28(dir, PULL_MARKER_FILE), `${JSON.stringify(marker, null, 2)}
37022
36326
  `);
37023
36327
  }
37024
36328
  async function safeMeta(client, slug) {
@@ -37174,11 +36478,11 @@ function findSkillsParityForMcpTool(tool) {
37174
36478
  }
37175
36479
  // src/lib/registry-sync.ts
37176
36480
  import { mkdirSync as mkdirSync12, writeFileSync as writeFileSync11 } from "fs";
37177
- import { dirname as dirname14, relative as relative6 } from "path";
36481
+ import { dirname as dirname14, relative as relative7 } from "path";
37178
36482
  // package.json
37179
36483
  var package_default = {
37180
36484
  name: "@hasna/skills",
37181
- version: "0.7.3",
36485
+ version: "0.8.0",
37182
36486
  description: "Skills library for AI coding agents",
37183
36487
  type: "module",
37184
36488
  bin: {
@@ -37263,7 +36567,8 @@ var package_default = {
37263
36567
  author: "Hasna",
37264
36568
  license: "Apache-2.0",
37265
36569
  devDependencies: {
37266
- "@hasna/contracts": "1.0.2",
36570
+ "@hasna/contracts": "1.1.0",
36571
+ "@hasna/secrets": "0.4.2",
37267
36572
  "@types/bun": "1.3.14",
37268
36573
  "@types/node": "25.2.3",
37269
36574
  "@types/react": "^18.2.0",
@@ -37316,7 +36621,7 @@ function createRegistrySyncArtifact(options = {}) {
37316
36621
  const registry2 = [...loadRegistryProfile(profile)].sort((a, b) => a.name.localeCompare(b.name));
37317
36622
  const skills = registry2.map((skill) => {
37318
36623
  const skillPath = getSkillPath(skill.name);
37319
- const directory = relative6(process.cwd(), skillPath) || skillPath;
36624
+ const directory = relative7(process.cwd(), skillPath) || skillPath;
37320
36625
  const validation = includeValidation ? validateSkillDirectory(skill.name, skillPath, skill) : undefined;
37321
36626
  const docs = includeDocs ? buildDocs(skill.name) : undefined;
37322
36627
  return {
@@ -38435,10 +37740,10 @@ function clone3(value) {
38435
37740
  }
38436
37741
  // src/lib/feedback.ts
38437
37742
  import { appendFileSync, existsSync as existsSync18, mkdirSync as mkdirSync13 } from "fs";
38438
- import { dirname as dirname15, join as join27 } from "path";
37743
+ import { dirname as dirname15, join as join29 } from "path";
38439
37744
  import { Database } from "bun:sqlite";
38440
37745
  function getFeedbackDbPath() {
38441
- return join27(getDataDir(), "skills.db");
37746
+ return join29(getDataDir(), "skills.db");
38442
37747
  }
38443
37748
  function getFeedbackDb() {
38444
37749
  const dbPath = getFeedbackDbPath();
@@ -38470,7 +37775,7 @@ function saveFeedback(input2) {
38470
37775
  throw new Error("Feedback message is required");
38471
37776
  const category = input2.category ?? "general";
38472
37777
  if (isApiMode()) {
38473
- const path = join27(getDataDir(), "feedback.jsonl");
37778
+ const path = join29(getDataDir(), "feedback.jsonl");
38474
37779
  const dir = dirname15(path);
38475
37780
  if (!existsSync18(dir))
38476
37781
  mkdirSync13(dir, { recursive: true });
@@ -38499,11 +37804,11 @@ import {
38499
37804
  existsSync as existsSync19,
38500
37805
  mkdirSync as mkdirSync14,
38501
37806
  readFileSync as readFileSync21,
38502
- readdirSync as readdirSync14,
37807
+ readdirSync as readdirSync13,
38503
37808
  statSync as statSync11,
38504
37809
  writeFileSync as writeFileSync12
38505
37810
  } from "fs";
38506
- import { dirname as dirname16, join as join28, normalize as normalize3, relative as relative7, sep as sep6 } from "path";
37811
+ import { dirname as dirname16, join as join30, normalize as normalize3, relative as relative8, sep as sep7 } from "path";
38507
37812
  var SKILLS_STORAGE_TABLES = [
38508
37813
  "skills_sync_records",
38509
37814
  "skills_sync_cursors"
@@ -38640,7 +37945,7 @@ function getSkillsNativeStorageStatus(options = {}) {
38640
37945
  local: {
38641
37946
  dataDir: getDataDir(),
38642
37947
  projectStateDir: getProjectStateDir(targetDir),
38643
- feedbackDbPath: join28(getDataDir(), "skills.db")
37948
+ feedbackDbPath: join30(getDataDir(), "skills.db")
38644
37949
  },
38645
37950
  remote: {
38646
37951
  databaseConfigured: Boolean(config2.databaseUrl),
@@ -38666,7 +37971,7 @@ function exportSkillsLocalSnapshot(targetDir = process.cwd(), options = {}) {
38666
37971
  if (existsSync19(projectStateDir)) {
38667
37972
  for (const filePath of walkFiles2(projectStateDir)) {
38668
37973
  const bytes = readFileSync21(filePath);
38669
- const relativePath = toPosix(relative7(targetDir, filePath));
37974
+ const relativePath = toPosix(relative8(targetDir, filePath));
38670
37975
  files.push({
38671
37976
  path: relativePath,
38672
37977
  sizeBytes: bytes.byteLength,
@@ -38996,8 +38301,8 @@ function parsePositiveInteger(value) {
38996
38301
  }
38997
38302
  function walkFiles2(dir) {
38998
38303
  const files = [];
38999
- for (const entry of readdirSync14(dir)) {
39000
- const full = join28(dir, entry);
38304
+ for (const entry of readdirSync13(dir)) {
38305
+ const full = join30(dir, entry);
39001
38306
  const stats = statSync11(full);
39002
38307
  if (stats.isDirectory())
39003
38308
  files.push(...walkFiles2(full));
@@ -39008,13 +38313,13 @@ function walkFiles2(dir) {
39008
38313
  }
39009
38314
  function resolveSnapshotPath(targetDir, snapshotPath) {
39010
38315
  const normalizedPath = normalize3(snapshotPath);
39011
- if (normalizedPath.startsWith("..") || normalizedPath.includes(`${sep6}..${sep6}`) || normalizedPath.startsWith(sep6)) {
38316
+ if (normalizedPath.startsWith("..") || normalizedPath.includes(`${sep7}..${sep7}`) || normalizedPath.startsWith(sep7)) {
39012
38317
  throw new Error(`Unsafe snapshot path: ${snapshotPath}`);
39013
38318
  }
39014
38319
  if (!toPosix(normalizedPath).startsWith(".skills/")) {
39015
38320
  throw new Error(`Snapshot path must stay inside .skills: ${snapshotPath}`);
39016
38321
  }
39017
- return join28(targetDir, normalizedPath);
38322
+ return join30(targetDir, normalizedPath);
39018
38323
  }
39019
38324
  function normalizeS3Prefix(prefix) {
39020
38325
  return (prefix ?? "").trim().replace(/^\/+|\/+$/g, "");
@@ -39081,18 +38386,18 @@ function toArrayBuffer(bytes) {
39081
38386
  // src/lib/station-snapshot.ts
39082
38387
  import { createHash as createHash14 } from "crypto";
39083
38388
  import {
39084
- copyFileSync as copyFileSync2,
38389
+ copyFileSync,
39085
38390
  mkdirSync as mkdirSync15,
39086
- readFileSync as readFileSync22,
38391
+ readFileSync as readFileSync23,
39087
38392
  statSync as statSync13,
39088
38393
  writeFileSync as writeFileSync13
39089
38394
  } from "fs";
39090
- import { dirname as dirname17, isAbsolute as isAbsolute10, relative as relative8, resolve as resolve10, sep as sep8 } from "path";
38395
+ import { dirname as dirname17, isAbsolute as isAbsolute10, relative as relative9, resolve as resolve10, sep as sep9 } from "path";
39091
38396
 
39092
38397
  // src/lib/portable-snapshot-filter.ts
39093
- import { readdirSync as readdirSync15, statSync as statSync12 } from "fs";
38398
+ import { readdirSync as readdirSync14, statSync as statSync12 } from "fs";
39094
38399
  import { homedir as homedir5 } from "os";
39095
- import { join as join29, sep as sep7 } from "path";
38400
+ import { join as join31, sep as sep8 } from "path";
39096
38401
  var SYNC_HOMES = [
39097
38402
  { name: "skills", subClass: "skills", agent: null },
39098
38403
  { name: "custom", subClass: "custom", agent: null },
@@ -39185,27 +38490,27 @@ function isPortableWithinSkill(relativeParts) {
39185
38490
  function homePathFor(definition, homesRoot) {
39186
38491
  const home = homesRoot ?? homedir5();
39187
38492
  if (definition.subClass === "skills" || definition.subClass === "custom") {
39188
- return join29(skillsDataRootForHome(home), definition.name);
38493
+ return join31(skillsDataRootForHome(home), definition.name);
39189
38494
  }
39190
38495
  if (definition.agent === "opencode") {
39191
- return join29(home, ".config", "opencode", "skills");
38496
+ return join31(home, ".config", "opencode", "skills");
39192
38497
  }
39193
- return join29(home, `.${definition.agent}`, "skills");
38498
+ return join31(home, `.${definition.agent}`, "skills");
39194
38499
  }
39195
38500
  function destinationFor(definition, stationId, relativePath) {
39196
- const category = definition.subClass === "agent-homes" ? join29("agent-homes", definition.agent ?? "") : definition.name;
39197
- return join29("resources", stationId, "skills", category, ...relativePath.split(sep7));
38501
+ const category = definition.subClass === "agent-homes" ? join31("agent-homes", definition.agent ?? "") : definition.name;
38502
+ return join31("resources", stationId, "skills", category, ...relativePath.split(sep8));
39198
38503
  }
39199
38504
  function walkEntries(absoluteRoot) {
39200
38505
  let entries;
39201
38506
  try {
39202
- entries = readdirSync15(absoluteRoot, { withFileTypes: true });
38507
+ entries = readdirSync14(absoluteRoot, { withFileTypes: true });
39203
38508
  } catch {
39204
38509
  return [];
39205
38510
  }
39206
38511
  const output2 = [];
39207
38512
  for (const entry of entries) {
39208
- const childFull = join29(absoluteRoot, entry.name);
38513
+ const childFull = join31(absoluteRoot, entry.name);
39209
38514
  if (entry.isSymbolicLink()) {
39210
38515
  output2.push({ kind: "symlink", relativePath: entry.name, fullPath: childFull });
39211
38516
  continue;
@@ -39216,7 +38521,7 @@ function walkEntries(absoluteRoot) {
39216
38521
  }
39217
38522
  const nested = walkEntries(childFull);
39218
38523
  for (const item of nested) {
39219
- output2.push({ ...item, relativePath: join29(entry.name, item.relativePath) });
38524
+ output2.push({ ...item, relativePath: join31(entry.name, item.relativePath) });
39220
38525
  }
39221
38526
  continue;
39222
38527
  }
@@ -39254,7 +38559,7 @@ function validateStationId(stationId) {
39254
38559
  }
39255
38560
  }
39256
38561
  function sha256File(filePath) {
39257
- return createHash14("sha256").update(readFileSync22(filePath)).digest("hex");
38562
+ return createHash14("sha256").update(readFileSync23(filePath)).digest("hex");
39258
38563
  }
39259
38564
  function scanHome(definition, homesRoot) {
39260
38565
  const homePath = homePathFor(definition, homesRoot);
@@ -39262,7 +38567,7 @@ function scanHome(definition, homesRoot) {
39262
38567
  const portable = [];
39263
38568
  const skipped = [];
39264
38569
  for (const entry of entries) {
39265
- const relativeParts = entry.relativePath.split(sep8);
38570
+ const relativeParts = entry.relativePath.split(sep9);
39266
38571
  const fileName = relativeParts[relativeParts.length - 1];
39267
38572
  if (entry.kind === "symlink") {
39268
38573
  skipped.push({ relativePath: entry.relativePath, reason: "symlink" });
@@ -39352,8 +38657,8 @@ function writeStationSnapshot(options) {
39352
38657
  const untouched = [];
39353
38658
  for (const plan of plans) {
39354
38659
  const destination = resolve10(repoRoot, plan.destination);
39355
- const destinationRelative = relative8(repoRoot, destination);
39356
- if (destinationRelative.startsWith("..") || destinationRelative.startsWith(sep8) || isAbsolute10(destinationRelative)) {
38660
+ const destinationRelative = relative9(repoRoot, destination);
38661
+ if (destinationRelative.startsWith("..") || destinationRelative.startsWith(sep9) || isAbsolute10(destinationRelative)) {
39357
38662
  throw new StationSnapshotError("DESTINATION_ESCAPE", `destination escapes repo root: ${plan.destination}`);
39358
38663
  }
39359
38664
  let existingDigest = null;
@@ -39376,7 +38681,7 @@ function writeStationSnapshot(options) {
39376
38681
  for (const plan of untouched) {
39377
38682
  const destination = resolve10(repoRoot, plan.destination);
39378
38683
  mkdirSync15(dirname17(destination), { recursive: true });
39379
- copyFileSync2(plan.source.fullPath, destination);
38684
+ copyFileSync(plan.source.fullPath, destination);
39380
38685
  written += 1;
39381
38686
  }
39382
38687
  const unchanged2 = plans.length - untouched.length;
@@ -39407,14 +38712,14 @@ function writeStationSnapshot(options) {
39407
38712
  // src/lib/station-hydrate.ts
39408
38713
  import { createHash as createHash15 } from "crypto";
39409
38714
  import {
39410
- copyFileSync as copyFileSync3,
38715
+ copyFileSync as copyFileSync2,
39411
38716
  mkdirSync as mkdirSync16,
39412
- readdirSync as readdirSync16,
39413
- readFileSync as readFileSync23,
38717
+ readdirSync as readdirSync15,
38718
+ readFileSync as readFileSync25,
39414
38719
  statSync as statSync14,
39415
38720
  writeFileSync as writeFileSync14
39416
38721
  } from "fs";
39417
- import { dirname as dirname18, join as join30, resolve as resolve11, sep as sep9 } from "path";
38722
+ import { dirname as dirname18, join as join32, resolve as resolve11, sep as sep10 } from "path";
39418
38723
  var STATION_HYDRATION_MANIFEST_SCHEMA = "hasna.fleet-resources.skills-hydration-manifest/v1";
39419
38724
  var STATION_HYDRATION_PRODUCER = { name: "@hasna/skills", version: package_default.version };
39420
38725
  var MANIFEST_HASH_KEY_SEP = String.fromCharCode(0);
@@ -39422,14 +38727,14 @@ function fail(code, message, detail = []) {
39422
38727
  throw new StationSnapshotError(code, message, detail);
39423
38728
  }
39424
38729
  function snapshotRootFor(repoRoot, stationId) {
39425
- return join30(repoRoot, "resources", stationId, "skills");
38730
+ return join32(repoRoot, "resources", stationId, "skills");
39426
38731
  }
39427
38732
  function readSnapshotManifest(repoRoot, stationId) {
39428
38733
  const snapshotRoot = snapshotRootFor(repoRoot, stationId);
39429
- const manifestPath = join30(snapshotRoot, "sync-manifest.json");
38734
+ const manifestPath = join32(snapshotRoot, "sync-manifest.json");
39430
38735
  let manifest;
39431
38736
  try {
39432
- manifest = JSON.parse(readFileSync23(manifestPath, "utf8"));
38737
+ manifest = JSON.parse(readFileSync25(manifestPath, "utf8"));
39433
38738
  } catch (error61) {
39434
38739
  fail("MANIFEST_UNREADABLE", `cannot read snapshot manifest: ${manifestPath}: ${error61.message}`);
39435
38740
  }
@@ -39453,10 +38758,10 @@ function planStationHydration(stationId, repoRoot) {
39453
38758
  const hashMismatches = [];
39454
38759
  const skippedByRule = [];
39455
38760
  for (const agent of SYNC_AGENTS) {
39456
- const agentRoot = join30(snapshotRoot, "agent-homes", agent);
38761
+ const agentRoot = join32(snapshotRoot, "agent-homes", agent);
39457
38762
  let identEntries;
39458
38763
  try {
39459
- identEntries = readdirSync16(agentRoot, { withFileTypes: true });
38764
+ identEntries = readdirSync15(agentRoot, { withFileTypes: true });
39460
38765
  } catch {
39461
38766
  continue;
39462
38767
  }
@@ -39464,10 +38769,10 @@ function planStationHydration(stationId, repoRoot) {
39464
38769
  if (!identEntry.isDirectory() || identEntry.name.startsWith(".")) {
39465
38770
  continue;
39466
38771
  }
39467
- const identRoot = join30(agentRoot, identEntry.name);
38772
+ const identRoot = join32(agentRoot, identEntry.name);
39468
38773
  const entries = walkEntries(identRoot);
39469
38774
  for (const entry of entries) {
39470
- const relativeParts = [identEntry.name, ...entry.relativePath.split(sep9)];
38775
+ const relativeParts = [identEntry.name, ...entry.relativePath.split(sep10)];
39471
38776
  if (entry.kind === "symlink") {
39472
38777
  symlinks.push({ ident: identEntry.name, agent, relativePath: entry.relativePath });
39473
38778
  continue;
@@ -39491,8 +38796,8 @@ function planStationHydration(stationId, repoRoot) {
39491
38796
  });
39492
38797
  continue;
39493
38798
  }
39494
- const withinIdent = relativeParts.slice(1).join(sep9);
39495
- const homeRelative = relativeParts.join(sep9);
38799
+ const withinIdent = relativeParts.slice(1).join(sep10);
38800
+ const homeRelative = relativeParts.join(sep10);
39496
38801
  if (REFUSED_SCANNER_FLAGGED.has(homeRelative)) {
39497
38802
  skippedByRule.push({
39498
38803
  ident: identEntry.name,
@@ -39565,7 +38870,7 @@ function planStationHydration(stationId, repoRoot) {
39565
38870
  for (const copy of copies) {
39566
38871
  let isStub = false;
39567
38872
  try {
39568
- isStub = isPointerSkillMd(readFileSync23(copy.fullPath, "utf8"));
38873
+ isStub = isPointerSkillMd(readFileSync25(copy.fullPath, "utf8"));
39569
38874
  } catch {
39570
38875
  isStub = false;
39571
38876
  }
@@ -39649,7 +38954,7 @@ function writeStationHydration(options) {
39649
38954
  const toWrite = [];
39650
38955
  for (const skill of plan.winners) {
39651
38956
  for (const file2 of skill.files) {
39652
- const destination = join30(cacheRoot, skill.ident, file2.withinIdent);
38957
+ const destination = join32(cacheRoot, skill.ident, file2.withinIdent);
39653
38958
  const digest2 = sha256File(file2.winner.fullPath);
39654
38959
  let existingDigest = null;
39655
38960
  try {
@@ -39671,7 +38976,7 @@ function writeStationHydration(options) {
39671
38976
  let written = 0;
39672
38977
  for (const entry of toWrite) {
39673
38978
  mkdirSync16(dirname18(entry.destination), { recursive: true });
39674
- copyFileSync3(entry.fullPath, entry.destination);
38979
+ copyFileSync2(entry.fullPath, entry.destination);
39675
38980
  written += 1;
39676
38981
  }
39677
38982
  const unchanged2 = plan.totalFiles - written;
@@ -39691,7 +38996,7 @@ function writeStationHydration(options) {
39691
38996
  },
39692
38997
  skills: resultSkills
39693
38998
  };
39694
- const hydrationManifestPath = join30(dirname18(cacheRoot), `hydration-${options.stationId}.json`);
38999
+ const hydrationManifestPath = join32(dirname18(cacheRoot), `hydration-${options.stationId}.json`);
39695
39000
  mkdirSync16(dirname18(hydrationManifestPath), { recursive: true });
39696
39001
  writeFileSync14(hydrationManifestPath, `${JSON.stringify(hydration, null, 2)}
39697
39002
  `);
@@ -40327,23 +39632,23 @@ class RemoteSkillsAuthClient {
40327
39632
  }
40328
39633
  }
40329
39634
  // src/lib/private-publication-recovery.ts
40330
- import { constants as constants7, closeSync as closeSync8, fsyncSync as fsyncSync2, fstatSync as fstatSync8, lstatSync as lstatSync15, mkdirSync as mkdirSync17, openSync as openSync8, readSync as readSync6, realpathSync as realpathSync5, renameSync as renameSync6, unlinkSync as unlinkSync4, writeFileSync as writeFileSync15 } from "fs";
40331
- import { dirname as dirname19, isAbsolute as isAbsolute11, join as join31, resolve as resolve12 } from "path";
39635
+ import { constants as constants7, closeSync as closeSync8, fsyncSync as fsyncSync2, fstatSync as fstatSync8, lstatSync as lstatSync16, mkdirSync as mkdirSync17, openSync as openSync8, readSync as readSync6, realpathSync as realpathSync6, renameSync as renameSync6, unlinkSync as unlinkSync4, writeFileSync as writeFileSync15 } from "fs";
39636
+ import { dirname as dirname19, isAbsolute as isAbsolute11, join as join33, resolve as resolve12 } from "path";
40332
39637
  import { randomUUID as randomUUID3 } from "crypto";
40333
39638
  var fail2 = () => {
40334
39639
  throw new PrivatePublicationError("PUBLICATION_RECOVERY_INVALID", "The recovery directory is invalid or changed. Preserve it and inspect the existing intent; do not start a replacement automatically.");
40335
39640
  };
40336
39641
  function safeDirectory(directory) {
40337
- if (!isAbsolute11(directory) || directory !== resolve12(directory) || realpathSync5(directory) !== directory)
39642
+ if (!isAbsolute11(directory) || directory !== resolve12(directory) || realpathSync6(directory) !== directory)
40338
39643
  return fail2();
40339
39644
  for (let path = directory;; path = dirname19(path)) {
40340
- const stat = lstatSync15(path);
39645
+ const stat = lstatSync16(path);
40341
39646
  if (!stat.isDirectory() || stat.isSymbolicLink())
40342
39647
  return fail2();
40343
39648
  if (path === dirname19(path))
40344
39649
  break;
40345
39650
  }
40346
- const own2 = lstatSync15(directory);
39651
+ const own2 = lstatSync16(directory);
40347
39652
  if ((own2.mode & 63) !== 0 || process.getuid && own2.uid !== process.getuid())
40348
39653
  return fail2();
40349
39654
  return { dev: own2.dev, ino: own2.ino };
@@ -40354,7 +39659,7 @@ function unchangedDirectory(directory, identity3) {
40354
39659
  return fail2();
40355
39660
  }
40356
39661
  function readOwned(directory, name, max) {
40357
- const identity3 = safeDirectory(directory), file2 = join31(directory, name);
39662
+ const identity3 = safeDirectory(directory), file2 = join33(directory, name);
40358
39663
  const fd = openSync8(file2, constants7.O_RDONLY | constants7.O_NOFOLLOW);
40359
39664
  try {
40360
39665
  const stat = fstatSync8(fd);
@@ -40378,7 +39683,7 @@ function readOwned(directory, name, max) {
40378
39683
  }
40379
39684
  }
40380
39685
  function writeOwned(directory, name, bytes) {
40381
- const fd = openSync8(join31(directory, name), constants7.O_WRONLY | constants7.O_CREAT | constants7.O_EXCL | constants7.O_NOFOLLOW, 384);
39686
+ const fd = openSync8(join33(directory, name), constants7.O_WRONLY | constants7.O_CREAT | constants7.O_EXCL | constants7.O_NOFOLLOW, 384);
40382
39687
  try {
40383
39688
  writeFileSync15(fd, bytes);
40384
39689
  fsyncSync2(fd);
@@ -40391,7 +39696,7 @@ function save(directory, value) {
40391
39696
  writeOwned(directory, temporary, JSON.stringify(value) + `
40392
39697
  `);
40393
39698
  unchangedDirectory(directory, identity3);
40394
- renameSync6(join31(directory, temporary), join31(directory, "receipt.json"));
39699
+ renameSync6(join33(directory, temporary), join33(directory, "receipt.json"));
40395
39700
  const fd = openSync8(directory, constants7.O_RDONLY | constants7.O_NOFOLLOW);
40396
39701
  try {
40397
39702
  fsyncSync2(fd);
@@ -40404,7 +39709,7 @@ function bind(client, receipt) {
40404
39709
  throw new PrivatePublicationError("PUBLICATION_IDENTITY_CHANGED", "The fresh session does not match the recovery directory's server, account and membership.");
40405
39710
  }
40406
39711
  async function locked(directory, action) {
40407
- const identity3 = safeDirectory(directory), file2 = join31(directory, "operation.lock");
39712
+ const identity3 = safeDirectory(directory), file2 = join33(directory, "operation.lock");
40408
39713
  let fd;
40409
39714
  try {
40410
39715
  fd = openSync8(file2, constants7.O_WRONLY | constants7.O_CREAT | constants7.O_EXCL | constants7.O_NOFOLLOW, 384);
@@ -40420,7 +39725,7 @@ async function locked(directory, action) {
40420
39725
  } finally {
40421
39726
  closeSync8(fd);
40422
39727
  unchangedDirectory(directory, identity3);
40423
- const now = lstatSync15(file2);
39728
+ const now = lstatSync16(file2);
40424
39729
  if (now.dev !== lock.dev || now.ino !== lock.ino || !now.isFile() || now.isSymbolicLink())
40425
39730
  fail2();
40426
39731
  unlinkSync4(file2);
@@ -40472,7 +39777,7 @@ async function preparePrivatePublication(client, sourceDirectory, recoveryDirect
40472
39777
  phase: "prepared",
40473
39778
  intent: null
40474
39779
  };
40475
- if (!isAbsolute11(recoveryDirectory) || resolve12(recoveryDirectory) !== recoveryDirectory || realpathSync5(dirname19(recoveryDirectory)) !== dirname19(recoveryDirectory))
39780
+ if (!isAbsolute11(recoveryDirectory) || resolve12(recoveryDirectory) !== recoveryDirectory || realpathSync6(dirname19(recoveryDirectory)) !== dirname19(recoveryDirectory))
40476
39781
  return fail2();
40477
39782
  mkdirSync17(recoveryDirectory, { mode: 448 });
40478
39783
  safeDirectory(recoveryDirectory);