@motrix/mdxp 0.1.0
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/LICENSE +9 -0
- package/README.md +103 -0
- package/dist/browser.d.ts +3 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +14 -0
- package/dist/browser.js.map +1 -0
- package/dist/connection.d.ts +50 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +38 -0
- package/dist/connection.js.map +1 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/methods.d.ts +28 -0
- package/dist/methods.d.ts.map +1 -0
- package/dist/methods.js +32 -0
- package/dist/methods.js.map +1 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +15 -0
- package/dist/node.js.map +1 -0
- package/dist/schemas/download-add.d.ts +72 -0
- package/dist/schemas/download-add.d.ts.map +1 -0
- package/dist/schemas/download-add.js +49 -0
- package/dist/schemas/download-add.js.map +1 -0
- package/dist/schemas/download.d.ts +156 -0
- package/dist/schemas/download.d.ts.map +1 -0
- package/dist/schemas/download.js +34 -0
- package/dist/schemas/download.js.map +1 -0
- package/dist/schemas/engine.d.ts +41 -0
- package/dist/schemas/engine.d.ts.map +1 -0
- package/dist/schemas/engine.js +24 -0
- package/dist/schemas/engine.js.map +1 -0
- package/dist/schemas/events.d.ts +36 -0
- package/dist/schemas/events.d.ts.map +1 -0
- package/dist/schemas/events.js +26 -0
- package/dist/schemas/events.js.map +1 -0
- package/dist/schemas/index.d.ts +12 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +12 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/initialize.d.ts +70 -0
- package/dist/schemas/initialize.d.ts.map +1 -0
- package/dist/schemas/initialize.js +72 -0
- package/dist/schemas/initialize.js.map +1 -0
- package/dist/schemas/resource.d.ts +39 -0
- package/dist/schemas/resource.d.ts.map +1 -0
- package/dist/schemas/resource.js +21 -0
- package/dist/schemas/resource.js.map +1 -0
- package/dist/schemas/selection.d.ts +129 -0
- package/dist/schemas/selection.d.ts.map +1 -0
- package/dist/schemas/selection.js +30 -0
- package/dist/schemas/selection.js.map +1 -0
- package/dist/schemas/stats.d.ts +18 -0
- package/dist/schemas/stats.d.ts.map +1 -0
- package/dist/schemas/stats.js +14 -0
- package/dist/schemas/stats.js.map +1 -0
- package/dist/schemas/system.d.ts +11 -0
- package/dist/schemas/system.d.ts.map +1 -0
- package/dist/schemas/system.js +9 -0
- package/dist/schemas/system.js.map +1 -0
- package/dist/schemas/task.d.ts +202 -0
- package/dist/schemas/task.d.ts.map +1 -0
- package/dist/schemas/task.js +90 -0
- package/dist/schemas/task.js.map +1 -0
- package/dist/schemas/url.d.ts +162 -0
- package/dist/schemas/url.d.ts.map +1 -0
- package/dist/schemas/url.js +73 -0
- package/dist/schemas/url.js.map +1 -0
- package/dist/tools.d.ts +35 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +124 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +73 -0
- package/src/browser.ts +14 -0
- package/src/connection.ts +162 -0
- package/src/errors.ts +60 -0
- package/src/index.ts +31 -0
- package/src/methods.ts +36 -0
- package/src/node.ts +15 -0
- package/src/schemas/download-add.ts +55 -0
- package/src/schemas/download.ts +42 -0
- package/src/schemas/engine.ts +32 -0
- package/src/schemas/events.ts +36 -0
- package/src/schemas/index.ts +11 -0
- package/src/schemas/initialize.ts +88 -0
- package/src/schemas/resource.ts +26 -0
- package/src/schemas/selection.ts +32 -0
- package/src/schemas/stats.ts +20 -0
- package/src/schemas/system.ts +13 -0
- package/src/schemas/task.ts +113 -0
- package/src/schemas/url.ts +86 -0
- package/src/tools.ts +175 -0
- package/src/types.ts +63 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Control-plane task status. Richer than the lossy 4-value
|
|
5
|
+
* `$/task/progress.phase`; snake_case-aligned with the host's domain
|
|
6
|
+
* `TaskStatus` so the host-side mapper is near-identity. `metadata_ready` maps
|
|
7
|
+
* to `queued` and `removed` is filtered out of `task/list` (not a value here).
|
|
8
|
+
*/
|
|
9
|
+
export const MdxpTaskStatusSchema = z.enum([
|
|
10
|
+
'queued',
|
|
11
|
+
'fetching_metadata',
|
|
12
|
+
'downloading',
|
|
13
|
+
'paused',
|
|
14
|
+
'seeding',
|
|
15
|
+
'finalizing',
|
|
16
|
+
'completed',
|
|
17
|
+
'error',
|
|
18
|
+
])
|
|
19
|
+
|
|
20
|
+
export const MdxpTaskTypeSchema = z.enum([
|
|
21
|
+
'http',
|
|
22
|
+
'ftp',
|
|
23
|
+
'bt',
|
|
24
|
+
'magnet',
|
|
25
|
+
'metalink',
|
|
26
|
+
])
|
|
27
|
+
|
|
28
|
+
/** BitTorrent-only public subset (omits swarm/announce/piece internals). */
|
|
29
|
+
export const MdxpBtSchema = z.object({
|
|
30
|
+
peers: z.number(),
|
|
31
|
+
seeds: z.number(),
|
|
32
|
+
ratio: z.number(),
|
|
33
|
+
trackers: z.array(z.string()),
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* First-class public task DTO — a deliberate NARROW projection of the host's
|
|
38
|
+
* ~40-field domain `DownloadTask`. Result/notification payload, so non-strict
|
|
39
|
+
* (a newer server may add fields older clients ignore). The public id is `id`,
|
|
40
|
+
* never the volatile engine gid.
|
|
41
|
+
*/
|
|
42
|
+
export const MdxpTaskSchema = z.object({
|
|
43
|
+
id: z.string(),
|
|
44
|
+
type: MdxpTaskTypeSchema,
|
|
45
|
+
name: z.string(),
|
|
46
|
+
status: MdxpTaskStatusSchema,
|
|
47
|
+
/** Fraction in [0,1] — identity with the domain (DownloadTask.progress is
|
|
48
|
+
* already completed/total). `finalPath`, by contrast, is a conditional
|
|
49
|
+
* projection (non-null only once completed), not a blind copy. */
|
|
50
|
+
progress: z.number(),
|
|
51
|
+
bytesDone: z.number(),
|
|
52
|
+
bytesTotal: z.number().nullable(),
|
|
53
|
+
speedBps: z.number(),
|
|
54
|
+
etaSec: z.number().nullable(),
|
|
55
|
+
saveDir: z.string(),
|
|
56
|
+
error: z.string().nullable(),
|
|
57
|
+
createdAt: z.number(),
|
|
58
|
+
finishedAt: z.number().nullable(),
|
|
59
|
+
finalPath: z.string().nullable(),
|
|
60
|
+
infoHash: z.string().nullable().optional(),
|
|
61
|
+
bt: MdxpBtSchema.optional(),
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
/** Shared result for write methods that only need to ack. */
|
|
65
|
+
export const OkResultSchema = z.object({ ok: z.literal(true) })
|
|
66
|
+
|
|
67
|
+
// ─── task/list ────────────────────────────────────────────────
|
|
68
|
+
export const TaskListParamsSchema = z.strictObject({
|
|
69
|
+
status: MdxpTaskStatusSchema.optional(),
|
|
70
|
+
limit: z.number().int().positive().optional(),
|
|
71
|
+
offset: z.number().int().nonnegative().optional(),
|
|
72
|
+
})
|
|
73
|
+
export const TaskListResultSchema = z.object({
|
|
74
|
+
tasks: z.array(MdxpTaskSchema),
|
|
75
|
+
total: z.number(),
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
// ─── task/get ─────────────────────────────────────────────────
|
|
79
|
+
export const TaskGetParamsSchema = z.strictObject({
|
|
80
|
+
taskId: z.string().min(1),
|
|
81
|
+
})
|
|
82
|
+
export const TaskGetResultSchema = z.object({
|
|
83
|
+
task: MdxpTaskSchema.nullable(),
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// ─── task/pause · task/resume ─────────────────────────────────
|
|
87
|
+
export const TaskPauseParamsSchema = z.strictObject({
|
|
88
|
+
taskId: z.string().min(1),
|
|
89
|
+
})
|
|
90
|
+
export const TaskResumeParamsSchema = z.strictObject({
|
|
91
|
+
taskId: z.string().min(1),
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
// ─── task/remove ──────────────────────────────────────────────
|
|
95
|
+
export const TaskRemoveParamsSchema = z.strictObject({
|
|
96
|
+
taskId: z.string().min(1),
|
|
97
|
+
deleteFiles: z.boolean().optional(),
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
export type MdxpTaskStatus = z.infer<typeof MdxpTaskStatusSchema>
|
|
101
|
+
export type MdxpTaskType = z.infer<typeof MdxpTaskTypeSchema>
|
|
102
|
+
export type MdxpTask = z.infer<typeof MdxpTaskSchema>
|
|
103
|
+
export type OkResult = z.infer<typeof OkResultSchema>
|
|
104
|
+
export type TaskListParams = z.infer<typeof TaskListParamsSchema>
|
|
105
|
+
export type TaskListResult = z.infer<typeof TaskListResultSchema>
|
|
106
|
+
export type TaskGetParams = z.infer<typeof TaskGetParamsSchema>
|
|
107
|
+
export type TaskGetResult = z.infer<typeof TaskGetResultSchema>
|
|
108
|
+
export type TaskPauseParams = z.infer<typeof TaskPauseParamsSchema>
|
|
109
|
+
export type TaskPauseResult = OkResult
|
|
110
|
+
export type TaskResumeParams = z.infer<typeof TaskResumeParamsSchema>
|
|
111
|
+
export type TaskResumeResult = OkResult
|
|
112
|
+
export type TaskRemoveParams = z.infer<typeof TaskRemoveParamsSchema>
|
|
113
|
+
export type TaskRemoveResult = OkResult
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { ResourceSchema } from './resource.js'
|
|
3
|
+
|
|
4
|
+
// url/probe ----------------------------------------------------
|
|
5
|
+
|
|
6
|
+
export const UrlProbeParamsSchema = z.object({
|
|
7
|
+
url: z.string().url(),
|
|
8
|
+
hint: z.object({ siteName: z.string().optional() }).optional(),
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export const UrlProbeResultSchema = z.object({
|
|
12
|
+
handled: z.boolean(),
|
|
13
|
+
adapterId: z.string().optional(),
|
|
14
|
+
confidence: z.enum(['high', 'medium', 'low']).optional(),
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
// url/resolve --------------------------------------------------
|
|
18
|
+
|
|
19
|
+
const QualityEnum = z.enum(['360p', '720p', '1080p', '1440p', '2160p', 'best'])
|
|
20
|
+
|
|
21
|
+
const ResolvedSelectionSchema = z.discriminatedUnion('kind', [
|
|
22
|
+
z.object({
|
|
23
|
+
kind: z.literal('direct'),
|
|
24
|
+
primary: ResourceSchema,
|
|
25
|
+
container: z.string().optional(),
|
|
26
|
+
quality: z.string(),
|
|
27
|
+
sizeBytes: z.number().nonnegative().optional(),
|
|
28
|
+
}),
|
|
29
|
+
z.object({
|
|
30
|
+
kind: z.literal('hls'),
|
|
31
|
+
primary: ResourceSchema,
|
|
32
|
+
container: z.string(),
|
|
33
|
+
quality: z.string(),
|
|
34
|
+
}),
|
|
35
|
+
z.object({
|
|
36
|
+
kind: z.literal('mux'),
|
|
37
|
+
video: ResourceSchema,
|
|
38
|
+
audio: ResourceSchema,
|
|
39
|
+
container: z.string(),
|
|
40
|
+
quality: z.string(),
|
|
41
|
+
sizeBytes: z.number().nonnegative().optional(),
|
|
42
|
+
}),
|
|
43
|
+
])
|
|
44
|
+
|
|
45
|
+
const SubtitleSchema = z.object({
|
|
46
|
+
languageCode: z.string(),
|
|
47
|
+
languageName: z.string(),
|
|
48
|
+
url: z.string().url(),
|
|
49
|
+
format: z.enum(['vtt', 'srt', 'ttml']),
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
export const UrlResolveParamsSchema = z.object({
|
|
53
|
+
url: z.string().url(),
|
|
54
|
+
preferences: z
|
|
55
|
+
.object({
|
|
56
|
+
maxQuality: QualityEnum.optional(),
|
|
57
|
+
preferContainer: z.enum(['mp4', 'mkv', 'webm']).optional(),
|
|
58
|
+
includeAudio: z.boolean().optional(),
|
|
59
|
+
includeSubtitles: z.boolean().optional(),
|
|
60
|
+
})
|
|
61
|
+
.optional(),
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
export const UrlResolveResultSchema = z.object({
|
|
65
|
+
selections: z.array(ResolvedSelectionSchema),
|
|
66
|
+
meta: z.object({
|
|
67
|
+
title: z.string(),
|
|
68
|
+
author: z.string().optional(),
|
|
69
|
+
durationSec: z.number().nonnegative().optional(),
|
|
70
|
+
thumbnail: z.string().url().optional(),
|
|
71
|
+
description: z.string().optional(),
|
|
72
|
+
publishedAt: z.number().optional(),
|
|
73
|
+
tags: z.array(z.string()).optional(),
|
|
74
|
+
}),
|
|
75
|
+
subtitles: z.array(SubtitleSchema).optional(),
|
|
76
|
+
extractedBy: z.object({
|
|
77
|
+
adapterId: z.string(),
|
|
78
|
+
adapterVersion: z.string(),
|
|
79
|
+
extractedAt: z.number(),
|
|
80
|
+
}),
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
export type UrlProbeParams = z.infer<typeof UrlProbeParamsSchema>
|
|
84
|
+
export type UrlProbeResult = z.infer<typeof UrlProbeResultSchema>
|
|
85
|
+
export type UrlResolveParams = z.infer<typeof UrlResolveParamsSchema>
|
|
86
|
+
export type UrlResolveResult = z.infer<typeof UrlResolveResultSchema>
|
package/src/tools.ts
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { type Method, Methods } from './methods.js'
|
|
3
|
+
import {
|
|
4
|
+
DownloadCancelParamsSchema,
|
|
5
|
+
DownloadCancelResultSchema,
|
|
6
|
+
DownloadSubmitParamsSchema,
|
|
7
|
+
DownloadSubmitResultSchema,
|
|
8
|
+
} from './schemas/download.js'
|
|
9
|
+
import {
|
|
10
|
+
DownloadAddParamsSchema,
|
|
11
|
+
DownloadAddResultSchema,
|
|
12
|
+
} from './schemas/download-add.js'
|
|
13
|
+
import {
|
|
14
|
+
EngineStatusParamsSchema,
|
|
15
|
+
EngineStatusResultSchema,
|
|
16
|
+
} from './schemas/engine.js'
|
|
17
|
+
import {
|
|
18
|
+
InitializeParamsSchema,
|
|
19
|
+
InitializeResultSchema,
|
|
20
|
+
} from './schemas/initialize.js'
|
|
21
|
+
import { StatsGetParamsSchema, StatsResultSchema } from './schemas/stats.js'
|
|
22
|
+
import {
|
|
23
|
+
SystemPingParamsSchema,
|
|
24
|
+
SystemPingResultSchema,
|
|
25
|
+
} from './schemas/system.js'
|
|
26
|
+
import {
|
|
27
|
+
OkResultSchema,
|
|
28
|
+
TaskGetParamsSchema,
|
|
29
|
+
TaskGetResultSchema,
|
|
30
|
+
TaskListParamsSchema,
|
|
31
|
+
TaskListResultSchema,
|
|
32
|
+
TaskPauseParamsSchema,
|
|
33
|
+
TaskRemoveParamsSchema,
|
|
34
|
+
TaskResumeParamsSchema,
|
|
35
|
+
} from './schemas/task.js'
|
|
36
|
+
|
|
37
|
+
export interface MdxpToolDef {
|
|
38
|
+
readonly method: Method
|
|
39
|
+
readonly description: string
|
|
40
|
+
readonly paramsSchema: z.ZodType
|
|
41
|
+
readonly resultSchema: z.ZodType
|
|
42
|
+
/** True for methods a CLI / AI agent calls directly (vs handshake/meta). */
|
|
43
|
+
readonly agentFacing: boolean
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Methods the SERVER initiates against the client — not agent-callable, so they
|
|
48
|
+
* are absent from {@link Tools}. Colocated here so the registry's
|
|
49
|
+
* "client→server only" invariant has a single source of truth (the drift test
|
|
50
|
+
* derives the expected Tools key set from this).
|
|
51
|
+
*/
|
|
52
|
+
export const SERVER_INITIATED_METHODS: readonly Method[] = [
|
|
53
|
+
Methods.UrlProbe,
|
|
54
|
+
Methods.UrlResolve,
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Registry of every client→server request method, keyed by wire method name —
|
|
59
|
+
* the single source of truth tying method ↔ schema ↔ description together. The
|
|
60
|
+
* `agentFacing` subset is the tool catalog an AI agent sees (consumed by
|
|
61
|
+
* `motrix describe` in Spec 8). The server-initiated `url/probe` + `url/resolve`
|
|
62
|
+
* are intentionally absent (the server calls those on the client).
|
|
63
|
+
*/
|
|
64
|
+
export const Tools: Readonly<Record<string, MdxpToolDef>> = {
|
|
65
|
+
[Methods.MotrixInitialize]: {
|
|
66
|
+
method: Methods.MotrixInitialize,
|
|
67
|
+
description:
|
|
68
|
+
'Handshake: negotiate protocol version, identity, and capabilities.',
|
|
69
|
+
paramsSchema: InitializeParamsSchema,
|
|
70
|
+
resultSchema: InitializeResultSchema,
|
|
71
|
+
agentFacing: false,
|
|
72
|
+
},
|
|
73
|
+
[Methods.SystemPing]: {
|
|
74
|
+
method: Methods.SystemPing,
|
|
75
|
+
description: 'Liveness probe; echoes sentAt with the server recvAt.',
|
|
76
|
+
paramsSchema: SystemPingParamsSchema,
|
|
77
|
+
resultSchema: SystemPingResultSchema,
|
|
78
|
+
agentFacing: false,
|
|
79
|
+
},
|
|
80
|
+
[Methods.DownloadSubmit]: {
|
|
81
|
+
method: Methods.DownloadSubmit,
|
|
82
|
+
description:
|
|
83
|
+
'Submit a browser-detected download (page-shaped; used by the extension).',
|
|
84
|
+
paramsSchema: DownloadSubmitParamsSchema,
|
|
85
|
+
resultSchema: DownloadSubmitResultSchema,
|
|
86
|
+
agentFacing: false,
|
|
87
|
+
},
|
|
88
|
+
[Methods.DownloadCancel]: {
|
|
89
|
+
method: Methods.DownloadCancel,
|
|
90
|
+
description: 'Cancel a previously submitted download by task id.',
|
|
91
|
+
paramsSchema: DownloadCancelParamsSchema,
|
|
92
|
+
resultSchema: DownloadCancelResultSchema,
|
|
93
|
+
agentFacing: false,
|
|
94
|
+
},
|
|
95
|
+
[Methods.DownloadAdd]: {
|
|
96
|
+
method: Methods.DownloadAdd,
|
|
97
|
+
description:
|
|
98
|
+
'Add a download by URL(s), magnet, or torrent; returns the created task.',
|
|
99
|
+
paramsSchema: DownloadAddParamsSchema,
|
|
100
|
+
resultSchema: DownloadAddResultSchema,
|
|
101
|
+
agentFacing: true,
|
|
102
|
+
},
|
|
103
|
+
[Methods.TaskList]: {
|
|
104
|
+
method: Methods.TaskList,
|
|
105
|
+
description: 'List tasks, optionally filtered by status and paginated.',
|
|
106
|
+
paramsSchema: TaskListParamsSchema,
|
|
107
|
+
resultSchema: TaskListResultSchema,
|
|
108
|
+
agentFacing: true,
|
|
109
|
+
},
|
|
110
|
+
[Methods.TaskGet]: {
|
|
111
|
+
method: Methods.TaskGet,
|
|
112
|
+
description: 'Get a single task by id (null if not found).',
|
|
113
|
+
paramsSchema: TaskGetParamsSchema,
|
|
114
|
+
resultSchema: TaskGetResultSchema,
|
|
115
|
+
agentFacing: true,
|
|
116
|
+
},
|
|
117
|
+
[Methods.TaskPause]: {
|
|
118
|
+
method: Methods.TaskPause,
|
|
119
|
+
description: 'Pause a task by id.',
|
|
120
|
+
paramsSchema: TaskPauseParamsSchema,
|
|
121
|
+
resultSchema: OkResultSchema,
|
|
122
|
+
agentFacing: true,
|
|
123
|
+
},
|
|
124
|
+
[Methods.TaskResume]: {
|
|
125
|
+
method: Methods.TaskResume,
|
|
126
|
+
description: 'Resume a paused task by id.',
|
|
127
|
+
paramsSchema: TaskResumeParamsSchema,
|
|
128
|
+
resultSchema: OkResultSchema,
|
|
129
|
+
agentFacing: true,
|
|
130
|
+
},
|
|
131
|
+
[Methods.TaskRemove]: {
|
|
132
|
+
method: Methods.TaskRemove,
|
|
133
|
+
description: 'Remove a task by id, optionally deleting its files.',
|
|
134
|
+
paramsSchema: TaskRemoveParamsSchema,
|
|
135
|
+
resultSchema: OkResultSchema,
|
|
136
|
+
agentFacing: true,
|
|
137
|
+
},
|
|
138
|
+
[Methods.StatsGet]: {
|
|
139
|
+
method: Methods.StatsGet,
|
|
140
|
+
description: 'Get aggregate global stats (speeds + task counts).',
|
|
141
|
+
paramsSchema: StatsGetParamsSchema,
|
|
142
|
+
resultSchema: StatsResultSchema,
|
|
143
|
+
agentFacing: true,
|
|
144
|
+
},
|
|
145
|
+
[Methods.EngineStatus]: {
|
|
146
|
+
method: Methods.EngineStatus,
|
|
147
|
+
description: 'Get the download engine lifecycle state + feature report.',
|
|
148
|
+
paramsSchema: EngineStatusParamsSchema,
|
|
149
|
+
resultSchema: EngineStatusResultSchema,
|
|
150
|
+
agentFacing: true,
|
|
151
|
+
},
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export interface AgentTool {
|
|
155
|
+
name: string
|
|
156
|
+
description: string
|
|
157
|
+
/** JSON Schema (draft 2020-12) emitted by `z.toJSONSchema`. */
|
|
158
|
+
inputSchema: Record<string, unknown>
|
|
159
|
+
outputSchema: Record<string, unknown>
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** The agent-facing tool catalog: JSON-Schema-typed tools for LLM consumption. */
|
|
163
|
+
export function toAgentToolCatalog(): AgentTool[] {
|
|
164
|
+
return Object.values(Tools)
|
|
165
|
+
.filter((tool) => tool.agentFacing)
|
|
166
|
+
.map((tool) => ({
|
|
167
|
+
name: tool.method,
|
|
168
|
+
description: tool.description,
|
|
169
|
+
inputSchema: z.toJSONSchema(tool.paramsSchema) as Record<string, unknown>,
|
|
170
|
+
outputSchema: z.toJSONSchema(tool.resultSchema) as Record<
|
|
171
|
+
string,
|
|
172
|
+
unknown
|
|
173
|
+
>,
|
|
174
|
+
}))
|
|
175
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
DownloadCancelParams,
|
|
3
|
+
DownloadCancelResult,
|
|
4
|
+
DownloadSubmitParams,
|
|
5
|
+
DownloadSubmitResult,
|
|
6
|
+
} from './schemas/download.js'
|
|
7
|
+
export type {
|
|
8
|
+
DownloadAddParams,
|
|
9
|
+
DownloadAddResult,
|
|
10
|
+
} from './schemas/download-add.js'
|
|
11
|
+
export type {
|
|
12
|
+
EngineFeatureReport,
|
|
13
|
+
EngineState,
|
|
14
|
+
EngineStatusParams,
|
|
15
|
+
EngineStatusResult,
|
|
16
|
+
} from './schemas/engine.js'
|
|
17
|
+
export type {
|
|
18
|
+
CancelRequestParams,
|
|
19
|
+
PairRevokedParams,
|
|
20
|
+
TaskCompletedParams,
|
|
21
|
+
TaskErrorParams,
|
|
22
|
+
TaskProgressParams,
|
|
23
|
+
} from './schemas/events.js'
|
|
24
|
+
export type {
|
|
25
|
+
InitializeParams,
|
|
26
|
+
InitializeResult,
|
|
27
|
+
} from './schemas/initialize.js'
|
|
28
|
+
export type {
|
|
29
|
+
Cookie,
|
|
30
|
+
Resource,
|
|
31
|
+
} from './schemas/resource.js'
|
|
32
|
+
export type { Selection } from './schemas/selection.js'
|
|
33
|
+
export type {
|
|
34
|
+
StatsGetParams,
|
|
35
|
+
StatsResult,
|
|
36
|
+
StatsUpdateParams,
|
|
37
|
+
} from './schemas/stats.js'
|
|
38
|
+
export type {
|
|
39
|
+
SystemPingParams,
|
|
40
|
+
SystemPingResult,
|
|
41
|
+
} from './schemas/system.js'
|
|
42
|
+
export type {
|
|
43
|
+
MdxpTask,
|
|
44
|
+
MdxpTaskStatus,
|
|
45
|
+
MdxpTaskType,
|
|
46
|
+
OkResult,
|
|
47
|
+
TaskGetParams,
|
|
48
|
+
TaskGetResult,
|
|
49
|
+
TaskListParams,
|
|
50
|
+
TaskListResult,
|
|
51
|
+
TaskPauseParams,
|
|
52
|
+
TaskPauseResult,
|
|
53
|
+
TaskRemoveParams,
|
|
54
|
+
TaskRemoveResult,
|
|
55
|
+
TaskResumeParams,
|
|
56
|
+
TaskResumeResult,
|
|
57
|
+
} from './schemas/task.js'
|
|
58
|
+
export type {
|
|
59
|
+
UrlProbeParams,
|
|
60
|
+
UrlProbeResult,
|
|
61
|
+
UrlResolveParams,
|
|
62
|
+
UrlResolveResult,
|
|
63
|
+
} from './schemas/url.js'
|