@llmindset/hf-mcp 0.1.16

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/dist/dataset-detail.d.ts +26 -0
  3. package/dist/dataset-detail.d.ts.map +1 -0
  4. package/dist/dataset-detail.js +157 -0
  5. package/dist/dataset-detail.js.map +1 -0
  6. package/dist/dataset-search.d.ts +62 -0
  7. package/dist/dataset-search.d.ts.map +1 -0
  8. package/dist/dataset-search.js +158 -0
  9. package/dist/dataset-search.js.map +1 -0
  10. package/dist/duplicate-space.d.ts +75 -0
  11. package/dist/duplicate-space.d.ts.map +1 -0
  12. package/dist/duplicate-space.js +189 -0
  13. package/dist/duplicate-space.js.map +1 -0
  14. package/dist/error-messages.d.ts +4 -0
  15. package/dist/error-messages.d.ts.map +1 -0
  16. package/dist/error-messages.js +30 -0
  17. package/dist/error-messages.js.map +1 -0
  18. package/dist/hf-api-call.d.ts +18 -0
  19. package/dist/hf-api-call.d.ts.map +1 -0
  20. package/dist/hf-api-call.js +105 -0
  21. package/dist/hf-api-call.js.map +1 -0
  22. package/dist/index.d.ts +16 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +16 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/model-detail.d.ts +26 -0
  27. package/dist/model-detail.d.ts.map +1 -0
  28. package/dist/model-detail.js +224 -0
  29. package/dist/model-detail.js.map +1 -0
  30. package/dist/model-search.d.ts +64 -0
  31. package/dist/model-search.d.ts.map +1 -0
  32. package/dist/model-search.js +161 -0
  33. package/dist/model-search.js.map +1 -0
  34. package/dist/paper-search.d.ts +58 -0
  35. package/dist/paper-search.d.ts.map +1 -0
  36. package/dist/paper-search.js +114 -0
  37. package/dist/paper-search.js.map +1 -0
  38. package/dist/paper-summary.d.ts +35 -0
  39. package/dist/paper-summary.d.ts.map +1 -0
  40. package/dist/paper-summary.js +187 -0
  41. package/dist/paper-summary.js.map +1 -0
  42. package/dist/space-files.d.ts +44 -0
  43. package/dist/space-files.d.ts.map +1 -0
  44. package/dist/space-files.js +242 -0
  45. package/dist/space-files.js.map +1 -0
  46. package/dist/space-info.d.ts +56 -0
  47. package/dist/space-info.d.ts.map +1 -0
  48. package/dist/space-info.js +135 -0
  49. package/dist/space-info.js.map +1 -0
  50. package/dist/space-search.d.ts +71 -0
  51. package/dist/space-search.d.ts.map +1 -0
  52. package/dist/space-search.js +95 -0
  53. package/dist/space-search.js.map +1 -0
  54. package/dist/tool-ids.d.ts +23 -0
  55. package/dist/tool-ids.d.ts.map +1 -0
  56. package/dist/tool-ids.js +55 -0
  57. package/dist/tool-ids.js.map +1 -0
  58. package/dist/user-summary.d.ts +56 -0
  59. package/dist/user-summary.d.ts.map +1 -0
  60. package/dist/user-summary.js +271 -0
  61. package/dist/user-summary.js.map +1 -0
  62. package/dist/utilities.d.ts +8 -0
  63. package/dist/utilities.d.ts.map +1 -0
  64. package/dist/utilities.js +53 -0
  65. package/dist/utilities.js.map +1 -0
  66. package/eslint.config.js +43 -0
  67. package/package.json +47 -0
  68. package/src/dataset-detail.ts +257 -0
  69. package/src/dataset-search.ts +237 -0
  70. package/src/duplicate-space.ts +263 -0
  71. package/src/error-messages.ts +57 -0
  72. package/src/hf-api-call.ts +182 -0
  73. package/src/index.ts +18 -0
  74. package/src/model-detail.ts +359 -0
  75. package/src/model-search.ts +231 -0
  76. package/src/paper-search.ts +188 -0
  77. package/src/paper-summary.ts +303 -0
  78. package/src/space-files.ts +325 -0
  79. package/src/space-info.ts +190 -0
  80. package/src/space-search.ts +177 -0
  81. package/src/tool-ids.ts +84 -0
  82. package/src/user-summary.ts +421 -0
  83. package/src/utilities.ts +64 -0
  84. package/test/duplicate-space.spec.ts +41 -0
  85. package/test/fixtures/paper_result_kazakh.json +854 -0
  86. package/test/fixtures/space-result.json +263 -0
  87. package/test/paper-search.spec.ts +57 -0
  88. package/test/paper-summary.spec.ts +113 -0
  89. package/test/space-files.spec.ts +232 -0
  90. package/test/space-search.spec.ts +29 -0
  91. package/test/user-summary.spec.ts +131 -0
  92. package/tsconfig.json +31 -0
  93. package/vitest.config.ts +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paper-search.js","sourceRoot":"","sources":["../src/paper-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall } from './hf-api-call.js';
3
+ import { type Author } from './paper-search.js';
4
+ export declare const PAPER_SUMMARY_PROMPT_CONFIG: {
5
+ readonly name: "Paper Summary";
6
+ readonly description: string;
7
+ readonly schema: z.ZodObject<{
8
+ paper_id: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ paper_id: string;
11
+ }, {
12
+ paper_id: string;
13
+ }>;
14
+ };
15
+ export type PaperSummaryParams = z.infer<typeof PAPER_SUMMARY_PROMPT_CONFIG.schema>;
16
+ interface PaperDetails {
17
+ id: string;
18
+ title: string;
19
+ authors?: Author[];
20
+ publishedAt: string;
21
+ summary?: string;
22
+ upvotes?: number;
23
+ comments?: number;
24
+ pageUrl?: string;
25
+ }
26
+ export declare function extractArxivIdFromInput(input: string): string;
27
+ export declare class PaperSummaryPrompt extends HfApiCall<Record<string, string>, PaperDetails> {
28
+ constructor(hfToken?: string);
29
+ generateSummary(params: PaperSummaryParams): Promise<string>;
30
+ private getPaperDetails;
31
+ private formatPaperDetails;
32
+ private getRelatedResources;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=paper-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paper-summary.d.ts","sourceRoot":"","sources":["../src/paper-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAc,MAAM,kBAAkB,CAAC;AAKzD,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGzD,eAAO,MAAM,2BAA2B;;;;;;;;;;CAa9B,CAAC;AAGX,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAGpF,UAAU,YAAY;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA0F7D;AAKD,qBAAa,kBAAmB,SAAQ,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC;gBAI1E,OAAO,CAAC,EAAE,MAAM;IAOtB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;YA6DpD,eAAe;IAQ7B,OAAO,CAAC,kBAAkB;YAyCZ,mBAAmB;CAyCjC"}
@@ -0,0 +1,187 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall, HfApiError } from './hf-api-call.js';
3
+ import { formatDate, formatNumber, escapeMarkdown } from './utilities.js';
4
+ import { ModelSearchTool } from './model-search.js';
5
+ import { DatasetSearchTool } from './dataset-search.js';
6
+ import { SpaceSearchTool } from './space-search.js';
7
+ import { authors } from './paper-search.js';
8
+ export const PAPER_SUMMARY_PROMPT_CONFIG = {
9
+ name: 'Paper Summary',
10
+ description: 'Generate a comprehensive summary of an arXiv paper including its details and related models, datasets, and spaces on Hugging Face. ' +
11
+ 'Accepts various formats: "2502.16161", "arxiv:2502.16161", "https://arxiv.org/abs/2502.16161", or Hugging Face paper URLs.',
12
+ schema: z.object({
13
+ paper_id: z
14
+ .string()
15
+ .min(1, 'Paper ID is required')
16
+ .describe('arXiv paper ID in various formats (e.g., "2502.16161", "arxiv:2502.16161", or full URL)')
17
+ .max(60)
18
+ .describe('Maximum length is 100 characters'),
19
+ }),
20
+ };
21
+ export function extractArxivIdFromInput(input) {
22
+ const trimmed = input.trim();
23
+ if (!trimmed) {
24
+ throw new Error('Paper ID is required');
25
+ }
26
+ const arxivPattern = /^\d{4}\.\d{4,5}$/;
27
+ if (arxivPattern.test(trimmed)) {
28
+ return trimmed;
29
+ }
30
+ const urlPattern = /^(https?:\/\/|www\.)|^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/|$)/;
31
+ if (urlPattern.test(trimmed) || trimmed.includes('://')) {
32
+ let url;
33
+ try {
34
+ if (!trimmed.startsWith('http')) {
35
+ url = new URL(`https://${trimmed}`);
36
+ }
37
+ else {
38
+ url = new URL(trimmed);
39
+ }
40
+ }
41
+ catch {
42
+ throw new Error('Invalid URL format');
43
+ }
44
+ if (url.search || url.hash) {
45
+ throw new Error('URL must contain only the paper ID path');
46
+ }
47
+ const allowedHosts = ['arxiv.org', 'www.arxiv.org', 'huggingface.co', 'hf.co'];
48
+ if (!allowedHosts.includes(url.hostname)) {
49
+ throw new Error(`URL must be from arxiv.org, huggingface.co, or hf.co. Got: ${url.hostname}`);
50
+ }
51
+ if (url.hostname === 'arxiv.org' || url.hostname === 'www.arxiv.org') {
52
+ const match = url.pathname.match(/\/abs\/(\d{4}\.\d{4,5})/);
53
+ if (match && match[1]) {
54
+ return match[1];
55
+ }
56
+ throw new Error('arXiv URL must be in format: arxiv.org/abs/YYMM.NNNNN');
57
+ }
58
+ if (url.hostname === 'huggingface.co' || url.hostname === 'hf.co') {
59
+ const match = url.pathname.match(/\/papers\/(\d{4}\.\d{4,5})/);
60
+ if (match && match[1]) {
61
+ return match[1];
62
+ }
63
+ throw new Error('Hugging Face URL must be in format: hf.co/papers/YYMM.NNNNN');
64
+ }
65
+ throw new Error('URL does not contain a valid arXiv ID');
66
+ }
67
+ if (trimmed.toLowerCase().startsWith('arxiv:')) {
68
+ const id = trimmed.substring(6);
69
+ if (arxivPattern.test(id)) {
70
+ return id;
71
+ }
72
+ throw new Error('Invalid arXiv ID format after "arxiv:" prefix');
73
+ }
74
+ if (trimmed.toLowerCase().startsWith('arxiv.')) {
75
+ const id = trimmed.substring(6);
76
+ if (arxivPattern.test(id)) {
77
+ return id;
78
+ }
79
+ throw new Error('Invalid arXiv ID format after "arxiv." prefix');
80
+ }
81
+ throw new Error(`Invalid arXiv ID format: "${trimmed}". Expected formats: "2502.16161", "arxiv:2502.16161", or paper URL`);
82
+ }
83
+ export class PaperSummaryPrompt extends HfApiCall {
84
+ constructor(hfToken) {
85
+ super('https://huggingface.co/api/papers', hfToken);
86
+ }
87
+ async generateSummary(params) {
88
+ try {
89
+ const arxivId = extractArxivIdFromInput(params.paper_id);
90
+ let paperDetails;
91
+ try {
92
+ paperDetails = await this.getPaperDetails(arxivId);
93
+ }
94
+ catch (error) {
95
+ if (error instanceof HfApiError && error.status === 404) {
96
+ return "I'm sorry, paper not found.";
97
+ }
98
+ throw error;
99
+ }
100
+ const sections = [];
101
+ sections.push(this.formatPaperDetails(paperDetails));
102
+ const relatedResources = await this.getRelatedResources(arxivId);
103
+ if (relatedResources.models) {
104
+ sections.push(relatedResources.models);
105
+ }
106
+ if (relatedResources.datasets) {
107
+ sections.push(relatedResources.datasets);
108
+ }
109
+ if (relatedResources.spaces) {
110
+ sections.push(relatedResources.spaces);
111
+ }
112
+ sections.push('\n**Note:** Tags and paper references on Hugging Face are not always complete or up-to-date. ' +
113
+ '-- validate information if necessary');
114
+ sections.push('\nPlease provide a summary of this paper and any associated resources.');
115
+ return sections.join('\n\n');
116
+ }
117
+ catch (error) {
118
+ if (error instanceof Error) {
119
+ throw new Error(`Failed to generate paper summary: ${error.message}`);
120
+ }
121
+ throw error;
122
+ }
123
+ }
124
+ async getPaperDetails(arxivId) {
125
+ const url = new URL(`${this.apiUrl}/${arxivId}`);
126
+ return this.fetchFromApi(url);
127
+ }
128
+ formatPaperDetails(paper) {
129
+ const lines = [];
130
+ lines.push(`# ${escapeMarkdown(paper.title || 'Untitled')}`);
131
+ lines.push('');
132
+ lines.push(authors(paper.authors));
133
+ lines.push(`**Published:** ${formatDate(paper.publishedAt)}`);
134
+ if (paper.upvotes && paper.upvotes > 0) {
135
+ lines.push(`**Upvotes:** ${formatNumber(paper.upvotes)}`);
136
+ }
137
+ if (paper.comments && paper.comments > 0) {
138
+ lines.push(`**Comments:** ${formatNumber(paper.comments)}`);
139
+ }
140
+ lines.push('');
141
+ lines.push('**Links:**');
142
+ lines.push(`- [Hugging Face Paper Page](https://hf.co/papers/${paper.id})`);
143
+ lines.push(`- [arXiv Page](https://arxiv.org/abs/${paper.id})`);
144
+ if (paper.summary) {
145
+ lines.push('');
146
+ lines.push('## Abstract');
147
+ lines.push('');
148
+ lines.push(paper.summary);
149
+ }
150
+ return lines.join('\n');
151
+ }
152
+ async getRelatedResources(arxivId) {
153
+ const results = {};
154
+ try {
155
+ const modelSearch = new ModelSearchTool(this.hfToken);
156
+ const modelResults = await modelSearch.searchWithFilter(`arxiv:${arxivId}`, 25);
157
+ if (modelResults && !modelResults.includes('No models found')) {
158
+ results.models = `## Related Models\n\n${modelResults}`;
159
+ }
160
+ }
161
+ catch (error) {
162
+ console.warn(`Failed to fetch related models for paper ${arxivId}:`, error);
163
+ }
164
+ try {
165
+ const datasetSearch = new DatasetSearchTool(this.hfToken);
166
+ const datasetResults = await datasetSearch.searchWithFilter(`arxiv:${arxivId}`, 25);
167
+ if (datasetResults && !datasetResults.includes('No datasets found')) {
168
+ results.datasets = `## Related Datasets\n\n${datasetResults}`;
169
+ }
170
+ }
171
+ catch (error) {
172
+ console.warn(`Failed to fetch related datasets for paper ${arxivId}:`, error);
173
+ }
174
+ try {
175
+ const spaceSearch = new SpaceSearchTool(this.hfToken);
176
+ const spaceResults = await spaceSearch.searchWithFilter(`arxiv:${arxivId}`, 25, 2);
177
+ if (spaceResults && !spaceResults.includes('No matching Hugging Face Spaces found')) {
178
+ results.spaces = `## Related Spaces\n\n${spaceResults}`;
179
+ }
180
+ }
181
+ catch (error) {
182
+ console.warn(`Failed to fetch related spaces for paper ${arxivId}:`, error);
183
+ }
184
+ return results;
185
+ }
186
+ }
187
+ //# sourceMappingURL=paper-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paper-summary.js","sourceRoot":"","sources":["../src/paper-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ export interface FileWithUrl {
3
+ path: string;
4
+ size: number;
5
+ type: 'file' | 'directory' | 'unknown';
6
+ url: string;
7
+ sizeFormatted: string;
8
+ lastModified?: string;
9
+ lfs: boolean;
10
+ }
11
+ export declare const SPACE_FILES_TOOL_CONFIG: {
12
+ readonly name: "space_files";
13
+ readonly description: "";
14
+ readonly schema: z.ZodObject<{
15
+ spaceName: z.ZodOptional<z.ZodString>;
16
+ fileType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "image", "audio"]>>>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ fileType: "all" | "image" | "audio";
19
+ spaceName?: string | undefined;
20
+ }, {
21
+ spaceName?: string | undefined;
22
+ fileType?: "all" | "image" | "audio" | undefined;
23
+ }>;
24
+ readonly annotations: {
25
+ readonly title: "Space Files List";
26
+ readonly destructiveHint: false;
27
+ readonly readOnlyHint: true;
28
+ readonly openWorldHint: true;
29
+ };
30
+ };
31
+ export type SpaceFilesParams = z.infer<typeof SPACE_FILES_TOOL_CONFIG.schema>;
32
+ export declare class SpaceFilesTool {
33
+ private readonly accessToken?;
34
+ private readonly username?;
35
+ constructor(hfToken?: string, username?: string);
36
+ static createToolConfig(username?: string): typeof SPACE_FILES_TOOL_CONFIG;
37
+ getSpaceFilesWithUrls(spaceName: string): Promise<FileWithUrl[]>;
38
+ private constructFileUrl;
39
+ generateDetailedMarkdown(spaceName: string, fileType?: 'all' | 'image' | 'audio'): Promise<string>;
40
+ generateSimpleMarkdown(spaceName: string, fileType?: 'all' | 'image' | 'audio'): Promise<string>;
41
+ listFiles(params: SpaceFilesParams): Promise<string>;
42
+ private getFileIcon;
43
+ }
44
+ //# sourceMappingURL=space-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-files.d.ts","sourceRoot":"","sources":["../src/space-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;CACb;AA2DD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;CAiB1B,CAAC;AAGX,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAK9E,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;gBAEvB,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAK/C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,uBAAuB;IAapE,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDtE,OAAO,CAAC,gBAAgB;IAOlB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,KAAK,GAAG,OAAO,GAAG,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA4EzG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,KAAK,GAAG,OAAO,GAAG,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBvG,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAY1D,OAAO,CAAC,WAAW;CAmCnB"}
@@ -0,0 +1,242 @@
1
+ import { z } from 'zod';
2
+ import { listFiles, spaceInfo } from '@huggingface/hub';
3
+ import { formatBytes, escapeMarkdown } from './utilities.js';
4
+ import { HfApiError } from './hf-api-call.js';
5
+ import { explain } from './error-messages.js';
6
+ const IMAGE_EXTENSIONS = new Set([
7
+ '.jpg',
8
+ '.jpeg',
9
+ '.png',
10
+ '.gif',
11
+ '.bmp',
12
+ '.tiff',
13
+ '.tif',
14
+ '.webp',
15
+ '.svg',
16
+ '.ico',
17
+ '.heic',
18
+ '.heif',
19
+ ]);
20
+ const AUDIO_EXTENSIONS = new Set([
21
+ '.mp3',
22
+ '.wav',
23
+ '.flac',
24
+ '.aac',
25
+ '.ogg',
26
+ '.m4a',
27
+ '.wma',
28
+ '.opus',
29
+ '.aiff',
30
+ '.au',
31
+ '.ra',
32
+ ]);
33
+ function getFileExtension(path) {
34
+ const lastDot = path.lastIndexOf('.');
35
+ return lastDot === -1 ? '' : path.substring(lastDot).toLowerCase();
36
+ }
37
+ function isImageFile(path) {
38
+ return IMAGE_EXTENSIONS.has(getFileExtension(path));
39
+ }
40
+ function isAudioFile(path) {
41
+ return AUDIO_EXTENSIONS.has(getFileExtension(path));
42
+ }
43
+ function matchesFileType(file, fileType) {
44
+ switch (fileType) {
45
+ case 'all':
46
+ return true;
47
+ case 'image':
48
+ return isImageFile(file.path);
49
+ case 'audio':
50
+ return isAudioFile(file.path);
51
+ default:
52
+ return true;
53
+ }
54
+ }
55
+ export const SPACE_FILES_TOOL_CONFIG = {
56
+ name: 'space_files',
57
+ description: '',
58
+ schema: z.object({
59
+ spaceName: z.string().optional().describe('Space identifier in format "username/spacename"'),
60
+ fileType: z
61
+ .enum(['all', 'image', 'audio'])
62
+ .optional()
63
+ .default('all')
64
+ .describe('Filter files by type: all (default), image, or audio files only'),
65
+ }),
66
+ annotations: {
67
+ title: 'Space Files List',
68
+ destructiveHint: false,
69
+ readOnlyHint: true,
70
+ openWorldHint: true,
71
+ },
72
+ };
73
+ export class SpaceFilesTool {
74
+ accessToken;
75
+ username;
76
+ constructor(hfToken, username) {
77
+ this.accessToken = hfToken;
78
+ this.username = username;
79
+ }
80
+ static createToolConfig(username) {
81
+ const description = username
82
+ ? `Defaults to ${username}/filedrop. List files in a static Hugging Face Space. Use the URL for specifying Files inputs to Gradio endpoints or downloading files`
83
+ : `List all files in a static Hugging Face Space. Use the URL for specifying Files inputs to Gradio endpoints or downloading files.`;
84
+ return {
85
+ ...SPACE_FILES_TOOL_CONFIG,
86
+ description: description,
87
+ };
88
+ }
89
+ async getSpaceFilesWithUrls(spaceName) {
90
+ try {
91
+ const space = await spaceInfo({
92
+ name: spaceName,
93
+ additionalFields: ['subdomain'],
94
+ ...(this.accessToken && { accessToken: this.accessToken }),
95
+ });
96
+ if (space.sdk !== 'static') {
97
+ throw new Error(`Space "${spaceName}" is not a static space (found: ${space.sdk}). This tool only works with static spaces.`);
98
+ }
99
+ const files = [];
100
+ for await (const file of listFiles({
101
+ repo: { type: 'space', name: spaceName },
102
+ recursive: true,
103
+ expand: true,
104
+ ...(this.accessToken && { credentials: { accessToken: this.accessToken } }),
105
+ })) {
106
+ if (file.type === 'file') {
107
+ files.push({
108
+ path: file.path,
109
+ size: file.size,
110
+ type: file.type,
111
+ url: this.constructFileUrl(spaceName, file.path),
112
+ sizeFormatted: formatBytes(file.size),
113
+ lastModified: file.lastCommit?.date,
114
+ lfs: !!file.lfs,
115
+ });
116
+ }
117
+ }
118
+ return files.sort((a, b) => a.path.localeCompare(b.path));
119
+ }
120
+ catch (error) {
121
+ if (error instanceof HfApiError) {
122
+ throw explain(error, `Failed to list files for space "${spaceName}"`);
123
+ }
124
+ throw error;
125
+ }
126
+ }
127
+ constructFileUrl(spaceName, filePath) {
128
+ return `https://huggingface.co/spaces/${spaceName}/resolve/main/${filePath}`;
129
+ }
130
+ async generateDetailedMarkdown(spaceName, fileType = 'all') {
131
+ const allFiles = await this.getSpaceFilesWithUrls(spaceName);
132
+ const files = allFiles.filter((file) => matchesFileType(file, fileType));
133
+ let markdown = `# Files in Space: ${spaceName}\n\n`;
134
+ if (fileType !== 'all') {
135
+ markdown += `**Filter**: ${fileType} files only\n`;
136
+ }
137
+ markdown += `**Total Files**: ${files.length}\n`;
138
+ markdown += `**Total Size**: ${formatBytes(files.reduce((sum, f) => sum + f.size, 0))}\n\n`;
139
+ if (files.length === 0) {
140
+ if (fileType !== 'all') {
141
+ markdown += `No ${fileType} files found in this space.\n`;
142
+ }
143
+ else {
144
+ markdown += `No files found in this space.\n`;
145
+ }
146
+ return markdown;
147
+ }
148
+ const byDirectory = files.reduce((acc, file) => {
149
+ const dir = file.path.includes('/') ? file.path.substring(0, file.path.lastIndexOf('/')) : '/';
150
+ if (!acc[dir])
151
+ acc[dir] = [];
152
+ acc[dir].push(file);
153
+ return acc;
154
+ }, {});
155
+ markdown += `## All Files\n\n`;
156
+ markdown += `| File Path | Size | Type | Last Modified | URL |\n`;
157
+ markdown += `|-----------|------|------|---------------|-----|\n`;
158
+ const sortedDirs = Object.keys(byDirectory).sort();
159
+ for (const dir of sortedDirs) {
160
+ const dirFiles = byDirectory[dir];
161
+ if (!dirFiles)
162
+ continue;
163
+ if (dir !== '/' && dirFiles.length > 0) {
164
+ markdown += `| **📁 ${escapeMarkdown(dir)}/** | | | | |\n`;
165
+ }
166
+ for (const file of dirFiles) {
167
+ const fileName = file.path.split('/').pop() || file.path;
168
+ const indent = dir === '/' ? '' : '&nbsp;&nbsp;&nbsp;&nbsp;';
169
+ const icon = this.getFileIcon(fileName);
170
+ const lastMod = file.lastModified ? new Date(file.lastModified).toLocaleDateString() : '-';
171
+ markdown += `| ${indent}${icon} ${escapeMarkdown(fileName)} | ${file.sizeFormatted} | ${file.lfs ? 'LFS' : 'Regular'} | ${lastMod} | ${file.url} |\n`;
172
+ }
173
+ }
174
+ markdown += `\n## Direct Access Examples\n\n`;
175
+ markdown += `\`\`\`bash\n`;
176
+ const examples = files.slice(0, 2);
177
+ for (const file of examples) {
178
+ markdown += `# Download ${file.path}\n`;
179
+ markdown += `curl -L -O ${file.url}\n\n`;
180
+ }
181
+ markdown += `\`\`\`\n`;
182
+ markdown += '## Use the URL when specifying Files inputs for Gradio endpoints.\n\n';
183
+ markdown += 'This space is accessible via `git` with `git clone https://huggingface.co/spaces/' + spaceName + '`\n';
184
+ return markdown;
185
+ }
186
+ async generateSimpleMarkdown(spaceName, fileType = 'all') {
187
+ const allFiles = await this.getSpaceFilesWithUrls(spaceName);
188
+ const files = allFiles.filter((file) => matchesFileType(file, fileType));
189
+ let markdown = `# Files in ${spaceName}\n\n`;
190
+ if (fileType !== 'all') {
191
+ markdown += `**Filter**: ${fileType} files only\n\n`;
192
+ }
193
+ markdown += `| File Name | Path | Size | URL |\n`;
194
+ markdown += `|-----------|------|------|-----|\n`;
195
+ for (const file of files) {
196
+ const fileName = file.path.split('/').pop() || file.path;
197
+ const icon = this.getFileIcon(fileName);
198
+ markdown += `| ${icon} ${escapeMarkdown(fileName)} | ${escapeMarkdown(file.path)} | ${file.sizeFormatted} | [Link](${file.url}) |\n`;
199
+ }
200
+ return markdown;
201
+ }
202
+ async listFiles(params) {
203
+ const { fileType = 'all' } = params;
204
+ const spaceName = params.spaceName || (this.username ? `${this.username}/filedrop` : 'filedrop');
205
+ return this.generateDetailedMarkdown(spaceName, fileType);
206
+ }
207
+ getFileIcon(filename) {
208
+ const ext = filename.split('.').pop()?.toLowerCase();
209
+ const iconMap = {
210
+ py: '🐍',
211
+ js: '📜',
212
+ ts: '📘',
213
+ md: '📝',
214
+ txt: '📄',
215
+ json: '📊',
216
+ yaml: '⚙️',
217
+ yml: '⚙️',
218
+ png: '🖼️',
219
+ jpg: '🖼️',
220
+ jpeg: '🖼️',
221
+ gif: '🖼️',
222
+ svg: '🎨',
223
+ mp4: '🎬',
224
+ mp3: '🎵',
225
+ pdf: '📕',
226
+ zip: '📦',
227
+ tar: '📦',
228
+ gz: '📦',
229
+ html: '🌐',
230
+ css: '🎨',
231
+ ipynb: '📓',
232
+ csv: '📊',
233
+ parquet: '🗄️',
234
+ safetensors: '🤖',
235
+ bin: '💾',
236
+ pkl: '🥒',
237
+ h5: '🗃️',
238
+ };
239
+ return iconMap[ext || ''] || '📄';
240
+ }
241
+ }
242
+ //# sourceMappingURL=space-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-files.js","sourceRoot":"","sources":["../src/space-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { z } from 'zod';
2
+ import { HfApiCall } from './hf-api-call.js';
3
+ import type { SpaceRuntime, SpaceSdk } from '@huggingface/hub';
4
+ interface SpaceReport {
5
+ user: string;
6
+ generatedAt: Date;
7
+ totalSpaces: number;
8
+ publicSpaces: number;
9
+ privateSpaces: number;
10
+ runningSpaces: number;
11
+ totalLikes: number;
12
+ sdkCounts: Record<string, number>;
13
+ spaces: SpaceDetails[];
14
+ }
15
+ interface SpaceDetails {
16
+ name: string;
17
+ url: string;
18
+ sdk: SpaceSdk | 'unknown';
19
+ status: SpaceRuntime['stage'] | 'UNKNOWN';
20
+ statusEmoji: string;
21
+ hardware: string;
22
+ storage: string;
23
+ visibility: string;
24
+ likes: number;
25
+ lastModified: string;
26
+ }
27
+ export interface SpaceInfoParams {
28
+ username?: string;
29
+ }
30
+ export declare const SPACE_INFO_TOOL_CONFIG: {
31
+ readonly name: "space_info";
32
+ readonly description: "";
33
+ readonly schema: z.ZodObject<{
34
+ username: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ username?: string | undefined;
37
+ }, {
38
+ username?: string | undefined;
39
+ }>;
40
+ readonly annotations: {
41
+ readonly title: "Hugging Face Spaces Information";
42
+ readonly destructiveHint: false;
43
+ readonly readOnlyHint: true;
44
+ readonly openWorldHint: false;
45
+ };
46
+ };
47
+ export declare class SpaceInfoTool extends HfApiCall<SpaceInfoParams, SpaceReport> {
48
+ private authenticatedUsername?;
49
+ constructor(hfToken?: string, authenticatedUsername?: string);
50
+ static createToolConfig(username?: string): typeof SPACE_INFO_TOOL_CONFIG;
51
+ getSpacesReport(targetUsername?: string): Promise<string>;
52
+ private generateMarkdown;
53
+ }
54
+ export declare const formatSpaceInfoResult: (tool: SpaceInfoTool, params: SpaceInfoParams) => Promise<string>;
55
+ export {};
56
+ //# sourceMappingURL=space-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-info.d.ts","sourceRoot":"","sources":["../src/space-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAc,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG3E,UAAU,WAAW;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACrB;AAgBD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAYzB,CAAC;AAEX,qBAAa,aAAc,SAAQ,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC;IACzE,OAAO,CAAC,qBAAqB,CAAC,CAAS;gBAE3B,OAAO,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM;IAK5D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,sBAAsB;IAUnE,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiE/D,OAAO,CAAC,gBAAgB;CAuCxB;AAED,eAAO,MAAM,qBAAqB,GAAU,MAAM,aAAa,EAAE,QAAQ,eAAe,KAAG,OAAO,CAAC,MAAM,CAExG,CAAC"}