skilld 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +13 -0
  2. package/dist/_chunks/chunk.mjs +13 -0
  3. package/dist/_chunks/config.mjs +25 -0
  4. package/dist/_chunks/config.mjs.map +1 -0
  5. package/dist/_chunks/detect-imports.mjs +2002 -0
  6. package/dist/_chunks/detect-imports.mjs.map +1 -0
  7. package/dist/_chunks/embedding-cache.mjs +50 -0
  8. package/dist/_chunks/embedding-cache.mjs.map +1 -0
  9. package/dist/_chunks/npm.mjs +1941 -0
  10. package/dist/_chunks/npm.mjs.map +1 -0
  11. package/dist/_chunks/pool2.mjs +120 -0
  12. package/dist/_chunks/pool2.mjs.map +1 -0
  13. package/dist/_chunks/storage.mjs +436 -0
  14. package/dist/_chunks/storage.mjs.map +1 -0
  15. package/dist/_chunks/types.d.mts +90 -0
  16. package/dist/_chunks/types.d.mts.map +1 -0
  17. package/dist/_chunks/utils.d.mts +541 -0
  18. package/dist/_chunks/utils.d.mts.map +1 -0
  19. package/dist/_chunks/version.d.mts +153 -0
  20. package/dist/_chunks/version.d.mts.map +1 -0
  21. package/dist/_chunks/yaml.mjs +468 -0
  22. package/dist/_chunks/yaml.mjs.map +1 -0
  23. package/dist/agent/index.d.mts +316 -1
  24. package/dist/agent/index.d.mts.map +1 -0
  25. package/dist/agent/index.mjs +6 -1
  26. package/dist/cache/index.d.mts +2 -1
  27. package/dist/cache/index.mjs +3 -1
  28. package/dist/cli.d.mts +1 -1
  29. package/dist/cli.mjs +4234 -1
  30. package/dist/cli.mjs.map +1 -0
  31. package/dist/index.d.mts +6 -1
  32. package/dist/index.mjs +10 -1
  33. package/dist/retriv/index.d.mts +26 -1
  34. package/dist/retriv/index.d.mts.map +1 -0
  35. package/dist/retriv/index.mjs +109 -1
  36. package/dist/retriv/index.mjs.map +1 -0
  37. package/dist/retriv/worker.d.mts +33 -1
  38. package/dist/retriv/worker.d.mts.map +1 -0
  39. package/dist/retriv/worker.mjs +51 -1
  40. package/dist/retriv/worker.mjs.map +1 -0
  41. package/dist/sources/index.d.mts +2 -1
  42. package/dist/sources/index.mjs +4 -1
  43. package/dist/types.d.mts +6 -1
  44. package/dist/types.mjs +1 -1
  45. package/package.json +2 -1
@@ -0,0 +1,153 @@
1
+ //#region src/cache/config.d.ts
2
+ /**
3
+ * Cache configuration
4
+ */
5
+ /** Global cache directory */
6
+ declare const CACHE_DIR: string;
7
+ /** References subdirectory */
8
+ declare const REFERENCES_DIR: string;
9
+ /** Get search DB path for a specific package@version */
10
+ declare function getPackageDbPath(name: string, version: string): string;
11
+ //#endregion
12
+ //#region src/cache/types.d.ts
13
+ /**
14
+ * Cache types
15
+ */
16
+ interface CacheConfig {
17
+ /** Package name */
18
+ name: string;
19
+ /** Package version (full semver) */
20
+ version: string;
21
+ }
22
+ interface CachedPackage {
23
+ name: string;
24
+ version: string;
25
+ dir: string;
26
+ }
27
+ interface CachedDoc {
28
+ path: string;
29
+ content: string;
30
+ }
31
+ //#endregion
32
+ //#region src/cache/storage.d.ts
33
+ /**
34
+ * Check if package is cached at given version
35
+ */
36
+ declare function isCached(name: string, version: string): boolean;
37
+ /**
38
+ * Ensure cache directories exist
39
+ */
40
+ declare function ensureCacheDir(): void;
41
+ /**
42
+ * Write docs to cache
43
+ */
44
+ declare function writeToCache(name: string, version: string, docs: CachedDoc[]): string;
45
+ /**
46
+ * Create symlink from .skilld dir to a cached subdirectory.
47
+ * Unified handler for docs, issues, discussions, sections, releases.
48
+ *
49
+ * Structure:
50
+ * .claude/skills/<skill>/.skilld/<subdir> -> ~/.skilld/references/<pkg>@<version>/<subdir>
51
+ *
52
+ * The .skilld/ dirs are gitignored. After clone, `skilld install` recreates from lockfile.
53
+ */
54
+ declare function linkCachedDir(skillDir: string, name: string, version: string, subdir: string): void;
55
+ /**
56
+ * Resolve the package directory: node_modules first, then cached dist fallback.
57
+ * Returns the path if found, null otherwise.
58
+ */
59
+ declare function resolvePkgDir(name: string, cwd: string, version?: string): string | null;
60
+ /**
61
+ * Create symlink from .skilld dir to package directory
62
+ *
63
+ * Structure:
64
+ * .claude/skills/<skill>/.skilld/pkg -> node_modules/<pkg> OR ~/.skilld/references/<pkg>@<version>/pkg
65
+ *
66
+ * This gives access to package.json, README.md, dist/, and any shipped docs/
67
+ */
68
+ declare function linkPkg(skillDir: string, name: string, cwd: string, version?: string): void;
69
+ /**
70
+ * Create named symlink from .skilld dir to package directory.
71
+ * Short name = last segment of package name (e.g., @vue/reactivity → pkg-reactivity)
72
+ *
73
+ * Structure:
74
+ * .claude/skills/<skill>/.skilld/pkg-<short> -> node_modules/<pkg>
75
+ */
76
+ declare function linkPkgNamed(skillDir: string, name: string, cwd: string, version?: string): void;
77
+ /**
78
+ * Get key files from a package directory for display
79
+ * Returns entry points + docs files
80
+ */
81
+ declare function getPkgKeyFiles(name: string, cwd: string, version?: string): string[];
82
+ /**
83
+ * Check if package ships its own docs folder
84
+ */
85
+ interface ShippedSkill {
86
+ skillName: string;
87
+ skillDir: string;
88
+ }
89
+ /**
90
+ * Check if package ships a skills/ directory with SKILL.md or _SKILL.md subdirs
91
+ */
92
+ declare function getShippedSkills(name: string, cwd: string, version?: string): ShippedSkill[];
93
+ /**
94
+ * Write LLM-generated section outputs to global cache for cross-project reuse
95
+ *
96
+ * Structure:
97
+ * ~/.skilld/references/<pkg>@<version>/sections/_BEST_PRACTICES.md
98
+ */
99
+ declare function writeSections(name: string, version: string, sections: Array<{
100
+ file: string;
101
+ content: string;
102
+ }>): void;
103
+ /**
104
+ * Read a cached section from the global references dir
105
+ */
106
+ declare function readCachedSection(name: string, version: string, file: string): string | null;
107
+ /**
108
+ * Create symlink from skills dir to shipped skill dir
109
+ */
110
+ declare function linkShippedSkill(baseDir: string, skillName: string, targetDir: string): void;
111
+ declare function hasShippedDocs(name: string, cwd: string, version?: string): boolean;
112
+ /**
113
+ * List all cached packages
114
+ */
115
+ declare function listCached(): CachedPackage[];
116
+ /**
117
+ * Read cached docs for a package
118
+ */
119
+ declare function readCachedDocs(name: string, version: string): CachedDoc[];
120
+ /**
121
+ * Clear cache for a specific package
122
+ */
123
+ declare function clearCache(name: string, version: string): boolean;
124
+ /**
125
+ * Clear all cache
126
+ */
127
+ declare function clearAllCache(): number;
128
+ /**
129
+ * List files in .skilld directory (pkg + docs) as relative paths for prompt context
130
+ * Returns paths like ./.skilld/pkg/README.md, ./.skilld/docs/api.md
131
+ */
132
+ declare function listReferenceFiles(skillDir: string, maxDepth?: number): string[];
133
+ //#endregion
134
+ //#region src/cache/version.d.ts
135
+ /**
136
+ * Version utilities
137
+ */
138
+ /**
139
+ * Get exact version key for cache keying
140
+ */
141
+ declare function getVersionKey(version: string): string;
142
+ /**
143
+ * Get cache key for a package: name@version
144
+ */
145
+ declare function getCacheKey(name: string, version: string): string;
146
+ /**
147
+ * Get path to cached package references.
148
+ * Validates name/version to prevent path traversal.
149
+ */
150
+ declare function getCacheDir(name: string, version: string): string;
151
+ //#endregion
152
+ export { CacheConfig as C, REFERENCES_DIR as D, CACHE_DIR as E, getPackageDbPath as O, writeToCache as S, CachedPackage as T, listReferenceFiles as _, clearAllCache as a, resolvePkgDir as b, getPkgKeyFiles as c, isCached as d, linkCachedDir as f, listCached as g, linkShippedSkill as h, ShippedSkill as i, getShippedSkills as l, linkPkgNamed as m, getCacheKey as n, clearCache as o, linkPkg as p, getVersionKey as r, ensureCacheDir as s, getCacheDir as t, hasShippedDocs as u, readCachedDocs as v, CachedDoc as w, writeSections as x, readCachedSection as y };
153
+ //# sourceMappingURL=version.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.mts","names":[],"sources":["../../src/cache/config.ts","../../src/cache/types.ts","../../src/cache/storage.ts","../../src/cache/version.ts"],"mappings":";;AASA;;;cAAa,SAAA;;cAGA,cAAA;;iBAGG,gBAAA,CAAiB,IAAA,UAAc,OAAA;;;;AAN/C;;UCLiB,WAAA;EDKkC;ECHjD,IAAA;EDMW;ECJX,OAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,OAAA;EACA,GAAA;AAAA;AAAA,UAGe,SAAA;EACf,IAAA;EACA,OAAA;AAAA;;;;;ADPF;iBEiBgB,QAAA,CAAS,IAAA,UAAc,OAAA;;;;iBAOvB,cAAA,CAAA;;;;iBAOA,YAAA,CACd,IAAA,UACA,OAAA,UACA,IAAA,EAAM,SAAA;;;;AD1CR;;;;;AAOA;iBC0DgB,aAAA,CAAc,QAAA,UAAkB,IAAA,UAAc,OAAA,UAAiB,MAAA;;;;;iBAiB/D,aAAA,CAAc,IAAA,UAAc,GAAA,UAAa,OAAA;;;ADrEzD;;;;;;iBC4FgB,OAAA,CAAQ,QAAA,UAAkB,IAAA,UAAc,GAAA,UAAa,OAAA;;AAhFrE;;;;;AAOA;iBA+FgB,YAAA,CAAa,QAAA,UAAkB,IAAA,UAAc,GAAA,UAAa,OAAA;;;;AAxF1E;iBA2GgB,cAAA,CAAe,IAAA,UAAc,GAAA,UAAa,OAAA;;;;UA8BzC,YAAA;EACf,SAAA;EACA,QAAA;AAAA;;AAjHF;;iBAuHgB,gBAAA,CAAiB,IAAA,UAAc,GAAA,UAAa,OAAA,YAAmB,YAAA;;;;;;;iBAoB/D,aAAA,CAAc,IAAA,UAAc,OAAA,UAAiB,QAAA,EAAU,KAAA;EAAQ,IAAA;EAAc,OAAA;AAAA;;;;iBAY7E,iBAAA,CAAkB,IAAA,UAAc,OAAA,UAAiB,IAAA;;;AA/GjE;iBAyHgB,gBAAA,CAAiB,OAAA,UAAiB,SAAA,UAAmB,SAAA;AAAA,iBAWrD,cAAA,CAAe,IAAA,UAAc,GAAA,UAAa,OAAA;;;;iBAiB1C,UAAA,CAAA,GAAc,aAAA;;;;iBAed,cAAA,CAAe,IAAA,UAAc,OAAA,WAAkB,SAAA;;;;iBA+B/C,UAAA,CAAW,IAAA,UAAc,OAAA;;;;iBAYzB,aAAA,CAAA;;AAtKhB;;;iBAkLgB,kBAAA,CAAmB,QAAA,UAAkB,QAAA;;;;AF/TrD;;;;;iBGOgB,aAAA,CAAc,OAAA;;;;iBAOd,WAAA,CAAY,IAAA,UAAc,OAAA;AHR1C;;;;AAAA,iBGgBgB,WAAA,CAAY,IAAA,UAAc,OAAA"}
@@ -0,0 +1,468 @@
1
+ import { join } from "pathe";
2
+ import { existsSync } from "node:fs";
3
+ const REPO_REGISTRY = {
4
+ "vuejs/core": {
5
+ owner: "vuejs",
6
+ repo: "core",
7
+ docsRepo: "docs",
8
+ docsPath: "src",
9
+ homepage: "https://vuejs.org",
10
+ packages: {
11
+ "vue": {
12
+ primary: true,
13
+ filePatterns: ["*.vue"]
14
+ },
15
+ "@vue/compiler-core": {},
16
+ "@vue/compiler-dom": {},
17
+ "@vue/reactivity": {},
18
+ "@vue/runtime-core": {},
19
+ "@vue/runtime-dom": {},
20
+ "@vue/shared": {}
21
+ },
22
+ blogReleases: [
23
+ {
24
+ version: "3.5",
25
+ url: "https://blog.vuejs.org/posts/vue-3-5",
26
+ date: "2024-09-01"
27
+ },
28
+ {
29
+ version: "3.4",
30
+ url: "https://blog.vuejs.org/posts/vue-3-4",
31
+ date: "2023-12-28"
32
+ },
33
+ {
34
+ version: "3.3",
35
+ url: "https://blog.vuejs.org/posts/vue-3-3",
36
+ date: "2023-05-11"
37
+ },
38
+ {
39
+ version: "3.2",
40
+ url: "https://blog.vuejs.org/posts/vue-3-2",
41
+ date: "2021-08-05"
42
+ },
43
+ {
44
+ version: "3.1",
45
+ url: "https://blog.vuejs.org/posts/vue-3-1",
46
+ date: "2021-06-07"
47
+ },
48
+ {
49
+ version: "3.0",
50
+ url: "https://blog.vuejs.org/posts/vue-3-0",
51
+ date: "2020-09-18"
52
+ }
53
+ ]
54
+ },
55
+ "tailwindlabs/tailwindcss": {
56
+ owner: "tailwindlabs",
57
+ repo: "tailwindcss",
58
+ docsRepo: "tailwindcss.com",
59
+ docsPath: "src/docs",
60
+ homepage: "https://tailwindcss.com",
61
+ packages: { tailwindcss: { primary: true } }
62
+ },
63
+ "withastro/astro": {
64
+ owner: "withastro",
65
+ repo: "astro",
66
+ docsRepo: "docs",
67
+ docsPath: "src/content/docs/en",
68
+ homepage: "https://docs.astro.build",
69
+ packages: { astro: {
70
+ primary: true,
71
+ filePatterns: ["*.astro"]
72
+ } }
73
+ },
74
+ "vueuse/vueuse": {
75
+ owner: "vueuse",
76
+ repo: "vueuse",
77
+ docsPath: "packages",
78
+ packages: { "@vueuse/core": { primary: true } }
79
+ },
80
+ "sveltejs/svelte": {
81
+ owner: "sveltejs",
82
+ repo: "svelte",
83
+ packages: { svelte: {
84
+ primary: true,
85
+ filePatterns: ["*.svelte"]
86
+ } }
87
+ },
88
+ "solidjs/solid": {
89
+ owner: "solidjs",
90
+ repo: "solid",
91
+ packages: { "solid-js": {
92
+ primary: true,
93
+ filePatterns: ["*.jsx", "*.tsx"]
94
+ } }
95
+ },
96
+ "QwikDev/qwik": {
97
+ owner: "QwikDev",
98
+ repo: "qwik",
99
+ packages: { qwik: {
100
+ primary: true,
101
+ filePatterns: ["*.tsx"]
102
+ } }
103
+ },
104
+ "marko-js/marko": {
105
+ owner: "marko-js",
106
+ repo: "marko",
107
+ packages: { marko: {
108
+ primary: true,
109
+ filePatterns: ["*.marko"]
110
+ } }
111
+ },
112
+ "riot/riot": {
113
+ owner: "riot",
114
+ repo: "riot",
115
+ packages: { riot: {
116
+ primary: true,
117
+ filePatterns: ["*.riot"]
118
+ } }
119
+ },
120
+ "microsoft/TypeScript": {
121
+ owner: "microsoft",
122
+ repo: "TypeScript",
123
+ packages: { typescript: {
124
+ primary: true,
125
+ filePatterns: [
126
+ "*.ts",
127
+ "*.tsx",
128
+ "*.mts",
129
+ "*.cts"
130
+ ]
131
+ } },
132
+ blogReleases: [
133
+ {
134
+ version: "6.0",
135
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/",
136
+ date: "2026-02-11",
137
+ title: "Announcing TypeScript 6.0 Beta"
138
+ },
139
+ {
140
+ version: "5.9",
141
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/",
142
+ date: "2025-08-01",
143
+ title: "Announcing TypeScript 5.9"
144
+ },
145
+ {
146
+ version: "5.8",
147
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/",
148
+ date: "2025-02-28",
149
+ title: "Announcing TypeScript 5.8"
150
+ },
151
+ {
152
+ version: "5.7",
153
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/",
154
+ date: "2024-11-22",
155
+ title: "Announcing TypeScript 5.7"
156
+ },
157
+ {
158
+ version: "5.6",
159
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/",
160
+ date: "2024-09-09",
161
+ title: "Announcing TypeScript 5.6"
162
+ },
163
+ {
164
+ version: "5.5",
165
+ url: "https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/",
166
+ date: "2024-06-20",
167
+ title: "Announcing TypeScript 5.5"
168
+ }
169
+ ]
170
+ },
171
+ "jashkenas/coffeescript": {
172
+ owner: "jashkenas",
173
+ repo: "coffeescript",
174
+ packages: { coffeescript: {
175
+ primary: true,
176
+ filePatterns: ["*.coffee"]
177
+ } }
178
+ },
179
+ "gkz/LiveScript": {
180
+ owner: "gkz",
181
+ repo: "LiveScript",
182
+ packages: { livescript: {
183
+ primary: true,
184
+ filePatterns: ["*.ls"]
185
+ } }
186
+ },
187
+ "elm/compiler": {
188
+ owner: "elm",
189
+ repo: "compiler",
190
+ packages: { elm: {
191
+ primary: true,
192
+ filePatterns: ["*.elm"]
193
+ } }
194
+ },
195
+ "sass/dart-sass": {
196
+ owner: "sass",
197
+ repo: "dart-sass",
198
+ packages: { sass: {
199
+ primary: true,
200
+ filePatterns: ["*.scss", "*.sass"]
201
+ } }
202
+ },
203
+ "less/less.js": {
204
+ owner: "less",
205
+ repo: "less.js",
206
+ packages: { less: {
207
+ primary: true,
208
+ filePatterns: ["*.less"]
209
+ } }
210
+ },
211
+ "stylus/stylus": {
212
+ owner: "stylus",
213
+ repo: "stylus",
214
+ packages: { stylus: {
215
+ primary: true,
216
+ filePatterns: ["*.styl"]
217
+ } }
218
+ },
219
+ "postcss/postcss": {
220
+ owner: "postcss",
221
+ repo: "postcss",
222
+ packages: { postcss: {
223
+ primary: true,
224
+ filePatterns: ["*.css", "*.pcss"]
225
+ } }
226
+ },
227
+ "pugjs/pug": {
228
+ owner: "pugjs",
229
+ repo: "pug",
230
+ packages: { pug: {
231
+ primary: true,
232
+ filePatterns: ["*.pug"]
233
+ } }
234
+ },
235
+ "mde/ejs": {
236
+ owner: "mde",
237
+ repo: "ejs",
238
+ packages: { ejs: {
239
+ primary: true,
240
+ filePatterns: ["*.ejs"]
241
+ } }
242
+ },
243
+ "handlebars-lang/handlebars.js": {
244
+ owner: "handlebars-lang",
245
+ repo: "handlebars.js",
246
+ packages: { handlebars: {
247
+ primary: true,
248
+ filePatterns: ["*.hbs", "*.handlebars"]
249
+ } }
250
+ },
251
+ "janl/mustache.js": {
252
+ owner: "janl",
253
+ repo: "mustache.js",
254
+ packages: { mustache: {
255
+ primary: true,
256
+ filePatterns: ["*.mustache"]
257
+ } }
258
+ },
259
+ "mozilla/nunjucks": {
260
+ owner: "mozilla",
261
+ repo: "nunjucks",
262
+ packages: { nunjucks: {
263
+ primary: true,
264
+ filePatterns: ["*.njk"]
265
+ } }
266
+ },
267
+ "Shopify/liquid": {
268
+ owner: "Shopify",
269
+ repo: "liquid",
270
+ packages: { liquid: {
271
+ primary: true,
272
+ filePatterns: ["*.liquid"]
273
+ } }
274
+ },
275
+ "eemeli/yaml": {
276
+ owner: "eemeli",
277
+ repo: "yaml",
278
+ packages: { yaml: {
279
+ primary: true,
280
+ filePatterns: ["*.yaml", "*.yml"]
281
+ } }
282
+ },
283
+ "nodeca/js-yaml": {
284
+ owner: "nodeca",
285
+ repo: "js-yaml",
286
+ packages: { "js-yaml": {
287
+ primary: true,
288
+ filePatterns: ["*.yaml", "*.yml"]
289
+ } }
290
+ },
291
+ "BinaryMuse/toml-node": {
292
+ owner: "BinaryMuse",
293
+ repo: "toml-node",
294
+ packages: {
295
+ "toml": {
296
+ primary: true,
297
+ filePatterns: ["*.toml"]
298
+ },
299
+ "@iarna/toml": { filePatterns: ["*.toml"] }
300
+ }
301
+ },
302
+ "json5/json5": {
303
+ owner: "json5",
304
+ repo: "json5",
305
+ packages: { json5: {
306
+ primary: true,
307
+ filePatterns: ["*.json5"]
308
+ } }
309
+ },
310
+ "microsoft/node-jsonc-parser": {
311
+ owner: "microsoft",
312
+ repo: "node-jsonc-parser",
313
+ packages: { "jsonc-parser": {
314
+ primary: true,
315
+ filePatterns: ["*.jsonc"]
316
+ } }
317
+ },
318
+ "markdown-it/markdown-it": {
319
+ owner: "markdown-it",
320
+ repo: "markdown-it",
321
+ packages: { "markdown-it": {
322
+ primary: true,
323
+ filePatterns: ["*.md"]
324
+ } }
325
+ },
326
+ "markedjs/marked": {
327
+ owner: "markedjs",
328
+ repo: "marked",
329
+ packages: { marked: {
330
+ primary: true,
331
+ filePatterns: ["*.md"]
332
+ } }
333
+ },
334
+ "remarkjs/remark": {
335
+ owner: "remarkjs",
336
+ repo: "remark",
337
+ packages: { remark: {
338
+ primary: true,
339
+ filePatterns: ["*.md", "*.mdx"]
340
+ } }
341
+ },
342
+ "mdx-js/mdx": {
343
+ owner: "mdx-js",
344
+ repo: "mdx",
345
+ packages: { "@mdx-js/mdx": {
346
+ primary: true,
347
+ filePatterns: ["*.mdx"]
348
+ } }
349
+ },
350
+ "graphql/graphql-js": {
351
+ owner: "graphql",
352
+ repo: "graphql-js",
353
+ packages: {
354
+ "graphql": {
355
+ primary: true,
356
+ filePatterns: ["*.graphql", "*.gql"]
357
+ },
358
+ "graphql-tag": { filePatterns: ["*.graphql", "*.gql"] }
359
+ }
360
+ },
361
+ "dotansimha/graphql-code-generator": {
362
+ owner: "dotansimha",
363
+ repo: "graphql-code-generator",
364
+ packages: { "@graphql-codegen/cli": {
365
+ primary: true,
366
+ filePatterns: ["*.graphql", "*.gql"]
367
+ } }
368
+ },
369
+ "prisma/prisma": {
370
+ owner: "prisma",
371
+ repo: "prisma",
372
+ packages: {
373
+ "prisma": {
374
+ primary: true,
375
+ filePatterns: ["*.prisma"]
376
+ },
377
+ "@prisma/client": { filePatterns: ["*.prisma"] }
378
+ }
379
+ },
380
+ "nicolo-ribaudo/tc39-proposal-wasm-esm-integration": {
381
+ owner: "nicolo-ribaudo",
382
+ repo: "tc39-proposal-wasm-esm-integration",
383
+ packages: { "wasm-pack": {
384
+ primary: true,
385
+ filePatterns: ["*.wasm"]
386
+ } }
387
+ }
388
+ };
389
+ const PACKAGE_TO_REPO_MAP = {};
390
+ for (const [repoKey, entry] of Object.entries(REPO_REGISTRY)) for (const packageName of Object.keys(entry.packages)) PACKAGE_TO_REPO_MAP[packageName] = repoKey;
391
+ function getDocOverride(packageName) {
392
+ const repoKey = PACKAGE_TO_REPO_MAP[packageName];
393
+ if (!repoKey) return void 0;
394
+ const entry = REPO_REGISTRY[repoKey];
395
+ if (!entry?.docsRepo && !entry?.docsPath) return void 0;
396
+ return {
397
+ owner: entry.owner,
398
+ repo: entry.docsRepo || entry.repo,
399
+ path: entry.docsPath || "",
400
+ ref: entry.docsRef,
401
+ homepage: entry.homepage
402
+ };
403
+ }
404
+ function getBlogPreset(packageName) {
405
+ const repoKey = PACKAGE_TO_REPO_MAP[packageName];
406
+ if (!repoKey) return void 0;
407
+ const entry = REPO_REGISTRY[repoKey];
408
+ if (!entry?.blogReleases) return void 0;
409
+ return {
410
+ packageName,
411
+ releases: entry.blogReleases
412
+ };
413
+ }
414
+ function getFilePatterns(packageName) {
415
+ const repoKey = PACKAGE_TO_REPO_MAP[packageName];
416
+ if (!repoKey) return void 0;
417
+ return REPO_REGISTRY[repoKey]?.packages[packageName]?.filePatterns;
418
+ }
419
+ function getRepoEntry(repoKey) {
420
+ return REPO_REGISTRY[repoKey];
421
+ }
422
+ function getRepoKeyForPackage(packageName) {
423
+ return PACKAGE_TO_REPO_MAP[packageName];
424
+ }
425
+ function getRelatedPackages(packageName) {
426
+ const repoKey = PACKAGE_TO_REPO_MAP[packageName];
427
+ if (!repoKey) return [];
428
+ const entry = REPO_REGISTRY[repoKey];
429
+ if (!entry) return [];
430
+ return Object.keys(entry.packages);
431
+ }
432
+ function mapInsert(map, key, create) {
433
+ let val = map.get(key);
434
+ if (val === void 0) {
435
+ val = create();
436
+ map.set(key, val);
437
+ }
438
+ return val;
439
+ }
440
+ const SHARED_SKILLS_DIR = ".skills";
441
+ function getSharedSkillsDir(cwd = process.cwd()) {
442
+ const dir = join(cwd, SHARED_SKILLS_DIR);
443
+ return existsSync(dir) ? dir : null;
444
+ }
445
+ const NEEDS_QUOTING = /[:"'\\\n\r\t#{}[\],&*!|>%@`]/;
446
+ function yamlEscape(value) {
447
+ if (!NEEDS_QUOTING.test(value)) return value;
448
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t")}"`;
449
+ }
450
+ function yamlUnescape(raw) {
451
+ const trimmed = raw.trim();
452
+ if (!trimmed) return "";
453
+ if (trimmed.startsWith("\"") && trimmed.endsWith("\"")) return trimmed.slice(1, -1).replace(/\\n/g, "\n").replace(/\\r/g, "\r").replace(/\\t/g, " ").replace(/\\"/g, "\"").replace(/\\\\/g, "\\");
454
+ if (trimmed.startsWith("'") && trimmed.endsWith("'")) return trimmed.slice(1, -1);
455
+ return trimmed;
456
+ }
457
+ function yamlParseKV(line) {
458
+ const trimmed = line.trim();
459
+ const colonIdx = trimmed.indexOf(":");
460
+ if (colonIdx === -1) return null;
461
+ const key = trimmed.slice(0, colonIdx).trim();
462
+ const rawValue = trimmed.slice(colonIdx + 1);
463
+ if (!key) return null;
464
+ return [key, yamlUnescape(rawValue)];
465
+ }
466
+ export { getSharedSkillsDir as a, getDocOverride as c, getRepoEntry as d, getRepoKeyForPackage as f, SHARED_SKILLS_DIR as i, getFilePatterns as l, yamlParseKV as n, mapInsert as o, yamlUnescape as r, getBlogPreset as s, yamlEscape as t, getRelatedPackages as u };
467
+
468
+ //# sourceMappingURL=yaml.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.mjs","names":[],"sources":["../../src/sources/package-registry.ts","../../src/core/shared.ts","../../src/core/yaml.ts"],"sourcesContent":["/**\n * Unified package registry — single source of truth for package metadata.\n * Consolidates doc overrides, blog presets, and file patterns.\n * Keyed by GitHub 'owner/repo' (source code repo).\n */\n\nexport interface BlogRelease {\n version: string\n url: string\n date: string\n title?: string\n}\n\nexport interface PackageEntry {\n filePatterns?: string[]\n primary?: boolean\n}\n\nexport interface RepoEntry {\n owner: string\n repo: string\n /** Separate docs repo name (e.g. 'docs' → owner/docs) */\n docsRepo?: string\n /** Path prefix to filter markdown files */\n docsPath?: string\n /** Branch/ref override */\n docsRef?: string\n /** Homepage URL */\n homepage?: string\n /** Packages in this repo */\n packages: Record<string, PackageEntry>\n /** Curated blog release posts */\n blogReleases?: BlogRelease[]\n}\n\n// Backwards-compatible types\nexport interface DocOverride {\n owner: string\n repo: string\n path: string\n ref?: string\n homepage?: string\n}\n\nexport interface BlogPreset {\n packageName: string\n releases: BlogRelease[]\n}\n\n// ── Registry ──\n\nconst REPO_REGISTRY: Record<string, RepoEntry> = {\n // ── Frameworks with doc overrides ──\n\n 'vuejs/core': {\n owner: 'vuejs',\n repo: 'core',\n docsRepo: 'docs',\n docsPath: 'src',\n homepage: 'https://vuejs.org',\n packages: {\n 'vue': { primary: true, filePatterns: ['*.vue'] },\n '@vue/compiler-core': {},\n '@vue/compiler-dom': {},\n '@vue/reactivity': {},\n '@vue/runtime-core': {},\n '@vue/runtime-dom': {},\n '@vue/shared': {},\n },\n blogReleases: [\n { version: '3.5', url: 'https://blog.vuejs.org/posts/vue-3-5', date: '2024-09-01' },\n { version: '3.4', url: 'https://blog.vuejs.org/posts/vue-3-4', date: '2023-12-28' },\n { version: '3.3', url: 'https://blog.vuejs.org/posts/vue-3-3', date: '2023-05-11' },\n { version: '3.2', url: 'https://blog.vuejs.org/posts/vue-3-2', date: '2021-08-05' },\n { version: '3.1', url: 'https://blog.vuejs.org/posts/vue-3-1', date: '2021-06-07' },\n { version: '3.0', url: 'https://blog.vuejs.org/posts/vue-3-0', date: '2020-09-18' },\n ],\n },\n\n 'tailwindlabs/tailwindcss': {\n owner: 'tailwindlabs',\n repo: 'tailwindcss',\n docsRepo: 'tailwindcss.com',\n docsPath: 'src/docs',\n homepage: 'https://tailwindcss.com',\n packages: {\n tailwindcss: { primary: true },\n },\n },\n\n 'withastro/astro': {\n owner: 'withastro',\n repo: 'astro',\n docsRepo: 'docs',\n docsPath: 'src/content/docs/en',\n homepage: 'https://docs.astro.build',\n packages: {\n astro: { primary: true, filePatterns: ['*.astro'] },\n },\n },\n\n 'vueuse/vueuse': {\n owner: 'vueuse',\n repo: 'vueuse',\n docsPath: 'packages',\n packages: {\n '@vueuse/core': { primary: true },\n },\n },\n\n // ── Frameworks (file patterns only) ──\n\n 'sveltejs/svelte': {\n owner: 'sveltejs',\n repo: 'svelte',\n packages: {\n svelte: { primary: true, filePatterns: ['*.svelte'] },\n },\n },\n\n 'solidjs/solid': {\n owner: 'solidjs',\n repo: 'solid',\n packages: {\n 'solid-js': { primary: true, filePatterns: ['*.jsx', '*.tsx'] },\n },\n },\n\n 'QwikDev/qwik': {\n owner: 'QwikDev',\n repo: 'qwik',\n packages: {\n qwik: { primary: true, filePatterns: ['*.tsx'] },\n },\n },\n\n 'marko-js/marko': {\n owner: 'marko-js',\n repo: 'marko',\n packages: {\n marko: { primary: true, filePatterns: ['*.marko'] },\n },\n },\n\n 'riot/riot': {\n owner: 'riot',\n repo: 'riot',\n packages: {\n riot: { primary: true, filePatterns: ['*.riot'] },\n },\n },\n\n // ── Languages/transpilers ──\n\n 'microsoft/TypeScript': {\n owner: 'microsoft',\n repo: 'TypeScript',\n packages: {\n typescript: { primary: true, filePatterns: ['*.ts', '*.tsx', '*.mts', '*.cts'] },\n },\n blogReleases: [\n { version: '6.0', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/', date: '2026-02-11', title: 'Announcing TypeScript 6.0 Beta' },\n { version: '5.9', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/', date: '2025-08-01', title: 'Announcing TypeScript 5.9' },\n { version: '5.8', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/', date: '2025-02-28', title: 'Announcing TypeScript 5.8' },\n { version: '5.7', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/', date: '2024-11-22', title: 'Announcing TypeScript 5.7' },\n { version: '5.6', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/', date: '2024-09-09', title: 'Announcing TypeScript 5.6' },\n { version: '5.5', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/', date: '2024-06-20', title: 'Announcing TypeScript 5.5' },\n ],\n },\n\n 'jashkenas/coffeescript': {\n owner: 'jashkenas',\n repo: 'coffeescript',\n packages: {\n coffeescript: { primary: true, filePatterns: ['*.coffee'] },\n },\n },\n\n 'gkz/LiveScript': {\n owner: 'gkz',\n repo: 'LiveScript',\n packages: {\n livescript: { primary: true, filePatterns: ['*.ls'] },\n },\n },\n\n 'elm/compiler': {\n owner: 'elm',\n repo: 'compiler',\n packages: {\n elm: { primary: true, filePatterns: ['*.elm'] },\n },\n },\n\n // ── CSS preprocessors ──\n\n 'sass/dart-sass': {\n owner: 'sass',\n repo: 'dart-sass',\n packages: {\n sass: { primary: true, filePatterns: ['*.scss', '*.sass'] },\n },\n },\n\n 'less/less.js': {\n owner: 'less',\n repo: 'less.js',\n packages: {\n less: { primary: true, filePatterns: ['*.less'] },\n },\n },\n\n 'stylus/stylus': {\n owner: 'stylus',\n repo: 'stylus',\n packages: {\n stylus: { primary: true, filePatterns: ['*.styl'] },\n },\n },\n\n 'postcss/postcss': {\n owner: 'postcss',\n repo: 'postcss',\n packages: {\n postcss: { primary: true, filePatterns: ['*.css', '*.pcss'] },\n },\n },\n\n // ── Template engines ──\n\n 'pugjs/pug': {\n owner: 'pugjs',\n repo: 'pug',\n packages: {\n pug: { primary: true, filePatterns: ['*.pug'] },\n },\n },\n\n 'mde/ejs': {\n owner: 'mde',\n repo: 'ejs',\n packages: {\n ejs: { primary: true, filePatterns: ['*.ejs'] },\n },\n },\n\n 'handlebars-lang/handlebars.js': {\n owner: 'handlebars-lang',\n repo: 'handlebars.js',\n packages: {\n handlebars: { primary: true, filePatterns: ['*.hbs', '*.handlebars'] },\n },\n },\n\n 'janl/mustache.js': {\n owner: 'janl',\n repo: 'mustache.js',\n packages: {\n mustache: { primary: true, filePatterns: ['*.mustache'] },\n },\n },\n\n 'mozilla/nunjucks': {\n owner: 'mozilla',\n repo: 'nunjucks',\n packages: {\n nunjucks: { primary: true, filePatterns: ['*.njk'] },\n },\n },\n\n 'Shopify/liquid': {\n owner: 'Shopify',\n repo: 'liquid',\n packages: {\n liquid: { primary: true, filePatterns: ['*.liquid'] },\n },\n },\n\n // ── Data formats ──\n\n 'eemeli/yaml': {\n owner: 'eemeli',\n repo: 'yaml',\n packages: {\n yaml: { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'nodeca/js-yaml': {\n owner: 'nodeca',\n repo: 'js-yaml',\n packages: {\n 'js-yaml': { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'BinaryMuse/toml-node': {\n owner: 'BinaryMuse',\n repo: 'toml-node',\n packages: {\n 'toml': { primary: true, filePatterns: ['*.toml'] },\n '@iarna/toml': { filePatterns: ['*.toml'] },\n },\n },\n\n 'json5/json5': {\n owner: 'json5',\n repo: 'json5',\n packages: {\n json5: { primary: true, filePatterns: ['*.json5'] },\n },\n },\n\n 'microsoft/node-jsonc-parser': {\n owner: 'microsoft',\n repo: 'node-jsonc-parser',\n packages: {\n 'jsonc-parser': { primary: true, filePatterns: ['*.jsonc'] },\n },\n },\n\n // ── Markdown ──\n\n 'markdown-it/markdown-it': {\n owner: 'markdown-it',\n repo: 'markdown-it',\n packages: {\n 'markdown-it': { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'markedjs/marked': {\n owner: 'markedjs',\n repo: 'marked',\n packages: {\n marked: { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'remarkjs/remark': {\n owner: 'remarkjs',\n repo: 'remark',\n packages: {\n remark: { primary: true, filePatterns: ['*.md', '*.mdx'] },\n },\n },\n\n 'mdx-js/mdx': {\n owner: 'mdx-js',\n repo: 'mdx',\n packages: {\n '@mdx-js/mdx': { primary: true, filePatterns: ['*.mdx'] },\n },\n },\n\n // ── GraphQL ──\n\n 'graphql/graphql-js': {\n owner: 'graphql',\n repo: 'graphql-js',\n packages: {\n 'graphql': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n 'graphql-tag': { filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n 'dotansimha/graphql-code-generator': {\n owner: 'dotansimha',\n repo: 'graphql-code-generator',\n packages: {\n '@graphql-codegen/cli': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n // ── Other ──\n\n 'prisma/prisma': {\n owner: 'prisma',\n repo: 'prisma',\n packages: {\n 'prisma': { primary: true, filePatterns: ['*.prisma'] },\n '@prisma/client': { filePatterns: ['*.prisma'] },\n },\n },\n\n 'nicolo-ribaudo/tc39-proposal-wasm-esm-integration': {\n owner: 'nicolo-ribaudo',\n repo: 'tc39-proposal-wasm-esm-integration',\n packages: {\n 'wasm-pack': { primary: true, filePatterns: ['*.wasm'] },\n },\n },\n}\n\n// ── Reverse index (auto-generated) ──\n\nconst PACKAGE_TO_REPO_MAP: Record<string, string> = {}\n\nfor (const [repoKey, entry] of Object.entries(REPO_REGISTRY)) {\n for (const packageName of Object.keys(entry.packages)) {\n PACKAGE_TO_REPO_MAP[packageName] = repoKey\n }\n}\n\n// ── Backwards-compatible helpers ──\n\nexport function getDocOverride(packageName: string): DocOverride | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.docsRepo && !entry?.docsPath)\n return undefined\n\n return {\n owner: entry.owner,\n repo: entry.docsRepo || entry.repo,\n path: entry.docsPath || '',\n ref: entry.docsRef,\n homepage: entry.homepage,\n }\n}\n\nexport function getBlogPreset(packageName: string): BlogPreset | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.blogReleases)\n return undefined\n\n return {\n packageName,\n releases: entry.blogReleases,\n }\n}\n\nexport function getFilePatterns(packageName: string): string[] | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.packages[packageName]?.filePatterns\n}\n\n// ── New APIs ──\n\nexport function getRepoEntry(repoKey: string): RepoEntry | undefined {\n return REPO_REGISTRY[repoKey]\n}\n\nexport function getRepoKeyForPackage(packageName: string): string | undefined {\n return PACKAGE_TO_REPO_MAP[packageName]\n}\n\nexport function getRelatedPackages(packageName: string): string[] {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return []\n const entry = REPO_REGISTRY[repoKey]\n if (!entry)\n return []\n return Object.keys(entry.packages)\n}\n","import { existsSync } from 'node:fs'\nimport { join } from 'pathe'\n\n/** Get-or-create for Maps. Polyfill for Map.getOrInsertComputed (not yet in Node.js). */\nexport function mapInsert<K, V>(map: Map<K, V>, key: K, create: () => V): V {\n let val = map.get(key)\n if (val === undefined) {\n val = create()\n map.set(key, val)\n }\n return val\n}\n\nexport const SHARED_SKILLS_DIR = '.skills'\n\n/** Returns the shared skills directory path if `.skills/` exists at project root, else null */\nexport function getSharedSkillsDir(cwd: string = process.cwd()): string | null {\n const dir = join(cwd, SHARED_SKILLS_DIR)\n return existsSync(dir) ? dir : null\n}\n","/**\n * Minimal YAML value escaping/unescaping for our hand-rolled parsers.\n *\n * Handles the characters that break naive `:` splitting and quote stripping:\n * colons, quotes, newlines, backslashes.\n */\n\n/** Characters that require double-quoting in YAML values */\nconst NEEDS_QUOTING = /[:\"'\\\\\\n\\r\\t#{}[\\],&*!|>%@`]/\n\n/**\n * Escape a value for safe YAML emission. Always double-quotes if the value\n * contains any special characters; returns unquoted for simple values.\n */\nexport function yamlEscape(value: string): string {\n if (!NEEDS_QUOTING.test(value))\n return value\n // Escape backslashes first, then double quotes, then control chars\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n return `\"${escaped}\"`\n}\n\n/**\n * Parse a raw YAML value string back to its actual value.\n * Handles double-quoted (with escapes), single-quoted, and unquoted values.\n */\nexport function yamlUnescape(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed)\n return ''\n\n // Double-quoted: process escape sequences\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1)\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n }\n\n // Single-quoted: no escape processing, just strip quotes\n if (trimmed.startsWith('\\'') && trimmed.endsWith('\\''))\n return trimmed.slice(1, -1)\n\n return trimmed\n}\n\n/**\n * Parse a YAML `key: value` line, correctly handling colons inside quoted values.\n * Returns [key, value] or null if not a valid KV line.\n */\nexport function yamlParseKV(line: string): [string, string] | null {\n const trimmed = line.trim()\n // Find the first `: ` or `:\\n` or `:$` — the YAML key-value separator\n const colonIdx = trimmed.indexOf(':')\n if (colonIdx === -1)\n return null\n const key = trimmed.slice(0, colonIdx).trim()\n const rawValue = trimmed.slice(colonIdx + 1)\n if (!key)\n return null\n return [key, yamlUnescape(rawValue)]\n}\n"],"mappings":";;AAmDA,MAAM,gBAA2C;CAG/C,cAAc;EACZ,OAAO;EACP,MAAM;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU;GACR,OAAO;IAAE,SAAS;IAAM,cAAc,CAAC,QAAA;IAAU;GACjD,sBAAsB,EAAE;GACxB,qBAAqB,EAAE;GACvB,mBAAmB,EAAE;GACrB,qBAAqB,EAAE;GACvB,oBAAoB,EAAE;GACtB,eAAe,EAAA;GAChB;EACD,cAAc;GACZ;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;IAAc;GACnF;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;IAAc;GACnF;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;IAAc;GACnF;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;IAAc;GACnF;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;IAAc;GACnF;IAAE,SAAS;IAAO,KAAK;IAAwC,MAAM;;;EAExE;CAED,4BAA4B;EAC1B,OAAO;EACP,MAAM;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU,EACR,aAAa,EAAE,SAAS,MAAM,EAAA;EAEjC;CAED,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,UAAU,EACR,OAAO;GAAE,SAAS;GAAM,cAAc,CAAC,UAAA;GAAY,EAAA;EAEtD;CAED,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,UAAU;EACV,UAAU,EACR,gBAAgB,EAAE,SAAS,MAAM,EAAA;EAEpC;CAID,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,UAAU,EACR,QAAQ;GAAE,SAAS;GAAM,cAAc,CAAC,WAAA;GAAa,EAAA;EAExD;CAED,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,UAAU,EACR,YAAY;GAAE,SAAS;GAAM,cAAc,CAAC,SAAS,QAAA;GAAU,EAAA;EAElE;CAED,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,UAAU,EACR,MAAM;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAEnD;CAED,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,UAAU,EACR,OAAO;GAAE,SAAS;GAAM,cAAc,CAAC,UAAA;GAAY,EAAA;EAEtD;CAED,aAAa;EACX,OAAO;EACP,MAAM;EACN,UAAU,EACR,MAAM;GAAE,SAAS;GAAM,cAAc,CAAC,SAAA;GAAW,EAAA;EAEpD;CAID,wBAAwB;EACtB,OAAO;EACP,MAAM;EACN,UAAU,EACR,YAAY;GAAE,SAAS;GAAM,cAAc;IAAC;IAAQ;IAAS;IAAS;;GAAU,EACjF;EACD,cAAc;GACZ;IAAE,SAAS;IAAO,KAAK;IAA6E,MAAM;IAAc,OAAO;IAAkC;GACjK;IAAE,SAAS;IAAO,KAAK;IAAwE,MAAM;IAAc,OAAO;IAA6B;GACvJ;IAAE,SAAS;IAAO,KAAK;IAAwE,MAAM;IAAc,OAAO;IAA6B;GACvJ;IAAE,SAAS;IAAO,KAAK;IAAwE,MAAM;IAAc,OAAO;IAA6B;GACvJ;IAAE,SAAS;IAAO,KAAK;IAAwE,MAAM;IAAc,OAAO;IAA6B;GACvJ;IAAE,SAAS;IAAO,KAAK;IAAwE,MAAM;IAAc,OAAO;;;EAE7H;CAED,0BAA0B;EACxB,OAAO;EACP,MAAM;EACN,UAAU,EACR,cAAc;GAAE,SAAS;GAAM,cAAc,CAAC,WAAA;GAAa,EAAA;EAE9D;CAED,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,UAAU,EACR,YAAY;GAAE,SAAS;GAAM,cAAc,CAAC,OAAA;GAAS,EAAA;EAExD;CAED,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,UAAU,EACR,KAAK;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAElD;CAID,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,UAAU,EACR,MAAM;GAAE,SAAS;GAAM,cAAc,CAAC,UAAU,SAAA;GAAW,EAAA;EAE9D;CAED,gBAAgB;EACd,OAAO;EACP,MAAM;EACN,UAAU,EACR,MAAM;GAAE,SAAS;GAAM,cAAc,CAAC,SAAA;GAAW,EAAA;EAEpD;CAED,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,UAAU,EACR,QAAQ;GAAE,SAAS;GAAM,cAAc,CAAC,SAAA;GAAW,EAAA;EAEtD;CAED,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,UAAU,EACR,SAAS;GAAE,SAAS;GAAM,cAAc,CAAC,SAAS,SAAA;GAAW,EAAA;EAEhE;CAID,aAAa;EACX,OAAO;EACP,MAAM;EACN,UAAU,EACR,KAAK;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAElD;CAED,WAAW;EACT,OAAO;EACP,MAAM;EACN,UAAU,EACR,KAAK;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAElD;CAED,iCAAiC;EAC/B,OAAO;EACP,MAAM;EACN,UAAU,EACR,YAAY;GAAE,SAAS;GAAM,cAAc,CAAC,SAAS,eAAA;GAAiB,EAAA;EAEzE;CAED,oBAAoB;EAClB,OAAO;EACP,MAAM;EACN,UAAU,EACR,UAAU;GAAE,SAAS;GAAM,cAAc,CAAC,aAAA;GAAe,EAAA;EAE5D;CAED,oBAAoB;EAClB,OAAO;EACP,MAAM;EACN,UAAU,EACR,UAAU;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAEvD;CAED,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,UAAU,EACR,QAAQ;GAAE,SAAS;GAAM,cAAc,CAAC,WAAA;GAAa,EAAA;EAExD;CAID,eAAe;EACb,OAAO;EACP,MAAM;EACN,UAAU,EACR,MAAM;GAAE,SAAS;GAAM,cAAc,CAAC,UAAU,QAAA;GAAU,EAAA;EAE7D;CAED,kBAAkB;EAChB,OAAO;EACP,MAAM;EACN,UAAU,EACR,WAAW;GAAE,SAAS;GAAM,cAAc,CAAC,UAAU,QAAA;GAAU,EAAA;EAElE;CAED,wBAAwB;EACtB,OAAO;EACP,MAAM;EACN,UAAU;GACR,QAAQ;IAAE,SAAS;IAAM,cAAc,CAAC,SAAA;IAAW;GACnD,eAAe,EAAE,cAAc,CAAC,SAAS,EAAA;;EAE5C;CAED,eAAe;EACb,OAAO;EACP,MAAM;EACN,UAAU,EACR,OAAO;GAAE,SAAS;GAAM,cAAc,CAAC,UAAA;GAAY,EAAA;EAEtD;CAED,+BAA+B;EAC7B,OAAO;EACP,MAAM;EACN,UAAU,EACR,gBAAgB;GAAE,SAAS;GAAM,cAAc,CAAC,UAAA;GAAY,EAAA;EAE/D;CAID,2BAA2B;EACzB,OAAO;EACP,MAAM;EACN,UAAU,EACR,eAAe;GAAE,SAAS;GAAM,cAAc,CAAC,OAAA;GAAS,EAAA;EAE3D;CAED,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,UAAU,EACR,QAAQ;GAAE,SAAS;GAAM,cAAc,CAAC,OAAA;GAAS,EAAA;EAEpD;CAED,mBAAmB;EACjB,OAAO;EACP,MAAM;EACN,UAAU,EACR,QAAQ;GAAE,SAAS;GAAM,cAAc,CAAC,QAAQ,QAAA;GAAU,EAAA;EAE7D;CAED,cAAc;EACZ,OAAO;EACP,MAAM;EACN,UAAU,EACR,eAAe;GAAE,SAAS;GAAM,cAAc,CAAC,QAAA;GAAU,EAAA;EAE5D;CAID,sBAAsB;EACpB,OAAO;EACP,MAAM;EACN,UAAU;GACR,WAAW;IAAE,SAAS;IAAM,cAAc,CAAC,aAAa,QAAA;IAAU;GAClE,eAAe,EAAE,cAAc,CAAC,aAAa,QAAQ,EAAA;;EAExD;CAED,qCAAqC;EACnC,OAAO;EACP,MAAM;EACN,UAAU,EACR,wBAAwB;GAAE,SAAS;GAAM,cAAc,CAAC,aAAa,QAAA;GAAU,EAAA;EAElF;CAID,iBAAiB;EACf,OAAO;EACP,MAAM;EACN,UAAU;GACR,UAAU;IAAE,SAAS;IAAM,cAAc,CAAC,WAAA;IAAa;GACvD,kBAAkB,EAAE,cAAc,CAAC,WAAW,EAAA;;EAEjD;CAED,qDAAqD;EACnD,OAAO;EACP,MAAM;EACN,UAAU,EACR,aAAa;GAAE,SAAS;GAAM,cAAc,CAAC,SAAA;GAAW,EAAA;;CAG7D;AAID,MAAM,sBAA8C,EAAE;AAEtD,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,cAAc,CAC1D,MAAK,MAAM,eAAe,OAAO,KAAK,MAAM,SAAS,CACnD,qBAAoB,eAAe;AAMvC,SAAgB,eAAe,aAA8C;CAC3E,MAAM,UAAU,oBAAoB;AACpC,KAAI,CAAC,QACH,QAAO,KAAA;CACT,MAAM,QAAQ,cAAc;AAC5B,KAAI,CAAC,OAAO,YAAY,CAAC,OAAO,SAC9B,QAAO,KAAA;AAET,QAAO;EACL,OAAO,MAAM;EACb,MAAM,MAAM,YAAY,MAAM;EAC9B,MAAM,MAAM,YAAY;EACxB,KAAK,MAAM;EACX,UAAU,MAAM;EACjB;;AAGH,SAAgB,cAAc,aAA6C;CACzE,MAAM,UAAU,oBAAoB;AACpC,KAAI,CAAC,QACH,QAAO,KAAA;CACT,MAAM,QAAQ,cAAc;AAC5B,KAAI,CAAC,OAAO,aACV,QAAO,KAAA;AAET,QAAO;EACL;EACA,UAAU,MAAM;EACjB;;AAGH,SAAgB,gBAAgB,aAA2C;CACzE,MAAM,UAAU,oBAAoB;AACpC,KAAI,CAAC,QACH,QAAO,KAAA;AACT,QAAO,cAAc,UAAU,SAAS,cAAc;;AAKxD,SAAgB,aAAa,SAAwC;AACnE,QAAO,cAAc;;AAGvB,SAAgB,qBAAqB,aAAyC;AAC5E,QAAO,oBAAoB;;AAG7B,SAAgB,mBAAmB,aAA+B;CAChE,MAAM,UAAU,oBAAoB;AACpC,KAAI,CAAC,QACH,QAAO,EAAE;CACX,MAAM,QAAQ,cAAc;AAC5B,KAAI,CAAC,MACH,QAAO,EAAE;AACX,QAAO,OAAO,KAAK,MAAM,SAAS;;ACzcpC,SAAgB,UAAgB,KAAgB,KAAQ,QAAoB;CAC1E,IAAI,MAAM,IAAI,IAAI,IAAI;AACtB,KAAI,QAAQ,KAAA,GAAW;AACrB,QAAM,QAAQ;AACd,MAAI,IAAI,KAAK,IAAI;;AAEnB,QAAO;;AAGT,MAAa,oBAAoB;AAGjC,SAAgB,mBAAmB,MAAc,QAAQ,KAAK,EAAiB;CAC7E,MAAM,MAAM,KAAK,KAAK,kBAAkB;AACxC,QAAO,WAAW,IAAI,GAAG,MAAM;;ACVjC,MAAM,gBAAgB;AAMtB,SAAgB,WAAW,OAAuB;AAChD,KAAI,CAAC,cAAc,KAAK,MAAM,CAC5B,QAAO;AAQT,QAAO,IANS,MACb,QAAQ,OAAO,OAAO,CACtB,QAAQ,MAAM,OAAM,CACpB,QAAQ,OAAO,MAAM,CACrB,QAAQ,OAAO,MAAM,CACrB,QAAQ,OAAO,MAAM,CACL;;AAOrB,SAAgB,aAAa,KAAqB;CAChD,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,CAAC,QACH,QAAO;AAGT,KAAI,QAAQ,WAAW,KAAI,IAAI,QAAQ,SAAS,KAAI,CAClD,QAAO,QAAQ,MAAM,GAAG,GAAG,CACxB,QAAQ,QAAQ,KAAK,CACrB,QAAQ,QAAQ,KAAK,CACrB,QAAQ,QAAQ,IAAK,CACrB,QAAQ,QAAQ,KAAI,CACpB,QAAQ,SAAS,KAAK;AAI3B,KAAI,QAAQ,WAAW,IAAK,IAAI,QAAQ,SAAS,IAAK,CACpD,QAAO,QAAQ,MAAM,GAAG,GAAG;AAE7B,QAAO;;AAOT,SAAgB,YAAY,MAAuC;CACjE,MAAM,UAAU,KAAK,MAAM;CAE3B,MAAM,WAAW,QAAQ,QAAQ,IAAI;AACrC,KAAI,aAAa,GACf,QAAO;CACT,MAAM,MAAM,QAAQ,MAAM,GAAG,SAAS,CAAC,MAAM;CAC7C,MAAM,WAAW,QAAQ,MAAM,WAAW,EAAE;AAC5C,KAAI,CAAC,IACH,QAAO;AACT,QAAO,CAAC,KAAK,aAAa,SAAS,CAAC"}