skilld 1.7.2 → 1.7.4

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 (118) hide show
  1. package/dist/_chunks/agent.mjs +693 -599
  2. package/dist/_chunks/agent.mjs.map +1 -1
  3. package/dist/_chunks/assemble.mjs +3 -3
  4. package/dist/_chunks/assemble.mjs.map +1 -1
  5. package/dist/_chunks/author-group.mjs.map +1 -1
  6. package/dist/_chunks/author.mjs +51 -121
  7. package/dist/_chunks/author.mjs.map +1 -1
  8. package/dist/_chunks/cache.mjs +315 -9
  9. package/dist/_chunks/cache.mjs.map +1 -1
  10. package/dist/_chunks/cache2.mjs +2 -2
  11. package/dist/_chunks/cache2.mjs.map +1 -1
  12. package/dist/_chunks/cli-helpers.mjs +3 -3
  13. package/dist/_chunks/cli-helpers.mjs.map +1 -1
  14. package/dist/_chunks/core.mjs +7 -4
  15. package/dist/_chunks/detect.mjs +1 -1
  16. package/dist/_chunks/detect.mjs.map +1 -1
  17. package/dist/_chunks/embedding-cache2.mjs +2 -2
  18. package/dist/_chunks/embedding-cache2.mjs.map +1 -1
  19. package/dist/_chunks/index.d.mts +305 -112
  20. package/dist/_chunks/index.d.mts.map +1 -1
  21. package/dist/_chunks/index2.d.mts +267 -32
  22. package/dist/_chunks/index2.d.mts.map +1 -1
  23. package/dist/_chunks/index3.d.mts +32 -577
  24. package/dist/_chunks/index3.d.mts.map +1 -1
  25. package/dist/_chunks/index4.d.mts +553 -0
  26. package/dist/_chunks/index4.d.mts.map +1 -0
  27. package/dist/_chunks/install.mjs +48 -88
  28. package/dist/_chunks/install.mjs.map +1 -1
  29. package/dist/_chunks/list.mjs +1 -1
  30. package/dist/_chunks/list.mjs.map +1 -1
  31. package/dist/_chunks/lockfile.mjs +29 -6
  32. package/dist/_chunks/lockfile.mjs.map +1 -1
  33. package/dist/_chunks/markdown.mjs.map +1 -1
  34. package/dist/_chunks/monorepo.mjs +71 -0
  35. package/dist/_chunks/monorepo.mjs.map +1 -0
  36. package/dist/_chunks/package-json.mjs.map +1 -1
  37. package/dist/_chunks/{shared.mjs → package-registry.mjs} +2 -40
  38. package/dist/_chunks/package-registry.mjs.map +1 -0
  39. package/dist/_chunks/paths.mjs +49 -0
  40. package/dist/_chunks/paths.mjs.map +1 -0
  41. package/dist/_chunks/pool2.mjs +7 -2
  42. package/dist/_chunks/pool2.mjs.map +1 -1
  43. package/dist/_chunks/prepare.mjs +1 -1
  44. package/dist/_chunks/prepare.mjs.map +1 -1
  45. package/dist/_chunks/prepare2.mjs +5 -5
  46. package/dist/_chunks/prepare2.mjs.map +1 -1
  47. package/dist/_chunks/prompts.mjs +366 -18
  48. package/dist/_chunks/prompts.mjs.map +1 -1
  49. package/dist/_chunks/retriv.mjs.map +1 -1
  50. package/dist/_chunks/sanitize.mjs.map +1 -1
  51. package/dist/_chunks/search-helpers.mjs +5 -6
  52. package/dist/_chunks/search-helpers.mjs.map +1 -1
  53. package/dist/_chunks/search-interactive.mjs +1 -1
  54. package/dist/_chunks/search-interactive.mjs.map +1 -1
  55. package/dist/_chunks/search.mjs +1 -2
  56. package/dist/_chunks/search.mjs.map +1 -1
  57. package/dist/_chunks/semver.mjs +13 -0
  58. package/dist/_chunks/semver.mjs.map +1 -0
  59. package/dist/_chunks/setup.mjs.map +1 -1
  60. package/dist/_chunks/skill-installer.mjs +2 -0
  61. package/dist/_chunks/skill-installer2.mjs +155 -0
  62. package/dist/_chunks/skill-installer2.mjs.map +1 -0
  63. package/dist/_chunks/skills.mjs +10 -9
  64. package/dist/_chunks/skills.mjs.map +1 -1
  65. package/dist/_chunks/sources.mjs +575 -386
  66. package/dist/_chunks/sources.mjs.map +1 -1
  67. package/dist/_chunks/sync-pipeline.mjs +952 -0
  68. package/dist/_chunks/sync-pipeline.mjs.map +1 -0
  69. package/dist/_chunks/sync-registry.mjs +19 -13
  70. package/dist/_chunks/sync-registry.mjs.map +1 -1
  71. package/dist/_chunks/sync.mjs +797 -886
  72. package/dist/_chunks/sync.mjs.map +1 -1
  73. package/dist/_chunks/sync2.mjs +4 -2
  74. package/dist/_chunks/types.d.mts +65 -77
  75. package/dist/_chunks/types.d.mts.map +1 -1
  76. package/dist/_chunks/types2.d.mts +88 -0
  77. package/dist/_chunks/types2.d.mts.map +1 -0
  78. package/dist/_chunks/uninstall.mjs +7 -8
  79. package/dist/_chunks/uninstall.mjs.map +1 -1
  80. package/dist/_chunks/upload.mjs +2 -2
  81. package/dist/_chunks/upload.mjs.map +1 -1
  82. package/dist/_chunks/validate.mjs +1 -1
  83. package/dist/_chunks/validate.mjs.map +1 -1
  84. package/dist/_chunks/version.mjs +3 -13
  85. package/dist/_chunks/version.mjs.map +1 -1
  86. package/dist/_chunks/wizard.mjs +2 -2
  87. package/dist/_chunks/wizard.mjs.map +1 -1
  88. package/dist/_chunks/yaml.mjs.map +1 -1
  89. package/dist/agent/index.d.mts +2 -346
  90. package/dist/agent/index.mjs +2 -3
  91. package/dist/cache/index.d.mts +2 -2
  92. package/dist/cache/index.mjs +4 -3
  93. package/dist/cli.mjs +12 -13
  94. package/dist/cli.mjs.map +1 -1
  95. package/dist/index.d.mts +5 -4
  96. package/dist/index.mjs +4 -3
  97. package/dist/prepare.mjs +2 -2
  98. package/dist/prepare.mjs.map +1 -1
  99. package/dist/retriv/index.d.mts +2 -2
  100. package/dist/retriv/worker.d.mts +2 -1
  101. package/dist/retriv/worker.d.mts.map +1 -1
  102. package/dist/retriv/worker.mjs +2 -1
  103. package/dist/retriv/worker.mjs.map +1 -1
  104. package/dist/sources/index.d.mts +3 -2
  105. package/dist/sources/index.mjs +3 -3
  106. package/dist/types.d.mts +3 -3
  107. package/package.json +5 -5
  108. package/dist/_chunks/config.mjs +0 -122
  109. package/dist/_chunks/config.mjs.map +0 -1
  110. package/dist/_chunks/prefix.mjs +0 -108
  111. package/dist/_chunks/prefix.mjs.map +0 -1
  112. package/dist/_chunks/shared.mjs.map +0 -1
  113. package/dist/_chunks/skill.mjs +0 -329
  114. package/dist/_chunks/skill.mjs.map +0 -1
  115. package/dist/_chunks/sync-shared.mjs +0 -2
  116. package/dist/_chunks/sync-shared2.mjs +0 -1020
  117. package/dist/_chunks/sync-shared2.mjs.map +0 -1
  118. package/dist/agent/index.d.mts.map +0 -1
@@ -0,0 +1,553 @@
1
+ import { a as NpmPackageInfo, c as ResolvedPackage, i as LocalDependency, n as LlmsContent, o as ResolveAttempt, r as LlmsLink, s as ResolveResult, t as FetchedDoc } from "./types.mjs";
2
+ import * as _$ofetch from "ofetch";
3
+ interface CachedDoc$1 {
4
+ path: string;
5
+ content: string;
6
+ }
7
+ /**
8
+ * Fetch blog release notes from package presets
9
+ * Filters to only releases matching or older than the installed version
10
+ * Returns CachedDoc[] with releases/blog-{version}.md files
11
+ */
12
+ declare function fetchBlogReleases(packageName: string, installedVersion: string): Promise<CachedDoc$1[]>;
13
+ declare function resolveCrateDocsWithAttempts(crateName: string, options?: {
14
+ version?: string;
15
+ onProgress?: (message: string) => void;
16
+ }): Promise<ResolveResult>;
17
+ /**
18
+ * Website crawl doc source — fetches docs by crawling a URL pattern
19
+ */
20
+ /**
21
+ * Crawl a URL pattern and return docs as cached doc format.
22
+ * Uses HTTP crawler (no browser needed) with sitemap discovery + glob filtering.
23
+ *
24
+ * @param url - URL with optional glob pattern (e.g. 'https://example.com/docs/**')
25
+ * @param onProgress - Optional progress callback
26
+ * @param maxPages - Max pages to crawl (default 200)
27
+ */
28
+ declare function fetchCrawledDocs(url: string, onProgress?: (message: string) => void, maxPages?: number): Promise<Array<{
29
+ path: string;
30
+ content: string;
31
+ }>>;
32
+ /** Append glob pattern to a docs URL for crawling */
33
+ declare function toCrawlPattern(docsUrl: string): string;
34
+ /**
35
+ * GitHub discussions fetching via gh CLI GraphQL
36
+ * Prioritizes Q&A and Help categories, includes accepted answers
37
+ * Comment quality filtering, smart truncation, noise removal
38
+ */
39
+ interface DiscussionComment {
40
+ body: string;
41
+ author: string;
42
+ reactions: number;
43
+ isMaintainer?: boolean;
44
+ }
45
+ interface GitHubDiscussion {
46
+ number: number;
47
+ title: string;
48
+ body: string;
49
+ category: string;
50
+ createdAt: string;
51
+ url: string;
52
+ upvoteCount: number;
53
+ comments: number;
54
+ isMaintainer?: boolean;
55
+ answer?: string;
56
+ topComments: DiscussionComment[];
57
+ }
58
+ /**
59
+ * Fetch discussions from a GitHub repo using gh CLI GraphQL.
60
+ * Prioritizes Q&A and Help categories. Includes accepted answer body for answered discussions.
61
+ * Fetches extra comments and scores them for quality.
62
+ */
63
+ declare function fetchGitHubDiscussions(owner: string, repo: string, limit?: number, releasedAt?: string, fromDate?: string): Promise<GitHubDiscussion[]>;
64
+ /**
65
+ * Format a single discussion as markdown with YAML frontmatter
66
+ */
67
+ declare function formatDiscussionAsMarkdown(d: GitHubDiscussion): string;
68
+ /**
69
+ * Generate a summary index of all discussions for quick LLM scanning.
70
+ * Groups by category so the LLM can quickly find Q&A vs general discussions.
71
+ */
72
+ declare function generateDiscussionIndex(discussions: GitHubDiscussion[]): string;
73
+ /**
74
+ * Docs index generation — creates _INDEX.md for docs directory
75
+ */
76
+ /**
77
+ * Generate a _INDEX.md for a docs/ directory.
78
+ * Input: array of cached docs with paths like `docs/api/reactivity.md`.
79
+ * Output: markdown index grouped by directory with title + description per page.
80
+ */
81
+ declare function generateDocsIndex(docs: Array<{
82
+ path: string;
83
+ content: string;
84
+ }>): string;
85
+ interface EntryFile {
86
+ path: string;
87
+ content: string;
88
+ type: 'types' | 'source';
89
+ }
90
+ /**
91
+ * Glob .d.ts type definition files from a package directory, skipping junk.
92
+ */
93
+ declare function resolveEntryFiles(packageDir: string): Promise<EntryFile[]>;
94
+ /**
95
+ * Git repo skill source — parse inputs + fetch pre-authored skills from repos
96
+ *
97
+ * Supports GitHub shorthand (owner/repo), full URLs, SSH, GitLab, and local paths.
98
+ * Skills are pre-authored SKILL.md files — no doc resolution or LLM generation needed.
99
+ */
100
+ interface GitSkillSource {
101
+ type: 'github' | 'gitlab' | 'git-ssh' | 'local';
102
+ owner?: string;
103
+ repo?: string;
104
+ /** Direct path to a specific skill (from /tree/ref/path URLs) */
105
+ skillPath?: string;
106
+ /** Branch/tag parsed from URL */
107
+ ref?: string;
108
+ /** Absolute path for local sources */
109
+ localPath?: string;
110
+ }
111
+ interface RemoteSkill {
112
+ /** From SKILL.md frontmatter `name` field, or directory name */
113
+ name: string;
114
+ /** From SKILL.md frontmatter `description` field */
115
+ description: string;
116
+ /** Path within repo (e.g., "skills/web-design-guidelines") */
117
+ path: string;
118
+ /** Full SKILL.md content */
119
+ content: string;
120
+ /** Supporting files (scripts/, references/, assets/) */
121
+ files: Array<{
122
+ path: string;
123
+ content: string;
124
+ }>;
125
+ }
126
+ /**
127
+ * Detect whether an input string is a git skill source.
128
+ * Returns null for npm package names (including scoped @scope/pkg).
129
+ */
130
+ declare function parseGitSkillInput(input: string): GitSkillSource | null;
131
+ /**
132
+ * Parse name and description from SKILL.md frontmatter.
133
+ */
134
+ declare function parseSkillFrontmatterName(content: string): {
135
+ name?: string;
136
+ description?: string;
137
+ };
138
+ /**
139
+ * Fetch skills from a git source. Returns list of discovered skills.
140
+ */
141
+ declare function fetchGitSkills(source: GitSkillSource, onProgress?: (msg: string) => void): Promise<{
142
+ skills: RemoteSkill[];
143
+ }>;
144
+ /** Minimum git-doc file count to prefer over llms.txt */
145
+ declare const MIN_GIT_DOCS = 5;
146
+ /** True when git-docs exist but are too few to be useful (< MIN_GIT_DOCS) */
147
+ declare const isShallowGitDocs: (n: number) => boolean;
148
+ interface GitDocsResult {
149
+ /** URL pattern for fetching docs (use with ref) */
150
+ baseUrl: string;
151
+ /** Git ref (tag) used */
152
+ ref: string;
153
+ /** List of doc file paths relative to repo root */
154
+ files: string[];
155
+ /** Prefix to strip when normalizing paths to docs/ (e.g. 'apps/evalite-docs/src/content/') for nested monorepo docs */
156
+ docsPrefix?: string;
157
+ /** Full repo file tree — only set when discoverDocFiles() heuristic was used (not standard docs/ prefix) */
158
+ allFiles?: string[];
159
+ /** True when ref is a branch (main/master) rather than a version-specific tag */
160
+ fallback?: boolean;
161
+ }
162
+ /**
163
+ * Filter out docs for other frameworks when the package targets a specific one.
164
+ * e.g. @tanstack/vue-query → keep vue + shared docs, exclude react/solid/angular
165
+ * Uses word-boundary matching to catch all path conventions:
166
+ * framework/react/, 0.react/, api/ai-react.md, react-native.mdx, etc.
167
+ */
168
+ declare function filterFrameworkDocs(files: string[], packageName?: string): string[];
169
+ /**
170
+ * Fetch versioned docs from GitHub repo's docs/ folder.
171
+ * Pass packageName to check doc overrides (e.g. vue -> vuejs/docs).
172
+ */
173
+ declare function fetchGitDocs(owner: string, repo: string, version: string, packageName?: string, repoUrl?: string): Promise<GitDocsResult | null>;
174
+ /**
175
+ * Validate that discovered git docs are relevant by cross-referencing llms.txt links
176
+ * against the repo file tree. Uses extensionless suffix matching to handle monorepo nesting.
177
+ *
178
+ * Returns { isValid, matchRatio } where isValid = matchRatio >= 0.3
179
+ */
180
+ declare function validateGitDocsWithLlms(llmsLinks: LlmsLink[], repoFiles: string[]): {
181
+ isValid: boolean;
182
+ matchRatio: number;
183
+ };
184
+ /**
185
+ * Fetch GitHub repo metadata to get website URL.
186
+ * Pass packageName to check doc overrides first (avoids API call).
187
+ */
188
+ declare function fetchGitHubRepoMeta(owner: string, repo: string, packageName?: string): Promise<{
189
+ homepage?: string;
190
+ } | null>;
191
+ /** Resolve README URL for a GitHub repo, returns ungh:// pseudo-URL or raw URL */
192
+ declare function fetchReadme(owner: string, repo: string, subdir?: string, ref?: string): Promise<string | null>;
193
+ /** Fetch README content from ungh:// pseudo-URL, file:// URL, or regular URL */
194
+ declare function fetchReadmeContent(url: string): Promise<string | null>;
195
+ /**
196
+ * Resolve a GitHub repo into a ResolvedPackage (no npm registry needed).
197
+ * Fetches repo meta, latest release version, git docs, README, and llms.txt.
198
+ */
199
+ declare function resolveGitHubRepo(owner: string, repo: string, onProgress?: (msg: string) => void): Promise<ResolvedPackage | null>;
200
+ /**
201
+ * GitHub issues fetching via gh CLI Search API
202
+ * Freshness-weighted scoring, type quotas, comment quality filtering
203
+ * Categorized by labels, noise filtered out, non-technical issues detected
204
+ */
205
+ type IssueType = 'bug' | 'question' | 'docs' | 'feature' | 'other';
206
+ interface IssueComment {
207
+ body: string;
208
+ author: string;
209
+ reactions: number;
210
+ isMaintainer?: boolean;
211
+ }
212
+ interface GitHubIssue {
213
+ number: number;
214
+ title: string;
215
+ state: string;
216
+ labels: string[];
217
+ body: string;
218
+ createdAt: string;
219
+ url: string;
220
+ reactions: number;
221
+ comments: number;
222
+ type: IssueType;
223
+ topComments: IssueComment[];
224
+ /** Freshness-weighted score: reactions * decay(age) */
225
+ score: number;
226
+ /** For closed issues: version where fix landed, if detectable */
227
+ resolvedIn?: string;
228
+ }
229
+ /**
230
+ * Check if gh CLI is installed and authenticated (cached)
231
+ */
232
+ declare function isGhAvailable(): boolean;
233
+ /**
234
+ * Fetch issues from a GitHub repo with freshness-weighted scoring and type quotas.
235
+ * Returns a balanced mix: bugs > questions > docs > other > features.
236
+ * Filters noise, non-technical content, and enriches with quality comments.
237
+ */
238
+ declare function fetchGitHubIssues(owner: string, repo: string, limit?: number, releasedAt?: string, fromDate?: string): Promise<GitHubIssue[]>;
239
+ /**
240
+ * Format a single issue as markdown with YAML frontmatter
241
+ */
242
+ declare function formatIssueAsMarkdown(issue: GitHubIssue): string;
243
+ /**
244
+ * Generate a summary index of all issues for quick LLM scanning.
245
+ * Groups by type so the LLM can quickly find bugs vs questions.
246
+ */
247
+ declare function generateIssueIndex(issues: GitHubIssue[]): string;
248
+ /**
249
+ * Check for llms.txt at a docs URL, returns the llms.txt URL if found
250
+ */
251
+ declare function fetchLlmsUrl(docsUrl: string): Promise<string | null>;
252
+ /**
253
+ * Fetch and parse llms.txt content
254
+ */
255
+ declare function fetchLlmsTxt(url: string): Promise<LlmsContent | null>;
256
+ /**
257
+ * Parse markdown links from llms.txt to get .md file paths
258
+ */
259
+ declare function parseMarkdownLinks(content: string): LlmsLink[];
260
+ declare function downloadLlmsDocs(llmsContent: LlmsContent, baseUrl: string, onProgress?: (url: string, index: number, total: number) => void): Promise<FetchedDoc[]>;
261
+ /**
262
+ * Normalize llms.txt links to relative paths for local access
263
+ * Handles: absolute URLs, root-relative paths, and relative paths
264
+ */
265
+ declare function normalizeLlmsLinks(content: string, baseUrl?: string): string;
266
+ /**
267
+ * Extract sections from llms-full.txt by URL patterns
268
+ * Format: ---\nurl: /path.md\n---\n<content>\n\n---\nurl: ...
269
+ */
270
+ declare function extractSections(content: string, patterns: string[]): string | null;
271
+ /** Try resolving a `link:` dependency to local package docs. Returns null if not a link dep or resolution fails. */
272
+ declare function resolveLocalDep(packageName: string, cwd: string): Promise<ResolvedPackage | null>;
273
+ /**
274
+ * Search npm registry for packages matching a query.
275
+ * Used as a fallback when direct package lookup fails.
276
+ */
277
+ declare function searchNpmPackages(query: string, size?: number): Promise<Array<{
278
+ name: string;
279
+ description?: string;
280
+ version: string;
281
+ }>>;
282
+ /**
283
+ * Fetch package info from npm registry
284
+ */
285
+ declare function fetchNpmPackage(packageName: string): Promise<NpmPackageInfo | null>;
286
+ interface DistTagInfo {
287
+ version: string;
288
+ releasedAt?: string;
289
+ }
290
+ interface NpmRegistryMeta {
291
+ releasedAt?: string;
292
+ distTags?: Record<string, DistTagInfo>;
293
+ }
294
+ /**
295
+ * Fetch release date and dist-tags from npm registry
296
+ */
297
+ declare function fetchNpmRegistryMeta(packageName: string, version: string): Promise<NpmRegistryMeta>;
298
+ type ResolveStep = 'npm' | 'github-docs' | 'github-meta' | 'github-search' | 'readme' | 'llms.txt' | 'crawl' | 'local';
299
+ interface ResolveOptions {
300
+ /** User's installed version - used to fetch versioned git docs */
301
+ version?: string;
302
+ /** Current working directory - for local readme fallback */
303
+ cwd?: string;
304
+ /** Progress callback - called before each resolution step */
305
+ onProgress?: (step: ResolveStep) => void;
306
+ }
307
+ /**
308
+ * Resolve documentation URL for a package (legacy - returns null on failure)
309
+ */
310
+ declare function resolvePackageDocs(packageName: string, options?: ResolveOptions): Promise<ResolvedPackage | null>;
311
+ /**
312
+ * Resolve documentation URL for a package with attempt tracking
313
+ */
314
+ declare function resolvePackageDocsWithAttempts(packageName: string, options?: ResolveOptions): Promise<ResolveResult>;
315
+ /**
316
+ * Parse version specifier, handling protocols like link:, workspace:, npm:, file:
317
+ */
318
+ declare function parseVersionSpecifier(name: string, version: string, cwd: string): LocalDependency | null;
319
+ /**
320
+ * Resolve the actual installed version of a package by finding its package.json
321
+ * via mlly's resolvePathSync. Works regardless of package manager or version protocol.
322
+ */
323
+ declare function resolveInstalledVersion(name: string, cwd: string): string | null;
324
+ /**
325
+ * Read package.json dependencies with versions
326
+ */
327
+ declare function readLocalDependencies(cwd: string): Promise<LocalDependency[]>;
328
+ interface LocalPackageInfo {
329
+ name: string;
330
+ version: string;
331
+ description?: string;
332
+ repoUrl?: string;
333
+ localPath: string;
334
+ }
335
+ /**
336
+ * Read package info from a local path (for link: deps)
337
+ */
338
+ declare function readLocalPackageInfo(localPath: string): LocalPackageInfo | null;
339
+ /**
340
+ * Resolve docs for a local package (link: dependency)
341
+ */
342
+ declare function resolveLocalPackageDocs(localPath: string): Promise<ResolvedPackage | null>;
343
+ /**
344
+ * Download and extract npm package tarball to cache directory.
345
+ * Used when the package isn't available in node_modules.
346
+ *
347
+ * Extracts to: ~/.skilld/references/<pkg>@<version>/pkg/
348
+ * Returns the extracted directory path, or null on failure.
349
+ */
350
+ declare function fetchPkgDist(name: string, version: string): Promise<string | null>;
351
+ /**
352
+ * Fetch just the latest version string from npm (lightweight)
353
+ */
354
+ declare function fetchLatestVersion(packageName: string): Promise<string | null>;
355
+ /**
356
+ * Get installed skill version from SKILL.md
357
+ */
358
+ declare function getInstalledSkillVersion(skillDir: string): string | null;
359
+ /**
360
+ * Package registry — types, lookup helpers, and reverse index.
361
+ * Curated registry data lives in package-registry.data.ts.
362
+ * Keyed by GitHub 'owner/repo' (source code repo).
363
+ */
364
+ interface BlogRelease {
365
+ version: string;
366
+ url: string;
367
+ date: string;
368
+ title?: string;
369
+ }
370
+ interface PackageEntry {
371
+ filePatterns?: string[];
372
+ primary?: boolean;
373
+ /** Extra rules injected into skill generation prompts */
374
+ rules?: string[];
375
+ }
376
+ interface RepoEntry {
377
+ owner: string;
378
+ repo: string;
379
+ /** Separate docs repo name (e.g. 'docs' → owner/docs) */
380
+ docsRepo?: string;
381
+ /** Path prefix to filter markdown files */
382
+ docsPath?: string;
383
+ /** Branch/ref override */
384
+ docsRef?: string;
385
+ /** Homepage URL */
386
+ homepage?: string;
387
+ /** URL pattern to crawl for docs (glob, e.g. 'https://example.com/docs/**') */
388
+ crawlUrl?: string;
389
+ /** Branch to fetch CHANGELOG.md from when installed version is a prerelease (e.g. 'minor' for Vue) */
390
+ prereleaseChangelogRef?: string;
391
+ /** Packages in this repo */
392
+ packages: Record<string, PackageEntry>;
393
+ /** Curated blog release posts */
394
+ blogReleases?: BlogRelease[];
395
+ }
396
+ interface DocOverride {
397
+ owner: string;
398
+ repo: string;
399
+ path: string;
400
+ ref?: string;
401
+ homepage?: string;
402
+ }
403
+ interface BlogPreset {
404
+ packageName: string;
405
+ releases: BlogRelease[];
406
+ }
407
+ declare function getDocOverride(packageName: string): DocOverride | undefined;
408
+ declare function getBlogPreset(packageName: string): BlogPreset | undefined;
409
+ declare function getFilePatterns(packageName: string): string[] | undefined;
410
+ declare function getRepoEntry(repoKey: string): RepoEntry | undefined;
411
+ declare function getRepoKeyForPackage(packageName: string): string | undefined;
412
+ declare function getPrereleaseChangelogRef(packageName: string): string | undefined;
413
+ declare function getCrawlUrl(packageName: string): string | undefined;
414
+ declare function getRelatedPackages(packageName: string): string[];
415
+ /**
416
+ * GitHub release notes fetching via GitHub API (preferred) with ungh.cc fallback
417
+ */
418
+ interface GitHubRelease {
419
+ id: number;
420
+ tag: string;
421
+ name: string;
422
+ prerelease: boolean;
423
+ createdAt: string;
424
+ publishedAt: string;
425
+ markdown: string;
426
+ }
427
+ interface CachedDoc {
428
+ path: string;
429
+ content: string;
430
+ }
431
+ interface SemVer {
432
+ major: number;
433
+ minor: number;
434
+ patch: number;
435
+ raw: string;
436
+ }
437
+ declare function parseSemver(version: string): SemVer | null;
438
+ /**
439
+ * Check if a version string contains a prerelease suffix (e.g. 6.0.0-beta, 1.2.3-rc.1)
440
+ */
441
+ declare function isPrerelease(version: string): boolean;
442
+ declare function compareSemver(a: SemVer, b: SemVer): number;
443
+ interface ReleaseIndexOptions {
444
+ releases: GitHubRelease[];
445
+ packageName?: string;
446
+ blogReleases?: Array<{
447
+ version: string;
448
+ title: string;
449
+ date: string;
450
+ }>;
451
+ hasChangelog?: boolean;
452
+ }
453
+ /**
454
+ * Generate a unified summary index of all releases for quick LLM scanning.
455
+ * Includes GitHub releases, blog release posts, and CHANGELOG link.
456
+ */
457
+ declare function generateReleaseIndex(releasesOrOpts: GitHubRelease[] | ReleaseIndexOptions, packageName?: string): string;
458
+ /**
459
+ * Fetch release notes for a package. Returns CachedDoc[] with releases/{tag}.md files.
460
+ *
461
+ * Strategy:
462
+ * 1. Fetch GitHub releases, filter to package-specific tags for monorepos
463
+ * 2. If no releases found, try CHANGELOG.md as fallback
464
+ */
465
+ declare function fetchReleaseNotes(owner: string, repo: string, installedVersion: string, gitRef?: string, packageName?: string, fromDate?: string, changelogRef?: string): Promise<CachedDoc[]>;
466
+ interface PackageResolution {
467
+ /** Bare package name (lower-cased for crates). */
468
+ packageName: string;
469
+ /** Public/lockfile name (`crate:` prefix retained). */
470
+ identityPackageName: string;
471
+ /** Cache-safe name used for `~/.skilld/references/<name>@<version>/`. */
472
+ storagePackageName: string;
473
+ isCrate: boolean;
474
+ /** Tag/version requested in the spec (e.g. "beta" from "vue@beta"). */
475
+ requestedTag?: string;
476
+ /** Version pinned in the project's package.json, if any. */
477
+ localVersion?: string;
478
+ /** Resolved package metadata, or null when no docs source matched. */
479
+ resolved: ResolvedPackage | null;
480
+ /** Per-source resolution log (npm, github-docs, llms.txt, ...). */
481
+ attempts: ResolveAttempt[];
482
+ /** npm registry version even when docs resolution failed. */
483
+ registryVersion?: string;
484
+ }
485
+ interface ResolvePackageOptions {
486
+ cwd: string;
487
+ /**
488
+ * Progress label callback. For npm, raw `ResolveStep` values are translated
489
+ * to friendly names (`npm registry`, `GitHub docs`, ...) — the same set of
490
+ * strings the legacy `RESOLVE_STEP_LABELS` map produced.
491
+ */
492
+ onProgress?: (message: string) => void;
493
+ }
494
+ /**
495
+ * Resolve `packageSpec` to a `PackageResolution`. `packageSpec` may be:
496
+ * - bare npm name: `vue`, `@scope/pkg`
497
+ * - npm with tag/version: `vue@beta`, `vue@3.4.0`
498
+ * - crate spec: `crate:tokio`, `crate:serde@1`
499
+ *
500
+ * Always returns a result; `resolved` is null when no docs source matched.
501
+ * The caller decides whether to fall through to shipped-skills, npm
502
+ * search-and-suggest, or hard error.
503
+ */
504
+ declare function resolvePackageOrCrate(packageSpec: string, opts: ResolvePackageOptions): Promise<PackageResolution>;
505
+ declare const $fetch: _$ofetch.$Fetch;
506
+ /**
507
+ * Fetch text content from URL
508
+ */
509
+ declare function fetchText(url: string): Promise<string | null>;
510
+ /**
511
+ * Fetch text from a GitHub raw URL with auth fallback for private repos.
512
+ * Tries unauthenticated first (fast path), falls back to authenticated
513
+ * request when the repo is known to be private or unauthenticated fails.
514
+ *
515
+ * Only sends auth tokens to raw.githubusercontent.com — returns null for
516
+ * non-GitHub URLs that fail unauthenticated to prevent token leakage.
517
+ */
518
+ declare function fetchGitHubRaw(url: string): Promise<string | null>;
519
+ /**
520
+ * Verify URL exists and is not HTML (likely 404 page)
521
+ */
522
+ declare function verifyUrl(url: string): Promise<boolean>;
523
+ /**
524
+ * Check if URL is a GitHub repo URL (not a docs site)
525
+ */
526
+ declare function isGitHubRepoUrl(url: string): boolean;
527
+ /**
528
+ * Parse owner/repo from GitHub URL
529
+ */
530
+ declare function parseGitHubUrl(url: string): {
531
+ owner: string;
532
+ repo: string;
533
+ } | null;
534
+ /** Parse owner/repo slug from GitHub URL */
535
+ declare function parseGitHubRepoSlug(url: string | undefined): string | undefined;
536
+ /**
537
+ * Normalize git repo URL to https
538
+ */
539
+ declare function normalizeRepoUrl(url: string): string;
540
+ /**
541
+ * Parse package spec with optional dist-tag or version: "vue@beta" → { name: "vue", tag: "beta" }
542
+ * Handles scoped packages: "@vue/reactivity@beta" → { name: "@vue/reactivity", tag: "beta" }
543
+ */
544
+ declare function parsePackageSpec(spec: string): {
545
+ name: string;
546
+ tag?: string;
547
+ };
548
+ /**
549
+ * Extract branch hint from URL fragment (e.g. "git+https://...#main" → "main")
550
+ */
551
+ declare function extractBranchHint(url: string): string | undefined;
552
+ export { fetchLlmsUrl as $, getRelatedPackages as A, toCrawlPattern as At, getInstalledSkillVersion as B, BlogRelease as C, resolveEntryFiles as Ct, getDocOverride as D, formatDiscussionAsMarkdown as Dt, getCrawlUrl as E, fetchGitHubDiscussions as Et, ResolveStep as F, resolveLocalPackageDocs as G, readLocalDependencies as H, fetchLatestVersion as I, searchNpmPackages as J, resolvePackageDocs as K, fetchNpmPackage as L, getRepoKeyForPackage as M, fetchBlogReleases as Mt, LocalPackageInfo as N, getFilePatterns as O, generateDiscussionIndex as Ot, ResolveOptions as P, fetchLlmsTxt as Q, fetchNpmRegistryMeta as R, BlogPreset as S, EntryFile as St, getBlogPreset as T, GitHubDiscussion as Tt, readLocalPackageInfo as U, parseVersionSpecifier as V, resolveInstalledVersion as W, downloadLlmsDocs as X, resolveLocalDep as Y, extractSections as Z, compareSemver as _, GitSkillSource as _t, isGitHubRepoUrl as a, generateIssueIndex as at, isPrerelease as b, parseGitSkillInput as bt, parseGitHubUrl as c, fetchReadme as ct, PackageResolution as d, GitDocsResult as dt, normalizeLlmsLinks as et, ResolvePackageOptions as f, MIN_GIT_DOCS as ft, SemVer as g, validateGitDocsWithLlms as gt, ReleaseIndexOptions as h, isShallowGitDocs as ht, fetchText as i, formatIssueAsMarkdown as it, getRepoEntry as j, resolveCrateDocsWithAttempts as jt, getPrereleaseChangelogRef as k, fetchCrawledDocs as kt, parsePackageSpec as l, fetchReadmeContent as lt, GitHubRelease as m, filterFrameworkDocs as mt, extractBranchHint as n, GitHubIssue as nt, normalizeRepoUrl as o, isGhAvailable as ot, resolvePackageOrCrate as p, fetchGitDocs as pt, resolvePackageDocsWithAttempts as q, fetchGitHubRaw as r, fetchGitHubIssues as rt, parseGitHubRepoSlug as s, fetchGitHubRepoMeta as st, $fetch as t, parseMarkdownLinks as tt, verifyUrl as u, resolveGitHubRepo as ut, fetchReleaseNotes as v, RemoteSkill as vt, DocOverride as w, generateDocsIndex as wt, parseSemver as x, parseSkillFrontmatterName as xt, generateReleaseIndex as y, fetchGitSkills as yt, fetchPkgDist as z };
553
+ //# sourceMappingURL=index4.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index4.d.mts","names":[],"sources":["../../src/sources/blog-releases.ts","../../src/sources/crates.ts","../../src/sources/crawl.ts","../../src/sources/discussions.ts","../../src/sources/docs.ts","../../src/sources/entries.ts","../../src/sources/git-skills.ts","../../src/sources/github-docs.ts","../../src/sources/github.ts","../../src/sources/issues.ts","../../src/sources/llms.ts","../../src/sources/local-dep.ts","../../src/sources/npm.ts","../../src/sources/package-registry.ts","../../src/sources/releases.ts","../../src/sources/resolve-package.ts","../../src/sources/utils.ts"],"mappings":"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"}