@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.
- package/dist/docs-search/docs-semantic-search.js +1 -1
- package/dist/docs-search/docs-semantic-search.js.map +1 -1
- package/dist/hf-api-call.d.ts.map +1 -1
- package/dist/hf-api-call.js +4 -0
- package/dist/hf-api-call.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs/api-client.d.ts +19 -0
- package/dist/jobs/api-client.d.ts.map +1 -0
- package/dist/jobs/api-client.js +95 -0
- package/dist/jobs/api-client.js.map +1 -0
- package/dist/jobs/commands/inspect.d.ts +5 -0
- package/dist/jobs/commands/inspect.d.ts.map +1 -0
- package/dist/jobs/commands/inspect.js +21 -0
- package/dist/jobs/commands/inspect.js.map +1 -0
- package/dist/jobs/commands/logs.d.ts +4 -0
- package/dist/jobs/commands/logs.d.ts.map +1 -0
- package/dist/jobs/commands/logs.js +24 -0
- package/dist/jobs/commands/logs.js.map +1 -0
- package/dist/jobs/commands/ps.d.ts +4 -0
- package/dist/jobs/commands/ps.d.ts.map +1 -0
- package/dist/jobs/commands/ps.js +23 -0
- package/dist/jobs/commands/ps.js.map +1 -0
- package/dist/jobs/commands/run.d.ts +5 -0
- package/dist/jobs/commands/run.d.ts.map +1 -0
- package/dist/jobs/commands/run.js +90 -0
- package/dist/jobs/commands/run.js.map +1 -0
- package/dist/jobs/commands/scheduled.d.ts +10 -0
- package/dist/jobs/commands/scheduled.d.ts.map +1 -0
- package/dist/jobs/commands/scheduled.js +112 -0
- package/dist/jobs/commands/scheduled.js.map +1 -0
- package/dist/jobs/commands/utils.d.ts +20 -0
- package/dist/jobs/commands/utils.d.ts.map +1 -0
- package/dist/jobs/commands/utils.js +120 -0
- package/dist/jobs/commands/utils.js.map +1 -0
- package/dist/jobs/formatters.d.ts +6 -0
- package/dist/jobs/formatters.d.ts.map +1 -0
- package/dist/jobs/formatters.js +98 -0
- package/dist/jobs/formatters.js.map +1 -0
- package/dist/jobs/sse-handler.d.ts +12 -0
- package/dist/jobs/sse-handler.d.ts.map +1 -0
- package/dist/jobs/sse-handler.js +80 -0
- package/dist/jobs/sse-handler.js.map +1 -0
- package/dist/jobs/tool.d.ts +35 -0
- package/dist/jobs/tool.d.ts.map +1 -0
- package/dist/jobs/tool.js +333 -0
- package/dist/jobs/tool.js.map +1 -0
- package/dist/jobs/types.d.ts +295 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +95 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/tool-ids.d.ts +3 -2
- package/dist/tool-ids.d.ts.map +1 -1
- package/dist/tool-ids.js +10 -2
- package/dist/tool-ids.js.map +1 -1
- package/dist/types/tool-result.d.ts +1 -0
- package/dist/types/tool-result.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/docs-search/docs-semantic-search.ts +1 -1
- package/src/hf-api-call.ts +6 -0
- package/src/index.ts +1 -0
- package/src/jobs/api-client.ts +187 -0
- package/src/jobs/commands/inspect.ts +38 -0
- package/src/jobs/commands/logs.ts +36 -0
- package/src/jobs/commands/ps.ts +40 -0
- package/src/jobs/commands/run.ts +135 -0
- package/src/jobs/commands/scheduled.ts +198 -0
- package/src/jobs/commands/utils.ts +191 -0
- package/src/jobs/formatters.ts +149 -0
- package/src/jobs/sse-handler.ts +144 -0
- package/src/jobs/tool.ts +435 -0
- package/src/jobs/types.ts +237 -0
- package/src/tool-ids.ts +11 -1
- package/src/types/tool-result.ts +6 -0
- package/test/jobs/command-translation.spec.ts +331 -0
- package/test/jobs/formatters.spec.ts +267 -0
- 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":"AAKA,SAAS,QAAQ,CAAC,GAAW,EAAE,SAAiB;IAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAChD,CAAC;AAKD,SAAS,UAAU,CAAC,OAA2B;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC;IAChB,CAAC;AACF,CAAC;AAKD,SAAS,aAAa,CAAC,OAAkB;IACxC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAKD,SAAS,eAAe,CAAC,GAAyD;IACjF,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,WAAW,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAKD,MAAM,UAAU,eAAe,CAAC,IAAe;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAGD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAGjE,MAAM,SAAS,GAAG;QACjB,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;KACV,CAAC;IAGF,MAAM,MAAM,GAAG,KAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1N,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;IAGvM,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE5D,OAAO,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/L,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAKD,MAAM,UAAU,wBAAwB,CAAC,IAAwB;IAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,0BAA0B,CAAC;IACnC,CAAC;IAGD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAG7D,MAAM,SAAS,GAAG;QACjB,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,CAAC;KACV,CAAC;IAGF,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IAChT,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;IAGnR,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3C,OAAO,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IACjR,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,eAAe,IAAI,UAAU,CAAC;AACtC,CAAC;AAKD,MAAM,UAAU,yBAAyB,CAAC,IAA2C;IACpF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,eAAe,IAAI,UAAU,CAAC;AACtC,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|