@llmindset/hf-mcp 0.2.33 → 0.2.35

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 (79) hide show
  1. package/dist/docs-search/docs-semantic-search.js +1 -1
  2. package/dist/docs-search/docs-semantic-search.js.map +1 -1
  3. package/dist/hf-api-call.d.ts.map +1 -1
  4. package/dist/hf-api-call.js +4 -0
  5. package/dist/hf-api-call.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/jobs/api-client.d.ts +19 -0
  11. package/dist/jobs/api-client.d.ts.map +1 -0
  12. package/dist/jobs/api-client.js +95 -0
  13. package/dist/jobs/api-client.js.map +1 -0
  14. package/dist/jobs/commands/inspect.d.ts +5 -0
  15. package/dist/jobs/commands/inspect.d.ts.map +1 -0
  16. package/dist/jobs/commands/inspect.js +21 -0
  17. package/dist/jobs/commands/inspect.js.map +1 -0
  18. package/dist/jobs/commands/logs.d.ts +4 -0
  19. package/dist/jobs/commands/logs.d.ts.map +1 -0
  20. package/dist/jobs/commands/logs.js +24 -0
  21. package/dist/jobs/commands/logs.js.map +1 -0
  22. package/dist/jobs/commands/ps.d.ts +4 -0
  23. package/dist/jobs/commands/ps.d.ts.map +1 -0
  24. package/dist/jobs/commands/ps.js +23 -0
  25. package/dist/jobs/commands/ps.js.map +1 -0
  26. package/dist/jobs/commands/run.d.ts +5 -0
  27. package/dist/jobs/commands/run.d.ts.map +1 -0
  28. package/dist/jobs/commands/run.js +90 -0
  29. package/dist/jobs/commands/run.js.map +1 -0
  30. package/dist/jobs/commands/scheduled.d.ts +10 -0
  31. package/dist/jobs/commands/scheduled.d.ts.map +1 -0
  32. package/dist/jobs/commands/scheduled.js +112 -0
  33. package/dist/jobs/commands/scheduled.js.map +1 -0
  34. package/dist/jobs/commands/utils.d.ts +20 -0
  35. package/dist/jobs/commands/utils.d.ts.map +1 -0
  36. package/dist/jobs/commands/utils.js +120 -0
  37. package/dist/jobs/commands/utils.js.map +1 -0
  38. package/dist/jobs/formatters.d.ts +6 -0
  39. package/dist/jobs/formatters.d.ts.map +1 -0
  40. package/dist/jobs/formatters.js +98 -0
  41. package/dist/jobs/formatters.js.map +1 -0
  42. package/dist/jobs/sse-handler.d.ts +12 -0
  43. package/dist/jobs/sse-handler.d.ts.map +1 -0
  44. package/dist/jobs/sse-handler.js +80 -0
  45. package/dist/jobs/sse-handler.js.map +1 -0
  46. package/dist/jobs/tool.d.ts +35 -0
  47. package/dist/jobs/tool.d.ts.map +1 -0
  48. package/dist/jobs/tool.js +333 -0
  49. package/dist/jobs/tool.js.map +1 -0
  50. package/dist/jobs/types.d.ts +295 -0
  51. package/dist/jobs/types.d.ts.map +1 -0
  52. package/dist/jobs/types.js +95 -0
  53. package/dist/jobs/types.js.map +1 -0
  54. package/dist/tool-ids.d.ts +3 -2
  55. package/dist/tool-ids.d.ts.map +1 -1
  56. package/dist/tool-ids.js +10 -2
  57. package/dist/tool-ids.js.map +1 -1
  58. package/dist/types/tool-result.d.ts +1 -0
  59. package/dist/types/tool-result.d.ts.map +1 -1
  60. package/package.json +4 -2
  61. package/src/docs-search/docs-semantic-search.ts +1 -1
  62. package/src/hf-api-call.ts +6 -0
  63. package/src/index.ts +1 -0
  64. package/src/jobs/api-client.ts +187 -0
  65. package/src/jobs/commands/inspect.ts +38 -0
  66. package/src/jobs/commands/logs.ts +36 -0
  67. package/src/jobs/commands/ps.ts +40 -0
  68. package/src/jobs/commands/run.ts +135 -0
  69. package/src/jobs/commands/scheduled.ts +198 -0
  70. package/src/jobs/commands/utils.ts +191 -0
  71. package/src/jobs/formatters.ts +149 -0
  72. package/src/jobs/sse-handler.ts +144 -0
  73. package/src/jobs/tool.ts +435 -0
  74. package/src/jobs/types.ts +237 -0
  75. package/src/tool-ids.ts +11 -1
  76. package/src/types/tool-result.ts +6 -0
  77. package/test/jobs/command-translation.spec.ts +331 -0
  78. package/test/jobs/formatters.spec.ts +267 -0
  79. package/test/jobs/uv-command.spec.ts +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../../src/jobs/commands/scheduled.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { JobSpec } from '../types.js';
2
+ export declare function parseTimeout(timeout: string): number;
3
+ export declare function parseImageSource(image: string): {
4
+ dockerImage?: string;
5
+ spaceId?: string;
6
+ };
7
+ export declare function parseCommand(command: string | string[]): {
8
+ command: string[];
9
+ arguments?: string[];
10
+ };
11
+ export declare function createJobSpec(args: {
12
+ image: string;
13
+ command: string | string[];
14
+ flavor?: string;
15
+ env?: Record<string, string>;
16
+ secrets?: Record<string, string>;
17
+ timeout?: string;
18
+ hfToken?: string;
19
+ }): JobSpec;
20
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/jobs/commands/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAqC3C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBpD;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAgB1F;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCpG;AAmCD,wBAAgB,aAAa,CAAC,IAAI,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CA0BV"}
@@ -0,0 +1,120 @@
1
+ import { parse as parseShellArgs } from 'shell-quote';
2
+ const SPECIAL_PARAMS = new Set(['*', '@', '#', '?', '!', '-', '_']);
3
+ function isEnvToken(entry) {
4
+ return Boolean(entry && typeof entry === 'object' && entry.type === 'env');
5
+ }
6
+ function formatEnvReference(key) {
7
+ if (key === '') {
8
+ return '$';
9
+ }
10
+ if (key === '$') {
11
+ return '$$';
12
+ }
13
+ if (/^[A-Za-z0-9_]+$/.test(key)) {
14
+ return `$${key}`;
15
+ }
16
+ if (SPECIAL_PARAMS.has(key)) {
17
+ return `$${key}`;
18
+ }
19
+ return `\${${key}}`;
20
+ }
21
+ export function parseTimeout(timeout) {
22
+ const timeUnits = {
23
+ s: 1,
24
+ m: 60,
25
+ h: 3600,
26
+ d: 86400,
27
+ };
28
+ const match = timeout.match(/^(\d+(?:\.\d+)?)(s|m|h|d)$/);
29
+ if (!match || !match[1] || !match[2]) {
30
+ const seconds = parseInt(timeout, 10);
31
+ if (!isNaN(seconds)) {
32
+ return seconds;
33
+ }
34
+ throw new Error(`Invalid timeout format: "${timeout}". Use format like "5m", "2h", "30s", or plain seconds.`);
35
+ }
36
+ const value = parseFloat(match[1]);
37
+ const unit = match[2];
38
+ return Math.floor(value * timeUnits[unit]);
39
+ }
40
+ export function parseImageSource(image) {
41
+ const spacePrefixes = [
42
+ 'https://huggingface.co/spaces/',
43
+ 'https://hf.co/spaces/',
44
+ 'huggingface.co/spaces/',
45
+ 'hf.co/spaces/',
46
+ ];
47
+ for (const prefix of spacePrefixes) {
48
+ if (image.startsWith(prefix)) {
49
+ return { spaceId: image.substring(prefix.length) };
50
+ }
51
+ }
52
+ return { dockerImage: image };
53
+ }
54
+ export function parseCommand(command) {
55
+ if (Array.isArray(command)) {
56
+ return { command, arguments: [] };
57
+ }
58
+ const parsed = parseShellArgs(command, key => ({ type: 'env', key }));
59
+ const stringArgs = [];
60
+ for (const arg of parsed) {
61
+ if (typeof arg === 'string') {
62
+ stringArgs.push(arg);
63
+ }
64
+ else if (isEnvToken(arg)) {
65
+ stringArgs.push(formatEnvReference(arg.key));
66
+ }
67
+ else {
68
+ throw new Error(`Unsupported shell syntax in command: "${command}". ` +
69
+ `Please use an array format for commands with complex shell operators, ` +
70
+ `or use simple quoted strings.`);
71
+ }
72
+ }
73
+ if (stringArgs.length === 0) {
74
+ throw new Error(`Invalid command: "${command}". Command cannot be empty.`);
75
+ }
76
+ return { command: stringArgs, arguments: [] };
77
+ }
78
+ function replaceTokenPlaceholder(value, hfToken) {
79
+ if (!hfToken) {
80
+ return value;
81
+ }
82
+ if (value === '$HF_TOKEN' || value === '${HF_TOKEN}') {
83
+ return hfToken;
84
+ }
85
+ return value;
86
+ }
87
+ function transformEnvMap(map, hfToken) {
88
+ if (!map) {
89
+ return undefined;
90
+ }
91
+ const transformedEntries = Object.entries(map).map(([key, value]) => [
92
+ key,
93
+ replaceTokenPlaceholder(value, hfToken),
94
+ ]);
95
+ return Object.fromEntries(transformedEntries);
96
+ }
97
+ export function createJobSpec(args) {
98
+ if (!args.image) {
99
+ throw new Error('image parameter is required. Provide a Docker image (e.g., "python:3.12") or Space URL.');
100
+ }
101
+ if (!args.command) {
102
+ throw new Error('command parameter is required. Provide a command as string or array.');
103
+ }
104
+ const imageSource = parseImageSource(args.image);
105
+ const { command, arguments: cmdArgs } = parseCommand(args.command);
106
+ const timeoutSeconds = args.timeout ? parseTimeout(args.timeout) : undefined;
107
+ const environment = transformEnvMap(args.env, args.hfToken) || {};
108
+ const secrets = transformEnvMap(args.secrets, args.hfToken) || {};
109
+ const spec = {
110
+ ...imageSource,
111
+ command,
112
+ arguments: cmdArgs,
113
+ flavor: args.flavor || 'cpu-basic',
114
+ environment,
115
+ secrets,
116
+ timeoutSeconds,
117
+ };
118
+ return spec;
119
+ }
120
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/jobs/commands/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { JobInfo, ScheduledJobInfo } from './types.js';
2
+ export declare function formatJobsTable(jobs: JobInfo[]): string;
3
+ export declare function formatScheduledJobsTable(jobs: ScheduledJobInfo[]): string;
4
+ export declare function formatJobDetails(jobs: JobInfo | JobInfo[]): string;
5
+ export declare function formatScheduledJobDetails(jobs: ScheduledJobInfo | ScheduledJobInfo[]): string;
6
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/jobs/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAqD5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAkCvD;AAKD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAsCzE;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,MAAM,CAIlE;AAKD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAI7F"}
@@ -0,0 +1,98 @@
1
+ function truncate(str, maxLength) {
2
+ if (str.length <= maxLength) {
3
+ return str;
4
+ }
5
+ return str.substring(0, maxLength - 3) + '...';
6
+ }
7
+ function formatDate(dateStr) {
8
+ if (!dateStr) {
9
+ return 'N/A';
10
+ }
11
+ try {
12
+ const date = new Date(dateStr);
13
+ return date.toISOString().replace('T', ' ').substring(0, 19);
14
+ }
15
+ catch {
16
+ return dateStr;
17
+ }
18
+ }
19
+ function formatCommand(command) {
20
+ if (!command || command.length === 0) {
21
+ return 'N/A';
22
+ }
23
+ return command.join(' ');
24
+ }
25
+ function getImageOrSpace(job) {
26
+ if (job.spaceId) {
27
+ return job.spaceId;
28
+ }
29
+ if (job.dockerImage) {
30
+ return job.dockerImage;
31
+ }
32
+ return 'N/A';
33
+ }
34
+ export function formatJobsTable(jobs) {
35
+ if (jobs.length === 0) {
36
+ return 'No jobs found.';
37
+ }
38
+ const longestIdLength = Math.max(...jobs.map((job) => job.id.length));
39
+ const idColumnWidth = Math.max(longestIdLength, 'JOB ID'.length);
40
+ const colWidths = {
41
+ id: idColumnWidth,
42
+ image: 20,
43
+ command: 30,
44
+ created: 19,
45
+ status: 12,
46
+ };
47
+ const header = `| ${'JOB ID'.padEnd(colWidths.id)} | ${'IMAGE/SPACE'.padEnd(colWidths.image)} | ${'COMMAND'.padEnd(colWidths.command)} | ${'CREATED'.padEnd(colWidths.created)} | ${'STATUS'.padEnd(colWidths.status)} |`;
48
+ const separator = `|${'-'.repeat(colWidths.id + 2)}|${'-'.repeat(colWidths.image + 2)}|${'-'.repeat(colWidths.command + 2)}|${'-'.repeat(colWidths.created + 2)}|${'-'.repeat(colWidths.status + 2)}|`;
49
+ const rows = jobs.map((job) => {
50
+ const id = job.id;
51
+ const image = truncate(getImageOrSpace(job), colWidths.image);
52
+ const command = truncate(formatCommand(job.command), colWidths.command);
53
+ const created = truncate(formatDate(job.createdAt), colWidths.created);
54
+ const status = truncate(job.status.stage, colWidths.status);
55
+ return `| ${id.padEnd(colWidths.id)} | ${image.padEnd(colWidths.image)} | ${command.padEnd(colWidths.command)} | ${created.padEnd(colWidths.created)} | ${status.padEnd(colWidths.status)} |`;
56
+ });
57
+ return [header, separator, ...rows].join('\n');
58
+ }
59
+ export function formatScheduledJobsTable(jobs) {
60
+ if (jobs.length === 0) {
61
+ return 'No scheduled jobs found.';
62
+ }
63
+ const longestIdLength = Math.max(...jobs.map((job) => job.id.length));
64
+ const idColumnWidth = Math.max(longestIdLength, 'ID'.length);
65
+ const colWidths = {
66
+ id: idColumnWidth,
67
+ schedule: 12,
68
+ image: 18,
69
+ command: 25,
70
+ lastRun: 19,
71
+ nextRun: 19,
72
+ suspend: 9,
73
+ };
74
+ const header = `| ${'ID'.padEnd(colWidths.id)} | ${'SCHEDULE'.padEnd(colWidths.schedule)} | ${'IMAGE/SPACE'.padEnd(colWidths.image)} | ${'COMMAND'.padEnd(colWidths.command)} | ${'LAST RUN'.padEnd(colWidths.lastRun)} | ${'NEXT RUN'.padEnd(colWidths.nextRun)} | ${'SUSPENDED'.padEnd(colWidths.suspend)} |`;
75
+ const separator = `|${'-'.repeat(colWidths.id + 2)}|${'-'.repeat(colWidths.schedule + 2)}|${'-'.repeat(colWidths.image + 2)}|${'-'.repeat(colWidths.command + 2)}|${'-'.repeat(colWidths.lastRun + 2)}|${'-'.repeat(colWidths.nextRun + 2)}|${'-'.repeat(colWidths.suspend + 2)}|`;
76
+ const rows = jobs.map((job) => {
77
+ const id = job.id;
78
+ const schedule = truncate(job.schedule, colWidths.schedule);
79
+ const image = truncate(getImageOrSpace(job.jobSpec), colWidths.image);
80
+ const command = truncate(formatCommand(job.jobSpec.command), colWidths.command);
81
+ const lastRun = truncate(formatDate(job.lastRun), colWidths.lastRun);
82
+ const nextRun = truncate(formatDate(job.nextRun), colWidths.nextRun);
83
+ const suspend = job.suspend ? 'Yes' : 'No';
84
+ return `| ${id.padEnd(colWidths.id)} | ${schedule.padEnd(colWidths.schedule)} | ${image.padEnd(colWidths.image)} | ${command.padEnd(colWidths.command)} | ${lastRun.padEnd(colWidths.lastRun)} | ${nextRun.padEnd(colWidths.nextRun)} | ${suspend.padEnd(colWidths.suspend)} |`;
85
+ });
86
+ return [header, separator, ...rows].join('\n');
87
+ }
88
+ export function formatJobDetails(jobs) {
89
+ const jobArray = Array.isArray(jobs) ? jobs : [jobs];
90
+ const json = JSON.stringify(jobArray, null, 2);
91
+ return `\`\`\`json\n${json}\n\`\`\``;
92
+ }
93
+ export function formatScheduledJobDetails(jobs) {
94
+ const jobArray = Array.isArray(jobs) ? jobs : [jobs];
95
+ const json = JSON.stringify(jobArray, null, 2);
96
+ return `\`\`\`json\n${json}\n\`\`\``;
97
+ }
98
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/jobs/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface SseLogOptions {
2
+ maxDuration?: number;
3
+ maxLines?: number;
4
+ token?: string;
5
+ }
6
+ export interface SseLogResult {
7
+ logs: string[];
8
+ finished: boolean;
9
+ truncated: boolean;
10
+ }
11
+ export declare function fetchJobLogs(url: string, options?: SseLogOptions): Promise<SseLogResult>;
12
+ //# sourceMappingURL=sse-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-handler.d.ts","sourceRoot":"","sources":["../../src/jobs/sse-handler.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAE7B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAKD,MAAM,WAAW,YAAY;IAE5B,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,OAAO,CAAC;CACnB;AAUD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6GlG"}
@@ -0,0 +1,80 @@
1
+ export async function fetchJobLogs(url, options = {}) {
2
+ const { maxDuration = 10000, maxLines = 20, token } = options;
3
+ const logLines = [];
4
+ let finished = false;
5
+ let truncated = false;
6
+ const controller = new AbortController();
7
+ const timeoutId = setTimeout(() => {
8
+ controller.abort();
9
+ truncated = true;
10
+ }, maxDuration);
11
+ try {
12
+ const headers = {
13
+ Accept: 'text/event-stream',
14
+ };
15
+ if (token) {
16
+ headers['Authorization'] = `Bearer ${token}`;
17
+ }
18
+ const response = await fetch(url, {
19
+ headers,
20
+ signal: controller.signal,
21
+ });
22
+ if (!response.ok) {
23
+ throw new Error(`Failed to fetch logs: ${response.status} ${response.statusText}`);
24
+ }
25
+ if (!response.body) {
26
+ throw new Error('Response body is null');
27
+ }
28
+ const reader = response.body.getReader();
29
+ const decoder = new TextDecoder();
30
+ let buffer = '';
31
+ while (true) {
32
+ const { done, value } = await reader.read();
33
+ if (done) {
34
+ break;
35
+ }
36
+ buffer += decoder.decode(value, { stream: true });
37
+ const lines = buffer.split('\n');
38
+ buffer = lines.pop() || '';
39
+ for (const line of lines) {
40
+ if (line.startsWith('data: ')) {
41
+ try {
42
+ const jsonStr = line.substring(6);
43
+ const event = JSON.parse(jsonStr);
44
+ if (event.data.startsWith('===== Job started')) {
45
+ continue;
46
+ }
47
+ if (event.data.startsWith('===== Job finished')) {
48
+ finished = true;
49
+ logLines.push(event.data);
50
+ break;
51
+ }
52
+ logLines.push(event.data);
53
+ }
54
+ catch {
55
+ continue;
56
+ }
57
+ }
58
+ }
59
+ if (finished) {
60
+ break;
61
+ }
62
+ }
63
+ await reader.cancel();
64
+ }
65
+ catch (error) {
66
+ if (error.name !== 'AbortError') {
67
+ throw error;
68
+ }
69
+ }
70
+ finally {
71
+ clearTimeout(timeoutId);
72
+ }
73
+ const lastLines = logLines.slice(-maxLines);
74
+ return {
75
+ logs: lastLines,
76
+ finished,
77
+ truncated: truncated && !finished,
78
+ };
79
+ }
80
+ //# sourceMappingURL=sse-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-handler.js","sourceRoot":"","sources":["../../src/jobs/sse-handler.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,UAAyB,EAAE;IAC1E,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE9D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,SAAS,GAAG,KAAK,CAAC;IAGtB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QACjC,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,SAAS,GAAG,IAAI,CAAC;IAClB,CAAC,EAAE,WAAW,CAAC,CAAC;IAEhB,IAAI,CAAC;QACJ,MAAM,OAAO,GAA2B;YACvC,MAAM,EAAE,mBAAmB;SAC3B,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACjC,OAAO;YACP,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC;QAGD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM;YACP,CAAC;YAGD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAGlD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAE1B,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACJ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;wBAG9C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;4BAChD,SAAS;wBACV,CAAC;wBAGD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;4BACjD,QAAQ,GAAG,IAAI,CAAC;4BAGhB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC1B,MAAM;wBACP,CAAC;wBAGD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3B,CAAC;oBAAC,MAAM,CAAC;wBAER,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;YAGD,IAAI,QAAQ,EAAE,CAAC;gBACd,MAAM;YACP,CAAC;QACF,CAAC;QAGD,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEhB,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO;QACN,IAAI,EAAE,SAAS;QACf,QAAQ;QACR,SAAS,EAAE,SAAS,IAAI,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import type { ToolResult } from '../types/tool-result.js';
3
+ export * from './types.js';
4
+ export { JobsApiClient } from './api-client.js';
5
+ export declare const HF_JOBS_TOOL_CONFIG: {
6
+ readonly name: "hf_jobs";
7
+ readonly description: string;
8
+ readonly schema: z.ZodObject<{
9
+ command: z.ZodOptional<z.ZodString>;
10
+ args: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ command?: string | undefined;
13
+ args?: Record<string, any> | undefined;
14
+ }, {
15
+ command?: string | undefined;
16
+ args?: Record<string, any> | undefined;
17
+ }>;
18
+ readonly annotations: {
19
+ readonly title: "HuggingFace Jobs";
20
+ readonly destructiveHint: false;
21
+ readonly readOnlyHint: false;
22
+ readonly openWorldHint: true;
23
+ };
24
+ };
25
+ export declare class HfJobsTool {
26
+ private client;
27
+ private hfToken?;
28
+ private isAuthenticated;
29
+ constructor(hfToken?: string, isAuthenticated?: boolean, namespace?: string);
30
+ execute(params: {
31
+ command?: string;
32
+ args?: Record<string, unknown>;
33
+ }): Promise<ToolResult>;
34
+ }
35
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/jobs/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAe1D,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAmOhD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAuBtB,CAAC;AAKX,qBAAa,UAAU;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,eAAe,CAAU;gBAErB,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM;IASrE,OAAO,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAqIhG"}