@apify/actors-mcp-server 0.9.23-beta.0 → 0.9.23-beta.2
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/const.d.ts +3 -1
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +5 -1
- package/dist/const.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +21 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/tools/core/actor_execution.d.ts +1 -1
- package/dist/tools/core/actor_execution.d.ts.map +1 -1
- package/dist/tools/core/actor_execution.js +28 -10
- package/dist/tools/core/actor_execution.js.map +1 -1
- package/dist/tools/core/call_actor_common.d.ts +4 -0
- package/dist/tools/core/call_actor_common.d.ts.map +1 -1
- package/dist/tools/core/call_actor_common.js +37 -1
- package/dist/tools/core/call_actor_common.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/progress.d.ts +17 -1
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +55 -11
- package/dist/utils/progress.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/progress.d.ts
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type { ProgressNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import type { ApifyClient } from '../apify_client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Leads with the run status so clients can see lifecycle transitions
|
|
5
|
+
* (RUNNING → SUCCEEDED) and never miss a terminal flip behind a stale statusMessage.
|
|
6
|
+
* At terminal status the message is only appended when the actor explicitly marked it
|
|
7
|
+
* terminal — otherwise it's an in-progress message left over from before the flip.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatRunStatusMessage(actorName: string, run: {
|
|
10
|
+
status: string;
|
|
11
|
+
statusMessage?: string | null;
|
|
12
|
+
isStatusMessageTerminal?: boolean | null;
|
|
13
|
+
}): string;
|
|
3
14
|
export declare class ProgressTracker {
|
|
4
15
|
private progressToken?;
|
|
5
16
|
private sendNotification?;
|
|
6
17
|
private currentProgress;
|
|
7
18
|
private intervalId?;
|
|
19
|
+
private stopped;
|
|
20
|
+
private lastEmittedMessage?;
|
|
8
21
|
private taskId?;
|
|
9
22
|
private onStatusMessage?;
|
|
10
23
|
constructor(options: {
|
|
@@ -14,7 +27,10 @@ export declare class ProgressTracker {
|
|
|
14
27
|
onStatusMessage?: (message: string) => Promise<void>;
|
|
15
28
|
});
|
|
16
29
|
updateProgress(message?: string): Promise<void>;
|
|
17
|
-
startActorRunUpdates(runId: string, apifyClient: ApifyClient, actorName: string
|
|
30
|
+
startActorRunUpdates(runId: string, apifyClient: ApifyClient, actorName: string, initial?: {
|
|
31
|
+
status?: string;
|
|
32
|
+
statusMessage?: string | null;
|
|
33
|
+
}): void;
|
|
18
34
|
stop(): void;
|
|
19
35
|
}
|
|
20
36
|
export declare function createProgressTracker(progressToken: string | number | undefined, sendNotification: ((notification: ProgressNotification) => Promise<void>) | undefined, taskId?: string, onStatusMessage?: (message: string) => Promise<void>): ProgressTracker | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GACjG,MAAM,CAMR;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,gBAAgB,CAAC,CAAwD;IACjF,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,eAAe,CAAC,CAAqC;gBAEjD,OAAO,EAAE;QACjB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAChC,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxD;IAOK,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CrD,oBAAoB,CAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAC7D,IAAI;IAyCP,IAAI,IAAI,IAAI;CAOf;AAED,wBAAgB,qBAAqB,CACjC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAC1C,gBAAgB,EAAE,CAAC,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EACrF,MAAM,CAAC,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACrD,eAAe,GAAG,IAAI,CAQxB"}
|
package/dist/utils/progress.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { PROGRESS_NOTIFICATION_INTERVAL_MS, RELATED_TASK_META_KEY } from '../const.js';
|
|
2
|
+
const TERMINAL_RUN_STATUSES = new Set(['SUCCEEDED', 'FAILED', 'ABORTED', 'TIMED-OUT']);
|
|
3
|
+
/**
|
|
4
|
+
* Leads with the run status so clients can see lifecycle transitions
|
|
5
|
+
* (RUNNING → SUCCEEDED) and never miss a terminal flip behind a stale statusMessage.
|
|
6
|
+
* At terminal status the message is only appended when the actor explicitly marked it
|
|
7
|
+
* terminal — otherwise it's an in-progress message left over from before the flip.
|
|
8
|
+
*/
|
|
9
|
+
export function formatRunStatusMessage(actorName, run) {
|
|
10
|
+
const isTerminal = TERMINAL_RUN_STATUSES.has(run.status);
|
|
11
|
+
const showStatusMessage = run.statusMessage && (!isTerminal || run.isStatusMessageTerminal === true);
|
|
12
|
+
return showStatusMessage
|
|
13
|
+
? `${actorName}: ${run.status} — ${run.statusMessage}`
|
|
14
|
+
: `${actorName}: ${run.status}`;
|
|
15
|
+
}
|
|
2
16
|
export class ProgressTracker {
|
|
3
17
|
constructor(options) {
|
|
4
18
|
Object.defineProperty(this, "progressToken", {
|
|
@@ -25,6 +39,18 @@ export class ProgressTracker {
|
|
|
25
39
|
writable: true,
|
|
26
40
|
value: void 0
|
|
27
41
|
});
|
|
42
|
+
Object.defineProperty(this, "stopped", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: false
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(this, "lastEmittedMessage", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true,
|
|
52
|
+
value: void 0
|
|
53
|
+
});
|
|
28
54
|
Object.defineProperty(this, "taskId", {
|
|
29
55
|
enumerable: true,
|
|
30
56
|
configurable: true,
|
|
@@ -43,6 +69,12 @@ export class ProgressTracker {
|
|
|
43
69
|
this.onStatusMessage = options.onStatusMessage;
|
|
44
70
|
}
|
|
45
71
|
async updateProgress(message) {
|
|
72
|
+
// Dedup consecutive identical messages so a polling tick that emitted the
|
|
73
|
+
// terminal status doesn't double-emit when the caller also explicitly emits.
|
|
74
|
+
if (message !== undefined && message === this.lastEmittedMessage) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.lastEmittedMessage = message;
|
|
46
78
|
this.currentProgress += 1;
|
|
47
79
|
// Send progress notification only if progressToken and sendNotification are available
|
|
48
80
|
if (this.progressToken !== undefined && this.progressToken !== null && this.sendNotification) {
|
|
@@ -79,26 +111,34 @@ export class ProgressTracker {
|
|
|
79
111
|
}
|
|
80
112
|
}
|
|
81
113
|
}
|
|
82
|
-
startActorRunUpdates(runId, apifyClient, actorName) {
|
|
114
|
+
startActorRunUpdates(runId, apifyClient, actorName, initial) {
|
|
115
|
+
var _a;
|
|
83
116
|
this.stop();
|
|
84
|
-
|
|
85
|
-
let
|
|
117
|
+
this.stopped = false;
|
|
118
|
+
let lastStatus = (_a = initial === null || initial === void 0 ? void 0 : initial.status) !== null && _a !== void 0 ? _a : '';
|
|
119
|
+
let lastStatusMessage = (initial === null || initial === void 0 ? void 0 : initial.statusMessage) || '';
|
|
120
|
+
let tickInFlight = false;
|
|
86
121
|
this.intervalId = setInterval(async () => {
|
|
122
|
+
// Skip if a previous tick is still awaiting run.get() / updateProgress() — otherwise
|
|
123
|
+
// a slow tick can overlap with the next one and cause out-of-order emissions.
|
|
124
|
+
if (tickInFlight)
|
|
125
|
+
return;
|
|
126
|
+
tickInFlight = true;
|
|
87
127
|
try {
|
|
88
128
|
const run = await apifyClient.run(runId).get();
|
|
89
|
-
|
|
129
|
+
// stop() may have been called while run.get() was awaiting; clearInterval can't
|
|
130
|
+
// abort an in-flight tick, so guard here to avoid a late duplicate emission.
|
|
131
|
+
if (this.stopped || !run)
|
|
90
132
|
return;
|
|
91
133
|
const { status, statusMessage } = run;
|
|
134
|
+
const normalizedStatusMessage = statusMessage || '';
|
|
92
135
|
// Only send notification if status or statusMessage changed
|
|
93
|
-
if (status !== lastStatus ||
|
|
136
|
+
if (status !== lastStatus || normalizedStatusMessage !== lastStatusMessage) {
|
|
94
137
|
lastStatus = status;
|
|
95
|
-
lastStatusMessage =
|
|
96
|
-
|
|
97
|
-
? `${actorName}: ${statusMessage}`
|
|
98
|
-
: `${actorName}: ${status}`;
|
|
99
|
-
await this.updateProgress(message);
|
|
138
|
+
lastStatusMessage = normalizedStatusMessage;
|
|
139
|
+
await this.updateProgress(formatRunStatusMessage(actorName, run));
|
|
100
140
|
// Stop polling if Actor finished
|
|
101
|
-
if (status
|
|
141
|
+
if (TERMINAL_RUN_STATUSES.has(status)) {
|
|
102
142
|
this.stop();
|
|
103
143
|
}
|
|
104
144
|
}
|
|
@@ -106,9 +146,13 @@ export class ProgressTracker {
|
|
|
106
146
|
catch {
|
|
107
147
|
// Silent fail - continue polling
|
|
108
148
|
}
|
|
149
|
+
finally {
|
|
150
|
+
tickInFlight = false;
|
|
151
|
+
}
|
|
109
152
|
}, PROGRESS_NOTIFICATION_INTERVAL_MS);
|
|
110
153
|
}
|
|
111
154
|
stop() {
|
|
155
|
+
this.stopped = true;
|
|
112
156
|
if (this.intervalId) {
|
|
113
157
|
clearInterval(this.intervalId);
|
|
114
158
|
this.intervalId = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"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"}
|