@llmindset/hf-mcp 0.2.17 → 0.2.19

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.
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import type { ToolResult } from './types/tool-result.js';
3
+ export declare const HUB_INSPECT_TOOL_CONFIG: {
4
+ readonly name: "hub_inspect";
5
+ readonly description: string;
6
+ readonly schema: z.ZodObject<{
7
+ repo_ids: z.ZodArray<z.ZodString, "many">;
8
+ repo_type: z.ZodOptional<z.ZodEnum<["model", "dataset", "space"]>>;
9
+ include_readme: z.ZodDefault<z.ZodBoolean>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ repo_ids: string[];
12
+ include_readme: boolean;
13
+ repo_type?: "space" | "dataset" | "model" | undefined;
14
+ }, {
15
+ repo_ids: string[];
16
+ repo_type?: "space" | "dataset" | "model" | undefined;
17
+ include_readme?: boolean | undefined;
18
+ }>;
19
+ readonly annotations: {
20
+ readonly title: "Hub Inspect";
21
+ readonly destructiveHint: false;
22
+ readonly readOnlyHint: true;
23
+ readonly openWorldHint: false;
24
+ };
25
+ };
26
+ export type HubInspectParams = z.infer<typeof HUB_INSPECT_TOOL_CONFIG.schema>;
27
+ export declare class HubInspectTool {
28
+ private readonly modelDetail;
29
+ private readonly datasetDetail;
30
+ private readonly hubUrl?;
31
+ constructor(hfToken?: string, hubUrl?: string);
32
+ inspect(params: HubInspectParams, includeReadme?: boolean): Promise<ToolResult>;
33
+ private inspectSingle;
34
+ private getSpaceDetails;
35
+ }
36
+ //# sourceMappingURL=hub-inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-inspect.d.ts","sourceRoot":"","sources":["../src/hub-inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;CAoB1B,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAE9E,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;gBAErB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAMvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,UAAU,CAAC;YAsB9E,aAAa;YA+Cb,eAAe;CA8B7B"}
@@ -0,0 +1,115 @@
1
+ import { z } from 'zod';
2
+ import { ModelDetailTool } from './model-detail.js';
3
+ import { DatasetDetailTool } from './dataset-detail.js';
4
+ import { spaceInfo } from '@huggingface/hub';
5
+ import { formatDate } from './utilities.js';
6
+ export const HUB_INSPECT_TOOL_CONFIG = {
7
+ name: 'hub_inspect',
8
+ description: 'Get details for one or more Hugging Face repos (model, dataset, or space). ' +
9
+ 'Auto-detects type unless specified.',
10
+ schema: z.object({
11
+ repo_ids: z
12
+ .array(z.string().min(1))
13
+ .min(1, 'Provide at least one id')
14
+ .max(10, 'Provide at most 10 repo ids')
15
+ .describe('Repo IDs for (models|dataset/space) - usually in author/name format (e.g. openai/gpt-oss-120b)'),
16
+ repo_type: z.enum(['model', 'dataset', 'space']).optional().describe('Specify lookup type; otherwise auto-detects'),
17
+ include_readme: z.boolean().default(true).describe('Include README from the repo'),
18
+ }),
19
+ annotations: {
20
+ title: 'Hub Inspect',
21
+ destructiveHint: false,
22
+ readOnlyHint: true,
23
+ openWorldHint: false,
24
+ },
25
+ };
26
+ export class HubInspectTool {
27
+ modelDetail;
28
+ datasetDetail;
29
+ hubUrl;
30
+ constructor(hfToken, hubUrl) {
31
+ this.modelDetail = new ModelDetailTool(hfToken, hubUrl);
32
+ this.datasetDetail = new DatasetDetailTool(hfToken, hubUrl);
33
+ this.hubUrl = hubUrl;
34
+ }
35
+ async inspect(params, includeReadme = false) {
36
+ const parts = [];
37
+ let successCount = 0;
38
+ for (const id of params.repo_ids) {
39
+ try {
40
+ const section = await this.inspectSingle(id, params.repo_type, includeReadme);
41
+ parts.push(section);
42
+ successCount += 1;
43
+ }
44
+ catch (err) {
45
+ const msg = err instanceof Error ? err.message : String(err);
46
+ parts.push(`# ${id}\n\n- Error: ${msg}`);
47
+ }
48
+ }
49
+ return {
50
+ formatted: parts.join('\n\n---\n\n'),
51
+ totalResults: params.repo_ids.length,
52
+ resultsShared: successCount,
53
+ };
54
+ }
55
+ async inspectSingle(repoId, type, includeReadme) {
56
+ if (type === 'model') {
57
+ return (await this.modelDetail.getDetails(repoId, includeReadme)).formatted;
58
+ }
59
+ if (type === 'dataset') {
60
+ return (await this.datasetDetail.getDetails(repoId, includeReadme)).formatted;
61
+ }
62
+ if (type === 'space') {
63
+ return await this.getSpaceDetails(repoId);
64
+ }
65
+ const matches = [];
66
+ try {
67
+ const r = await this.modelDetail.getDetails(repoId, includeReadme);
68
+ matches.push(`**Type: Model**\n\n${r.formatted}`);
69
+ }
70
+ catch {
71
+ }
72
+ try {
73
+ const r = await this.datasetDetail.getDetails(repoId, includeReadme);
74
+ matches.push(`**Type: Dataset**\n\n${r.formatted}`);
75
+ }
76
+ catch {
77
+ }
78
+ try {
79
+ const r = await this.getSpaceDetails(repoId);
80
+ matches.push(`**Type: Space**\n\n${r}`);
81
+ }
82
+ catch {
83
+ }
84
+ if (matches.length === 0) {
85
+ throw new Error(`Could not find repo '${repoId}' as model, dataset, or space.`);
86
+ }
87
+ return matches.join('\n\n---\n\n');
88
+ }
89
+ async getSpaceDetails(spaceId) {
90
+ const additionalFields = ['author', 'tags', 'runtime', 'subdomain', 'sha'];
91
+ const info = await spaceInfo({
92
+ name: spaceId,
93
+ additionalFields: Array.from(additionalFields),
94
+ ...(this.hubUrl && { hubUrl: this.hubUrl }),
95
+ });
96
+ const lines = [];
97
+ lines.push(`# ${info.name}`);
98
+ lines.push('');
99
+ lines.push('## Overview');
100
+ const extra = info;
101
+ if (extra.author)
102
+ lines.push(`- **Author:** ${extra.author}`);
103
+ if (info.sdk)
104
+ lines.push(`- **SDK:** ${info.sdk}`);
105
+ lines.push(`- **Likes:** ${info.likes}`);
106
+ lines.push(`- **Updated:** ${formatDate(info.updatedAt)}`);
107
+ const tags = Array.isArray(extra.tags) ? extra.tags : undefined;
108
+ if (tags && tags.length)
109
+ lines.push(`- **Tags:** ${tags.join(', ')}`);
110
+ lines.push('');
111
+ lines.push(`**Link:** [https://hf.co/spaces/${info.name}](https://hf.co/spaces/${info.name})`);
112
+ return lines.join('\n');
113
+ }
114
+ }
115
+ //# sourceMappingURL=hub-inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-inspect.js","sourceRoot":"","sources":["../src/hub-inspect.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from './utilities.js';
7
7
  export * from './paper-search.js';
8
8
  export * from './dataset-search.js';
9
9
  export * from './dataset-detail.js';
10
+ export * from './hub-inspect.js';
10
11
  export * from './duplicate-space.js';
11
12
  export * from './space-info.js';
12
13
  export * from './space-files.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from './utilities.js';
7
7
  export * from './paper-search.js';
8
8
  export * from './dataset-search.js';
9
9
  export * from './dataset-detail.js';
10
+ export * from './hub-inspect.js';
10
11
  export * from './duplicate-space.js';
11
12
  export * from './space-info.js';
12
13
  export * from './space-files.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"readme-utils.d.ts","sourceRoot":"","sources":["../src/readme-utils.ts"],"names":[],"mappings":"AAYA,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,WAAW,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqCxB"}
1
+ {"version":3,"file":"readme-utils.d.ts","sourceRoot":"","sources":["../src/readme-utils.ts"],"names":[],"mappings":"AAeA,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,WAAW,GAAE,OAAe,GAC1B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2CxB"}
@@ -1,3 +1,4 @@
1
+ const DEFAULT_MAX_README_CHARS = 10_000;
1
2
  export async function fetchReadmeContent(repoName, type, includeYaml = false) {
2
3
  try {
3
4
  const baseUrl = type === 'datasets'
@@ -15,6 +16,10 @@ export async function fetchReadmeContent(repoName, type, includeYaml = false) {
15
16
  if (!includeYaml) {
16
17
  content = stripYamlFrontmatter(content);
17
18
  }
19
+ if (content.length > DEFAULT_MAX_README_CHARS) {
20
+ const truncated = content.slice(0, DEFAULT_MAX_README_CHARS);
21
+ content = `${truncated}\n\n[... truncated to ~${DEFAULT_MAX_README_CHARS.toString()} characters — full README: ${baseUrl}]`;
22
+ }
18
23
  if (!content.trim()) {
19
24
  return null;
20
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"readme-utils.js","sourceRoot":"","sources":["../src/readme-utils.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,QAAgB,EAChB,IAA2B,EAC3B,cAAuB,KAAK;IAE5B,IAAI,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAI,KAAK,UAAU;YAClC,CAAC,CAAC,mCAAmC,QAAQ,EAAE;YAC/C,CAAC,CAAC,0BAA0B,QAAQ,EAAE,CAAC;QAExC,MAAM,GAAG,GAAG,GAAG,OAAO,yBAAyB,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAE7B,OAAO,IAAI,CAAC;YACb,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAGpC,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAGD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEhB,OAAO,CAAC,KAAK,CAAC,8BAA8B,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAQD,SAAS,oBAAoB,CAAC,OAAe;IAE5C,MAAM,WAAW,GAAG,mDAAmD,CAAC;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,KAAK,EAAE,CAAC;QAEX,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAGD,OAAO,OAAO,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"readme-utils.js","sourceRoot":"","sources":["../src/readme-utils.ts"],"names":[],"mappings":"AAKA,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAUxC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,QAAgB,EAChB,IAA2B,EAC3B,cAAuB,KAAK;IAE5B,IAAI,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAI,KAAK,UAAU;YAClC,CAAC,CAAC,mCAAmC,QAAQ,EAAE;YAC/C,CAAC,CAAC,0BAA0B,QAAQ,EAAE,CAAC;QAExC,MAAM,GAAG,GAAG,GAAG,OAAO,yBAAyB,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAE7B,OAAO,IAAI,CAAC;YACb,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAGpC,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAGD,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC7D,OAAO,GAAG,GAAG,SAAS,0BAA0B,wBAAwB,CAAC,QAAQ,EAAE,8BAA8B,OAAO,GAAG,CAAC;QAC7H,CAAC;QAGD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEhB,OAAO,CAAC,KAAK,CAAC,8BAA8B,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAQD,SAAS,oBAAoB,CAAC,OAAe;IAE5C,MAAM,WAAW,GAAG,mDAAmD,CAAC;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,KAAK,EAAE,CAAC;QAEX,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAGD,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -4,6 +4,7 @@ export declare const MODEL_DETAIL_TOOL_ID: "model_details";
4
4
  export declare const PAPER_SEARCH_TOOL_ID: "paper_search";
5
5
  export declare const DATASET_SEARCH_TOOL_ID: "dataset_search";
6
6
  export declare const DATASET_DETAIL_TOOL_ID: "dataset_details";
7
+ export declare const HUB_INSPECT_TOOL_ID: "hub_inspect";
7
8
  export declare const DUPLICATE_SPACE_TOOL_ID: "duplicate_space";
8
9
  export declare const SPACE_INFO_TOOL_ID: "space_info";
9
10
  export declare const SPACE_FILES_TOOL_ID: "space_files";
@@ -13,14 +14,14 @@ export declare const USER_SUMMARY_PROMPT_ID: "User Summary";
13
14
  export declare const PAPER_SUMMARY_PROMPT_ID: "Paper Summary";
14
15
  export declare const MODEL_DETAIL_PROMPT_ID: string;
15
16
  export declare const DATASET_DETAIL_PROMPT_ID: string;
16
- export declare const ALL_BUILTIN_TOOL_IDS: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch"];
17
+ export declare const ALL_BUILTIN_TOOL_IDS: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_inspect", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch"];
17
18
  export declare const TOOL_ID_GROUPS: {
18
19
  readonly search: readonly ["space_search", "model_search", "dataset_search", "paper_search", "hf_doc_search"];
19
20
  readonly spaces: readonly ["space_search", "duplicate_space", "space_info", "space_files"];
20
- readonly detail: readonly ["model_details", "dataset_details"];
21
+ readonly detail: readonly ["model_details", "dataset_details", "hub_inspect"];
21
22
  readonly docs: readonly ["hf_doc_search", "hf_doc_fetch"];
22
23
  readonly hf_api: readonly ["space_search", "model_search", "dataset_search", "paper_search", "model_details", "dataset_details", "hf_doc_search"];
23
- readonly all: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch"];
24
+ readonly all: readonly ["space_search", "model_search", "model_details", "paper_search", "dataset_search", "dataset_details", "hub_inspect", "duplicate_space", "space_info", "space_files", "hf_doc_search", "hf_doc_fetch"];
24
25
  };
25
26
  export type BuiltinToolId = (typeof ALL_BUILTIN_TOOL_IDS)[number];
26
27
  export declare function isValidBuiltinToolId(toolId: string): toolId is BuiltinToolId;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-ids.d.ts","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,oBAAoB,gBAAmC,CAAC;AACrE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,iBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,sBAAsB,kBAAkC,CAAC;AACtE,eAAO,MAAM,sBAAsB,mBAAkC,CAAC;AACtE,eAAO,MAAM,uBAAuB,mBAAmC,CAAC;AACxE,eAAO,MAAM,kBAAkB,cAA8B,CAAC;AAC9D,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAChE,eAAO,MAAM,4BAA4B,iBAAmC,CAAC;AAC7E,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AACvD,eAAO,MAAM,sBAAsB,gBAAkC,CAAC;AACtE,eAAO,MAAM,uBAAuB,iBAAmC,CAAC;AACxE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,wBAAwB,QAAoC,CAAC;AAG1E,eAAO,MAAM,oBAAoB,kMAYvB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;CAqBjB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGlE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,aAAa,CAE5E"}
1
+ {"version":3,"file":"tool-ids.d.ts","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,oBAAoB,gBAAmC,CAAC;AACrE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,iBAAgC,CAAC;AAClE,eAAO,MAAM,oBAAoB,gBAAgC,CAAC;AAClE,eAAO,MAAM,sBAAsB,kBAAkC,CAAC;AACtE,eAAO,MAAM,sBAAsB,mBAAkC,CAAC;AACtE,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAChE,eAAO,MAAM,uBAAuB,mBAAmC,CAAC;AACxE,eAAO,MAAM,kBAAkB,cAA8B,CAAC;AAC9D,eAAO,MAAM,mBAAmB,eAA+B,CAAC;AAChE,eAAO,MAAM,4BAA4B,iBAAmC,CAAC;AAC7E,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AACvD,eAAO,MAAM,sBAAsB,gBAAkC,CAAC;AACtE,eAAO,MAAM,uBAAuB,iBAAmC,CAAC;AACxE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,wBAAwB,QAAoC,CAAC;AAG1E,eAAO,MAAM,oBAAoB,iNAavB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;CAqBjB,CAAC;AAGX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGlE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,aAAa,CAE5E"}
package/dist/tool-ids.js CHANGED
@@ -1,10 +1,11 @@
1
- import { SEMANTIC_SEARCH_TOOL_CONFIG, MODEL_SEARCH_TOOL_CONFIG, MODEL_DETAIL_TOOL_CONFIG, MODEL_DETAIL_PROMPT_CONFIG, PAPER_SEARCH_TOOL_CONFIG, DATASET_SEARCH_TOOL_CONFIG, DATASET_DETAIL_TOOL_CONFIG, DATASET_DETAIL_PROMPT_CONFIG, DUPLICATE_SPACE_TOOL_CONFIG, SPACE_INFO_TOOL_CONFIG, SPACE_FILES_TOOL_CONFIG, USER_SUMMARY_PROMPT_CONFIG, PAPER_SUMMARY_PROMPT_CONFIG, DOCS_SEMANTIC_SEARCH_CONFIG, DOC_FETCH_CONFIG, } from './index.js';
1
+ import { SEMANTIC_SEARCH_TOOL_CONFIG, MODEL_SEARCH_TOOL_CONFIG, MODEL_DETAIL_TOOL_CONFIG, MODEL_DETAIL_PROMPT_CONFIG, PAPER_SEARCH_TOOL_CONFIG, DATASET_SEARCH_TOOL_CONFIG, DATASET_DETAIL_TOOL_CONFIG, DATASET_DETAIL_PROMPT_CONFIG, HUB_INSPECT_TOOL_CONFIG, DUPLICATE_SPACE_TOOL_CONFIG, SPACE_INFO_TOOL_CONFIG, SPACE_FILES_TOOL_CONFIG, USER_SUMMARY_PROMPT_CONFIG, PAPER_SUMMARY_PROMPT_CONFIG, DOCS_SEMANTIC_SEARCH_CONFIG, DOC_FETCH_CONFIG, } from './index.js';
2
2
  export const SPACE_SEARCH_TOOL_ID = SEMANTIC_SEARCH_TOOL_CONFIG.name;
3
3
  export const MODEL_SEARCH_TOOL_ID = MODEL_SEARCH_TOOL_CONFIG.name;
4
4
  export const MODEL_DETAIL_TOOL_ID = MODEL_DETAIL_TOOL_CONFIG.name;
5
5
  export const PAPER_SEARCH_TOOL_ID = PAPER_SEARCH_TOOL_CONFIG.name;
6
6
  export const DATASET_SEARCH_TOOL_ID = DATASET_SEARCH_TOOL_CONFIG.name;
7
7
  export const DATASET_DETAIL_TOOL_ID = DATASET_DETAIL_TOOL_CONFIG.name;
8
+ export const HUB_INSPECT_TOOL_ID = HUB_INSPECT_TOOL_CONFIG.name;
8
9
  export const DUPLICATE_SPACE_TOOL_ID = DUPLICATE_SPACE_TOOL_CONFIG.name;
9
10
  export const SPACE_INFO_TOOL_ID = SPACE_INFO_TOOL_CONFIG.name;
10
11
  export const SPACE_FILES_TOOL_ID = SPACE_FILES_TOOL_CONFIG.name;
@@ -21,6 +22,7 @@ export const ALL_BUILTIN_TOOL_IDS = [
21
22
  PAPER_SEARCH_TOOL_ID,
22
23
  DATASET_SEARCH_TOOL_ID,
23
24
  DATASET_DETAIL_TOOL_ID,
25
+ HUB_INSPECT_TOOL_ID,
24
26
  DUPLICATE_SPACE_TOOL_ID,
25
27
  SPACE_INFO_TOOL_ID,
26
28
  SPACE_FILES_TOOL_ID,
@@ -36,7 +38,7 @@ export const TOOL_ID_GROUPS = {
36
38
  DOCS_SEMANTIC_SEARCH_TOOL_ID,
37
39
  ],
38
40
  spaces: [SPACE_SEARCH_TOOL_ID, DUPLICATE_SPACE_TOOL_ID, SPACE_INFO_TOOL_ID, SPACE_FILES_TOOL_ID],
39
- detail: [MODEL_DETAIL_TOOL_ID, DATASET_DETAIL_TOOL_ID],
41
+ detail: [MODEL_DETAIL_TOOL_ID, DATASET_DETAIL_TOOL_ID, HUB_INSPECT_TOOL_ID],
40
42
  docs: [DOCS_SEMANTIC_SEARCH_TOOL_ID, DOC_FETCH_TOOL_ID],
41
43
  hf_api: [
42
44
  SPACE_SEARCH_TOOL_ID,
@@ -1 +1 @@
1
- {"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,GAChB,MAAM,YAAY,CAAC;AAGpB,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,CAAC;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC,IAAI,CAAC;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,IAAI,CAAC;AAG1E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,4BAA4B;IAC5B,iBAAiB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,4BAA4B;KACnB;IACV,MAAM,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,CAAU;IACzG,MAAM,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAU;IAC/D,IAAI,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,CAAU;IAChE,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,4BAA4B;KACnB;IACV,GAAG,EAAE,CAAC,GAAG,oBAAoB,CAAU;CAC9B,CAAC;AAMX,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"tool-ids.js","sourceRoot":"","sources":["../src/tool-ids.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,GAChB,MAAM,YAAY,CAAC;AAGpB,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,CAAC;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC,IAAI,CAAC;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,IAAI,CAAC;AAG1E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,4BAA4B;IAC5B,iBAAiB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,4BAA4B;KACnB;IACV,MAAM,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,CAAU;IACzG,MAAM,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,CAAU;IACpF,IAAI,EAAE,CAAC,4BAA4B,EAAE,iBAAiB,CAAU;IAChE,MAAM,EAAE;QACP,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,4BAA4B;KACnB;IACV,GAAG,EAAE,CAAC,GAAG,oBAAoB,CAAU;CAC9B,CAAC;AAMX,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAClD,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmindset/hf-mcp",
3
- "version": "0.2.17",
3
+ "version": "0.2.19",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,142 @@
1
+ import { z } from 'zod';
2
+ import type { ToolResult } from './types/tool-result.js';
3
+ import { ModelDetailTool } from './model-detail.js';
4
+ import { DatasetDetailTool } from './dataset-detail.js';
5
+ import { spaceInfo } from '@huggingface/hub';
6
+ import { formatDate } from './utilities.js';
7
+
8
+ export const HUB_INSPECT_TOOL_CONFIG = {
9
+ name: 'hub_inspect',
10
+ description:
11
+ 'Get details for one or more Hugging Face repos (model, dataset, or space). ' +
12
+ 'Auto-detects type unless specified.',
13
+ schema: z.object({
14
+ repo_ids: z
15
+ .array(z.string().min(1))
16
+ .min(1, 'Provide at least one id')
17
+ .max(10, 'Provide at most 10 repo ids')
18
+ .describe('Repo IDs for (models|dataset/space) - usually in author/name format (e.g. openai/gpt-oss-120b)'),
19
+ repo_type: z.enum(['model', 'dataset', 'space']).optional().describe('Specify lookup type; otherwise auto-detects'),
20
+ include_readme: z.boolean().default(true).describe('Include README from the repo'),
21
+ }),
22
+ annotations: {
23
+ title: 'Hub Inspect',
24
+ destructiveHint: false,
25
+ readOnlyHint: true,
26
+ openWorldHint: false,
27
+ },
28
+ } as const;
29
+
30
+ export type HubInspectParams = z.infer<typeof HUB_INSPECT_TOOL_CONFIG.schema>;
31
+
32
+ export class HubInspectTool {
33
+ private readonly modelDetail: ModelDetailTool;
34
+ private readonly datasetDetail: DatasetDetailTool;
35
+ private readonly hubUrl?: string;
36
+
37
+ constructor(hfToken?: string, hubUrl?: string) {
38
+ this.modelDetail = new ModelDetailTool(hfToken, hubUrl);
39
+ this.datasetDetail = new DatasetDetailTool(hfToken, hubUrl);
40
+ this.hubUrl = hubUrl;
41
+ }
42
+
43
+ async inspect(params: HubInspectParams, includeReadme: boolean = false): Promise<ToolResult> {
44
+ const parts: string[] = [];
45
+ let successCount = 0;
46
+
47
+ for (const id of params.repo_ids) {
48
+ try {
49
+ const section = await this.inspectSingle(id, params.repo_type, includeReadme);
50
+ parts.push(section);
51
+ successCount += 1;
52
+ } catch (err) {
53
+ const msg = err instanceof Error ? err.message : String(err);
54
+ parts.push(`# ${id}\n\n- Error: ${msg}`);
55
+ }
56
+ }
57
+
58
+ return {
59
+ formatted: parts.join('\n\n---\n\n'),
60
+ totalResults: params.repo_ids.length,
61
+ resultsShared: successCount,
62
+ };
63
+ }
64
+
65
+ private async inspectSingle(
66
+ repoId: string,
67
+ type: 'model' | 'dataset' | 'space' | undefined,
68
+ includeReadme: boolean
69
+ ): Promise<string> {
70
+ // If caller constrained the type, do only that
71
+ if (type === 'model') {
72
+ return (await this.modelDetail.getDetails(repoId, includeReadme)).formatted;
73
+ }
74
+ if (type === 'dataset') {
75
+ return (await this.datasetDetail.getDetails(repoId, includeReadme)).formatted;
76
+ }
77
+ if (type === 'space') {
78
+ return await this.getSpaceDetails(repoId);
79
+ }
80
+
81
+ // Auto-detect: attempt all three and aggregate. The same id may exist for multiple types.
82
+ const matches: string[] = [];
83
+
84
+ try {
85
+ const r = await this.modelDetail.getDetails(repoId, includeReadme);
86
+ matches.push(`**Type: Model**\n\n${r.formatted}`);
87
+ } catch {
88
+ /* not a model */
89
+ }
90
+
91
+ try {
92
+ const r = await this.datasetDetail.getDetails(repoId, includeReadme);
93
+ matches.push(`**Type: Dataset**\n\n${r.formatted}`);
94
+ } catch {
95
+ /* not a dataset */
96
+ }
97
+
98
+ try {
99
+ const r = await this.getSpaceDetails(repoId);
100
+ matches.push(`**Type: Space**\n\n${r}`);
101
+ } catch {
102
+ /* not a space */
103
+ }
104
+
105
+ if (matches.length === 0) {
106
+ throw new Error(`Could not find repo '${repoId}' as model, dataset, or space.`);
107
+ }
108
+
109
+ return matches.join('\n\n---\n\n');
110
+ }
111
+
112
+ private async getSpaceDetails(spaceId: string): Promise<string> {
113
+ const additionalFields = ['author', 'tags', 'runtime', 'subdomain', 'sha'] as const;
114
+ const info = await spaceInfo<(typeof additionalFields)[number]>({
115
+ name: spaceId,
116
+ additionalFields: Array.from(additionalFields),
117
+ ...(this.hubUrl && { hubUrl: this.hubUrl }),
118
+ });
119
+
120
+ const lines: string[] = [];
121
+ lines.push(`# ${info.name}`);
122
+ lines.push('');
123
+ lines.push('## Overview');
124
+ interface SpaceExtra {
125
+ author?: string;
126
+ tags?: readonly string[] | string[];
127
+ runtime?: unknown;
128
+ subdomain?: string;
129
+ sha?: string;
130
+ }
131
+ const extra = info as Partial<SpaceExtra>;
132
+ if (extra.author) lines.push(`- **Author:** ${extra.author}`);
133
+ if (info.sdk) lines.push(`- **SDK:** ${info.sdk}`);
134
+ lines.push(`- **Likes:** ${info.likes}`);
135
+ lines.push(`- **Updated:** ${formatDate(info.updatedAt)}`);
136
+ const tags = Array.isArray(extra.tags) ? extra.tags : undefined;
137
+ if (tags && tags.length) lines.push(`- **Tags:** ${tags.join(', ')}`);
138
+ lines.push('');
139
+ lines.push(`**Link:** [https://hf.co/spaces/${info.name}](https://hf.co/spaces/${info.name})`);
140
+ return lines.join('\n');
141
+ }
142
+ }
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ export * from './utilities.js';
8
8
  export * from './paper-search.js';
9
9
  export * from './dataset-search.js';
10
10
  export * from './dataset-detail.js';
11
+ export * from './hub-inspect.js';
11
12
  export * from './duplicate-space.js';
12
13
  export * from './space-info.js';
13
14
  export * from './space-files.js';
@@ -2,6 +2,9 @@
2
2
  * Utility functions for fetching and processing README files from Hugging Face repositories
3
3
  */
4
4
 
5
+ // Maximum number of characters to include from a README
6
+ const DEFAULT_MAX_README_CHARS = 10_000;
7
+
5
8
  /**
6
9
  * Fetches README content from a Hugging Face repository
7
10
  *
@@ -40,6 +43,12 @@ export async function fetchReadmeContent(
40
43
  content = stripYamlFrontmatter(content);
41
44
  }
42
45
 
46
+ // Truncate overly long READMEs to a sensible default size
47
+ if (content.length > DEFAULT_MAX_README_CHARS) {
48
+ const truncated = content.slice(0, DEFAULT_MAX_README_CHARS);
49
+ content = `${truncated}\n\n[... truncated to ~${DEFAULT_MAX_README_CHARS.toString()} characters — full README: ${baseUrl}]`;
50
+ }
51
+
43
52
  // Return null if content is empty after processing
44
53
  if (!content.trim()) {
45
54
  return null;
@@ -71,4 +80,4 @@ function stripYamlFrontmatter(content: string): string {
71
80
 
72
81
  // No YAML frontmatter found, return original content
73
82
  return content;
74
- }
83
+ }
package/src/tool-ids.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  DATASET_SEARCH_TOOL_CONFIG,
13
13
  DATASET_DETAIL_TOOL_CONFIG,
14
14
  DATASET_DETAIL_PROMPT_CONFIG,
15
+ HUB_INSPECT_TOOL_CONFIG,
15
16
  DUPLICATE_SPACE_TOOL_CONFIG,
16
17
  SPACE_INFO_TOOL_CONFIG,
17
18
  SPACE_FILES_TOOL_CONFIG,
@@ -28,6 +29,7 @@ export const MODEL_DETAIL_TOOL_ID = MODEL_DETAIL_TOOL_CONFIG.name;
28
29
  export const PAPER_SEARCH_TOOL_ID = PAPER_SEARCH_TOOL_CONFIG.name;
29
30
  export const DATASET_SEARCH_TOOL_ID = DATASET_SEARCH_TOOL_CONFIG.name;
30
31
  export const DATASET_DETAIL_TOOL_ID = DATASET_DETAIL_TOOL_CONFIG.name;
32
+ export const HUB_INSPECT_TOOL_ID = HUB_INSPECT_TOOL_CONFIG.name;
31
33
  export const DUPLICATE_SPACE_TOOL_ID = DUPLICATE_SPACE_TOOL_CONFIG.name;
32
34
  export const SPACE_INFO_TOOL_ID = SPACE_INFO_TOOL_CONFIG.name;
33
35
  export const SPACE_FILES_TOOL_ID = SPACE_FILES_TOOL_CONFIG.name;
@@ -46,6 +48,7 @@ export const ALL_BUILTIN_TOOL_IDS = [
46
48
  PAPER_SEARCH_TOOL_ID,
47
49
  DATASET_SEARCH_TOOL_ID,
48
50
  DATASET_DETAIL_TOOL_ID,
51
+ HUB_INSPECT_TOOL_ID,
49
52
  DUPLICATE_SPACE_TOOL_ID,
50
53
  SPACE_INFO_TOOL_ID,
51
54
  SPACE_FILES_TOOL_ID,
@@ -62,7 +65,7 @@ export const TOOL_ID_GROUPS = {
62
65
  DOCS_SEMANTIC_SEARCH_TOOL_ID,
63
66
  ] as const,
64
67
  spaces: [SPACE_SEARCH_TOOL_ID, DUPLICATE_SPACE_TOOL_ID, SPACE_INFO_TOOL_ID, SPACE_FILES_TOOL_ID] as const,
65
- detail: [MODEL_DETAIL_TOOL_ID, DATASET_DETAIL_TOOL_ID] as const,
68
+ detail: [MODEL_DETAIL_TOOL_ID, DATASET_DETAIL_TOOL_ID, HUB_INSPECT_TOOL_ID] as const,
66
69
  docs: [DOCS_SEMANTIC_SEARCH_TOOL_ID, DOC_FETCH_TOOL_ID] as const,
67
70
  hf_api: [
68
71
  SPACE_SEARCH_TOOL_ID,