@zenobius/opencode-skillful 1.0.0 → 1.1.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +605 -48
- package/dist/index.js +1914 -487
- package/package.json +6 -3
package/dist/index.js
CHANGED
|
@@ -3826,13 +3826,7 @@ var require_searchString = __commonJS((exports, module) => {
|
|
|
3826
3826
|
module.exports = SearchString;
|
|
3827
3827
|
});
|
|
3828
3828
|
|
|
3829
|
-
//
|
|
3830
|
-
import { promises as fsPromises } from "fs";
|
|
3831
|
-
import { lstat } from "fs/promises";
|
|
3832
|
-
import { join, dirname, basename, sep } from "path";
|
|
3833
|
-
import os2 from "os";
|
|
3834
|
-
|
|
3835
|
-
// node_modules/zod/v4/classic/external.js
|
|
3829
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/external.js
|
|
3836
3830
|
var exports_external = {};
|
|
3837
3831
|
__export(exports_external, {
|
|
3838
3832
|
xid: () => xid2,
|
|
@@ -4062,7 +4056,7 @@ __export(exports_external, {
|
|
|
4062
4056
|
$brand: () => $brand
|
|
4063
4057
|
});
|
|
4064
4058
|
|
|
4065
|
-
// node_modules/zod/v4/core/index.js
|
|
4059
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/index.js
|
|
4066
4060
|
var exports_core2 = {};
|
|
4067
4061
|
__export(exports_core2, {
|
|
4068
4062
|
version: () => version,
|
|
@@ -4326,7 +4320,7 @@ __export(exports_core2, {
|
|
|
4326
4320
|
$ZodAny: () => $ZodAny
|
|
4327
4321
|
});
|
|
4328
4322
|
|
|
4329
|
-
// node_modules/zod/v4/core/core.js
|
|
4323
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/core.js
|
|
4330
4324
|
var NEVER = Object.freeze({
|
|
4331
4325
|
status: "aborted"
|
|
4332
4326
|
});
|
|
@@ -4393,7 +4387,7 @@ function config(newConfig) {
|
|
|
4393
4387
|
Object.assign(globalConfig, newConfig);
|
|
4394
4388
|
return globalConfig;
|
|
4395
4389
|
}
|
|
4396
|
-
// node_modules/zod/v4/core/util.js
|
|
4390
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/util.js
|
|
4397
4391
|
var exports_util = {};
|
|
4398
4392
|
__export(exports_util, {
|
|
4399
4393
|
unwrapMessage: () => unwrapMessage,
|
|
@@ -5022,7 +5016,7 @@ class Class {
|
|
|
5022
5016
|
constructor(..._args) {}
|
|
5023
5017
|
}
|
|
5024
5018
|
|
|
5025
|
-
// node_modules/zod/v4/core/errors.js
|
|
5019
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/errors.js
|
|
5026
5020
|
var initializer = (inst, def) => {
|
|
5027
5021
|
inst.name = "$ZodError";
|
|
5028
5022
|
Object.defineProperty(inst, "_zod", {
|
|
@@ -5165,7 +5159,7 @@ function prettifyError(error) {
|
|
|
5165
5159
|
`);
|
|
5166
5160
|
}
|
|
5167
5161
|
|
|
5168
|
-
// node_modules/zod/v4/core/parse.js
|
|
5162
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/parse.js
|
|
5169
5163
|
var _parse = (_Err) => (schema, value, _ctx, _params) => {
|
|
5170
5164
|
const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
|
|
5171
5165
|
const result = schema._zod.run({ value, issues: [] }, ctx);
|
|
@@ -5252,7 +5246,7 @@ var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
|
|
|
5252
5246
|
return _safeParseAsync(_Err)(schema, value, _ctx);
|
|
5253
5247
|
};
|
|
5254
5248
|
var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
|
|
5255
|
-
// node_modules/zod/v4/core/regexes.js
|
|
5249
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/regexes.js
|
|
5256
5250
|
var exports_regexes = {};
|
|
5257
5251
|
__export(exports_regexes, {
|
|
5258
5252
|
xid: () => xid,
|
|
@@ -5404,7 +5398,7 @@ var sha512_hex = /^[0-9a-fA-F]{128}$/;
|
|
|
5404
5398
|
var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
|
|
5405
5399
|
var sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
|
|
5406
5400
|
|
|
5407
|
-
// node_modules/zod/v4/core/checks.js
|
|
5401
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/checks.js
|
|
5408
5402
|
var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
|
|
5409
5403
|
var _a;
|
|
5410
5404
|
inst._zod ?? (inst._zod = {});
|
|
@@ -5945,7 +5939,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
|
|
|
5945
5939
|
};
|
|
5946
5940
|
});
|
|
5947
5941
|
|
|
5948
|
-
// node_modules/zod/v4/core/doc.js
|
|
5942
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/doc.js
|
|
5949
5943
|
class Doc {
|
|
5950
5944
|
constructor(args = []) {
|
|
5951
5945
|
this.content = [];
|
|
@@ -5983,14 +5977,14 @@ class Doc {
|
|
|
5983
5977
|
}
|
|
5984
5978
|
}
|
|
5985
5979
|
|
|
5986
|
-
// node_modules/zod/v4/core/versions.js
|
|
5980
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/versions.js
|
|
5987
5981
|
var version = {
|
|
5988
5982
|
major: 4,
|
|
5989
5983
|
minor: 1,
|
|
5990
5984
|
patch: 8
|
|
5991
5985
|
};
|
|
5992
5986
|
|
|
5993
|
-
// node_modules/zod/v4/core/schemas.js
|
|
5987
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/schemas.js
|
|
5994
5988
|
var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
|
|
5995
5989
|
var _a;
|
|
5996
5990
|
inst ?? (inst = {});
|
|
@@ -7813,7 +7807,7 @@ function handleRefineResult(result, payload, input, inst) {
|
|
|
7813
7807
|
payload.issues.push(issue(_iss));
|
|
7814
7808
|
}
|
|
7815
7809
|
}
|
|
7816
|
-
// node_modules/zod/v4/locales/index.js
|
|
7810
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/index.js
|
|
7817
7811
|
var exports_locales = {};
|
|
7818
7812
|
__export(exports_locales, {
|
|
7819
7813
|
zhTW: () => zh_TW_default,
|
|
@@ -7864,7 +7858,7 @@ __export(exports_locales, {
|
|
|
7864
7858
|
ar: () => ar_default
|
|
7865
7859
|
});
|
|
7866
7860
|
|
|
7867
|
-
// node_modules/zod/v4/locales/ar.js
|
|
7861
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ar.js
|
|
7868
7862
|
var error = () => {
|
|
7869
7863
|
const Sizable = {
|
|
7870
7864
|
string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" },
|
|
@@ -7980,7 +7974,7 @@ function ar_default() {
|
|
|
7980
7974
|
localeError: error()
|
|
7981
7975
|
};
|
|
7982
7976
|
}
|
|
7983
|
-
// node_modules/zod/v4/locales/az.js
|
|
7977
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/az.js
|
|
7984
7978
|
var error2 = () => {
|
|
7985
7979
|
const Sizable = {
|
|
7986
7980
|
string: { unit: "simvol", verb: "olmal\u0131d\u0131r" },
|
|
@@ -8095,7 +8089,7 @@ function az_default() {
|
|
|
8095
8089
|
localeError: error2()
|
|
8096
8090
|
};
|
|
8097
8091
|
}
|
|
8098
|
-
// node_modules/zod/v4/locales/be.js
|
|
8092
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/be.js
|
|
8099
8093
|
function getBelarusianPlural(count, one, few, many) {
|
|
8100
8094
|
const absCount = Math.abs(count);
|
|
8101
8095
|
const lastDigit = absCount % 10;
|
|
@@ -8259,7 +8253,7 @@ function be_default() {
|
|
|
8259
8253
|
localeError: error3()
|
|
8260
8254
|
};
|
|
8261
8255
|
}
|
|
8262
|
-
// node_modules/zod/v4/locales/ca.js
|
|
8256
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ca.js
|
|
8263
8257
|
var error4 = () => {
|
|
8264
8258
|
const Sizable = {
|
|
8265
8259
|
string: { unit: "car\xE0cters", verb: "contenir" },
|
|
@@ -8376,7 +8370,7 @@ function ca_default() {
|
|
|
8376
8370
|
localeError: error4()
|
|
8377
8371
|
};
|
|
8378
8372
|
}
|
|
8379
|
-
// node_modules/zod/v4/locales/cs.js
|
|
8373
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/cs.js
|
|
8380
8374
|
var error5 = () => {
|
|
8381
8375
|
const Sizable = {
|
|
8382
8376
|
string: { unit: "znak\u016F", verb: "m\xEDt" },
|
|
@@ -8511,7 +8505,7 @@ function cs_default() {
|
|
|
8511
8505
|
localeError: error5()
|
|
8512
8506
|
};
|
|
8513
8507
|
}
|
|
8514
|
-
// node_modules/zod/v4/locales/da.js
|
|
8508
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/da.js
|
|
8515
8509
|
var error6 = () => {
|
|
8516
8510
|
const Sizable = {
|
|
8517
8511
|
string: { unit: "tegn", verb: "havde" },
|
|
@@ -8642,7 +8636,7 @@ function da_default() {
|
|
|
8642
8636
|
localeError: error6()
|
|
8643
8637
|
};
|
|
8644
8638
|
}
|
|
8645
|
-
// node_modules/zod/v4/locales/de.js
|
|
8639
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/de.js
|
|
8646
8640
|
var error7 = () => {
|
|
8647
8641
|
const Sizable = {
|
|
8648
8642
|
string: { unit: "Zeichen", verb: "zu haben" },
|
|
@@ -8758,7 +8752,7 @@ function de_default() {
|
|
|
8758
8752
|
localeError: error7()
|
|
8759
8753
|
};
|
|
8760
8754
|
}
|
|
8761
|
-
// node_modules/zod/v4/locales/en.js
|
|
8755
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/en.js
|
|
8762
8756
|
var parsedType = (data) => {
|
|
8763
8757
|
const t = typeof data;
|
|
8764
8758
|
switch (t) {
|
|
@@ -8875,7 +8869,7 @@ function en_default() {
|
|
|
8875
8869
|
localeError: error8()
|
|
8876
8870
|
};
|
|
8877
8871
|
}
|
|
8878
|
-
// node_modules/zod/v4/locales/eo.js
|
|
8872
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/eo.js
|
|
8879
8873
|
var parsedType2 = (data) => {
|
|
8880
8874
|
const t = typeof data;
|
|
8881
8875
|
switch (t) {
|
|
@@ -8991,7 +8985,7 @@ function eo_default() {
|
|
|
8991
8985
|
localeError: error9()
|
|
8992
8986
|
};
|
|
8993
8987
|
}
|
|
8994
|
-
// node_modules/zod/v4/locales/es.js
|
|
8988
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/es.js
|
|
8995
8989
|
var error10 = () => {
|
|
8996
8990
|
const Sizable = {
|
|
8997
8991
|
string: { unit: "caracteres", verb: "tener" },
|
|
@@ -9139,7 +9133,7 @@ function es_default() {
|
|
|
9139
9133
|
localeError: error10()
|
|
9140
9134
|
};
|
|
9141
9135
|
}
|
|
9142
|
-
// node_modules/zod/v4/locales/fa.js
|
|
9136
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/fa.js
|
|
9143
9137
|
var error11 = () => {
|
|
9144
9138
|
const Sizable = {
|
|
9145
9139
|
string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" },
|
|
@@ -9261,7 +9255,7 @@ function fa_default() {
|
|
|
9261
9255
|
localeError: error11()
|
|
9262
9256
|
};
|
|
9263
9257
|
}
|
|
9264
|
-
// node_modules/zod/v4/locales/fi.js
|
|
9258
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/fi.js
|
|
9265
9259
|
var error12 = () => {
|
|
9266
9260
|
const Sizable = {
|
|
9267
9261
|
string: { unit: "merkki\xE4", subject: "merkkijonon" },
|
|
@@ -9383,7 +9377,7 @@ function fi_default() {
|
|
|
9383
9377
|
localeError: error12()
|
|
9384
9378
|
};
|
|
9385
9379
|
}
|
|
9386
|
-
// node_modules/zod/v4/locales/fr.js
|
|
9380
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/fr.js
|
|
9387
9381
|
var error13 = () => {
|
|
9388
9382
|
const Sizable = {
|
|
9389
9383
|
string: { unit: "caract\xE8res", verb: "avoir" },
|
|
@@ -9499,7 +9493,7 @@ function fr_default() {
|
|
|
9499
9493
|
localeError: error13()
|
|
9500
9494
|
};
|
|
9501
9495
|
}
|
|
9502
|
-
// node_modules/zod/v4/locales/fr-CA.js
|
|
9496
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/fr-CA.js
|
|
9503
9497
|
var error14 = () => {
|
|
9504
9498
|
const Sizable = {
|
|
9505
9499
|
string: { unit: "caract\xE8res", verb: "avoir" },
|
|
@@ -9616,7 +9610,7 @@ function fr_CA_default() {
|
|
|
9616
9610
|
localeError: error14()
|
|
9617
9611
|
};
|
|
9618
9612
|
}
|
|
9619
|
-
// node_modules/zod/v4/locales/he.js
|
|
9613
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/he.js
|
|
9620
9614
|
var error15 = () => {
|
|
9621
9615
|
const Sizable = {
|
|
9622
9616
|
string: { unit: "\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA", verb: "\u05DC\u05DB\u05DC\u05D5\u05DC" },
|
|
@@ -9732,7 +9726,7 @@ function he_default() {
|
|
|
9732
9726
|
localeError: error15()
|
|
9733
9727
|
};
|
|
9734
9728
|
}
|
|
9735
|
-
// node_modules/zod/v4/locales/hu.js
|
|
9729
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/hu.js
|
|
9736
9730
|
var error16 = () => {
|
|
9737
9731
|
const Sizable = {
|
|
9738
9732
|
string: { unit: "karakter", verb: "legyen" },
|
|
@@ -9848,7 +9842,7 @@ function hu_default() {
|
|
|
9848
9842
|
localeError: error16()
|
|
9849
9843
|
};
|
|
9850
9844
|
}
|
|
9851
|
-
// node_modules/zod/v4/locales/id.js
|
|
9845
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/id.js
|
|
9852
9846
|
var error17 = () => {
|
|
9853
9847
|
const Sizable = {
|
|
9854
9848
|
string: { unit: "karakter", verb: "memiliki" },
|
|
@@ -9964,7 +9958,7 @@ function id_default() {
|
|
|
9964
9958
|
localeError: error17()
|
|
9965
9959
|
};
|
|
9966
9960
|
}
|
|
9967
|
-
// node_modules/zod/v4/locales/is.js
|
|
9961
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/is.js
|
|
9968
9962
|
var parsedType3 = (data) => {
|
|
9969
9963
|
const t = typeof data;
|
|
9970
9964
|
switch (t) {
|
|
@@ -10081,7 +10075,7 @@ function is_default() {
|
|
|
10081
10075
|
localeError: error18()
|
|
10082
10076
|
};
|
|
10083
10077
|
}
|
|
10084
|
-
// node_modules/zod/v4/locales/it.js
|
|
10078
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/it.js
|
|
10085
10079
|
var error19 = () => {
|
|
10086
10080
|
const Sizable = {
|
|
10087
10081
|
string: { unit: "caratteri", verb: "avere" },
|
|
@@ -10197,7 +10191,7 @@ function it_default() {
|
|
|
10197
10191
|
localeError: error19()
|
|
10198
10192
|
};
|
|
10199
10193
|
}
|
|
10200
|
-
// node_modules/zod/v4/locales/ja.js
|
|
10194
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ja.js
|
|
10201
10195
|
var error20 = () => {
|
|
10202
10196
|
const Sizable = {
|
|
10203
10197
|
string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
|
|
@@ -10312,7 +10306,7 @@ function ja_default() {
|
|
|
10312
10306
|
localeError: error20()
|
|
10313
10307
|
};
|
|
10314
10308
|
}
|
|
10315
|
-
// node_modules/zod/v4/locales/ka.js
|
|
10309
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ka.js
|
|
10316
10310
|
var parsedType4 = (data) => {
|
|
10317
10311
|
const t = typeof data;
|
|
10318
10312
|
switch (t) {
|
|
@@ -10437,7 +10431,7 @@ function ka_default() {
|
|
|
10437
10431
|
localeError: error21()
|
|
10438
10432
|
};
|
|
10439
10433
|
}
|
|
10440
|
-
// node_modules/zod/v4/locales/km.js
|
|
10434
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/km.js
|
|
10441
10435
|
var error22 = () => {
|
|
10442
10436
|
const Sizable = {
|
|
10443
10437
|
string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" },
|
|
@@ -10555,11 +10549,11 @@ function km_default() {
|
|
|
10555
10549
|
};
|
|
10556
10550
|
}
|
|
10557
10551
|
|
|
10558
|
-
// node_modules/zod/v4/locales/kh.js
|
|
10552
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/kh.js
|
|
10559
10553
|
function kh_default() {
|
|
10560
10554
|
return km_default();
|
|
10561
10555
|
}
|
|
10562
|
-
// node_modules/zod/v4/locales/ko.js
|
|
10556
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ko.js
|
|
10563
10557
|
var error23 = () => {
|
|
10564
10558
|
const Sizable = {
|
|
10565
10559
|
string: { unit: "\uBB38\uC790", verb: "to have" },
|
|
@@ -10680,7 +10674,7 @@ function ko_default() {
|
|
|
10680
10674
|
localeError: error23()
|
|
10681
10675
|
};
|
|
10682
10676
|
}
|
|
10683
|
-
// node_modules/zod/v4/locales/lt.js
|
|
10677
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/lt.js
|
|
10684
10678
|
var parsedType5 = (data) => {
|
|
10685
10679
|
const t = typeof data;
|
|
10686
10680
|
return parsedTypeFromType(t, data);
|
|
@@ -10909,7 +10903,7 @@ function lt_default() {
|
|
|
10909
10903
|
localeError: error24()
|
|
10910
10904
|
};
|
|
10911
10905
|
}
|
|
10912
|
-
// node_modules/zod/v4/locales/mk.js
|
|
10906
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/mk.js
|
|
10913
10907
|
var error25 = () => {
|
|
10914
10908
|
const Sizable = {
|
|
10915
10909
|
string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" },
|
|
@@ -11026,7 +11020,7 @@ function mk_default() {
|
|
|
11026
11020
|
localeError: error25()
|
|
11027
11021
|
};
|
|
11028
11022
|
}
|
|
11029
|
-
// node_modules/zod/v4/locales/ms.js
|
|
11023
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ms.js
|
|
11030
11024
|
var error26 = () => {
|
|
11031
11025
|
const Sizable = {
|
|
11032
11026
|
string: { unit: "aksara", verb: "mempunyai" },
|
|
@@ -11142,7 +11136,7 @@ function ms_default() {
|
|
|
11142
11136
|
localeError: error26()
|
|
11143
11137
|
};
|
|
11144
11138
|
}
|
|
11145
|
-
// node_modules/zod/v4/locales/nl.js
|
|
11139
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/nl.js
|
|
11146
11140
|
var error27 = () => {
|
|
11147
11141
|
const Sizable = {
|
|
11148
11142
|
string: { unit: "tekens" },
|
|
@@ -11259,7 +11253,7 @@ function nl_default() {
|
|
|
11259
11253
|
localeError: error27()
|
|
11260
11254
|
};
|
|
11261
11255
|
}
|
|
11262
|
-
// node_modules/zod/v4/locales/no.js
|
|
11256
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/no.js
|
|
11263
11257
|
var error28 = () => {
|
|
11264
11258
|
const Sizable = {
|
|
11265
11259
|
string: { unit: "tegn", verb: "\xE5 ha" },
|
|
@@ -11375,7 +11369,7 @@ function no_default() {
|
|
|
11375
11369
|
localeError: error28()
|
|
11376
11370
|
};
|
|
11377
11371
|
}
|
|
11378
|
-
// node_modules/zod/v4/locales/ota.js
|
|
11372
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ota.js
|
|
11379
11373
|
var error29 = () => {
|
|
11380
11374
|
const Sizable = {
|
|
11381
11375
|
string: { unit: "harf", verb: "olmal\u0131d\u0131r" },
|
|
@@ -11491,7 +11485,7 @@ function ota_default() {
|
|
|
11491
11485
|
localeError: error29()
|
|
11492
11486
|
};
|
|
11493
11487
|
}
|
|
11494
|
-
// node_modules/zod/v4/locales/ps.js
|
|
11488
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ps.js
|
|
11495
11489
|
var error30 = () => {
|
|
11496
11490
|
const Sizable = {
|
|
11497
11491
|
string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" },
|
|
@@ -11613,7 +11607,7 @@ function ps_default() {
|
|
|
11613
11607
|
localeError: error30()
|
|
11614
11608
|
};
|
|
11615
11609
|
}
|
|
11616
|
-
// node_modules/zod/v4/locales/pl.js
|
|
11610
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/pl.js
|
|
11617
11611
|
var error31 = () => {
|
|
11618
11612
|
const Sizable = {
|
|
11619
11613
|
string: { unit: "znak\xF3w", verb: "mie\u0107" },
|
|
@@ -11730,7 +11724,7 @@ function pl_default() {
|
|
|
11730
11724
|
localeError: error31()
|
|
11731
11725
|
};
|
|
11732
11726
|
}
|
|
11733
|
-
// node_modules/zod/v4/locales/pt.js
|
|
11727
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/pt.js
|
|
11734
11728
|
var error32 = () => {
|
|
11735
11729
|
const Sizable = {
|
|
11736
11730
|
string: { unit: "caracteres", verb: "ter" },
|
|
@@ -11846,7 +11840,7 @@ function pt_default() {
|
|
|
11846
11840
|
localeError: error32()
|
|
11847
11841
|
};
|
|
11848
11842
|
}
|
|
11849
|
-
// node_modules/zod/v4/locales/ru.js
|
|
11843
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ru.js
|
|
11850
11844
|
function getRussianPlural(count, one, few, many) {
|
|
11851
11845
|
const absCount = Math.abs(count);
|
|
11852
11846
|
const lastDigit = absCount % 10;
|
|
@@ -12010,7 +12004,7 @@ function ru_default() {
|
|
|
12010
12004
|
localeError: error33()
|
|
12011
12005
|
};
|
|
12012
12006
|
}
|
|
12013
|
-
// node_modules/zod/v4/locales/sl.js
|
|
12007
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/sl.js
|
|
12014
12008
|
var error34 = () => {
|
|
12015
12009
|
const Sizable = {
|
|
12016
12010
|
string: { unit: "znakov", verb: "imeti" },
|
|
@@ -12127,7 +12121,7 @@ function sl_default() {
|
|
|
12127
12121
|
localeError: error34()
|
|
12128
12122
|
};
|
|
12129
12123
|
}
|
|
12130
|
-
// node_modules/zod/v4/locales/sv.js
|
|
12124
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/sv.js
|
|
12131
12125
|
var error35 = () => {
|
|
12132
12126
|
const Sizable = {
|
|
12133
12127
|
string: { unit: "tecken", verb: "att ha" },
|
|
@@ -12245,7 +12239,7 @@ function sv_default() {
|
|
|
12245
12239
|
localeError: error35()
|
|
12246
12240
|
};
|
|
12247
12241
|
}
|
|
12248
|
-
// node_modules/zod/v4/locales/ta.js
|
|
12242
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ta.js
|
|
12249
12243
|
var error36 = () => {
|
|
12250
12244
|
const Sizable = {
|
|
12251
12245
|
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" },
|
|
@@ -12362,7 +12356,7 @@ function ta_default() {
|
|
|
12362
12356
|
localeError: error36()
|
|
12363
12357
|
};
|
|
12364
12358
|
}
|
|
12365
|
-
// node_modules/zod/v4/locales/th.js
|
|
12359
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/th.js
|
|
12366
12360
|
var error37 = () => {
|
|
12367
12361
|
const Sizable = {
|
|
12368
12362
|
string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" },
|
|
@@ -12479,7 +12473,7 @@ function th_default() {
|
|
|
12479
12473
|
localeError: error37()
|
|
12480
12474
|
};
|
|
12481
12475
|
}
|
|
12482
|
-
// node_modules/zod/v4/locales/tr.js
|
|
12476
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/tr.js
|
|
12483
12477
|
var parsedType6 = (data) => {
|
|
12484
12478
|
const t = typeof data;
|
|
12485
12479
|
switch (t) {
|
|
@@ -12594,7 +12588,7 @@ function tr_default() {
|
|
|
12594
12588
|
localeError: error38()
|
|
12595
12589
|
};
|
|
12596
12590
|
}
|
|
12597
|
-
// node_modules/zod/v4/locales/uk.js
|
|
12591
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/uk.js
|
|
12598
12592
|
var error39 = () => {
|
|
12599
12593
|
const Sizable = {
|
|
12600
12594
|
string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" },
|
|
@@ -12711,11 +12705,11 @@ function uk_default() {
|
|
|
12711
12705
|
};
|
|
12712
12706
|
}
|
|
12713
12707
|
|
|
12714
|
-
// node_modules/zod/v4/locales/ua.js
|
|
12708
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ua.js
|
|
12715
12709
|
function ua_default() {
|
|
12716
12710
|
return uk_default();
|
|
12717
12711
|
}
|
|
12718
|
-
// node_modules/zod/v4/locales/ur.js
|
|
12712
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/ur.js
|
|
12719
12713
|
var error40 = () => {
|
|
12720
12714
|
const Sizable = {
|
|
12721
12715
|
string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" },
|
|
@@ -12832,7 +12826,7 @@ function ur_default() {
|
|
|
12832
12826
|
localeError: error40()
|
|
12833
12827
|
};
|
|
12834
12828
|
}
|
|
12835
|
-
// node_modules/zod/v4/locales/vi.js
|
|
12829
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/vi.js
|
|
12836
12830
|
var error41 = () => {
|
|
12837
12831
|
const Sizable = {
|
|
12838
12832
|
string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" },
|
|
@@ -12948,7 +12942,7 @@ function vi_default() {
|
|
|
12948
12942
|
localeError: error41()
|
|
12949
12943
|
};
|
|
12950
12944
|
}
|
|
12951
|
-
// node_modules/zod/v4/locales/zh-CN.js
|
|
12945
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/zh-CN.js
|
|
12952
12946
|
var error42 = () => {
|
|
12953
12947
|
const Sizable = {
|
|
12954
12948
|
string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" },
|
|
@@ -13064,7 +13058,7 @@ function zh_CN_default() {
|
|
|
13064
13058
|
localeError: error42()
|
|
13065
13059
|
};
|
|
13066
13060
|
}
|
|
13067
|
-
// node_modules/zod/v4/locales/zh-TW.js
|
|
13061
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/zh-TW.js
|
|
13068
13062
|
var error43 = () => {
|
|
13069
13063
|
const Sizable = {
|
|
13070
13064
|
string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" },
|
|
@@ -13181,7 +13175,7 @@ function zh_TW_default() {
|
|
|
13181
13175
|
localeError: error43()
|
|
13182
13176
|
};
|
|
13183
13177
|
}
|
|
13184
|
-
// node_modules/zod/v4/locales/yo.js
|
|
13178
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/locales/yo.js
|
|
13185
13179
|
var error44 = () => {
|
|
13186
13180
|
const Sizable = {
|
|
13187
13181
|
string: { unit: "\xE0mi", verb: "n\xED" },
|
|
@@ -13296,7 +13290,7 @@ function yo_default() {
|
|
|
13296
13290
|
localeError: error44()
|
|
13297
13291
|
};
|
|
13298
13292
|
}
|
|
13299
|
-
// node_modules/zod/v4/core/registries.js
|
|
13293
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/registries.js
|
|
13300
13294
|
var $output = Symbol("ZodOutput");
|
|
13301
13295
|
var $input = Symbol("ZodInput");
|
|
13302
13296
|
|
|
@@ -13347,7 +13341,7 @@ function registry() {
|
|
|
13347
13341
|
return new $ZodRegistry;
|
|
13348
13342
|
}
|
|
13349
13343
|
var globalRegistry = /* @__PURE__ */ registry();
|
|
13350
|
-
// node_modules/zod/v4/core/api.js
|
|
13344
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/api.js
|
|
13351
13345
|
function _string(Class2, params) {
|
|
13352
13346
|
return new Class2({
|
|
13353
13347
|
type: "string",
|
|
@@ -14225,7 +14219,7 @@ function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
|
|
|
14225
14219
|
const inst = new Class2(def);
|
|
14226
14220
|
return inst;
|
|
14227
14221
|
}
|
|
14228
|
-
// node_modules/zod/v4/core/to-json-schema.js
|
|
14222
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/to-json-schema.js
|
|
14229
14223
|
class JSONSchemaGenerator {
|
|
14230
14224
|
constructor(params) {
|
|
14231
14225
|
this.counter = 0;
|
|
@@ -15029,9 +15023,9 @@ function isTransforming(_schema, _ctx) {
|
|
|
15029
15023
|
}
|
|
15030
15024
|
throw new Error(`Unknown schema type: ${def.type}`);
|
|
15031
15025
|
}
|
|
15032
|
-
// node_modules/zod/v4/core/json-schema.js
|
|
15026
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/core/json-schema.js
|
|
15033
15027
|
var exports_json_schema = {};
|
|
15034
|
-
// node_modules/zod/v4/classic/iso.js
|
|
15028
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/iso.js
|
|
15035
15029
|
var exports_iso = {};
|
|
15036
15030
|
__export(exports_iso, {
|
|
15037
15031
|
time: () => time2,
|
|
@@ -15072,7 +15066,7 @@ function duration2(params) {
|
|
|
15072
15066
|
return _isoDuration(ZodISODuration, params);
|
|
15073
15067
|
}
|
|
15074
15068
|
|
|
15075
|
-
// node_modules/zod/v4/classic/errors.js
|
|
15069
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/errors.js
|
|
15076
15070
|
var initializer2 = (inst, issues) => {
|
|
15077
15071
|
$ZodError.init(inst, issues);
|
|
15078
15072
|
inst.name = "ZodError";
|
|
@@ -15107,7 +15101,7 @@ var ZodRealError = $constructor("ZodError", initializer2, {
|
|
|
15107
15101
|
Parent: Error
|
|
15108
15102
|
});
|
|
15109
15103
|
|
|
15110
|
-
// node_modules/zod/v4/classic/parse.js
|
|
15104
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/parse.js
|
|
15111
15105
|
var parse4 = /* @__PURE__ */ _parse(ZodRealError);
|
|
15112
15106
|
var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
|
|
15113
15107
|
var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
@@ -15121,7 +15115,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
|
|
|
15121
15115
|
var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
|
|
15122
15116
|
var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
|
|
15123
15117
|
|
|
15124
|
-
// node_modules/zod/v4/classic/schemas.js
|
|
15118
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/schemas.js
|
|
15125
15119
|
var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
15126
15120
|
$ZodType.init(inst, def);
|
|
15127
15121
|
inst.def = def;
|
|
@@ -16096,7 +16090,7 @@ function json(params) {
|
|
|
16096
16090
|
function preprocess(fn, schema) {
|
|
16097
16091
|
return pipe(transform(fn), schema);
|
|
16098
16092
|
}
|
|
16099
|
-
// node_modules/zod/v4/classic/compat.js
|
|
16093
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/compat.js
|
|
16100
16094
|
var ZodIssueCode = {
|
|
16101
16095
|
invalid_type: "invalid_type",
|
|
16102
16096
|
too_big: "too_big",
|
|
@@ -16120,7 +16114,7 @@ function getErrorMap() {
|
|
|
16120
16114
|
}
|
|
16121
16115
|
var ZodFirstPartyTypeKind;
|
|
16122
16116
|
(function(ZodFirstPartyTypeKind2) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
|
|
16123
|
-
// node_modules/zod/v4/classic/coerce.js
|
|
16117
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/coerce.js
|
|
16124
16118
|
var exports_coerce = {};
|
|
16125
16119
|
__export(exports_coerce, {
|
|
16126
16120
|
string: () => string3,
|
|
@@ -16145,69 +16139,1741 @@ function date4(params) {
|
|
|
16145
16139
|
return _coercedDate(ZodDate, params);
|
|
16146
16140
|
}
|
|
16147
16141
|
|
|
16148
|
-
// node_modules/zod/v4/classic/external.js
|
|
16142
|
+
// node_modules/@opencode-ai/plugin/node_modules/zod/v4/classic/external.js
|
|
16149
16143
|
config(en_default());
|
|
16150
16144
|
// node_modules/@opencode-ai/plugin/dist/tool.js
|
|
16151
16145
|
function tool(input) {
|
|
16152
16146
|
return input;
|
|
16153
16147
|
}
|
|
16154
16148
|
tool.schema = exports_external;
|
|
16155
|
-
//
|
|
16156
|
-
|
|
16157
|
-
|
|
16158
|
-
|
|
16159
|
-
|
|
16160
|
-
|
|
16161
|
-
|
|
16162
|
-
|
|
16163
|
-
|
|
16149
|
+
// src/lib/OpenCodeChat.ts
|
|
16150
|
+
function createInstructionInjector(ctx) {
|
|
16151
|
+
const sendPrompt = async (text, props) => {
|
|
16152
|
+
await ctx.client.session.prompt({
|
|
16153
|
+
path: { id: props.sessionId },
|
|
16154
|
+
body: {
|
|
16155
|
+
noReply: true,
|
|
16156
|
+
parts: [{ type: "text", text }]
|
|
16157
|
+
}
|
|
16158
|
+
});
|
|
16159
|
+
};
|
|
16160
|
+
return sendPrompt;
|
|
16161
|
+
}
|
|
16162
|
+
|
|
16163
|
+
// src/services/logger.ts
|
|
16164
|
+
var namespace = "[OpencodeSkillful]";
|
|
16165
|
+
function createLogger(config2) {
|
|
16166
|
+
function log(type, ...message) {
|
|
16167
|
+
const timestamp = new Date().toISOString();
|
|
16168
|
+
return [`${namespace}[${type}] ${timestamp} - `, ...message];
|
|
16169
|
+
}
|
|
16164
16170
|
return {
|
|
16165
|
-
|
|
16166
|
-
|
|
16167
|
-
|
|
16168
|
-
|
|
16169
|
-
|
|
16171
|
+
debug(...message) {
|
|
16172
|
+
if (!config2.debug)
|
|
16173
|
+
return;
|
|
16174
|
+
console.debug(...log("debug", ...message));
|
|
16175
|
+
},
|
|
16176
|
+
log(...message) {
|
|
16177
|
+
console.log(...log("log", ...message));
|
|
16178
|
+
},
|
|
16179
|
+
error(...message) {
|
|
16180
|
+
console.error(...log("error", ...message));
|
|
16181
|
+
},
|
|
16182
|
+
warn(...message) {
|
|
16183
|
+
console.warn(...log("warn", ...message));
|
|
16184
|
+
}
|
|
16170
16185
|
};
|
|
16186
|
+
}
|
|
16187
|
+
|
|
16188
|
+
// src/services/SkillRegistry.ts
|
|
16189
|
+
var import_gray_matter = __toESM(require_gray_matter(), 1);
|
|
16190
|
+
import { dirname, basename, relative } from "path";
|
|
16191
|
+
|
|
16192
|
+
// src/lib/Identifiers.ts
|
|
16193
|
+
import { sep } from "path";
|
|
16194
|
+
function toolName(skillPath) {
|
|
16195
|
+
return skillPath.replace(/SKILL\.md$/, "").split(sep).filter(Boolean).join("_").replace(/-/g, "_");
|
|
16196
|
+
}
|
|
16197
|
+
|
|
16198
|
+
// src/lib/SkillFs.ts
|
|
16199
|
+
import { join } from "path";
|
|
16200
|
+
import { existsSync } from "fs";
|
|
16201
|
+
|
|
16202
|
+
// node_modules/mime/dist/types/other.js
|
|
16203
|
+
var types = {
|
|
16204
|
+
"application/prs.cww": ["cww"],
|
|
16205
|
+
"application/prs.xsf+xml": ["xsf"],
|
|
16206
|
+
"application/vnd.1000minds.decision-model+xml": ["1km"],
|
|
16207
|
+
"application/vnd.3gpp.pic-bw-large": ["plb"],
|
|
16208
|
+
"application/vnd.3gpp.pic-bw-small": ["psb"],
|
|
16209
|
+
"application/vnd.3gpp.pic-bw-var": ["pvb"],
|
|
16210
|
+
"application/vnd.3gpp2.tcap": ["tcap"],
|
|
16211
|
+
"application/vnd.3m.post-it-notes": ["pwn"],
|
|
16212
|
+
"application/vnd.accpac.simply.aso": ["aso"],
|
|
16213
|
+
"application/vnd.accpac.simply.imp": ["imp"],
|
|
16214
|
+
"application/vnd.acucobol": ["acu"],
|
|
16215
|
+
"application/vnd.acucorp": ["atc", "acutc"],
|
|
16216
|
+
"application/vnd.adobe.air-application-installer-package+zip": ["air"],
|
|
16217
|
+
"application/vnd.adobe.formscentral.fcdt": ["fcdt"],
|
|
16218
|
+
"application/vnd.adobe.fxp": ["fxp", "fxpl"],
|
|
16219
|
+
"application/vnd.adobe.xdp+xml": ["xdp"],
|
|
16220
|
+
"application/vnd.adobe.xfdf": ["*xfdf"],
|
|
16221
|
+
"application/vnd.age": ["age"],
|
|
16222
|
+
"application/vnd.ahead.space": ["ahead"],
|
|
16223
|
+
"application/vnd.airzip.filesecure.azf": ["azf"],
|
|
16224
|
+
"application/vnd.airzip.filesecure.azs": ["azs"],
|
|
16225
|
+
"application/vnd.amazon.ebook": ["azw"],
|
|
16226
|
+
"application/vnd.americandynamics.acc": ["acc"],
|
|
16227
|
+
"application/vnd.amiga.ami": ["ami"],
|
|
16228
|
+
"application/vnd.android.package-archive": ["apk"],
|
|
16229
|
+
"application/vnd.anser-web-certificate-issue-initiation": ["cii"],
|
|
16230
|
+
"application/vnd.anser-web-funds-transfer-initiation": ["fti"],
|
|
16231
|
+
"application/vnd.antix.game-component": ["atx"],
|
|
16232
|
+
"application/vnd.apple.installer+xml": ["mpkg"],
|
|
16233
|
+
"application/vnd.apple.keynote": ["key"],
|
|
16234
|
+
"application/vnd.apple.mpegurl": ["m3u8"],
|
|
16235
|
+
"application/vnd.apple.numbers": ["numbers"],
|
|
16236
|
+
"application/vnd.apple.pages": ["pages"],
|
|
16237
|
+
"application/vnd.apple.pkpass": ["pkpass"],
|
|
16238
|
+
"application/vnd.aristanetworks.swi": ["swi"],
|
|
16239
|
+
"application/vnd.astraea-software.iota": ["iota"],
|
|
16240
|
+
"application/vnd.audiograph": ["aep"],
|
|
16241
|
+
"application/vnd.autodesk.fbx": ["fbx"],
|
|
16242
|
+
"application/vnd.balsamiq.bmml+xml": ["bmml"],
|
|
16243
|
+
"application/vnd.blueice.multipass": ["mpm"],
|
|
16244
|
+
"application/vnd.bmi": ["bmi"],
|
|
16245
|
+
"application/vnd.businessobjects": ["rep"],
|
|
16246
|
+
"application/vnd.chemdraw+xml": ["cdxml"],
|
|
16247
|
+
"application/vnd.chipnuts.karaoke-mmd": ["mmd"],
|
|
16248
|
+
"application/vnd.cinderella": ["cdy"],
|
|
16249
|
+
"application/vnd.citationstyles.style+xml": ["csl"],
|
|
16250
|
+
"application/vnd.claymore": ["cla"],
|
|
16251
|
+
"application/vnd.cloanto.rp9": ["rp9"],
|
|
16252
|
+
"application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"],
|
|
16253
|
+
"application/vnd.cluetrust.cartomobile-config": ["c11amc"],
|
|
16254
|
+
"application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"],
|
|
16255
|
+
"application/vnd.commonspace": ["csp"],
|
|
16256
|
+
"application/vnd.contact.cmsg": ["cdbcmsg"],
|
|
16257
|
+
"application/vnd.cosmocaller": ["cmc"],
|
|
16258
|
+
"application/vnd.crick.clicker": ["clkx"],
|
|
16259
|
+
"application/vnd.crick.clicker.keyboard": ["clkk"],
|
|
16260
|
+
"application/vnd.crick.clicker.palette": ["clkp"],
|
|
16261
|
+
"application/vnd.crick.clicker.template": ["clkt"],
|
|
16262
|
+
"application/vnd.crick.clicker.wordbank": ["clkw"],
|
|
16263
|
+
"application/vnd.criticaltools.wbs+xml": ["wbs"],
|
|
16264
|
+
"application/vnd.ctc-posml": ["pml"],
|
|
16265
|
+
"application/vnd.cups-ppd": ["ppd"],
|
|
16266
|
+
"application/vnd.curl.car": ["car"],
|
|
16267
|
+
"application/vnd.curl.pcurl": ["pcurl"],
|
|
16268
|
+
"application/vnd.dart": ["dart"],
|
|
16269
|
+
"application/vnd.data-vision.rdz": ["rdz"],
|
|
16270
|
+
"application/vnd.dbf": ["dbf"],
|
|
16271
|
+
"application/vnd.dcmp+xml": ["dcmp"],
|
|
16272
|
+
"application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"],
|
|
16273
|
+
"application/vnd.dece.ttml+xml": ["uvt", "uvvt"],
|
|
16274
|
+
"application/vnd.dece.unspecified": ["uvx", "uvvx"],
|
|
16275
|
+
"application/vnd.dece.zip": ["uvz", "uvvz"],
|
|
16276
|
+
"application/vnd.denovo.fcselayout-link": ["fe_launch"],
|
|
16277
|
+
"application/vnd.dna": ["dna"],
|
|
16278
|
+
"application/vnd.dolby.mlp": ["mlp"],
|
|
16279
|
+
"application/vnd.dpgraph": ["dpg"],
|
|
16280
|
+
"application/vnd.dreamfactory": ["dfac"],
|
|
16281
|
+
"application/vnd.ds-keypoint": ["kpxx"],
|
|
16282
|
+
"application/vnd.dvb.ait": ["ait"],
|
|
16283
|
+
"application/vnd.dvb.service": ["svc"],
|
|
16284
|
+
"application/vnd.dynageo": ["geo"],
|
|
16285
|
+
"application/vnd.ecowin.chart": ["mag"],
|
|
16286
|
+
"application/vnd.enliven": ["nml"],
|
|
16287
|
+
"application/vnd.epson.esf": ["esf"],
|
|
16288
|
+
"application/vnd.epson.msf": ["msf"],
|
|
16289
|
+
"application/vnd.epson.quickanime": ["qam"],
|
|
16290
|
+
"application/vnd.epson.salt": ["slt"],
|
|
16291
|
+
"application/vnd.epson.ssf": ["ssf"],
|
|
16292
|
+
"application/vnd.eszigno3+xml": ["es3", "et3"],
|
|
16293
|
+
"application/vnd.ezpix-album": ["ez2"],
|
|
16294
|
+
"application/vnd.ezpix-package": ["ez3"],
|
|
16295
|
+
"application/vnd.fdf": ["*fdf"],
|
|
16296
|
+
"application/vnd.fdsn.mseed": ["mseed"],
|
|
16297
|
+
"application/vnd.fdsn.seed": ["seed", "dataless"],
|
|
16298
|
+
"application/vnd.flographit": ["gph"],
|
|
16299
|
+
"application/vnd.fluxtime.clip": ["ftc"],
|
|
16300
|
+
"application/vnd.framemaker": ["fm", "frame", "maker", "book"],
|
|
16301
|
+
"application/vnd.frogans.fnc": ["fnc"],
|
|
16302
|
+
"application/vnd.frogans.ltf": ["ltf"],
|
|
16303
|
+
"application/vnd.fsc.weblaunch": ["fsc"],
|
|
16304
|
+
"application/vnd.fujitsu.oasys": ["oas"],
|
|
16305
|
+
"application/vnd.fujitsu.oasys2": ["oa2"],
|
|
16306
|
+
"application/vnd.fujitsu.oasys3": ["oa3"],
|
|
16307
|
+
"application/vnd.fujitsu.oasysgp": ["fg5"],
|
|
16308
|
+
"application/vnd.fujitsu.oasysprs": ["bh2"],
|
|
16309
|
+
"application/vnd.fujixerox.ddd": ["ddd"],
|
|
16310
|
+
"application/vnd.fujixerox.docuworks": ["xdw"],
|
|
16311
|
+
"application/vnd.fujixerox.docuworks.binder": ["xbd"],
|
|
16312
|
+
"application/vnd.fuzzysheet": ["fzs"],
|
|
16313
|
+
"application/vnd.genomatix.tuxedo": ["txd"],
|
|
16314
|
+
"application/vnd.geogebra.file": ["ggb"],
|
|
16315
|
+
"application/vnd.geogebra.slides": ["ggs"],
|
|
16316
|
+
"application/vnd.geogebra.tool": ["ggt"],
|
|
16317
|
+
"application/vnd.geometry-explorer": ["gex", "gre"],
|
|
16318
|
+
"application/vnd.geonext": ["gxt"],
|
|
16319
|
+
"application/vnd.geoplan": ["g2w"],
|
|
16320
|
+
"application/vnd.geospace": ["g3w"],
|
|
16321
|
+
"application/vnd.gmx": ["gmx"],
|
|
16322
|
+
"application/vnd.google-apps.document": ["gdoc"],
|
|
16323
|
+
"application/vnd.google-apps.drawing": ["gdraw"],
|
|
16324
|
+
"application/vnd.google-apps.form": ["gform"],
|
|
16325
|
+
"application/vnd.google-apps.jam": ["gjam"],
|
|
16326
|
+
"application/vnd.google-apps.map": ["gmap"],
|
|
16327
|
+
"application/vnd.google-apps.presentation": ["gslides"],
|
|
16328
|
+
"application/vnd.google-apps.script": ["gscript"],
|
|
16329
|
+
"application/vnd.google-apps.site": ["gsite"],
|
|
16330
|
+
"application/vnd.google-apps.spreadsheet": ["gsheet"],
|
|
16331
|
+
"application/vnd.google-earth.kml+xml": ["kml"],
|
|
16332
|
+
"application/vnd.google-earth.kmz": ["kmz"],
|
|
16333
|
+
"application/vnd.gov.sk.xmldatacontainer+xml": ["xdcf"],
|
|
16334
|
+
"application/vnd.grafeq": ["gqf", "gqs"],
|
|
16335
|
+
"application/vnd.groove-account": ["gac"],
|
|
16336
|
+
"application/vnd.groove-help": ["ghf"],
|
|
16337
|
+
"application/vnd.groove-identity-message": ["gim"],
|
|
16338
|
+
"application/vnd.groove-injector": ["grv"],
|
|
16339
|
+
"application/vnd.groove-tool-message": ["gtm"],
|
|
16340
|
+
"application/vnd.groove-tool-template": ["tpl"],
|
|
16341
|
+
"application/vnd.groove-vcard": ["vcg"],
|
|
16342
|
+
"application/vnd.hal+xml": ["hal"],
|
|
16343
|
+
"application/vnd.handheld-entertainment+xml": ["zmm"],
|
|
16344
|
+
"application/vnd.hbci": ["hbci"],
|
|
16345
|
+
"application/vnd.hhe.lesson-player": ["les"],
|
|
16346
|
+
"application/vnd.hp-hpgl": ["hpgl"],
|
|
16347
|
+
"application/vnd.hp-hpid": ["hpid"],
|
|
16348
|
+
"application/vnd.hp-hps": ["hps"],
|
|
16349
|
+
"application/vnd.hp-jlyt": ["jlt"],
|
|
16350
|
+
"application/vnd.hp-pcl": ["pcl"],
|
|
16351
|
+
"application/vnd.hp-pclxl": ["pclxl"],
|
|
16352
|
+
"application/vnd.hydrostatix.sof-data": ["sfd-hdstx"],
|
|
16353
|
+
"application/vnd.ibm.minipay": ["mpy"],
|
|
16354
|
+
"application/vnd.ibm.modcap": ["afp", "listafp", "list3820"],
|
|
16355
|
+
"application/vnd.ibm.rights-management": ["irm"],
|
|
16356
|
+
"application/vnd.ibm.secure-container": ["sc"],
|
|
16357
|
+
"application/vnd.iccprofile": ["icc", "icm"],
|
|
16358
|
+
"application/vnd.igloader": ["igl"],
|
|
16359
|
+
"application/vnd.immervision-ivp": ["ivp"],
|
|
16360
|
+
"application/vnd.immervision-ivu": ["ivu"],
|
|
16361
|
+
"application/vnd.insors.igm": ["igm"],
|
|
16362
|
+
"application/vnd.intercon.formnet": ["xpw", "xpx"],
|
|
16363
|
+
"application/vnd.intergeo": ["i2g"],
|
|
16364
|
+
"application/vnd.intu.qbo": ["qbo"],
|
|
16365
|
+
"application/vnd.intu.qfx": ["qfx"],
|
|
16366
|
+
"application/vnd.ipunplugged.rcprofile": ["rcprofile"],
|
|
16367
|
+
"application/vnd.irepository.package+xml": ["irp"],
|
|
16368
|
+
"application/vnd.is-xpr": ["xpr"],
|
|
16369
|
+
"application/vnd.isac.fcs": ["fcs"],
|
|
16370
|
+
"application/vnd.jam": ["jam"],
|
|
16371
|
+
"application/vnd.jcp.javame.midlet-rms": ["rms"],
|
|
16372
|
+
"application/vnd.jisp": ["jisp"],
|
|
16373
|
+
"application/vnd.joost.joda-archive": ["joda"],
|
|
16374
|
+
"application/vnd.kahootz": ["ktz", "ktr"],
|
|
16375
|
+
"application/vnd.kde.karbon": ["karbon"],
|
|
16376
|
+
"application/vnd.kde.kchart": ["chrt"],
|
|
16377
|
+
"application/vnd.kde.kformula": ["kfo"],
|
|
16378
|
+
"application/vnd.kde.kivio": ["flw"],
|
|
16379
|
+
"application/vnd.kde.kontour": ["kon"],
|
|
16380
|
+
"application/vnd.kde.kpresenter": ["kpr", "kpt"],
|
|
16381
|
+
"application/vnd.kde.kspread": ["ksp"],
|
|
16382
|
+
"application/vnd.kde.kword": ["kwd", "kwt"],
|
|
16383
|
+
"application/vnd.kenameaapp": ["htke"],
|
|
16384
|
+
"application/vnd.kidspiration": ["kia"],
|
|
16385
|
+
"application/vnd.kinar": ["kne", "knp"],
|
|
16386
|
+
"application/vnd.koan": ["skp", "skd", "skt", "skm"],
|
|
16387
|
+
"application/vnd.kodak-descriptor": ["sse"],
|
|
16388
|
+
"application/vnd.las.las+xml": ["lasxml"],
|
|
16389
|
+
"application/vnd.llamagraphics.life-balance.desktop": ["lbd"],
|
|
16390
|
+
"application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"],
|
|
16391
|
+
"application/vnd.lotus-1-2-3": ["123"],
|
|
16392
|
+
"application/vnd.lotus-approach": ["apr"],
|
|
16393
|
+
"application/vnd.lotus-freelance": ["pre"],
|
|
16394
|
+
"application/vnd.lotus-notes": ["nsf"],
|
|
16395
|
+
"application/vnd.lotus-organizer": ["org"],
|
|
16396
|
+
"application/vnd.lotus-screencam": ["scm"],
|
|
16397
|
+
"application/vnd.lotus-wordpro": ["lwp"],
|
|
16398
|
+
"application/vnd.macports.portpkg": ["portpkg"],
|
|
16399
|
+
"application/vnd.mapbox-vector-tile": ["mvt"],
|
|
16400
|
+
"application/vnd.mcd": ["mcd"],
|
|
16401
|
+
"application/vnd.medcalcdata": ["mc1"],
|
|
16402
|
+
"application/vnd.mediastation.cdkey": ["cdkey"],
|
|
16403
|
+
"application/vnd.mfer": ["mwf"],
|
|
16404
|
+
"application/vnd.mfmp": ["mfm"],
|
|
16405
|
+
"application/vnd.micrografx.flo": ["flo"],
|
|
16406
|
+
"application/vnd.micrografx.igx": ["igx"],
|
|
16407
|
+
"application/vnd.mif": ["mif"],
|
|
16408
|
+
"application/vnd.mobius.daf": ["daf"],
|
|
16409
|
+
"application/vnd.mobius.dis": ["dis"],
|
|
16410
|
+
"application/vnd.mobius.mbk": ["mbk"],
|
|
16411
|
+
"application/vnd.mobius.mqy": ["mqy"],
|
|
16412
|
+
"application/vnd.mobius.msl": ["msl"],
|
|
16413
|
+
"application/vnd.mobius.plc": ["plc"],
|
|
16414
|
+
"application/vnd.mobius.txf": ["txf"],
|
|
16415
|
+
"application/vnd.mophun.application": ["mpn"],
|
|
16416
|
+
"application/vnd.mophun.certificate": ["mpc"],
|
|
16417
|
+
"application/vnd.mozilla.xul+xml": ["xul"],
|
|
16418
|
+
"application/vnd.ms-artgalry": ["cil"],
|
|
16419
|
+
"application/vnd.ms-cab-compressed": ["cab"],
|
|
16420
|
+
"application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"],
|
|
16421
|
+
"application/vnd.ms-excel.addin.macroenabled.12": ["xlam"],
|
|
16422
|
+
"application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"],
|
|
16423
|
+
"application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"],
|
|
16424
|
+
"application/vnd.ms-excel.template.macroenabled.12": ["xltm"],
|
|
16425
|
+
"application/vnd.ms-fontobject": ["eot"],
|
|
16426
|
+
"application/vnd.ms-htmlhelp": ["chm"],
|
|
16427
|
+
"application/vnd.ms-ims": ["ims"],
|
|
16428
|
+
"application/vnd.ms-lrm": ["lrm"],
|
|
16429
|
+
"application/vnd.ms-officetheme": ["thmx"],
|
|
16430
|
+
"application/vnd.ms-outlook": ["msg"],
|
|
16431
|
+
"application/vnd.ms-pki.seccat": ["cat"],
|
|
16432
|
+
"application/vnd.ms-pki.stl": ["*stl"],
|
|
16433
|
+
"application/vnd.ms-powerpoint": ["ppt", "pps", "pot"],
|
|
16434
|
+
"application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"],
|
|
16435
|
+
"application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"],
|
|
16436
|
+
"application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"],
|
|
16437
|
+
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"],
|
|
16438
|
+
"application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"],
|
|
16439
|
+
"application/vnd.ms-project": ["*mpp", "mpt"],
|
|
16440
|
+
"application/vnd.ms-visio.viewer": ["vdx"],
|
|
16441
|
+
"application/vnd.ms-word.document.macroenabled.12": ["docm"],
|
|
16442
|
+
"application/vnd.ms-word.template.macroenabled.12": ["dotm"],
|
|
16443
|
+
"application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"],
|
|
16444
|
+
"application/vnd.ms-wpl": ["wpl"],
|
|
16445
|
+
"application/vnd.ms-xpsdocument": ["xps"],
|
|
16446
|
+
"application/vnd.mseq": ["mseq"],
|
|
16447
|
+
"application/vnd.musician": ["mus"],
|
|
16448
|
+
"application/vnd.muvee.style": ["msty"],
|
|
16449
|
+
"application/vnd.mynfc": ["taglet"],
|
|
16450
|
+
"application/vnd.nato.bindingdataobject+xml": ["bdo"],
|
|
16451
|
+
"application/vnd.neurolanguage.nlu": ["nlu"],
|
|
16452
|
+
"application/vnd.nitf": ["ntf", "nitf"],
|
|
16453
|
+
"application/vnd.noblenet-directory": ["nnd"],
|
|
16454
|
+
"application/vnd.noblenet-sealer": ["nns"],
|
|
16455
|
+
"application/vnd.noblenet-web": ["nnw"],
|
|
16456
|
+
"application/vnd.nokia.n-gage.ac+xml": ["*ac"],
|
|
16457
|
+
"application/vnd.nokia.n-gage.data": ["ngdat"],
|
|
16458
|
+
"application/vnd.nokia.n-gage.symbian.install": ["n-gage"],
|
|
16459
|
+
"application/vnd.nokia.radio-preset": ["rpst"],
|
|
16460
|
+
"application/vnd.nokia.radio-presets": ["rpss"],
|
|
16461
|
+
"application/vnd.novadigm.edm": ["edm"],
|
|
16462
|
+
"application/vnd.novadigm.edx": ["edx"],
|
|
16463
|
+
"application/vnd.novadigm.ext": ["ext"],
|
|
16464
|
+
"application/vnd.oasis.opendocument.chart": ["odc"],
|
|
16465
|
+
"application/vnd.oasis.opendocument.chart-template": ["otc"],
|
|
16466
|
+
"application/vnd.oasis.opendocument.database": ["odb"],
|
|
16467
|
+
"application/vnd.oasis.opendocument.formula": ["odf"],
|
|
16468
|
+
"application/vnd.oasis.opendocument.formula-template": ["odft"],
|
|
16469
|
+
"application/vnd.oasis.opendocument.graphics": ["odg"],
|
|
16470
|
+
"application/vnd.oasis.opendocument.graphics-template": ["otg"],
|
|
16471
|
+
"application/vnd.oasis.opendocument.image": ["odi"],
|
|
16472
|
+
"application/vnd.oasis.opendocument.image-template": ["oti"],
|
|
16473
|
+
"application/vnd.oasis.opendocument.presentation": ["odp"],
|
|
16474
|
+
"application/vnd.oasis.opendocument.presentation-template": ["otp"],
|
|
16475
|
+
"application/vnd.oasis.opendocument.spreadsheet": ["ods"],
|
|
16476
|
+
"application/vnd.oasis.opendocument.spreadsheet-template": ["ots"],
|
|
16477
|
+
"application/vnd.oasis.opendocument.text": ["odt"],
|
|
16478
|
+
"application/vnd.oasis.opendocument.text-master": ["odm"],
|
|
16479
|
+
"application/vnd.oasis.opendocument.text-template": ["ott"],
|
|
16480
|
+
"application/vnd.oasis.opendocument.text-web": ["oth"],
|
|
16481
|
+
"application/vnd.olpc-sugar": ["xo"],
|
|
16482
|
+
"application/vnd.oma.dd2+xml": ["dd2"],
|
|
16483
|
+
"application/vnd.openblox.game+xml": ["obgx"],
|
|
16484
|
+
"application/vnd.openofficeorg.extension": ["oxt"],
|
|
16485
|
+
"application/vnd.openstreetmap.data+xml": ["osm"],
|
|
16486
|
+
"application/vnd.openxmlformats-officedocument.presentationml.presentation": [
|
|
16487
|
+
"pptx"
|
|
16488
|
+
],
|
|
16489
|
+
"application/vnd.openxmlformats-officedocument.presentationml.slide": [
|
|
16490
|
+
"sldx"
|
|
16491
|
+
],
|
|
16492
|
+
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": [
|
|
16493
|
+
"ppsx"
|
|
16494
|
+
],
|
|
16495
|
+
"application/vnd.openxmlformats-officedocument.presentationml.template": [
|
|
16496
|
+
"potx"
|
|
16497
|
+
],
|
|
16498
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"],
|
|
16499
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": [
|
|
16500
|
+
"xltx"
|
|
16501
|
+
],
|
|
16502
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": [
|
|
16503
|
+
"docx"
|
|
16504
|
+
],
|
|
16505
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": [
|
|
16506
|
+
"dotx"
|
|
16507
|
+
],
|
|
16508
|
+
"application/vnd.osgeo.mapguide.package": ["mgp"],
|
|
16509
|
+
"application/vnd.osgi.dp": ["dp"],
|
|
16510
|
+
"application/vnd.osgi.subsystem": ["esa"],
|
|
16511
|
+
"application/vnd.palm": ["pdb", "pqa", "oprc"],
|
|
16512
|
+
"application/vnd.pawaafile": ["paw"],
|
|
16513
|
+
"application/vnd.pg.format": ["str"],
|
|
16514
|
+
"application/vnd.pg.osasli": ["ei6"],
|
|
16515
|
+
"application/vnd.picsel": ["efif"],
|
|
16516
|
+
"application/vnd.pmi.widget": ["wg"],
|
|
16517
|
+
"application/vnd.pocketlearn": ["plf"],
|
|
16518
|
+
"application/vnd.powerbuilder6": ["pbd"],
|
|
16519
|
+
"application/vnd.previewsystems.box": ["box"],
|
|
16520
|
+
"application/vnd.procrate.brushset": ["brushset"],
|
|
16521
|
+
"application/vnd.procreate.brush": ["brush"],
|
|
16522
|
+
"application/vnd.procreate.dream": ["drm"],
|
|
16523
|
+
"application/vnd.proteus.magazine": ["mgz"],
|
|
16524
|
+
"application/vnd.publishare-delta-tree": ["qps"],
|
|
16525
|
+
"application/vnd.pvi.ptid1": ["ptid"],
|
|
16526
|
+
"application/vnd.pwg-xhtml-print+xml": ["xhtm"],
|
|
16527
|
+
"application/vnd.quark.quarkxpress": [
|
|
16528
|
+
"qxd",
|
|
16529
|
+
"qxt",
|
|
16530
|
+
"qwd",
|
|
16531
|
+
"qwt",
|
|
16532
|
+
"qxl",
|
|
16533
|
+
"qxb"
|
|
16534
|
+
],
|
|
16535
|
+
"application/vnd.rar": ["rar"],
|
|
16536
|
+
"application/vnd.realvnc.bed": ["bed"],
|
|
16537
|
+
"application/vnd.recordare.musicxml": ["mxl"],
|
|
16538
|
+
"application/vnd.recordare.musicxml+xml": ["musicxml"],
|
|
16539
|
+
"application/vnd.rig.cryptonote": ["cryptonote"],
|
|
16540
|
+
"application/vnd.rim.cod": ["cod"],
|
|
16541
|
+
"application/vnd.rn-realmedia": ["rm"],
|
|
16542
|
+
"application/vnd.rn-realmedia-vbr": ["rmvb"],
|
|
16543
|
+
"application/vnd.route66.link66+xml": ["link66"],
|
|
16544
|
+
"application/vnd.sailingtracker.track": ["st"],
|
|
16545
|
+
"application/vnd.seemail": ["see"],
|
|
16546
|
+
"application/vnd.sema": ["sema"],
|
|
16547
|
+
"application/vnd.semd": ["semd"],
|
|
16548
|
+
"application/vnd.semf": ["semf"],
|
|
16549
|
+
"application/vnd.shana.informed.formdata": ["ifm"],
|
|
16550
|
+
"application/vnd.shana.informed.formtemplate": ["itp"],
|
|
16551
|
+
"application/vnd.shana.informed.interchange": ["iif"],
|
|
16552
|
+
"application/vnd.shana.informed.package": ["ipk"],
|
|
16553
|
+
"application/vnd.simtech-mindmapper": ["twd", "twds"],
|
|
16554
|
+
"application/vnd.smaf": ["mmf"],
|
|
16555
|
+
"application/vnd.smart.teacher": ["teacher"],
|
|
16556
|
+
"application/vnd.software602.filler.form+xml": ["fo"],
|
|
16557
|
+
"application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"],
|
|
16558
|
+
"application/vnd.spotfire.dxp": ["dxp"],
|
|
16559
|
+
"application/vnd.spotfire.sfs": ["sfs"],
|
|
16560
|
+
"application/vnd.stardivision.calc": ["sdc"],
|
|
16561
|
+
"application/vnd.stardivision.draw": ["sda"],
|
|
16562
|
+
"application/vnd.stardivision.impress": ["sdd"],
|
|
16563
|
+
"application/vnd.stardivision.math": ["smf"],
|
|
16564
|
+
"application/vnd.stardivision.writer": ["sdw", "vor"],
|
|
16565
|
+
"application/vnd.stardivision.writer-global": ["sgl"],
|
|
16566
|
+
"application/vnd.stepmania.package": ["smzip"],
|
|
16567
|
+
"application/vnd.stepmania.stepchart": ["sm"],
|
|
16568
|
+
"application/vnd.sun.wadl+xml": ["wadl"],
|
|
16569
|
+
"application/vnd.sun.xml.calc": ["sxc"],
|
|
16570
|
+
"application/vnd.sun.xml.calc.template": ["stc"],
|
|
16571
|
+
"application/vnd.sun.xml.draw": ["sxd"],
|
|
16572
|
+
"application/vnd.sun.xml.draw.template": ["std"],
|
|
16573
|
+
"application/vnd.sun.xml.impress": ["sxi"],
|
|
16574
|
+
"application/vnd.sun.xml.impress.template": ["sti"],
|
|
16575
|
+
"application/vnd.sun.xml.math": ["sxm"],
|
|
16576
|
+
"application/vnd.sun.xml.writer": ["sxw"],
|
|
16577
|
+
"application/vnd.sun.xml.writer.global": ["sxg"],
|
|
16578
|
+
"application/vnd.sun.xml.writer.template": ["stw"],
|
|
16579
|
+
"application/vnd.sus-calendar": ["sus", "susp"],
|
|
16580
|
+
"application/vnd.svd": ["svd"],
|
|
16581
|
+
"application/vnd.symbian.install": ["sis", "sisx"],
|
|
16582
|
+
"application/vnd.syncml+xml": ["xsm"],
|
|
16583
|
+
"application/vnd.syncml.dm+wbxml": ["bdm"],
|
|
16584
|
+
"application/vnd.syncml.dm+xml": ["xdm"],
|
|
16585
|
+
"application/vnd.syncml.dmddf+xml": ["ddf"],
|
|
16586
|
+
"application/vnd.tao.intent-module-archive": ["tao"],
|
|
16587
|
+
"application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"],
|
|
16588
|
+
"application/vnd.tmobile-livetv": ["tmo"],
|
|
16589
|
+
"application/vnd.trid.tpt": ["tpt"],
|
|
16590
|
+
"application/vnd.triscape.mxs": ["mxs"],
|
|
16591
|
+
"application/vnd.trueapp": ["tra"],
|
|
16592
|
+
"application/vnd.ufdl": ["ufd", "ufdl"],
|
|
16593
|
+
"application/vnd.uiq.theme": ["utz"],
|
|
16594
|
+
"application/vnd.umajin": ["umj"],
|
|
16595
|
+
"application/vnd.unity": ["unityweb"],
|
|
16596
|
+
"application/vnd.uoml+xml": ["uoml", "uo"],
|
|
16597
|
+
"application/vnd.vcx": ["vcx"],
|
|
16598
|
+
"application/vnd.visio": ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"],
|
|
16599
|
+
"application/vnd.visionary": ["vis"],
|
|
16600
|
+
"application/vnd.vsf": ["vsf"],
|
|
16601
|
+
"application/vnd.wap.wbxml": ["wbxml"],
|
|
16602
|
+
"application/vnd.wap.wmlc": ["wmlc"],
|
|
16603
|
+
"application/vnd.wap.wmlscriptc": ["wmlsc"],
|
|
16604
|
+
"application/vnd.webturbo": ["wtb"],
|
|
16605
|
+
"application/vnd.wolfram.player": ["nbp"],
|
|
16606
|
+
"application/vnd.wordperfect": ["wpd"],
|
|
16607
|
+
"application/vnd.wqd": ["wqd"],
|
|
16608
|
+
"application/vnd.wt.stf": ["stf"],
|
|
16609
|
+
"application/vnd.xara": ["xar"],
|
|
16610
|
+
"application/vnd.xfdl": ["xfdl"],
|
|
16611
|
+
"application/vnd.yamaha.hv-dic": ["hvd"],
|
|
16612
|
+
"application/vnd.yamaha.hv-script": ["hvs"],
|
|
16613
|
+
"application/vnd.yamaha.hv-voice": ["hvp"],
|
|
16614
|
+
"application/vnd.yamaha.openscoreformat": ["osf"],
|
|
16615
|
+
"application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"],
|
|
16616
|
+
"application/vnd.yamaha.smaf-audio": ["saf"],
|
|
16617
|
+
"application/vnd.yamaha.smaf-phrase": ["spf"],
|
|
16618
|
+
"application/vnd.yellowriver-custom-menu": ["cmp"],
|
|
16619
|
+
"application/vnd.zul": ["zir", "zirz"],
|
|
16620
|
+
"application/vnd.zzazz.deck+xml": ["zaz"],
|
|
16621
|
+
"application/x-7z-compressed": ["7z"],
|
|
16622
|
+
"application/x-abiword": ["abw"],
|
|
16623
|
+
"application/x-ace-compressed": ["ace"],
|
|
16624
|
+
"application/x-apple-diskimage": ["*dmg"],
|
|
16625
|
+
"application/x-arj": ["arj"],
|
|
16626
|
+
"application/x-authorware-bin": ["aab", "x32", "u32", "vox"],
|
|
16627
|
+
"application/x-authorware-map": ["aam"],
|
|
16628
|
+
"application/x-authorware-seg": ["aas"],
|
|
16629
|
+
"application/x-bcpio": ["bcpio"],
|
|
16630
|
+
"application/x-bdoc": ["*bdoc"],
|
|
16631
|
+
"application/x-bittorrent": ["torrent"],
|
|
16632
|
+
"application/x-blender": ["blend"],
|
|
16633
|
+
"application/x-blorb": ["blb", "blorb"],
|
|
16634
|
+
"application/x-bzip": ["bz"],
|
|
16635
|
+
"application/x-bzip2": ["bz2", "boz"],
|
|
16636
|
+
"application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"],
|
|
16637
|
+
"application/x-cdlink": ["vcd"],
|
|
16638
|
+
"application/x-cfs-compressed": ["cfs"],
|
|
16639
|
+
"application/x-chat": ["chat"],
|
|
16640
|
+
"application/x-chess-pgn": ["pgn"],
|
|
16641
|
+
"application/x-chrome-extension": ["crx"],
|
|
16642
|
+
"application/x-cocoa": ["cco"],
|
|
16643
|
+
"application/x-compressed": ["*rar"],
|
|
16644
|
+
"application/x-conference": ["nsc"],
|
|
16645
|
+
"application/x-cpio": ["cpio"],
|
|
16646
|
+
"application/x-csh": ["csh"],
|
|
16647
|
+
"application/x-debian-package": ["*deb", "udeb"],
|
|
16648
|
+
"application/x-dgc-compressed": ["dgc"],
|
|
16649
|
+
"application/x-director": [
|
|
16650
|
+
"dir",
|
|
16651
|
+
"dcr",
|
|
16652
|
+
"dxr",
|
|
16653
|
+
"cst",
|
|
16654
|
+
"cct",
|
|
16655
|
+
"cxt",
|
|
16656
|
+
"w3d",
|
|
16657
|
+
"fgd",
|
|
16658
|
+
"swa"
|
|
16659
|
+
],
|
|
16660
|
+
"application/x-doom": ["wad"],
|
|
16661
|
+
"application/x-dtbncx+xml": ["ncx"],
|
|
16662
|
+
"application/x-dtbook+xml": ["dtb"],
|
|
16663
|
+
"application/x-dtbresource+xml": ["res"],
|
|
16664
|
+
"application/x-dvi": ["dvi"],
|
|
16665
|
+
"application/x-envoy": ["evy"],
|
|
16666
|
+
"application/x-eva": ["eva"],
|
|
16667
|
+
"application/x-font-bdf": ["bdf"],
|
|
16668
|
+
"application/x-font-ghostscript": ["gsf"],
|
|
16669
|
+
"application/x-font-linux-psf": ["psf"],
|
|
16670
|
+
"application/x-font-pcf": ["pcf"],
|
|
16671
|
+
"application/x-font-snf": ["snf"],
|
|
16672
|
+
"application/x-font-type1": ["pfa", "pfb", "pfm", "afm"],
|
|
16673
|
+
"application/x-freearc": ["arc"],
|
|
16674
|
+
"application/x-futuresplash": ["spl"],
|
|
16675
|
+
"application/x-gca-compressed": ["gca"],
|
|
16676
|
+
"application/x-glulx": ["ulx"],
|
|
16677
|
+
"application/x-gnumeric": ["gnumeric"],
|
|
16678
|
+
"application/x-gramps-xml": ["gramps"],
|
|
16679
|
+
"application/x-gtar": ["gtar"],
|
|
16680
|
+
"application/x-hdf": ["hdf"],
|
|
16681
|
+
"application/x-httpd-php": ["php"],
|
|
16682
|
+
"application/x-install-instructions": ["install"],
|
|
16683
|
+
"application/x-ipynb+json": ["ipynb"],
|
|
16684
|
+
"application/x-iso9660-image": ["*iso"],
|
|
16685
|
+
"application/x-iwork-keynote-sffkey": ["*key"],
|
|
16686
|
+
"application/x-iwork-numbers-sffnumbers": ["*numbers"],
|
|
16687
|
+
"application/x-iwork-pages-sffpages": ["*pages"],
|
|
16688
|
+
"application/x-java-archive-diff": ["jardiff"],
|
|
16689
|
+
"application/x-java-jnlp-file": ["jnlp"],
|
|
16690
|
+
"application/x-keepass2": ["kdbx"],
|
|
16691
|
+
"application/x-latex": ["latex"],
|
|
16692
|
+
"application/x-lua-bytecode": ["luac"],
|
|
16693
|
+
"application/x-lzh-compressed": ["lzh", "lha"],
|
|
16694
|
+
"application/x-makeself": ["run"],
|
|
16695
|
+
"application/x-mie": ["mie"],
|
|
16696
|
+
"application/x-mobipocket-ebook": ["*prc", "mobi"],
|
|
16697
|
+
"application/x-ms-application": ["application"],
|
|
16698
|
+
"application/x-ms-shortcut": ["lnk"],
|
|
16699
|
+
"application/x-ms-wmd": ["wmd"],
|
|
16700
|
+
"application/x-ms-wmz": ["wmz"],
|
|
16701
|
+
"application/x-ms-xbap": ["xbap"],
|
|
16702
|
+
"application/x-msaccess": ["mdb"],
|
|
16703
|
+
"application/x-msbinder": ["obd"],
|
|
16704
|
+
"application/x-mscardfile": ["crd"],
|
|
16705
|
+
"application/x-msclip": ["clp"],
|
|
16706
|
+
"application/x-msdos-program": ["*exe"],
|
|
16707
|
+
"application/x-msdownload": ["*exe", "*dll", "com", "bat", "*msi"],
|
|
16708
|
+
"application/x-msmediaview": ["mvb", "m13", "m14"],
|
|
16709
|
+
"application/x-msmetafile": ["*wmf", "*wmz", "*emf", "emz"],
|
|
16710
|
+
"application/x-msmoney": ["mny"],
|
|
16711
|
+
"application/x-mspublisher": ["pub"],
|
|
16712
|
+
"application/x-msschedule": ["scd"],
|
|
16713
|
+
"application/x-msterminal": ["trm"],
|
|
16714
|
+
"application/x-mswrite": ["wri"],
|
|
16715
|
+
"application/x-netcdf": ["nc", "cdf"],
|
|
16716
|
+
"application/x-ns-proxy-autoconfig": ["pac"],
|
|
16717
|
+
"application/x-nzb": ["nzb"],
|
|
16718
|
+
"application/x-perl": ["pl", "pm"],
|
|
16719
|
+
"application/x-pilot": ["*prc", "*pdb"],
|
|
16720
|
+
"application/x-pkcs12": ["p12", "pfx"],
|
|
16721
|
+
"application/x-pkcs7-certificates": ["p7b", "spc"],
|
|
16722
|
+
"application/x-pkcs7-certreqresp": ["p7r"],
|
|
16723
|
+
"application/x-rar-compressed": ["*rar"],
|
|
16724
|
+
"application/x-redhat-package-manager": ["rpm"],
|
|
16725
|
+
"application/x-research-info-systems": ["ris"],
|
|
16726
|
+
"application/x-sea": ["sea"],
|
|
16727
|
+
"application/x-sh": ["sh"],
|
|
16728
|
+
"application/x-shar": ["shar"],
|
|
16729
|
+
"application/x-shockwave-flash": ["swf"],
|
|
16730
|
+
"application/x-silverlight-app": ["xap"],
|
|
16731
|
+
"application/x-sql": ["*sql"],
|
|
16732
|
+
"application/x-stuffit": ["sit"],
|
|
16733
|
+
"application/x-stuffitx": ["sitx"],
|
|
16734
|
+
"application/x-subrip": ["srt"],
|
|
16735
|
+
"application/x-sv4cpio": ["sv4cpio"],
|
|
16736
|
+
"application/x-sv4crc": ["sv4crc"],
|
|
16737
|
+
"application/x-t3vm-image": ["t3"],
|
|
16738
|
+
"application/x-tads": ["gam"],
|
|
16739
|
+
"application/x-tar": ["tar"],
|
|
16740
|
+
"application/x-tcl": ["tcl", "tk"],
|
|
16741
|
+
"application/x-tex": ["tex"],
|
|
16742
|
+
"application/x-tex-tfm": ["tfm"],
|
|
16743
|
+
"application/x-texinfo": ["texinfo", "texi"],
|
|
16744
|
+
"application/x-tgif": ["*obj"],
|
|
16745
|
+
"application/x-ustar": ["ustar"],
|
|
16746
|
+
"application/x-virtualbox-hdd": ["hdd"],
|
|
16747
|
+
"application/x-virtualbox-ova": ["ova"],
|
|
16748
|
+
"application/x-virtualbox-ovf": ["ovf"],
|
|
16749
|
+
"application/x-virtualbox-vbox": ["vbox"],
|
|
16750
|
+
"application/x-virtualbox-vbox-extpack": ["vbox-extpack"],
|
|
16751
|
+
"application/x-virtualbox-vdi": ["vdi"],
|
|
16752
|
+
"application/x-virtualbox-vhd": ["vhd"],
|
|
16753
|
+
"application/x-virtualbox-vmdk": ["vmdk"],
|
|
16754
|
+
"application/x-wais-source": ["src"],
|
|
16755
|
+
"application/x-web-app-manifest+json": ["webapp"],
|
|
16756
|
+
"application/x-x509-ca-cert": ["der", "crt", "pem"],
|
|
16757
|
+
"application/x-xfig": ["fig"],
|
|
16758
|
+
"application/x-xliff+xml": ["*xlf"],
|
|
16759
|
+
"application/x-xpinstall": ["xpi"],
|
|
16760
|
+
"application/x-xz": ["xz"],
|
|
16761
|
+
"application/x-zip-compressed": ["*zip"],
|
|
16762
|
+
"application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"],
|
|
16763
|
+
"audio/vnd.dece.audio": ["uva", "uvva"],
|
|
16764
|
+
"audio/vnd.digital-winds": ["eol"],
|
|
16765
|
+
"audio/vnd.dra": ["dra"],
|
|
16766
|
+
"audio/vnd.dts": ["dts"],
|
|
16767
|
+
"audio/vnd.dts.hd": ["dtshd"],
|
|
16768
|
+
"audio/vnd.lucent.voice": ["lvp"],
|
|
16769
|
+
"audio/vnd.ms-playready.media.pya": ["pya"],
|
|
16770
|
+
"audio/vnd.nuera.ecelp4800": ["ecelp4800"],
|
|
16771
|
+
"audio/vnd.nuera.ecelp7470": ["ecelp7470"],
|
|
16772
|
+
"audio/vnd.nuera.ecelp9600": ["ecelp9600"],
|
|
16773
|
+
"audio/vnd.rip": ["rip"],
|
|
16774
|
+
"audio/x-aac": ["*aac"],
|
|
16775
|
+
"audio/x-aiff": ["aif", "aiff", "aifc"],
|
|
16776
|
+
"audio/x-caf": ["caf"],
|
|
16777
|
+
"audio/x-flac": ["flac"],
|
|
16778
|
+
"audio/x-m4a": ["*m4a"],
|
|
16779
|
+
"audio/x-matroska": ["mka"],
|
|
16780
|
+
"audio/x-mpegurl": ["m3u"],
|
|
16781
|
+
"audio/x-ms-wax": ["wax"],
|
|
16782
|
+
"audio/x-ms-wma": ["wma"],
|
|
16783
|
+
"audio/x-pn-realaudio": ["ram", "ra"],
|
|
16784
|
+
"audio/x-pn-realaudio-plugin": ["rmp"],
|
|
16785
|
+
"audio/x-realaudio": ["*ra"],
|
|
16786
|
+
"audio/x-wav": ["*wav"],
|
|
16787
|
+
"chemical/x-cdx": ["cdx"],
|
|
16788
|
+
"chemical/x-cif": ["cif"],
|
|
16789
|
+
"chemical/x-cmdf": ["cmdf"],
|
|
16790
|
+
"chemical/x-cml": ["cml"],
|
|
16791
|
+
"chemical/x-csml": ["csml"],
|
|
16792
|
+
"chemical/x-xyz": ["xyz"],
|
|
16793
|
+
"image/prs.btif": ["btif", "btf"],
|
|
16794
|
+
"image/prs.pti": ["pti"],
|
|
16795
|
+
"image/vnd.adobe.photoshop": ["psd"],
|
|
16796
|
+
"image/vnd.airzip.accelerator.azv": ["azv"],
|
|
16797
|
+
"image/vnd.blockfact.facti": ["facti"],
|
|
16798
|
+
"image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"],
|
|
16799
|
+
"image/vnd.djvu": ["djvu", "djv"],
|
|
16800
|
+
"image/vnd.dvb.subtitle": ["*sub"],
|
|
16801
|
+
"image/vnd.dwg": ["dwg"],
|
|
16802
|
+
"image/vnd.dxf": ["dxf"],
|
|
16803
|
+
"image/vnd.fastbidsheet": ["fbs"],
|
|
16804
|
+
"image/vnd.fpx": ["fpx"],
|
|
16805
|
+
"image/vnd.fst": ["fst"],
|
|
16806
|
+
"image/vnd.fujixerox.edmics-mmr": ["mmr"],
|
|
16807
|
+
"image/vnd.fujixerox.edmics-rlc": ["rlc"],
|
|
16808
|
+
"image/vnd.microsoft.icon": ["ico"],
|
|
16809
|
+
"image/vnd.ms-dds": ["dds"],
|
|
16810
|
+
"image/vnd.ms-modi": ["mdi"],
|
|
16811
|
+
"image/vnd.ms-photo": ["wdp"],
|
|
16812
|
+
"image/vnd.net-fpx": ["npx"],
|
|
16813
|
+
"image/vnd.pco.b16": ["b16"],
|
|
16814
|
+
"image/vnd.tencent.tap": ["tap"],
|
|
16815
|
+
"image/vnd.valve.source.texture": ["vtf"],
|
|
16816
|
+
"image/vnd.wap.wbmp": ["wbmp"],
|
|
16817
|
+
"image/vnd.xiff": ["xif"],
|
|
16818
|
+
"image/vnd.zbrush.pcx": ["pcx"],
|
|
16819
|
+
"image/x-3ds": ["3ds"],
|
|
16820
|
+
"image/x-adobe-dng": ["dng"],
|
|
16821
|
+
"image/x-cmu-raster": ["ras"],
|
|
16822
|
+
"image/x-cmx": ["cmx"],
|
|
16823
|
+
"image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"],
|
|
16824
|
+
"image/x-icon": ["*ico"],
|
|
16825
|
+
"image/x-jng": ["jng"],
|
|
16826
|
+
"image/x-mrsid-image": ["sid"],
|
|
16827
|
+
"image/x-ms-bmp": ["*bmp"],
|
|
16828
|
+
"image/x-pcx": ["*pcx"],
|
|
16829
|
+
"image/x-pict": ["pic", "pct"],
|
|
16830
|
+
"image/x-portable-anymap": ["pnm"],
|
|
16831
|
+
"image/x-portable-bitmap": ["pbm"],
|
|
16832
|
+
"image/x-portable-graymap": ["pgm"],
|
|
16833
|
+
"image/x-portable-pixmap": ["ppm"],
|
|
16834
|
+
"image/x-rgb": ["rgb"],
|
|
16835
|
+
"image/x-tga": ["tga"],
|
|
16836
|
+
"image/x-xbitmap": ["xbm"],
|
|
16837
|
+
"image/x-xpixmap": ["xpm"],
|
|
16838
|
+
"image/x-xwindowdump": ["xwd"],
|
|
16839
|
+
"message/vnd.wfa.wsc": ["wsc"],
|
|
16840
|
+
"model/vnd.bary": ["bary"],
|
|
16841
|
+
"model/vnd.cld": ["cld"],
|
|
16842
|
+
"model/vnd.collada+xml": ["dae"],
|
|
16843
|
+
"model/vnd.dwf": ["dwf"],
|
|
16844
|
+
"model/vnd.gdl": ["gdl"],
|
|
16845
|
+
"model/vnd.gtw": ["gtw"],
|
|
16846
|
+
"model/vnd.mts": ["*mts"],
|
|
16847
|
+
"model/vnd.opengex": ["ogex"],
|
|
16848
|
+
"model/vnd.parasolid.transmit.binary": ["x_b"],
|
|
16849
|
+
"model/vnd.parasolid.transmit.text": ["x_t"],
|
|
16850
|
+
"model/vnd.pytha.pyox": ["pyo", "pyox"],
|
|
16851
|
+
"model/vnd.sap.vds": ["vds"],
|
|
16852
|
+
"model/vnd.usda": ["usda"],
|
|
16853
|
+
"model/vnd.usdz+zip": ["usdz"],
|
|
16854
|
+
"model/vnd.valve.source.compiled-map": ["bsp"],
|
|
16855
|
+
"model/vnd.vtu": ["vtu"],
|
|
16856
|
+
"text/prs.lines.tag": ["dsc"],
|
|
16857
|
+
"text/vnd.curl": ["curl"],
|
|
16858
|
+
"text/vnd.curl.dcurl": ["dcurl"],
|
|
16859
|
+
"text/vnd.curl.mcurl": ["mcurl"],
|
|
16860
|
+
"text/vnd.curl.scurl": ["scurl"],
|
|
16861
|
+
"text/vnd.dvb.subtitle": ["sub"],
|
|
16862
|
+
"text/vnd.familysearch.gedcom": ["ged"],
|
|
16863
|
+
"text/vnd.fly": ["fly"],
|
|
16864
|
+
"text/vnd.fmi.flexstor": ["flx"],
|
|
16865
|
+
"text/vnd.graphviz": ["gv"],
|
|
16866
|
+
"text/vnd.in3d.3dml": ["3dml"],
|
|
16867
|
+
"text/vnd.in3d.spot": ["spot"],
|
|
16868
|
+
"text/vnd.sun.j2me.app-descriptor": ["jad"],
|
|
16869
|
+
"text/vnd.wap.wml": ["wml"],
|
|
16870
|
+
"text/vnd.wap.wmlscript": ["wmls"],
|
|
16871
|
+
"text/x-asm": ["s", "asm"],
|
|
16872
|
+
"text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"],
|
|
16873
|
+
"text/x-component": ["htc"],
|
|
16874
|
+
"text/x-fortran": ["f", "for", "f77", "f90"],
|
|
16875
|
+
"text/x-handlebars-template": ["hbs"],
|
|
16876
|
+
"text/x-java-source": ["java"],
|
|
16877
|
+
"text/x-lua": ["lua"],
|
|
16878
|
+
"text/x-markdown": ["mkd"],
|
|
16879
|
+
"text/x-nfo": ["nfo"],
|
|
16880
|
+
"text/x-opml": ["opml"],
|
|
16881
|
+
"text/x-org": ["*org"],
|
|
16882
|
+
"text/x-pascal": ["p", "pas"],
|
|
16883
|
+
"text/x-processing": ["pde"],
|
|
16884
|
+
"text/x-sass": ["sass"],
|
|
16885
|
+
"text/x-scss": ["scss"],
|
|
16886
|
+
"text/x-setext": ["etx"],
|
|
16887
|
+
"text/x-sfv": ["sfv"],
|
|
16888
|
+
"text/x-suse-ymp": ["ymp"],
|
|
16889
|
+
"text/x-uuencode": ["uu"],
|
|
16890
|
+
"text/x-vcalendar": ["vcs"],
|
|
16891
|
+
"text/x-vcard": ["vcf"],
|
|
16892
|
+
"video/vnd.dece.hd": ["uvh", "uvvh"],
|
|
16893
|
+
"video/vnd.dece.mobile": ["uvm", "uvvm"],
|
|
16894
|
+
"video/vnd.dece.pd": ["uvp", "uvvp"],
|
|
16895
|
+
"video/vnd.dece.sd": ["uvs", "uvvs"],
|
|
16896
|
+
"video/vnd.dece.video": ["uvv", "uvvv"],
|
|
16897
|
+
"video/vnd.dvb.file": ["dvb"],
|
|
16898
|
+
"video/vnd.fvt": ["fvt"],
|
|
16899
|
+
"video/vnd.mpegurl": ["mxu", "m4u"],
|
|
16900
|
+
"video/vnd.ms-playready.media.pyv": ["pyv"],
|
|
16901
|
+
"video/vnd.uvvu.mp4": ["uvu", "uvvu"],
|
|
16902
|
+
"video/vnd.vivo": ["viv"],
|
|
16903
|
+
"video/x-f4v": ["f4v"],
|
|
16904
|
+
"video/x-fli": ["fli"],
|
|
16905
|
+
"video/x-flv": ["flv"],
|
|
16906
|
+
"video/x-m4v": ["m4v"],
|
|
16907
|
+
"video/x-matroska": ["mkv", "mk3d", "mks"],
|
|
16908
|
+
"video/x-mng": ["mng"],
|
|
16909
|
+
"video/x-ms-asf": ["asf", "asx"],
|
|
16910
|
+
"video/x-ms-vob": ["vob"],
|
|
16911
|
+
"video/x-ms-wm": ["wm"],
|
|
16912
|
+
"video/x-ms-wmv": ["wmv"],
|
|
16913
|
+
"video/x-ms-wmx": ["wmx"],
|
|
16914
|
+
"video/x-ms-wvx": ["wvx"],
|
|
16915
|
+
"video/x-msvideo": ["avi"],
|
|
16916
|
+
"video/x-sgi-movie": ["movie"],
|
|
16917
|
+
"video/x-smv": ["smv"],
|
|
16918
|
+
"x-conference/x-cooltalk": ["ice"]
|
|
16171
16919
|
};
|
|
16172
|
-
|
|
16173
|
-
|
|
16174
|
-
|
|
16920
|
+
Object.freeze(types);
|
|
16921
|
+
var other_default = types;
|
|
16922
|
+
|
|
16923
|
+
// node_modules/mime/dist/types/standard.js
|
|
16924
|
+
var types2 = {
|
|
16925
|
+
"application/andrew-inset": ["ez"],
|
|
16926
|
+
"application/appinstaller": ["appinstaller"],
|
|
16927
|
+
"application/applixware": ["aw"],
|
|
16928
|
+
"application/appx": ["appx"],
|
|
16929
|
+
"application/appxbundle": ["appxbundle"],
|
|
16930
|
+
"application/atom+xml": ["atom"],
|
|
16931
|
+
"application/atomcat+xml": ["atomcat"],
|
|
16932
|
+
"application/atomdeleted+xml": ["atomdeleted"],
|
|
16933
|
+
"application/atomsvc+xml": ["atomsvc"],
|
|
16934
|
+
"application/atsc-dwd+xml": ["dwd"],
|
|
16935
|
+
"application/atsc-held+xml": ["held"],
|
|
16936
|
+
"application/atsc-rsat+xml": ["rsat"],
|
|
16937
|
+
"application/automationml-aml+xml": ["aml"],
|
|
16938
|
+
"application/automationml-amlx+zip": ["amlx"],
|
|
16939
|
+
"application/bdoc": ["bdoc"],
|
|
16940
|
+
"application/calendar+xml": ["xcs"],
|
|
16941
|
+
"application/ccxml+xml": ["ccxml"],
|
|
16942
|
+
"application/cdfx+xml": ["cdfx"],
|
|
16943
|
+
"application/cdmi-capability": ["cdmia"],
|
|
16944
|
+
"application/cdmi-container": ["cdmic"],
|
|
16945
|
+
"application/cdmi-domain": ["cdmid"],
|
|
16946
|
+
"application/cdmi-object": ["cdmio"],
|
|
16947
|
+
"application/cdmi-queue": ["cdmiq"],
|
|
16948
|
+
"application/cpl+xml": ["cpl"],
|
|
16949
|
+
"application/cu-seeme": ["cu"],
|
|
16950
|
+
"application/cwl": ["cwl"],
|
|
16951
|
+
"application/dash+xml": ["mpd"],
|
|
16952
|
+
"application/dash-patch+xml": ["mpp"],
|
|
16953
|
+
"application/davmount+xml": ["davmount"],
|
|
16954
|
+
"application/dicom": ["dcm"],
|
|
16955
|
+
"application/docbook+xml": ["dbk"],
|
|
16956
|
+
"application/dssc+der": ["dssc"],
|
|
16957
|
+
"application/dssc+xml": ["xdssc"],
|
|
16958
|
+
"application/ecmascript": ["ecma"],
|
|
16959
|
+
"application/emma+xml": ["emma"],
|
|
16960
|
+
"application/emotionml+xml": ["emotionml"],
|
|
16961
|
+
"application/epub+zip": ["epub"],
|
|
16962
|
+
"application/exi": ["exi"],
|
|
16963
|
+
"application/express": ["exp"],
|
|
16964
|
+
"application/fdf": ["fdf"],
|
|
16965
|
+
"application/fdt+xml": ["fdt"],
|
|
16966
|
+
"application/font-tdpfr": ["pfr"],
|
|
16967
|
+
"application/geo+json": ["geojson"],
|
|
16968
|
+
"application/gml+xml": ["gml"],
|
|
16969
|
+
"application/gpx+xml": ["gpx"],
|
|
16970
|
+
"application/gxf": ["gxf"],
|
|
16971
|
+
"application/gzip": ["gz"],
|
|
16972
|
+
"application/hjson": ["hjson"],
|
|
16973
|
+
"application/hyperstudio": ["stk"],
|
|
16974
|
+
"application/inkml+xml": ["ink", "inkml"],
|
|
16975
|
+
"application/ipfix": ["ipfix"],
|
|
16976
|
+
"application/its+xml": ["its"],
|
|
16977
|
+
"application/java-archive": ["jar", "war", "ear"],
|
|
16978
|
+
"application/java-serialized-object": ["ser"],
|
|
16979
|
+
"application/java-vm": ["class"],
|
|
16980
|
+
"application/javascript": ["*js"],
|
|
16981
|
+
"application/json": ["json", "map"],
|
|
16982
|
+
"application/json5": ["json5"],
|
|
16983
|
+
"application/jsonml+json": ["jsonml"],
|
|
16984
|
+
"application/ld+json": ["jsonld"],
|
|
16985
|
+
"application/lgr+xml": ["lgr"],
|
|
16986
|
+
"application/lost+xml": ["lostxml"],
|
|
16987
|
+
"application/mac-binhex40": ["hqx"],
|
|
16988
|
+
"application/mac-compactpro": ["cpt"],
|
|
16989
|
+
"application/mads+xml": ["mads"],
|
|
16990
|
+
"application/manifest+json": ["webmanifest"],
|
|
16991
|
+
"application/marc": ["mrc"],
|
|
16992
|
+
"application/marcxml+xml": ["mrcx"],
|
|
16993
|
+
"application/mathematica": ["ma", "nb", "mb"],
|
|
16994
|
+
"application/mathml+xml": ["mathml"],
|
|
16995
|
+
"application/mbox": ["mbox"],
|
|
16996
|
+
"application/media-policy-dataset+xml": ["mpf"],
|
|
16997
|
+
"application/mediaservercontrol+xml": ["mscml"],
|
|
16998
|
+
"application/metalink+xml": ["metalink"],
|
|
16999
|
+
"application/metalink4+xml": ["meta4"],
|
|
17000
|
+
"application/mets+xml": ["mets"],
|
|
17001
|
+
"application/mmt-aei+xml": ["maei"],
|
|
17002
|
+
"application/mmt-usd+xml": ["musd"],
|
|
17003
|
+
"application/mods+xml": ["mods"],
|
|
17004
|
+
"application/mp21": ["m21", "mp21"],
|
|
17005
|
+
"application/mp4": ["*mp4", "*mpg4", "mp4s", "m4p"],
|
|
17006
|
+
"application/msix": ["msix"],
|
|
17007
|
+
"application/msixbundle": ["msixbundle"],
|
|
17008
|
+
"application/msword": ["doc", "dot"],
|
|
17009
|
+
"application/mxf": ["mxf"],
|
|
17010
|
+
"application/n-quads": ["nq"],
|
|
17011
|
+
"application/n-triples": ["nt"],
|
|
17012
|
+
"application/node": ["cjs"],
|
|
17013
|
+
"application/octet-stream": [
|
|
17014
|
+
"bin",
|
|
17015
|
+
"dms",
|
|
17016
|
+
"lrf",
|
|
17017
|
+
"mar",
|
|
17018
|
+
"so",
|
|
17019
|
+
"dist",
|
|
17020
|
+
"distz",
|
|
17021
|
+
"pkg",
|
|
17022
|
+
"bpk",
|
|
17023
|
+
"dump",
|
|
17024
|
+
"elc",
|
|
17025
|
+
"deploy",
|
|
17026
|
+
"exe",
|
|
17027
|
+
"dll",
|
|
17028
|
+
"deb",
|
|
17029
|
+
"dmg",
|
|
17030
|
+
"iso",
|
|
17031
|
+
"img",
|
|
17032
|
+
"msi",
|
|
17033
|
+
"msp",
|
|
17034
|
+
"msm",
|
|
17035
|
+
"buffer"
|
|
17036
|
+
],
|
|
17037
|
+
"application/oda": ["oda"],
|
|
17038
|
+
"application/oebps-package+xml": ["opf"],
|
|
17039
|
+
"application/ogg": ["ogx"],
|
|
17040
|
+
"application/omdoc+xml": ["omdoc"],
|
|
17041
|
+
"application/onenote": [
|
|
17042
|
+
"onetoc",
|
|
17043
|
+
"onetoc2",
|
|
17044
|
+
"onetmp",
|
|
17045
|
+
"onepkg",
|
|
17046
|
+
"one",
|
|
17047
|
+
"onea"
|
|
17048
|
+
],
|
|
17049
|
+
"application/oxps": ["oxps"],
|
|
17050
|
+
"application/p2p-overlay+xml": ["relo"],
|
|
17051
|
+
"application/patch-ops-error+xml": ["xer"],
|
|
17052
|
+
"application/pdf": ["pdf"],
|
|
17053
|
+
"application/pgp-encrypted": ["pgp"],
|
|
17054
|
+
"application/pgp-keys": ["asc"],
|
|
17055
|
+
"application/pgp-signature": ["sig", "*asc"],
|
|
17056
|
+
"application/pics-rules": ["prf"],
|
|
17057
|
+
"application/pkcs10": ["p10"],
|
|
17058
|
+
"application/pkcs7-mime": ["p7m", "p7c"],
|
|
17059
|
+
"application/pkcs7-signature": ["p7s"],
|
|
17060
|
+
"application/pkcs8": ["p8"],
|
|
17061
|
+
"application/pkix-attr-cert": ["ac"],
|
|
17062
|
+
"application/pkix-cert": ["cer"],
|
|
17063
|
+
"application/pkix-crl": ["crl"],
|
|
17064
|
+
"application/pkix-pkipath": ["pkipath"],
|
|
17065
|
+
"application/pkixcmp": ["pki"],
|
|
17066
|
+
"application/pls+xml": ["pls"],
|
|
17067
|
+
"application/postscript": ["ai", "eps", "ps"],
|
|
17068
|
+
"application/provenance+xml": ["provx"],
|
|
17069
|
+
"application/pskc+xml": ["pskcxml"],
|
|
17070
|
+
"application/raml+yaml": ["raml"],
|
|
17071
|
+
"application/rdf+xml": ["rdf", "owl"],
|
|
17072
|
+
"application/reginfo+xml": ["rif"],
|
|
17073
|
+
"application/relax-ng-compact-syntax": ["rnc"],
|
|
17074
|
+
"application/resource-lists+xml": ["rl"],
|
|
17075
|
+
"application/resource-lists-diff+xml": ["rld"],
|
|
17076
|
+
"application/rls-services+xml": ["rs"],
|
|
17077
|
+
"application/route-apd+xml": ["rapd"],
|
|
17078
|
+
"application/route-s-tsid+xml": ["sls"],
|
|
17079
|
+
"application/route-usd+xml": ["rusd"],
|
|
17080
|
+
"application/rpki-ghostbusters": ["gbr"],
|
|
17081
|
+
"application/rpki-manifest": ["mft"],
|
|
17082
|
+
"application/rpki-roa": ["roa"],
|
|
17083
|
+
"application/rsd+xml": ["rsd"],
|
|
17084
|
+
"application/rss+xml": ["rss"],
|
|
17085
|
+
"application/rtf": ["rtf"],
|
|
17086
|
+
"application/sbml+xml": ["sbml"],
|
|
17087
|
+
"application/scvp-cv-request": ["scq"],
|
|
17088
|
+
"application/scvp-cv-response": ["scs"],
|
|
17089
|
+
"application/scvp-vp-request": ["spq"],
|
|
17090
|
+
"application/scvp-vp-response": ["spp"],
|
|
17091
|
+
"application/sdp": ["sdp"],
|
|
17092
|
+
"application/senml+xml": ["senmlx"],
|
|
17093
|
+
"application/sensml+xml": ["sensmlx"],
|
|
17094
|
+
"application/set-payment-initiation": ["setpay"],
|
|
17095
|
+
"application/set-registration-initiation": ["setreg"],
|
|
17096
|
+
"application/shf+xml": ["shf"],
|
|
17097
|
+
"application/sieve": ["siv", "sieve"],
|
|
17098
|
+
"application/smil+xml": ["smi", "smil"],
|
|
17099
|
+
"application/sparql-query": ["rq"],
|
|
17100
|
+
"application/sparql-results+xml": ["srx"],
|
|
17101
|
+
"application/sql": ["sql"],
|
|
17102
|
+
"application/srgs": ["gram"],
|
|
17103
|
+
"application/srgs+xml": ["grxml"],
|
|
17104
|
+
"application/sru+xml": ["sru"],
|
|
17105
|
+
"application/ssdl+xml": ["ssdl"],
|
|
17106
|
+
"application/ssml+xml": ["ssml"],
|
|
17107
|
+
"application/swid+xml": ["swidtag"],
|
|
17108
|
+
"application/tei+xml": ["tei", "teicorpus"],
|
|
17109
|
+
"application/thraud+xml": ["tfi"],
|
|
17110
|
+
"application/timestamped-data": ["tsd"],
|
|
17111
|
+
"application/toml": ["toml"],
|
|
17112
|
+
"application/trig": ["trig"],
|
|
17113
|
+
"application/ttml+xml": ["ttml"],
|
|
17114
|
+
"application/ubjson": ["ubj"],
|
|
17115
|
+
"application/urc-ressheet+xml": ["rsheet"],
|
|
17116
|
+
"application/urc-targetdesc+xml": ["td"],
|
|
17117
|
+
"application/voicexml+xml": ["vxml"],
|
|
17118
|
+
"application/wasm": ["wasm"],
|
|
17119
|
+
"application/watcherinfo+xml": ["wif"],
|
|
17120
|
+
"application/widget": ["wgt"],
|
|
17121
|
+
"application/winhlp": ["hlp"],
|
|
17122
|
+
"application/wsdl+xml": ["wsdl"],
|
|
17123
|
+
"application/wspolicy+xml": ["wspolicy"],
|
|
17124
|
+
"application/xaml+xml": ["xaml"],
|
|
17125
|
+
"application/xcap-att+xml": ["xav"],
|
|
17126
|
+
"application/xcap-caps+xml": ["xca"],
|
|
17127
|
+
"application/xcap-diff+xml": ["xdf"],
|
|
17128
|
+
"application/xcap-el+xml": ["xel"],
|
|
17129
|
+
"application/xcap-ns+xml": ["xns"],
|
|
17130
|
+
"application/xenc+xml": ["xenc"],
|
|
17131
|
+
"application/xfdf": ["xfdf"],
|
|
17132
|
+
"application/xhtml+xml": ["xhtml", "xht"],
|
|
17133
|
+
"application/xliff+xml": ["xlf"],
|
|
17134
|
+
"application/xml": ["xml", "xsl", "xsd", "rng"],
|
|
17135
|
+
"application/xml-dtd": ["dtd"],
|
|
17136
|
+
"application/xop+xml": ["xop"],
|
|
17137
|
+
"application/xproc+xml": ["xpl"],
|
|
17138
|
+
"application/xslt+xml": ["*xsl", "xslt"],
|
|
17139
|
+
"application/xspf+xml": ["xspf"],
|
|
17140
|
+
"application/xv+xml": ["mxml", "xhvml", "xvml", "xvm"],
|
|
17141
|
+
"application/yang": ["yang"],
|
|
17142
|
+
"application/yin+xml": ["yin"],
|
|
17143
|
+
"application/zip": ["zip"],
|
|
17144
|
+
"application/zip+dotlottie": ["lottie"],
|
|
17145
|
+
"audio/3gpp": ["*3gpp"],
|
|
17146
|
+
"audio/aac": ["adts", "aac"],
|
|
17147
|
+
"audio/adpcm": ["adp"],
|
|
17148
|
+
"audio/amr": ["amr"],
|
|
17149
|
+
"audio/basic": ["au", "snd"],
|
|
17150
|
+
"audio/midi": ["mid", "midi", "kar", "rmi"],
|
|
17151
|
+
"audio/mobile-xmf": ["mxmf"],
|
|
17152
|
+
"audio/mp3": ["*mp3"],
|
|
17153
|
+
"audio/mp4": ["m4a", "mp4a", "m4b"],
|
|
17154
|
+
"audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"],
|
|
17155
|
+
"audio/ogg": ["oga", "ogg", "spx", "opus"],
|
|
17156
|
+
"audio/s3m": ["s3m"],
|
|
17157
|
+
"audio/silk": ["sil"],
|
|
17158
|
+
"audio/wav": ["wav"],
|
|
17159
|
+
"audio/wave": ["*wav"],
|
|
17160
|
+
"audio/webm": ["weba"],
|
|
17161
|
+
"audio/xm": ["xm"],
|
|
17162
|
+
"font/collection": ["ttc"],
|
|
17163
|
+
"font/otf": ["otf"],
|
|
17164
|
+
"font/ttf": ["ttf"],
|
|
17165
|
+
"font/woff": ["woff"],
|
|
17166
|
+
"font/woff2": ["woff2"],
|
|
17167
|
+
"image/aces": ["exr"],
|
|
17168
|
+
"image/apng": ["apng"],
|
|
17169
|
+
"image/avci": ["avci"],
|
|
17170
|
+
"image/avcs": ["avcs"],
|
|
17171
|
+
"image/avif": ["avif"],
|
|
17172
|
+
"image/bmp": ["bmp", "dib"],
|
|
17173
|
+
"image/cgm": ["cgm"],
|
|
17174
|
+
"image/dicom-rle": ["drle"],
|
|
17175
|
+
"image/dpx": ["dpx"],
|
|
17176
|
+
"image/emf": ["emf"],
|
|
17177
|
+
"image/fits": ["fits"],
|
|
17178
|
+
"image/g3fax": ["g3"],
|
|
17179
|
+
"image/gif": ["gif"],
|
|
17180
|
+
"image/heic": ["heic"],
|
|
17181
|
+
"image/heic-sequence": ["heics"],
|
|
17182
|
+
"image/heif": ["heif"],
|
|
17183
|
+
"image/heif-sequence": ["heifs"],
|
|
17184
|
+
"image/hej2k": ["hej2"],
|
|
17185
|
+
"image/ief": ["ief"],
|
|
17186
|
+
"image/jaii": ["jaii"],
|
|
17187
|
+
"image/jais": ["jais"],
|
|
17188
|
+
"image/jls": ["jls"],
|
|
17189
|
+
"image/jp2": ["jp2", "jpg2"],
|
|
17190
|
+
"image/jpeg": ["jpg", "jpeg", "jpe"],
|
|
17191
|
+
"image/jph": ["jph"],
|
|
17192
|
+
"image/jphc": ["jhc"],
|
|
17193
|
+
"image/jpm": ["jpm", "jpgm"],
|
|
17194
|
+
"image/jpx": ["jpx", "jpf"],
|
|
17195
|
+
"image/jxl": ["jxl"],
|
|
17196
|
+
"image/jxr": ["jxr"],
|
|
17197
|
+
"image/jxra": ["jxra"],
|
|
17198
|
+
"image/jxrs": ["jxrs"],
|
|
17199
|
+
"image/jxs": ["jxs"],
|
|
17200
|
+
"image/jxsc": ["jxsc"],
|
|
17201
|
+
"image/jxsi": ["jxsi"],
|
|
17202
|
+
"image/jxss": ["jxss"],
|
|
17203
|
+
"image/ktx": ["ktx"],
|
|
17204
|
+
"image/ktx2": ["ktx2"],
|
|
17205
|
+
"image/pjpeg": ["jfif"],
|
|
17206
|
+
"image/png": ["png"],
|
|
17207
|
+
"image/sgi": ["sgi"],
|
|
17208
|
+
"image/svg+xml": ["svg", "svgz"],
|
|
17209
|
+
"image/t38": ["t38"],
|
|
17210
|
+
"image/tiff": ["tif", "tiff"],
|
|
17211
|
+
"image/tiff-fx": ["tfx"],
|
|
17212
|
+
"image/webp": ["webp"],
|
|
17213
|
+
"image/wmf": ["wmf"],
|
|
17214
|
+
"message/disposition-notification": ["disposition-notification"],
|
|
17215
|
+
"message/global": ["u8msg"],
|
|
17216
|
+
"message/global-delivery-status": ["u8dsn"],
|
|
17217
|
+
"message/global-disposition-notification": ["u8mdn"],
|
|
17218
|
+
"message/global-headers": ["u8hdr"],
|
|
17219
|
+
"message/rfc822": ["eml", "mime", "mht", "mhtml"],
|
|
17220
|
+
"model/3mf": ["3mf"],
|
|
17221
|
+
"model/gltf+json": ["gltf"],
|
|
17222
|
+
"model/gltf-binary": ["glb"],
|
|
17223
|
+
"model/iges": ["igs", "iges"],
|
|
17224
|
+
"model/jt": ["jt"],
|
|
17225
|
+
"model/mesh": ["msh", "mesh", "silo"],
|
|
17226
|
+
"model/mtl": ["mtl"],
|
|
17227
|
+
"model/obj": ["obj"],
|
|
17228
|
+
"model/prc": ["prc"],
|
|
17229
|
+
"model/step": ["step", "stp", "stpnc", "p21", "210"],
|
|
17230
|
+
"model/step+xml": ["stpx"],
|
|
17231
|
+
"model/step+zip": ["stpz"],
|
|
17232
|
+
"model/step-xml+zip": ["stpxz"],
|
|
17233
|
+
"model/stl": ["stl"],
|
|
17234
|
+
"model/u3d": ["u3d"],
|
|
17235
|
+
"model/vrml": ["wrl", "vrml"],
|
|
17236
|
+
"model/x3d+binary": ["*x3db", "x3dbz"],
|
|
17237
|
+
"model/x3d+fastinfoset": ["x3db"],
|
|
17238
|
+
"model/x3d+vrml": ["*x3dv", "x3dvz"],
|
|
17239
|
+
"model/x3d+xml": ["x3d", "x3dz"],
|
|
17240
|
+
"model/x3d-vrml": ["x3dv"],
|
|
17241
|
+
"text/cache-manifest": ["appcache", "manifest"],
|
|
17242
|
+
"text/calendar": ["ics", "ifb"],
|
|
17243
|
+
"text/coffeescript": ["coffee", "litcoffee"],
|
|
17244
|
+
"text/css": ["css"],
|
|
17245
|
+
"text/csv": ["csv"],
|
|
17246
|
+
"text/html": ["html", "htm", "shtml"],
|
|
17247
|
+
"text/jade": ["jade"],
|
|
17248
|
+
"text/javascript": ["js", "mjs"],
|
|
17249
|
+
"text/jsx": ["jsx"],
|
|
17250
|
+
"text/less": ["less"],
|
|
17251
|
+
"text/markdown": ["md", "markdown"],
|
|
17252
|
+
"text/mathml": ["mml"],
|
|
17253
|
+
"text/mdx": ["mdx"],
|
|
17254
|
+
"text/n3": ["n3"],
|
|
17255
|
+
"text/plain": ["txt", "text", "conf", "def", "list", "log", "in", "ini"],
|
|
17256
|
+
"text/richtext": ["rtx"],
|
|
17257
|
+
"text/rtf": ["*rtf"],
|
|
17258
|
+
"text/sgml": ["sgml", "sgm"],
|
|
17259
|
+
"text/shex": ["shex"],
|
|
17260
|
+
"text/slim": ["slim", "slm"],
|
|
17261
|
+
"text/spdx": ["spdx"],
|
|
17262
|
+
"text/stylus": ["stylus", "styl"],
|
|
17263
|
+
"text/tab-separated-values": ["tsv"],
|
|
17264
|
+
"text/troff": ["t", "tr", "roff", "man", "me", "ms"],
|
|
17265
|
+
"text/turtle": ["ttl"],
|
|
17266
|
+
"text/uri-list": ["uri", "uris", "urls"],
|
|
17267
|
+
"text/vcard": ["vcard"],
|
|
17268
|
+
"text/vtt": ["vtt"],
|
|
17269
|
+
"text/wgsl": ["wgsl"],
|
|
17270
|
+
"text/xml": ["*xml"],
|
|
17271
|
+
"text/yaml": ["yaml", "yml"],
|
|
17272
|
+
"video/3gpp": ["3gp", "3gpp"],
|
|
17273
|
+
"video/3gpp2": ["3g2"],
|
|
17274
|
+
"video/h261": ["h261"],
|
|
17275
|
+
"video/h263": ["h263"],
|
|
17276
|
+
"video/h264": ["h264"],
|
|
17277
|
+
"video/iso.segment": ["m4s"],
|
|
17278
|
+
"video/jpeg": ["jpgv"],
|
|
17279
|
+
"video/jpm": ["*jpm", "*jpgm"],
|
|
17280
|
+
"video/mj2": ["mj2", "mjp2"],
|
|
17281
|
+
"video/mp2t": ["ts", "m2t", "m2ts", "mts"],
|
|
17282
|
+
"video/mp4": ["mp4", "mp4v", "mpg4"],
|
|
17283
|
+
"video/mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v"],
|
|
17284
|
+
"video/ogg": ["ogv"],
|
|
17285
|
+
"video/quicktime": ["qt", "mov"],
|
|
17286
|
+
"video/webm": ["webm"]
|
|
17287
|
+
};
|
|
17288
|
+
Object.freeze(types2);
|
|
17289
|
+
var standard_default = types2;
|
|
17290
|
+
|
|
17291
|
+
// node_modules/mime/dist/src/Mime.js
|
|
17292
|
+
var __classPrivateFieldGet = function(receiver, state, kind, f) {
|
|
17293
|
+
if (kind === "a" && !f)
|
|
17294
|
+
throw new TypeError("Private accessor was defined without a getter");
|
|
17295
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
|
|
17296
|
+
throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
17297
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
17298
|
+
};
|
|
17299
|
+
var _Mime_extensionToType;
|
|
17300
|
+
var _Mime_typeToExtension;
|
|
17301
|
+
var _Mime_typeToExtensions;
|
|
17302
|
+
|
|
17303
|
+
class Mime {
|
|
17304
|
+
constructor(...args) {
|
|
17305
|
+
_Mime_extensionToType.set(this, new Map);
|
|
17306
|
+
_Mime_typeToExtension.set(this, new Map);
|
|
17307
|
+
_Mime_typeToExtensions.set(this, new Map);
|
|
17308
|
+
for (const arg of args) {
|
|
17309
|
+
this.define(arg);
|
|
17310
|
+
}
|
|
17311
|
+
}
|
|
17312
|
+
define(typeMap, force = false) {
|
|
17313
|
+
for (let [type, extensions] of Object.entries(typeMap)) {
|
|
17314
|
+
type = type.toLowerCase();
|
|
17315
|
+
extensions = extensions.map((ext) => ext.toLowerCase());
|
|
17316
|
+
if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, "f").has(type)) {
|
|
17317
|
+
__classPrivateFieldGet(this, _Mime_typeToExtensions, "f").set(type, new Set);
|
|
17318
|
+
}
|
|
17319
|
+
const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, "f").get(type);
|
|
17320
|
+
let first = true;
|
|
17321
|
+
for (let extension of extensions) {
|
|
17322
|
+
const starred = extension.startsWith("*");
|
|
17323
|
+
extension = starred ? extension.slice(1) : extension;
|
|
17324
|
+
allExtensions?.add(extension);
|
|
17325
|
+
if (first) {
|
|
17326
|
+
__classPrivateFieldGet(this, _Mime_typeToExtension, "f").set(type, extension);
|
|
17327
|
+
}
|
|
17328
|
+
first = false;
|
|
17329
|
+
if (starred)
|
|
17330
|
+
continue;
|
|
17331
|
+
const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, "f").get(extension);
|
|
17332
|
+
if (currentType && currentType != type && !force) {
|
|
17333
|
+
throw new Error(`"${type} -> ${extension}" conflicts with "${currentType} -> ${extension}". Pass \`force=true\` to override this definition.`);
|
|
17334
|
+
}
|
|
17335
|
+
__classPrivateFieldGet(this, _Mime_extensionToType, "f").set(extension, type);
|
|
17336
|
+
}
|
|
17337
|
+
}
|
|
17338
|
+
return this;
|
|
17339
|
+
}
|
|
17340
|
+
getType(path) {
|
|
17341
|
+
if (typeof path !== "string")
|
|
17342
|
+
return null;
|
|
17343
|
+
const last = path.replace(/^.*[/\\]/s, "").toLowerCase();
|
|
17344
|
+
const ext = last.replace(/^.*\./s, "").toLowerCase();
|
|
17345
|
+
const hasPath = last.length < path.length;
|
|
17346
|
+
const hasDot = ext.length < last.length - 1;
|
|
17347
|
+
if (!hasDot && hasPath)
|
|
17348
|
+
return null;
|
|
17349
|
+
return __classPrivateFieldGet(this, _Mime_extensionToType, "f").get(ext) ?? null;
|
|
17350
|
+
}
|
|
17351
|
+
getExtension(type) {
|
|
17352
|
+
if (typeof type !== "string")
|
|
17353
|
+
return null;
|
|
17354
|
+
type = type?.split?.(";")[0];
|
|
17355
|
+
return (type && __classPrivateFieldGet(this, _Mime_typeToExtension, "f").get(type.trim().toLowerCase())) ?? null;
|
|
17356
|
+
}
|
|
17357
|
+
getAllExtensions(type) {
|
|
17358
|
+
if (typeof type !== "string")
|
|
17359
|
+
return null;
|
|
17360
|
+
return __classPrivateFieldGet(this, _Mime_typeToExtensions, "f").get(type.toLowerCase()) ?? null;
|
|
17361
|
+
}
|
|
17362
|
+
_freeze() {
|
|
17363
|
+
this.define = () => {
|
|
17364
|
+
throw new Error("define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances");
|
|
17365
|
+
};
|
|
17366
|
+
Object.freeze(this);
|
|
17367
|
+
for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, "f").values()) {
|
|
17368
|
+
Object.freeze(extensions);
|
|
17369
|
+
}
|
|
17370
|
+
return this;
|
|
17371
|
+
}
|
|
17372
|
+
_getTestState() {
|
|
17373
|
+
return {
|
|
17374
|
+
types: __classPrivateFieldGet(this, _Mime_extensionToType, "f"),
|
|
17375
|
+
extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, "f")
|
|
17376
|
+
};
|
|
17377
|
+
}
|
|
17378
|
+
}
|
|
17379
|
+
_Mime_extensionToType = new WeakMap, _Mime_typeToExtension = new WeakMap, _Mime_typeToExtensions = new WeakMap;
|
|
17380
|
+
var Mime_default = Mime;
|
|
17381
|
+
|
|
17382
|
+
// node_modules/mime/dist/src/index.js
|
|
17383
|
+
var src_default = new Mime_default(standard_default, other_default)._freeze();
|
|
17384
|
+
|
|
17385
|
+
// src/lib/SkillFs.ts
|
|
17386
|
+
var readSkillFile = async (path) => {
|
|
17387
|
+
const file2 = Bun.file(path);
|
|
17388
|
+
return file2.text();
|
|
17389
|
+
};
|
|
17390
|
+
var listSkillFiles = (skillPath, subdirectory) => {
|
|
17391
|
+
const glob = new Bun.Glob(join(subdirectory, "**", "*"));
|
|
17392
|
+
return Array.from(glob.scanSync({ cwd: skillPath, absolute: true }));
|
|
17393
|
+
};
|
|
17394
|
+
var findSkillPaths = async (basePath) => {
|
|
17395
|
+
const glob = new Bun.Glob("**/SKILL.md");
|
|
17396
|
+
const results = [];
|
|
17397
|
+
for await (const path of glob.scan({ cwd: basePath, absolute: true })) {
|
|
17398
|
+
results.push(path);
|
|
17399
|
+
}
|
|
17400
|
+
return results;
|
|
17401
|
+
};
|
|
17402
|
+
var doesPathExist = (path) => {
|
|
17403
|
+
return existsSync(path);
|
|
17404
|
+
};
|
|
17405
|
+
var detectMimeType = (filePath) => {
|
|
17406
|
+
return src_default.getType(filePath) || "application/octet-stream";
|
|
17407
|
+
};
|
|
17408
|
+
|
|
17409
|
+
// src/services/SkillSearcher.ts
|
|
17410
|
+
var import_search_string = __toESM(require_searchString(), 1);
|
|
17411
|
+
function parseQuery(queryString) {
|
|
17412
|
+
const queries = Array.isArray(queryString) ? queryString : [queryString];
|
|
17413
|
+
const textSegments = queries.map((query) => {
|
|
17414
|
+
const instance = import_search_string.default.parse(query);
|
|
17415
|
+
return instance.getTextSegments();
|
|
17416
|
+
}).flat();
|
|
17417
|
+
const include = textSegments.filter((s) => !s.negated).map((s) => s.text.toLowerCase()).filter((s) => s.trim().length > 0);
|
|
17418
|
+
const exclude = textSegments.filter((s) => s.negated).map((s) => s.text.toLowerCase()).filter((s) => s.trim().length > 0);
|
|
16175
17419
|
return {
|
|
16176
|
-
|
|
16177
|
-
|
|
16178
|
-
|
|
16179
|
-
|
|
16180
|
-
|
|
17420
|
+
include,
|
|
17421
|
+
exclude,
|
|
17422
|
+
originalQuery: queries.filter((q) => q.trim().length > 0),
|
|
17423
|
+
hasExclusions: exclude.length > 0,
|
|
17424
|
+
termCount: textSegments.length
|
|
17425
|
+
};
|
|
17426
|
+
}
|
|
17427
|
+
function rankSkill(skill, includeTerms) {
|
|
17428
|
+
const skillName = skill.name.toLowerCase();
|
|
17429
|
+
const skillDesc = skill.description.toLowerCase();
|
|
17430
|
+
let nameMatches = 0;
|
|
17431
|
+
let descMatches = 0;
|
|
17432
|
+
for (const term of includeTerms) {
|
|
17433
|
+
if (skillName.includes(term)) {
|
|
17434
|
+
nameMatches++;
|
|
17435
|
+
} else if (skillDesc.includes(term)) {
|
|
17436
|
+
descMatches++;
|
|
17437
|
+
}
|
|
17438
|
+
}
|
|
17439
|
+
let exactBonus = 0;
|
|
17440
|
+
if (includeTerms.length === 1 && skillName === includeTerms[0]) {
|
|
17441
|
+
exactBonus = 10;
|
|
17442
|
+
}
|
|
17443
|
+
const totalScore = nameMatches * 3 + descMatches * 1 + exactBonus;
|
|
17444
|
+
return { skill, nameMatches, descMatches, totalScore };
|
|
17445
|
+
}
|
|
17446
|
+
function shouldIncludeSkill(skill, excludeTerms) {
|
|
17447
|
+
if (excludeTerms.length === 0) {
|
|
17448
|
+
return true;
|
|
17449
|
+
}
|
|
17450
|
+
const haystack = `${skill.name} ${skill.description}`.toLowerCase();
|
|
17451
|
+
return !excludeTerms.some((term) => haystack.includes(term));
|
|
17452
|
+
}
|
|
17453
|
+
function generateFeedback(query, matchCount) {
|
|
17454
|
+
const parts = [];
|
|
17455
|
+
if (query.include.length > 0) {
|
|
17456
|
+
parts.push(`Searching for: "**${query.originalQuery.join(" ")}**"`);
|
|
17457
|
+
} else {
|
|
17458
|
+
parts.push(`No include search terms provided`);
|
|
17459
|
+
}
|
|
17460
|
+
if (query.hasExclusions) {
|
|
17461
|
+
parts.push(`Excluding: **${query.exclude.join(", ")}**`);
|
|
17462
|
+
}
|
|
17463
|
+
if (matchCount === 0) {
|
|
17464
|
+
parts.push(`No matches found`);
|
|
17465
|
+
parts.push(`- Try different or fewer search terms.`);
|
|
17466
|
+
parts.push(`- Use skill_find("*") to list all skills.`);
|
|
17467
|
+
} else if (matchCount === 1) {
|
|
17468
|
+
parts.push(`Found 1 match`);
|
|
17469
|
+
} else {
|
|
17470
|
+
parts.push(`Found ${matchCount} matches`);
|
|
17471
|
+
}
|
|
17472
|
+
return parts.join(" | ");
|
|
17473
|
+
}
|
|
17474
|
+
function createSkillSearcher(registry2) {
|
|
17475
|
+
function resolveQuery(queryString) {
|
|
17476
|
+
const query = parseQuery(queryString);
|
|
17477
|
+
const skills = registry2.skills;
|
|
17478
|
+
const output = {
|
|
17479
|
+
matches: [],
|
|
17480
|
+
totalMatches: 0,
|
|
17481
|
+
totalSkills: registry2.skills.length,
|
|
17482
|
+
feedback: "",
|
|
17483
|
+
query
|
|
17484
|
+
};
|
|
17485
|
+
if (queryString === "" || queryString === "*" || query.include.length === 1 && query.include[0] === "*" || query.include.length === 0 && query.hasExclusions === false) {
|
|
17486
|
+
output.matches = skills;
|
|
17487
|
+
output.totalMatches = skills.length;
|
|
17488
|
+
output.feedback = `Listing all ${skills.length} skills`;
|
|
17489
|
+
return output;
|
|
17490
|
+
}
|
|
17491
|
+
let results = skills.filter((skill) => {
|
|
17492
|
+
const haystack = `${skill.toolName} ${skill.name} ${skill.description}`.toLowerCase();
|
|
17493
|
+
return query.include.every((term) => haystack.includes(term));
|
|
17494
|
+
});
|
|
17495
|
+
output.matches = results;
|
|
17496
|
+
output.totalMatches = results.length;
|
|
17497
|
+
output.feedback = generateFeedback(query, results.length);
|
|
17498
|
+
return output;
|
|
17499
|
+
}
|
|
17500
|
+
return function search(queryString) {
|
|
17501
|
+
const resolved = resolveQuery(queryString);
|
|
17502
|
+
const results = resolved.matches.filter((skill) => shouldIncludeSkill(skill, resolved.query.exclude));
|
|
17503
|
+
const totalMatches = results.length;
|
|
17504
|
+
const ranked = results.map((skill) => rankSkill(skill, resolved.query.include)).sort((a, b) => {
|
|
17505
|
+
if (b.totalScore !== a.totalScore) {
|
|
17506
|
+
return b.totalScore - a.totalScore;
|
|
17507
|
+
}
|
|
17508
|
+
if (b.nameMatches !== a.nameMatches) {
|
|
17509
|
+
return b.nameMatches - a.nameMatches;
|
|
17510
|
+
}
|
|
17511
|
+
return a.skill.name.localeCompare(b.skill.name);
|
|
17512
|
+
});
|
|
17513
|
+
const matches = ranked.map((r) => r.skill);
|
|
17514
|
+
return {
|
|
17515
|
+
matches,
|
|
17516
|
+
totalMatches,
|
|
17517
|
+
feedback: resolved.feedback,
|
|
17518
|
+
query: resolved.query,
|
|
17519
|
+
totalSkills: registry2.skills.length
|
|
17520
|
+
};
|
|
17521
|
+
};
|
|
17522
|
+
}
|
|
17523
|
+
|
|
17524
|
+
// src/lib/ReadyStateMachine.ts
|
|
17525
|
+
function createReadyStateMachine() {
|
|
17526
|
+
const state = {
|
|
17527
|
+
status: "idle",
|
|
17528
|
+
watchers: new Set
|
|
17529
|
+
};
|
|
17530
|
+
const setStatus = (newStatus) => {
|
|
17531
|
+
state.status = newStatus;
|
|
17532
|
+
state.watchers.forEach((watcher) => watcher(state.status));
|
|
17533
|
+
};
|
|
17534
|
+
const watchReady = (callback) => {
|
|
17535
|
+
state.watchers.add(callback);
|
|
17536
|
+
return () => {
|
|
17537
|
+
state.watchers.delete(callback);
|
|
17538
|
+
};
|
|
17539
|
+
};
|
|
17540
|
+
const whenReady = async () => {
|
|
17541
|
+
while (state.status !== "ready" && state.status !== "error") {
|
|
17542
|
+
await new Promise((resolve) => {
|
|
17543
|
+
const unsubscribe = watchReady(() => {
|
|
17544
|
+
unsubscribe();
|
|
17545
|
+
resolve(null);
|
|
17546
|
+
});
|
|
17547
|
+
});
|
|
17548
|
+
}
|
|
17549
|
+
if (state.status === "error") {
|
|
17550
|
+
throw new Error("Ready state machine failed to initialize");
|
|
17551
|
+
}
|
|
16181
17552
|
};
|
|
16182
|
-
};
|
|
16183
|
-
var linux = (name) => {
|
|
16184
|
-
const username = path.basename(homedir);
|
|
16185
17553
|
return {
|
|
16186
|
-
|
|
16187
|
-
|
|
16188
|
-
|
|
16189
|
-
log: path.join(env.XDG_STATE_HOME || path.join(homedir, ".local", "state"), name),
|
|
16190
|
-
temp: path.join(tmpdir, username, name)
|
|
17554
|
+
setStatus,
|
|
17555
|
+
watchReady,
|
|
17556
|
+
whenReady
|
|
16191
17557
|
};
|
|
16192
|
-
}
|
|
16193
|
-
|
|
16194
|
-
|
|
16195
|
-
|
|
17558
|
+
}
|
|
17559
|
+
|
|
17560
|
+
// src/services/SkillRegistry.ts
|
|
17561
|
+
var SkillFrontmatterSchema = tool.schema.object({
|
|
17562
|
+
name: tool.schema.string().optional(),
|
|
17563
|
+
description: tool.schema.string().min(20, "Description must be at least 20 characters for discoverability"),
|
|
17564
|
+
license: tool.schema.string().optional(),
|
|
17565
|
+
"allowed-tools": tool.schema.array(tool.schema.string()).optional(),
|
|
17566
|
+
metadata: tool.schema.record(tool.schema.string(), tool.schema.string()).optional()
|
|
17567
|
+
});
|
|
17568
|
+
function createSkillRegistryController() {
|
|
17569
|
+
const store = new Map;
|
|
17570
|
+
const controller = {
|
|
17571
|
+
ready: createReadyStateMachine(),
|
|
17572
|
+
get skills() {
|
|
17573
|
+
return Array.from(store.values()).sort((a, b) => a.name.localeCompare(b.name));
|
|
17574
|
+
},
|
|
17575
|
+
get ids() {
|
|
17576
|
+
return Array.from(store.keys()).sort();
|
|
17577
|
+
},
|
|
17578
|
+
delete(_key) {
|
|
17579
|
+
store.delete(_key);
|
|
17580
|
+
},
|
|
17581
|
+
clear: () => store.clear(),
|
|
17582
|
+
has: (key) => store.has(key),
|
|
17583
|
+
get: (key) => store.get(key),
|
|
17584
|
+
set: (key, skill) => {
|
|
17585
|
+
store.set(key, skill);
|
|
17586
|
+
}
|
|
17587
|
+
};
|
|
17588
|
+
return controller;
|
|
17589
|
+
}
|
|
17590
|
+
async function createSkillRegistry(config2, logger) {
|
|
17591
|
+
const controller = createSkillRegistryController();
|
|
17592
|
+
const debug = {
|
|
17593
|
+
discovered: 0,
|
|
17594
|
+
parsed: 0,
|
|
17595
|
+
rejected: 0,
|
|
17596
|
+
errors: []
|
|
17597
|
+
};
|
|
17598
|
+
const initialise = async () => {
|
|
17599
|
+
controller.ready.setStatus("loading");
|
|
17600
|
+
try {
|
|
17601
|
+
const paths = [];
|
|
17602
|
+
const existingBasePaths = config2.basePaths.filter(doesPathExist);
|
|
17603
|
+
if (existingBasePaths.length === 0) {
|
|
17604
|
+
logger.warn("[OpencodeSkillful] No valid base paths found for skill discovery:", config2.basePaths);
|
|
17605
|
+
controller.ready.setStatus("ready");
|
|
17606
|
+
return;
|
|
17607
|
+
}
|
|
17608
|
+
logger.debug("[SkillRegistryController] Discovering skills in base paths:", existingBasePaths);
|
|
17609
|
+
for (const basePath of existingBasePaths) {
|
|
17610
|
+
const found = await findSkillPaths(basePath);
|
|
17611
|
+
paths.push(...found);
|
|
17612
|
+
}
|
|
17613
|
+
logger.debug("[SkillRegistryController] skills.discovered", paths.length);
|
|
17614
|
+
debug.discovered = paths.length;
|
|
17615
|
+
if (paths.length === 0) {
|
|
17616
|
+
controller.ready.setStatus("ready");
|
|
17617
|
+
logger.debug("[SkillRegistryController] No skills found");
|
|
17618
|
+
return;
|
|
17619
|
+
}
|
|
17620
|
+
const results = await register(...paths);
|
|
17621
|
+
logger.debug("[SkillRegistryController] skills.initialise results", results);
|
|
17622
|
+
debug.parsed = results.parsed;
|
|
17623
|
+
debug.rejected = results.rejected;
|
|
17624
|
+
debug.errors = results.errors;
|
|
17625
|
+
controller.ready.setStatus("ready");
|
|
17626
|
+
} catch (error45) {
|
|
17627
|
+
const errorMessage = error45 instanceof Error ? error45.message : String(error45);
|
|
17628
|
+
logger.error("[SkillRegistryController] Initialization failed:", errorMessage);
|
|
17629
|
+
controller.ready.setStatus("error");
|
|
17630
|
+
}
|
|
17631
|
+
};
|
|
17632
|
+
const matchBasePath = (absolutePath) => {
|
|
17633
|
+
for (const basePath of config2.basePaths) {
|
|
17634
|
+
if (absolutePath.startsWith(basePath)) {
|
|
17635
|
+
return basePath;
|
|
17636
|
+
}
|
|
17637
|
+
}
|
|
17638
|
+
return null;
|
|
17639
|
+
};
|
|
17640
|
+
const register = async (...paths) => {
|
|
17641
|
+
logger.debug(`[SkillRegistryController] register [${paths.length}] skills`);
|
|
17642
|
+
const summary = {
|
|
17643
|
+
discovered: paths.length,
|
|
17644
|
+
parsed: 0,
|
|
17645
|
+
rejected: 0,
|
|
17646
|
+
errors: []
|
|
17647
|
+
};
|
|
17648
|
+
for await (const path of paths) {
|
|
17649
|
+
try {
|
|
17650
|
+
const content = await readSkillFile(path);
|
|
17651
|
+
const skill = await parseSkill({
|
|
17652
|
+
skillPath: path,
|
|
17653
|
+
basePath: matchBasePath(path) || "",
|
|
17654
|
+
content
|
|
17655
|
+
});
|
|
17656
|
+
if (!skill) {
|
|
17657
|
+
summary.rejected++;
|
|
17658
|
+
summary.errors.push(`[NOSKILLERROR] Failed to parse skill at ${path}`);
|
|
17659
|
+
logger.debug("[SkillRegistryController] error [NOSKILLERROR]", path, "=> NO SKILL");
|
|
17660
|
+
continue;
|
|
17661
|
+
}
|
|
17662
|
+
controller.set(skill.toolName, skill);
|
|
17663
|
+
summary.parsed++;
|
|
17664
|
+
} catch (error45) {
|
|
17665
|
+
summary.rejected++;
|
|
17666
|
+
summary.errors.push(error45 instanceof Error ? error45.message : `[UNKNOWNERROR] Unknown error at ${path}`);
|
|
17667
|
+
continue;
|
|
17668
|
+
}
|
|
17669
|
+
}
|
|
17670
|
+
logger.debug("errors", JSON.stringify(summary.errors, null, 2));
|
|
17671
|
+
return summary;
|
|
17672
|
+
};
|
|
17673
|
+
const isSkillPath = (path) => {
|
|
17674
|
+
return path.endsWith("SKILL.md") && config2.basePaths.some((basePath) => path.startsWith(basePath));
|
|
17675
|
+
};
|
|
17676
|
+
const getToolnameFromSkillPath = (path) => {
|
|
17677
|
+
if (!isSkillPath(path)) {
|
|
17678
|
+
return null;
|
|
17679
|
+
}
|
|
17680
|
+
const relativePath = relative(config2.basePaths.find((basePath) => path.startsWith(basePath)) || "", path);
|
|
17681
|
+
return toolName(relativePath);
|
|
17682
|
+
};
|
|
17683
|
+
const search = createSkillSearcher(controller);
|
|
17684
|
+
return {
|
|
17685
|
+
config: config2,
|
|
17686
|
+
controller,
|
|
17687
|
+
initialise,
|
|
17688
|
+
register,
|
|
17689
|
+
isSkillPath,
|
|
17690
|
+
getToolnameFromSkillPath,
|
|
17691
|
+
search,
|
|
17692
|
+
debug,
|
|
17693
|
+
logger
|
|
17694
|
+
};
|
|
17695
|
+
}
|
|
17696
|
+
async function parseSkill(args) {
|
|
17697
|
+
const relativePath = relative(args.basePath, args.skillPath);
|
|
17698
|
+
if (!relativePath) {
|
|
17699
|
+
throw new Error(`\u274C Skill path does not match expected pattern: ${args.skillPath}`);
|
|
17700
|
+
}
|
|
17701
|
+
if (!args.content) {
|
|
17702
|
+
throw new Error(`\u274C Unable to read skill file: ${args.skillPath}`);
|
|
17703
|
+
}
|
|
17704
|
+
const parsed = import_gray_matter.default(args.content);
|
|
17705
|
+
const frontmatter = SkillFrontmatterSchema.safeParse(parsed.data);
|
|
17706
|
+
if (!frontmatter.success) {
|
|
17707
|
+
throw new Error(`[FrontMatterInvalid] ${args.skillPath} [${JSON.stringify(frontmatter.error.issues)}]`, {
|
|
17708
|
+
cause: frontmatter.error
|
|
17709
|
+
});
|
|
16196
17710
|
}
|
|
16197
|
-
|
|
16198
|
-
|
|
17711
|
+
const shortName = basename(dirname(args.skillPath));
|
|
17712
|
+
const skillFullPath = dirname(args.skillPath);
|
|
17713
|
+
const scriptPaths = listSkillFiles(skillFullPath, "scripts");
|
|
17714
|
+
const referencePaths = listSkillFiles(skillFullPath, "references");
|
|
17715
|
+
const assetPaths = listSkillFiles(skillFullPath, "assets");
|
|
17716
|
+
return {
|
|
17717
|
+
allowedTools: frontmatter.data["allowed-tools"],
|
|
17718
|
+
content: parsed.content.trim(),
|
|
17719
|
+
description: frontmatter.data.description,
|
|
17720
|
+
fullPath: skillFullPath,
|
|
17721
|
+
toolName: toolName(relativePath),
|
|
17722
|
+
license: frontmatter.data.license,
|
|
17723
|
+
metadata: frontmatter.data.metadata,
|
|
17724
|
+
name: shortName,
|
|
17725
|
+
path: args.skillPath,
|
|
17726
|
+
scripts: createSkillResourceMap(skillFullPath, scriptPaths),
|
|
17727
|
+
references: createSkillResourceMap(skillFullPath, referencePaths),
|
|
17728
|
+
assets: createSkillResourceMap(skillFullPath, assetPaths)
|
|
17729
|
+
};
|
|
17730
|
+
}
|
|
17731
|
+
function createSkillResourceMap(skillPath, filePaths) {
|
|
17732
|
+
const output = new Map;
|
|
17733
|
+
for (const filePath of filePaths) {
|
|
17734
|
+
const relativePath = relative(skillPath, filePath);
|
|
17735
|
+
output.set(relativePath, {
|
|
17736
|
+
absolutePath: filePath,
|
|
17737
|
+
mimeType: detectMimeType(filePath)
|
|
17738
|
+
});
|
|
16199
17739
|
}
|
|
16200
|
-
|
|
16201
|
-
|
|
17740
|
+
return output;
|
|
17741
|
+
}
|
|
17742
|
+
|
|
17743
|
+
// src/tools/SkillFinder.ts
|
|
17744
|
+
function createSkillFinder(provider) {
|
|
17745
|
+
return async (args) => {
|
|
17746
|
+
await provider.controller.ready.whenReady();
|
|
17747
|
+
const result = provider.search(args.query);
|
|
17748
|
+
const skills = result.matches.map((skill) => ({
|
|
17749
|
+
name: skill.toolName,
|
|
17750
|
+
description: skill.description
|
|
17751
|
+
}));
|
|
17752
|
+
return {
|
|
17753
|
+
query: args.query,
|
|
17754
|
+
skills,
|
|
17755
|
+
summary: {
|
|
17756
|
+
total: provider.controller.skills.length,
|
|
17757
|
+
matches: result.totalMatches,
|
|
17758
|
+
feedback: result.feedback
|
|
17759
|
+
},
|
|
17760
|
+
debug: provider.debug
|
|
17761
|
+
};
|
|
17762
|
+
};
|
|
17763
|
+
}
|
|
17764
|
+
|
|
17765
|
+
// src/tools/SkillResourceReader.ts
|
|
17766
|
+
import path from "path";
|
|
17767
|
+
|
|
17768
|
+
// src/services/SkillResourceResolver.ts
|
|
17769
|
+
function createSkillResourceResolver(provider) {
|
|
17770
|
+
const resolveResourceMap = (skill, type) => {
|
|
17771
|
+
if (type === "script") {
|
|
17772
|
+
return skill.scripts;
|
|
17773
|
+
} else if (type === "asset") {
|
|
17774
|
+
return skill.assets;
|
|
17775
|
+
} else if (type === "reference") {
|
|
17776
|
+
return skill.references;
|
|
17777
|
+
} else {
|
|
17778
|
+
throw new Error(`Unknown resource type: ${type}`);
|
|
17779
|
+
}
|
|
17780
|
+
};
|
|
17781
|
+
return async (args) => {
|
|
17782
|
+
const skill = provider.controller.get(args.skill_name);
|
|
17783
|
+
if (!skill) {
|
|
17784
|
+
throw new Error(`Skill not found: ${args.skill_name}`);
|
|
17785
|
+
}
|
|
17786
|
+
const resourceMap = resolveResourceMap(skill, args.type);
|
|
17787
|
+
if (!resourceMap) {
|
|
17788
|
+
throw new Error(`Skill "${args.skill_name}" does not have any resources of type "${args.type}"`);
|
|
17789
|
+
}
|
|
17790
|
+
const resourceEntry = resourceMap.get(args.relative_path);
|
|
17791
|
+
if (!resourceEntry) {
|
|
17792
|
+
throw new Error(`Resource not found: Skill "${args.skill_name}" does not have a ${args.type} at path "${args.relative_path}"`);
|
|
17793
|
+
}
|
|
17794
|
+
try {
|
|
17795
|
+
const content = await readSkillFile(resourceEntry.absolutePath);
|
|
17796
|
+
return {
|
|
17797
|
+
absolute_path: resourceEntry.absolutePath,
|
|
17798
|
+
content,
|
|
17799
|
+
mimeType: resourceEntry.mimeType
|
|
17800
|
+
};
|
|
17801
|
+
} catch (error45) {
|
|
17802
|
+
throw new Error(`Failed to read resource at ${resourceEntry.absolutePath}: ${error45 instanceof Error ? error45.message : String(error45)}`);
|
|
17803
|
+
}
|
|
17804
|
+
};
|
|
17805
|
+
}
|
|
17806
|
+
|
|
17807
|
+
// src/types.ts
|
|
17808
|
+
var ResourceTypes = ["script", "asset", "reference"];
|
|
17809
|
+
var assertIsValidResourceType = (type) => {
|
|
17810
|
+
if (!ResourceTypes.includes(type)) {
|
|
17811
|
+
throw new Error(`Invalid resource type: ${type}`);
|
|
16202
17812
|
}
|
|
16203
|
-
|
|
16204
|
-
|
|
17813
|
+
};
|
|
17814
|
+
|
|
17815
|
+
// src/tools/SkillResourceReader.ts
|
|
17816
|
+
function createSkillResourceReader(provider) {
|
|
17817
|
+
const skillResourceResolver = createSkillResourceResolver(provider);
|
|
17818
|
+
return async (args) => {
|
|
17819
|
+
await provider.controller.ready.whenReady();
|
|
17820
|
+
const [type, ...restPath] = args.relative_path.split("/");
|
|
17821
|
+
assertIsValidResourceType(type);
|
|
17822
|
+
const resource = await skillResourceResolver({
|
|
17823
|
+
skill_name: args.skill_name,
|
|
17824
|
+
type,
|
|
17825
|
+
relative_path: path.join(...restPath)
|
|
17826
|
+
});
|
|
17827
|
+
const injection = {
|
|
17828
|
+
skill_name: args.skill_name,
|
|
17829
|
+
resource_path: args.relative_path,
|
|
17830
|
+
resource_mimetype: resource.mimeType,
|
|
17831
|
+
content: resource.content
|
|
17832
|
+
};
|
|
17833
|
+
return {
|
|
17834
|
+
injection
|
|
17835
|
+
};
|
|
17836
|
+
};
|
|
17837
|
+
}
|
|
17838
|
+
|
|
17839
|
+
// src/tools/SkillUser.ts
|
|
17840
|
+
function createSkillLoader(provider) {
|
|
17841
|
+
const registry2 = provider.controller;
|
|
17842
|
+
async function loadSkills(skillNames) {
|
|
17843
|
+
await provider.controller.ready.whenReady();
|
|
17844
|
+
const loaded = [];
|
|
17845
|
+
const notFound = [];
|
|
17846
|
+
for (const name of skillNames) {
|
|
17847
|
+
const skill = registry2.get(name);
|
|
17848
|
+
if (skill) {
|
|
17849
|
+
loaded.push(skill);
|
|
17850
|
+
} else {
|
|
17851
|
+
notFound.push(name);
|
|
17852
|
+
}
|
|
17853
|
+
}
|
|
17854
|
+
return {
|
|
17855
|
+
loaded,
|
|
17856
|
+
notFound
|
|
17857
|
+
};
|
|
16205
17858
|
}
|
|
16206
|
-
return
|
|
17859
|
+
return loadSkills;
|
|
16207
17860
|
}
|
|
16208
17861
|
|
|
16209
|
-
// src/
|
|
16210
|
-
var
|
|
17862
|
+
// src/api.ts
|
|
17863
|
+
var createApi = async (config2) => {
|
|
17864
|
+
const logger = createLogger(config2);
|
|
17865
|
+
const registry2 = await createSkillRegistry(config2, logger);
|
|
17866
|
+
return {
|
|
17867
|
+
registry: registry2,
|
|
17868
|
+
logger,
|
|
17869
|
+
findSkills: createSkillFinder(registry2),
|
|
17870
|
+
readResource: createSkillResourceReader(registry2),
|
|
17871
|
+
loadSkill: createSkillLoader(registry2)
|
|
17872
|
+
};
|
|
17873
|
+
};
|
|
17874
|
+
|
|
17875
|
+
// src/config.ts
|
|
17876
|
+
import { join as join2 } from "path";
|
|
16211
17877
|
|
|
16212
17878
|
// node_modules/ramda/es/internal/_isPlaceholder.js
|
|
16213
17879
|
function _isPlaceholder(a) {
|
|
@@ -16330,396 +17996,157 @@ var mergeDeepLeft = /* @__PURE__ */ _curry2(function mergeDeepLeft2(lObj, rObj)
|
|
|
16330
17996
|
}, lObj, rObj);
|
|
16331
17997
|
});
|
|
16332
17998
|
var mergeDeepLeft_default = mergeDeepLeft;
|
|
16333
|
-
//
|
|
16334
|
-
|
|
16335
|
-
|
|
16336
|
-
|
|
16337
|
-
|
|
16338
|
-
|
|
16339
|
-
|
|
16340
|
-
|
|
16341
|
-
|
|
16342
|
-
parseQuery(queryString) {
|
|
16343
|
-
const searchStringInstance = import_search_string.default.parse(queryString);
|
|
16344
|
-
const textSegments = searchStringInstance.getTextSegments();
|
|
16345
|
-
const include = textSegments.filter((s) => !s.negated).map((s) => s.text.toLowerCase()).filter((s) => s.length > 0);
|
|
16346
|
-
const exclude = textSegments.filter((s) => s.negated).map((s) => s.text.toLowerCase()).filter((s) => s.length > 0);
|
|
16347
|
-
return {
|
|
16348
|
-
include,
|
|
16349
|
-
exclude,
|
|
16350
|
-
originalQuery: queryString,
|
|
16351
|
-
hasExclusions: exclude.length > 0,
|
|
16352
|
-
termCount: textSegments.length
|
|
16353
|
-
};
|
|
16354
|
-
}
|
|
16355
|
-
rankSkill(skill, includeTerms) {
|
|
16356
|
-
const skillName = skill.name.toLowerCase();
|
|
16357
|
-
const skillDesc = skill.description.toLowerCase();
|
|
16358
|
-
let nameMatches = 0;
|
|
16359
|
-
let descMatches = 0;
|
|
16360
|
-
for (const term of includeTerms) {
|
|
16361
|
-
if (skillName.includes(term)) {
|
|
16362
|
-
nameMatches++;
|
|
16363
|
-
} else if (skillDesc.includes(term)) {
|
|
16364
|
-
descMatches++;
|
|
16365
|
-
}
|
|
16366
|
-
}
|
|
16367
|
-
let exactBonus = 0;
|
|
16368
|
-
if (includeTerms.length === 1 && skillName === includeTerms[0]) {
|
|
16369
|
-
exactBonus = 10;
|
|
16370
|
-
}
|
|
16371
|
-
const totalScore = nameMatches * 3 + descMatches * 1 + exactBonus;
|
|
16372
|
-
return { skill, nameMatches, descMatches, totalScore };
|
|
16373
|
-
}
|
|
16374
|
-
shouldIncludeSkill(skill, excludeTerms) {
|
|
16375
|
-
if (excludeTerms.length === 0) {
|
|
16376
|
-
return true;
|
|
16377
|
-
}
|
|
16378
|
-
const haystack = `${skill.name} ${skill.description}`.toLowerCase();
|
|
16379
|
-
return !excludeTerms.some((term) => haystack.includes(term));
|
|
16380
|
-
}
|
|
16381
|
-
generateFeedback(query, matchCount) {
|
|
16382
|
-
const parts = [];
|
|
16383
|
-
if (query.include.length > 0) {
|
|
16384
|
-
parts.push(`\uD83D\uDCDD Searching for: **${query.include.join(", ")}**`);
|
|
16385
|
-
}
|
|
16386
|
-
if (query.hasExclusions) {
|
|
16387
|
-
parts.push(`\uD83D\uDEAB Excluding: **${query.exclude.join(", ")}**`);
|
|
16388
|
-
}
|
|
16389
|
-
if (matchCount === 0) {
|
|
16390
|
-
parts.push(`\u274C No matches found`);
|
|
16391
|
-
} else if (matchCount === 1) {
|
|
16392
|
-
parts.push(`\u2705 Found 1 match`);
|
|
16393
|
-
} else {
|
|
16394
|
-
parts.push(`\u2705 Found ${matchCount} matches`);
|
|
16395
|
-
}
|
|
16396
|
-
return parts.join(" | ");
|
|
16397
|
-
}
|
|
16398
|
-
search(queryString) {
|
|
16399
|
-
const query = this.parseQuery(queryString);
|
|
16400
|
-
if (query.include.length === 0) {
|
|
16401
|
-
return {
|
|
16402
|
-
matches: [],
|
|
16403
|
-
totalMatches: 0,
|
|
16404
|
-
feedback: this.generateFeedback(query, 0),
|
|
16405
|
-
query
|
|
16406
|
-
};
|
|
16407
|
-
}
|
|
16408
|
-
let results = this.skills.filter((skill) => {
|
|
16409
|
-
const haystack = `${skill.name} ${skill.description}`.toLowerCase();
|
|
16410
|
-
return query.include.every((term) => haystack.includes(term));
|
|
16411
|
-
});
|
|
16412
|
-
const totalMatches = results.length;
|
|
16413
|
-
results = results.filter((skill) => this.shouldIncludeSkill(skill, query.exclude));
|
|
16414
|
-
const ranked = results.map((skill) => this.rankSkill(skill, query.include)).sort((a, b) => {
|
|
16415
|
-
if (b.totalScore !== a.totalScore) {
|
|
16416
|
-
return b.totalScore - a.totalScore;
|
|
16417
|
-
}
|
|
16418
|
-
if (b.nameMatches !== a.nameMatches) {
|
|
16419
|
-
return b.nameMatches - a.nameMatches;
|
|
16420
|
-
}
|
|
16421
|
-
return a.skill.name.localeCompare(b.skill.name);
|
|
16422
|
-
});
|
|
16423
|
-
const matches = ranked.map((r) => r.skill);
|
|
16424
|
-
const feedback = this.generateFeedback(query, matches.length);
|
|
16425
|
-
return {
|
|
16426
|
-
matches,
|
|
16427
|
-
totalMatches,
|
|
16428
|
-
feedback,
|
|
16429
|
-
query
|
|
16430
|
-
};
|
|
16431
|
-
}
|
|
16432
|
-
}
|
|
16433
|
-
function createSkillRegistryController() {
|
|
16434
|
-
const registry2 = new Map;
|
|
17999
|
+
// node_modules/env-paths/index.js
|
|
18000
|
+
import path2 from "path";
|
|
18001
|
+
import os from "os";
|
|
18002
|
+
import process from "process";
|
|
18003
|
+
var homedir = os.homedir();
|
|
18004
|
+
var tmpdir = os.tmpdir();
|
|
18005
|
+
var { env } = process;
|
|
18006
|
+
var macos = (name) => {
|
|
18007
|
+
const library = path2.join(homedir, "Library");
|
|
16435
18008
|
return {
|
|
16436
|
-
|
|
16437
|
-
|
|
16438
|
-
|
|
16439
|
-
|
|
16440
|
-
|
|
16441
|
-
},
|
|
16442
|
-
search: (...args) => {
|
|
16443
|
-
const results = [];
|
|
16444
|
-
const query = args.map((a) => a.toLowerCase());
|
|
16445
|
-
for (const skill of registry2.values()) {
|
|
16446
|
-
const haystack = `${skill.name} ${skill.description}`.toLowerCase();
|
|
16447
|
-
if (query.every((q) => haystack.includes(q))) {
|
|
16448
|
-
results.push(skill);
|
|
16449
|
-
}
|
|
16450
|
-
}
|
|
16451
|
-
return results;
|
|
16452
|
-
}
|
|
18009
|
+
data: path2.join(library, "Application Support", name),
|
|
18010
|
+
config: path2.join(library, "Preferences", name),
|
|
18011
|
+
cache: path2.join(library, "Caches", name),
|
|
18012
|
+
log: path2.join(library, "Logs", name),
|
|
18013
|
+
temp: path2.join(tmpdir, name)
|
|
16453
18014
|
};
|
|
16454
|
-
}
|
|
16455
|
-
var
|
|
16456
|
-
|
|
16457
|
-
|
|
16458
|
-
|
|
16459
|
-
|
|
16460
|
-
|
|
16461
|
-
|
|
16462
|
-
|
|
16463
|
-
|
|
16464
|
-
}
|
|
16465
|
-
async function findSkillPaths(basePaths) {
|
|
16466
|
-
const basePathsArray = Array.isArray(basePaths) ? basePaths : [basePaths];
|
|
16467
|
-
try {
|
|
16468
|
-
const paths = [];
|
|
16469
|
-
for (const basePath of basePathsArray) {
|
|
16470
|
-
const stat = await lstat(basePath).catch(() => null);
|
|
16471
|
-
if (!stat?.isDirectory()) {
|
|
16472
|
-
continue;
|
|
16473
|
-
}
|
|
16474
|
-
paths.push(basePath);
|
|
16475
|
-
}
|
|
16476
|
-
const patterns = paths.map((basePath) => join(basePath, "**/SKILL.md"));
|
|
16477
|
-
const matches = await fsPromises.glob(patterns);
|
|
16478
|
-
return matches;
|
|
16479
|
-
} catch {
|
|
16480
|
-
return [];
|
|
16481
|
-
}
|
|
16482
|
-
}
|
|
16483
|
-
async function parseSkill(skillPath) {
|
|
16484
|
-
try {
|
|
16485
|
-
const relativePath = skillPath.match(SKILL_PATH_PATTERN)?.[0];
|
|
16486
|
-
if (!relativePath) {
|
|
16487
|
-
console.error(`\u274C Skill path does not match expected pattern: ${skillPath}`);
|
|
16488
|
-
return null;
|
|
16489
|
-
}
|
|
16490
|
-
const content = await Bun.file(skillPath).text();
|
|
16491
|
-
const parsed = import_gray_matter.default(content);
|
|
16492
|
-
const frontmatter = SkillFrontmatterSchema.safeParse(parsed.data);
|
|
16493
|
-
if (!frontmatter.success) {
|
|
16494
|
-
console.error(`\u274C Invalid frontmatter in ${skillPath}:`);
|
|
16495
|
-
frontmatter.error.flatten().formErrors.forEach((err) => {
|
|
16496
|
-
console.error(` - ${err}`);
|
|
16497
|
-
});
|
|
16498
|
-
return null;
|
|
16499
|
-
}
|
|
16500
|
-
const skillDir = basename(dirname(skillPath));
|
|
16501
|
-
if (frontmatter.data.name !== skillDir) {
|
|
16502
|
-
console.error(`\u274C Name mismatch in ${skillPath}:`, `
|
|
16503
|
-
Frontmatter name: "${frontmatter.data.name}"`, `
|
|
16504
|
-
Directory name: "${skillDir}"`, `
|
|
16505
|
-
Fix: Update the 'name' field in SKILL.md to match the directory name`);
|
|
16506
|
-
return null;
|
|
16507
|
-
}
|
|
16508
|
-
return {
|
|
16509
|
-
allowedTools: frontmatter.data["allowed-tools"],
|
|
16510
|
-
content: parsed.content.trim(),
|
|
16511
|
-
description: frontmatter.data.description,
|
|
16512
|
-
fullPath: dirname(skillPath),
|
|
16513
|
-
toolName: toolName(relativePath),
|
|
16514
|
-
license: frontmatter.data.license,
|
|
16515
|
-
metadata: frontmatter.data.metadata,
|
|
16516
|
-
name: frontmatter.data.name,
|
|
16517
|
-
path: skillPath
|
|
16518
|
-
};
|
|
16519
|
-
} catch (error45) {
|
|
16520
|
-
console.error(`\u274C Error parsing skill ${skillPath}:`, error45 instanceof Error ? error45.message : String(error45));
|
|
16521
|
-
return null;
|
|
16522
|
-
}
|
|
16523
|
-
}
|
|
16524
|
-
function createInstructionInjector(ctx) {
|
|
16525
|
-
const sendPrompt = async (text, props) => {
|
|
16526
|
-
ctx.client.session.prompt({
|
|
16527
|
-
path: { id: props.sessionId },
|
|
16528
|
-
body: {
|
|
16529
|
-
noReply: true,
|
|
16530
|
-
parts: [{ type: "text", text }]
|
|
16531
|
-
}
|
|
16532
|
-
});
|
|
18015
|
+
};
|
|
18016
|
+
var windows = (name) => {
|
|
18017
|
+
const appData = env.APPDATA || path2.join(homedir, "AppData", "Roaming");
|
|
18018
|
+
const localAppData = env.LOCALAPPDATA || path2.join(homedir, "AppData", "Local");
|
|
18019
|
+
return {
|
|
18020
|
+
data: path2.join(localAppData, name, "Data"),
|
|
18021
|
+
config: path2.join(appData, name, "Config"),
|
|
18022
|
+
cache: path2.join(localAppData, name, "Cache"),
|
|
18023
|
+
log: path2.join(localAppData, name, "Log"),
|
|
18024
|
+
temp: path2.join(tmpdir, name)
|
|
16533
18025
|
};
|
|
16534
|
-
|
|
16535
|
-
|
|
16536
|
-
|
|
16537
|
-
|
|
16538
|
-
|
|
16539
|
-
|
|
16540
|
-
|
|
16541
|
-
|
|
16542
|
-
|
|
16543
|
-
|
|
16544
|
-
|
|
16545
|
-
|
|
16546
|
-
|
|
16547
|
-
}
|
|
16548
|
-
async function loadSkills(skillNames, manager, options2) {
|
|
16549
|
-
const loaded = [];
|
|
16550
|
-
const notFound = [];
|
|
16551
|
-
for (const skillName of skillNames) {
|
|
16552
|
-
let skill = manager.byFQDN.get(skillName);
|
|
16553
|
-
if (!skill) {
|
|
16554
|
-
skill = manager.byName.get(skillName);
|
|
16555
|
-
}
|
|
16556
|
-
if (!skill) {
|
|
16557
|
-
notFound.push(skillName);
|
|
16558
|
-
continue;
|
|
16559
|
-
}
|
|
16560
|
-
await loadSkill(skill, {
|
|
16561
|
-
ctx: options2.ctx,
|
|
16562
|
-
sessionID: options2.sessionID
|
|
16563
|
-
});
|
|
16564
|
-
loaded.push(skill.toolName);
|
|
18026
|
+
};
|
|
18027
|
+
var linux = (name) => {
|
|
18028
|
+
const username = path2.basename(homedir);
|
|
18029
|
+
return {
|
|
18030
|
+
data: path2.join(env.XDG_DATA_HOME || path2.join(homedir, ".local", "share"), name),
|
|
18031
|
+
config: path2.join(env.XDG_CONFIG_HOME || path2.join(homedir, ".config"), name),
|
|
18032
|
+
cache: path2.join(env.XDG_CACHE_HOME || path2.join(homedir, ".cache"), name),
|
|
18033
|
+
log: path2.join(env.XDG_STATE_HOME || path2.join(homedir, ".local", "state"), name),
|
|
18034
|
+
temp: path2.join(tmpdir, username, name)
|
|
18035
|
+
};
|
|
18036
|
+
};
|
|
18037
|
+
function envPaths(name, { suffix = "nodejs" } = {}) {
|
|
18038
|
+
if (typeof name !== "string") {
|
|
18039
|
+
throw new TypeError(`Expected a string, got ${typeof name}`);
|
|
16565
18040
|
}
|
|
16566
|
-
|
|
16567
|
-
}
|
|
16568
|
-
function createUseSkillsTool(ctx, registry2) {
|
|
16569
|
-
return tool({
|
|
16570
|
-
description: "Load one or more skills into the chat. Provide an array of skill names to load them as user messages.",
|
|
16571
|
-
args: {
|
|
16572
|
-
skill_names: tool.schema.array(tool.schema.string()).min(1, "Must provide at least one skill name")
|
|
16573
|
-
},
|
|
16574
|
-
execute: async (args, toolCtx) => {
|
|
16575
|
-
const response = await loadSkills(args.skill_names, registry2, {
|
|
16576
|
-
ctx,
|
|
16577
|
-
sessionID: toolCtx.sessionID
|
|
16578
|
-
});
|
|
16579
|
-
let result = `Loaded ${response.loaded.length} skill(s): ${response.loaded.join(", ")}`;
|
|
16580
|
-
if (response.notFound.length > 0) {
|
|
16581
|
-
result += `
|
|
16582
|
-
|
|
16583
|
-
Skills not found: ${response.notFound.join(", ")}`;
|
|
16584
|
-
}
|
|
16585
|
-
return result;
|
|
16586
|
-
}
|
|
16587
|
-
});
|
|
16588
|
-
}
|
|
16589
|
-
function normalizePathQuery(query) {
|
|
16590
|
-
return query.replace(/[/-]/g, "_").toLowerCase();
|
|
16591
|
-
}
|
|
16592
|
-
function stripSkillsPrefix(toolName2) {
|
|
16593
|
-
return toolName2.replace(/^skills_/, "");
|
|
16594
|
-
}
|
|
16595
|
-
function createFindSkillsTool(ctx, registry2) {
|
|
16596
|
-
return tool({
|
|
16597
|
-
description: "Search for skills using natural query syntax. Supports path prefixes (e.g., 'experts', 'superpowers/writing'), negation (-term), quoted phrases, and free text. Use '*' to list all skills.",
|
|
16598
|
-
args: {
|
|
16599
|
-
query: tool.schema.string()
|
|
16600
|
-
},
|
|
16601
|
-
execute: async (args) => {
|
|
16602
|
-
const allSkills = Array.from(registry2.byName.registry.values());
|
|
16603
|
-
const query = args.query.trim();
|
|
16604
|
-
if (query === "" || query === "*") {
|
|
16605
|
-
const resultsList2 = allSkills.sort((a, b) => a.toolName.localeCompare(b.toolName)).map((m) => `- **${m.name}** \`${m.toolName}\`
|
|
16606
|
-
${m.description}`).join(`
|
|
16607
|
-
`);
|
|
16608
|
-
return `Found ${allSkills.length} skill(s):
|
|
16609
|
-
|
|
16610
|
-
${resultsList2}`;
|
|
16611
|
-
}
|
|
16612
|
-
const normalizedQuery = normalizePathQuery(query);
|
|
16613
|
-
const prefixMatches = allSkills.filter((skill) => {
|
|
16614
|
-
const shortName = stripSkillsPrefix(skill.toolName);
|
|
16615
|
-
return shortName.startsWith(normalizedQuery);
|
|
16616
|
-
});
|
|
16617
|
-
if (prefixMatches.length > 0) {
|
|
16618
|
-
const resultsList2 = prefixMatches.sort((a, b) => a.toolName.localeCompare(b.toolName)).map((m) => `- **${m.name}** \`${m.toolName}\`
|
|
16619
|
-
${m.description}`).join(`
|
|
16620
|
-
`);
|
|
16621
|
-
return `Found ${prefixMatches.length} skill(s) matching path "${query}":
|
|
16622
|
-
|
|
16623
|
-
${resultsList2}`;
|
|
16624
|
-
}
|
|
16625
|
-
const searcher = new SkillSearcher(allSkills);
|
|
16626
|
-
const result = searcher.search(query);
|
|
16627
|
-
if (result.matches.length === 0) {
|
|
16628
|
-
return `${result.feedback}
|
|
16629
|
-
|
|
16630
|
-
No skills found matching "${query}"`;
|
|
16631
|
-
}
|
|
16632
|
-
const resultsList = result.matches.map((m) => `- **${m.name}** \`${m.toolName}\`
|
|
16633
|
-
${m.description}`).join(`
|
|
16634
|
-
`);
|
|
16635
|
-
return `${result.feedback}
|
|
16636
|
-
|
|
16637
|
-
${resultsList}`;
|
|
16638
|
-
}
|
|
16639
|
-
});
|
|
16640
|
-
}
|
|
16641
|
-
function createToolResourceReader(ctx, registry2) {
|
|
16642
|
-
const sendPrompt = createInstructionInjector(ctx);
|
|
16643
|
-
return tool({
|
|
16644
|
-
description: "Read [[<relative_path>]] from a skill's resources and inject content silently. If loading skills, use the skills_<skillname> instead.",
|
|
16645
|
-
args: {
|
|
16646
|
-
skill_name: tool.schema.string(),
|
|
16647
|
-
relative_path: tool.schema.string()
|
|
16648
|
-
},
|
|
16649
|
-
execute: async (args, toolCtx) => {
|
|
16650
|
-
let skill = registry2.byFQDN.get(args.skill_name) || registry2.byName.get(args.skill_name);
|
|
16651
|
-
if (!skill) {
|
|
16652
|
-
throw new Error(`Skill not found: ${args.skill_name}`);
|
|
16653
|
-
}
|
|
16654
|
-
const resourcePath = join(skill.fullPath, args.relative_path);
|
|
16655
|
-
try {
|
|
16656
|
-
const content = await Bun.file(resourcePath).text();
|
|
16657
|
-
await sendPrompt(`Resource loaded from skill "${skill.name}": ${args.relative_path}
|
|
16658
|
-
|
|
16659
|
-
${content}`, { sessionId: toolCtx.sessionID });
|
|
16660
|
-
return `Resource "${args.relative_path}" from skill "${skill.name}" has been loaded successfully.`;
|
|
16661
|
-
} catch (error45) {
|
|
16662
|
-
throw new Error(`Failed to read resource at ${resourcePath}: ${error45 instanceof Error ? error45.message : String(error45)}`);
|
|
16663
|
-
}
|
|
16664
|
-
}
|
|
16665
|
-
});
|
|
16666
|
-
}
|
|
16667
|
-
async function createSkillRegistry(ctx, config2) {
|
|
16668
|
-
const byFQDN = createSkillRegistryController();
|
|
16669
|
-
const byName = createSkillRegistryController();
|
|
16670
|
-
const matches = await findSkillPaths(config2.basePaths);
|
|
16671
|
-
const dupes = [];
|
|
16672
|
-
for await (const match of matches) {
|
|
16673
|
-
const skill = await parseSkill(match);
|
|
16674
|
-
if (!skill) {
|
|
16675
|
-
continue;
|
|
16676
|
-
}
|
|
16677
|
-
if (byFQDN.has(skill.toolName)) {
|
|
16678
|
-
dupes.push(skill.toolName);
|
|
16679
|
-
continue;
|
|
16680
|
-
}
|
|
16681
|
-
byName.add(skill.name, skill);
|
|
16682
|
-
byFQDN.add(skill.toolName, skill);
|
|
18041
|
+
if (suffix) {
|
|
18042
|
+
name += `-${suffix}`;
|
|
16683
18043
|
}
|
|
16684
|
-
if (
|
|
16685
|
-
|
|
18044
|
+
if (process.platform === "darwin") {
|
|
18045
|
+
return macos(name);
|
|
16686
18046
|
}
|
|
16687
|
-
|
|
16688
|
-
|
|
16689
|
-
const resultsByFQDN = byFQDN.search(query);
|
|
16690
|
-
const allResults = [...resultsByName, ...resultsByFQDN];
|
|
16691
|
-
const uniqueResultsMap = new Map;
|
|
16692
|
-
for (const skill of allResults) {
|
|
16693
|
-
uniqueResultsMap.set(skill.toolName, skill);
|
|
16694
|
-
}
|
|
16695
|
-
return Array.from(uniqueResultsMap.values());
|
|
18047
|
+
if (process.platform === "win32") {
|
|
18048
|
+
return windows(name);
|
|
16696
18049
|
}
|
|
16697
|
-
return
|
|
16698
|
-
byName,
|
|
16699
|
-
byFQDN,
|
|
16700
|
-
search
|
|
16701
|
-
};
|
|
18050
|
+
return linux(name);
|
|
16702
18051
|
}
|
|
18052
|
+
|
|
18053
|
+
// src/config.ts
|
|
16703
18054
|
var OpenCodePaths = envPaths("opencode", { suffix: "" });
|
|
16704
18055
|
async function getPluginConfig(ctx) {
|
|
16705
18056
|
const base = {
|
|
16706
18057
|
debug: false,
|
|
16707
18058
|
basePaths: [
|
|
16708
|
-
|
|
16709
|
-
|
|
16710
|
-
join(ctx.directory, ".opencode/skills")
|
|
18059
|
+
join2(OpenCodePaths.config, "skills"),
|
|
18060
|
+
join2(ctx.directory, ".opencode", "skills")
|
|
16711
18061
|
]
|
|
16712
18062
|
};
|
|
16713
18063
|
return mergeDeepLeft_default({}, base);
|
|
16714
18064
|
}
|
|
18065
|
+
|
|
18066
|
+
// src/lib/xml.ts
|
|
18067
|
+
function escapeXml(str2) {
|
|
18068
|
+
return String(str2).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
18069
|
+
}
|
|
18070
|
+
function jsonToXml(json2, rootElement = "root") {
|
|
18071
|
+
let xml = `<${rootElement}>`;
|
|
18072
|
+
for (const key in json2) {
|
|
18073
|
+
if (!Object.hasOwn(json2, key)) {
|
|
18074
|
+
continue;
|
|
18075
|
+
}
|
|
18076
|
+
if (typeof key !== "string") {
|
|
18077
|
+
continue;
|
|
18078
|
+
}
|
|
18079
|
+
const value = Object.getOwnPropertyDescriptor(json2, key)?.value;
|
|
18080
|
+
if (Array.isArray(value)) {
|
|
18081
|
+
for (const item of value) {
|
|
18082
|
+
xml += jsonToXml(item, key);
|
|
18083
|
+
}
|
|
18084
|
+
} else if (typeof value === "object" && value !== null) {
|
|
18085
|
+
xml += jsonToXml(value, key);
|
|
18086
|
+
} else if (value !== undefined && value !== null) {
|
|
18087
|
+
xml += `<${key}>${escapeXml(String(value))}</${key}>`;
|
|
18088
|
+
} else {
|
|
18089
|
+
xml += `<${key}/>`;
|
|
18090
|
+
}
|
|
18091
|
+
}
|
|
18092
|
+
xml += `</${rootElement}>`;
|
|
18093
|
+
return xml;
|
|
18094
|
+
}
|
|
18095
|
+
|
|
18096
|
+
// src/index.ts
|
|
16715
18097
|
var SkillsPlugin = async (ctx) => {
|
|
16716
18098
|
const config2 = await getPluginConfig(ctx);
|
|
16717
|
-
const
|
|
18099
|
+
const api2 = await createApi(config2);
|
|
18100
|
+
const sendPrompt = createInstructionInjector(ctx);
|
|
18101
|
+
api2.registry.initialise();
|
|
16718
18102
|
return {
|
|
16719
18103
|
tool: {
|
|
16720
|
-
skill_use:
|
|
16721
|
-
|
|
16722
|
-
|
|
18104
|
+
skill_use: tool({
|
|
18105
|
+
description: "Load one or more skills into the chat. Provide an array of skill names to load them as user messages.",
|
|
18106
|
+
args: {
|
|
18107
|
+
skill_names: tool.schema.array(tool.schema.string()).describe("An array of skill names to load.")
|
|
18108
|
+
},
|
|
18109
|
+
execute: async (args, toolCtx) => {
|
|
18110
|
+
const results = await api2.loadSkill(args.skill_names);
|
|
18111
|
+
for await (const skill of results.loaded) {
|
|
18112
|
+
await sendPrompt(jsonToXml(skill, "Skill"), { sessionId: toolCtx.sessionID });
|
|
18113
|
+
}
|
|
18114
|
+
return JSON.stringify({
|
|
18115
|
+
loaded: results.loaded.map((skill) => skill.toolName),
|
|
18116
|
+
not_found: results.notFound
|
|
18117
|
+
});
|
|
18118
|
+
}
|
|
18119
|
+
}),
|
|
18120
|
+
skill_find: tool({
|
|
18121
|
+
description: `Search for skills using natural query syntax`,
|
|
18122
|
+
args: {
|
|
18123
|
+
query: tool.schema.union([tool.schema.string(), tool.schema.array(tool.schema.string())]).describe("The search query string or array of strings.")
|
|
18124
|
+
},
|
|
18125
|
+
execute: async (args) => {
|
|
18126
|
+
const results = await api2.findSkills(args);
|
|
18127
|
+
const output = jsonToXml(results, "SkillSearchResults");
|
|
18128
|
+
return output;
|
|
18129
|
+
}
|
|
18130
|
+
}),
|
|
18131
|
+
skill_resource: tool({
|
|
18132
|
+
description: `Read a resource file from a skill.`,
|
|
18133
|
+
args: {
|
|
18134
|
+
skill_name: tool.schema.string().describe("The skill id to read the resource from."),
|
|
18135
|
+
relative_path: tool.schema.string().describe("The relative path to the resource file within the skill directory.")
|
|
18136
|
+
},
|
|
18137
|
+
execute: async (args, toolCtx) => {
|
|
18138
|
+
const result = await api2.readResource(args);
|
|
18139
|
+
if (!result.injection) {
|
|
18140
|
+
throw new Error("Failed to read resource");
|
|
18141
|
+
}
|
|
18142
|
+
await sendPrompt(jsonToXml(result.injection), { sessionId: toolCtx.sessionID });
|
|
18143
|
+
return JSON.stringify({
|
|
18144
|
+
result: "Resource injected successfully",
|
|
18145
|
+
resource_path: result.injection.resource_path,
|
|
18146
|
+
resource_mimetype: result.injection.resource_mimetype
|
|
18147
|
+
});
|
|
18148
|
+
}
|
|
18149
|
+
})
|
|
16723
18150
|
}
|
|
16724
18151
|
};
|
|
16725
18152
|
};
|