taskflow-mcp-core 0.1.8 → 0.2.1
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/README.md +248 -808
- package/dist/mcp/jsonrpc.d.ts +12 -1
- package/dist/mcp/jsonrpc.d.ts.map +1 -1
- package/dist/mcp/jsonrpc.js +148 -19
- package/dist/mcp/jsonrpc.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +336 -26
- package/dist/mcp/server.js.map +1 -1
- package/package.json +4 -8
package/dist/mcp/jsonrpc.d.ts
CHANGED
|
@@ -30,7 +30,12 @@ export declare const RPC: {
|
|
|
30
30
|
readonly METHOD_NOT_FOUND: -32601;
|
|
31
31
|
readonly INVALID_PARAMS: -32602;
|
|
32
32
|
readonly INTERNAL_ERROR: -32603;
|
|
33
|
+
readonly REQUEST_CANCELLED: -32800;
|
|
33
34
|
};
|
|
35
|
+
/** Maximum time stdio shutdown waits for request wrappers after aborting them.
|
|
36
|
+
* Non-cooperative user handlers are detached (their eventual rejection is
|
|
37
|
+
* observed) so a broken handler can never hold the MCP process open forever. */
|
|
38
|
+
export declare const TRANSPORT_SHUTDOWN_GRACE_MS = 100;
|
|
34
39
|
/** Thrown by a handler to return a structured JSON-RPC error to the client. */
|
|
35
40
|
export declare class RpcError extends Error {
|
|
36
41
|
code: number;
|
|
@@ -42,7 +47,13 @@ export declare class RpcError extends Error {
|
|
|
42
47
|
* a structured failure. Returning `undefined` for a request (has id) sends
|
|
43
48
|
* `result: null`; for a notification it is ignored.
|
|
44
49
|
*/
|
|
45
|
-
export
|
|
50
|
+
export interface RpcContext {
|
|
51
|
+
/** JSON-RPC request id. Notifications use null. */
|
|
52
|
+
requestId: string | number | null;
|
|
53
|
+
/** Aborted by MCP `notifications/cancelled` or transport disconnect. */
|
|
54
|
+
signal: AbortSignal;
|
|
55
|
+
}
|
|
56
|
+
export type RpcHandler = (params: unknown, context: RpcContext) => Promise<unknown> | unknown;
|
|
46
57
|
/**
|
|
47
58
|
* Run a JSON-RPC stdio loop over the given streams (defaults to process
|
|
48
59
|
* stdin/stdout). Resolves when the input stream ends (client disconnect).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../src/mcp/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,kDAAkD;AAClD,eAAO,MAAM,GAAG;aACf,WAAW,EAAE,CAAC,KAAK;aACnB,eAAe,EAAE,CAAC,KAAK;aACvB,gBAAgB,EAAE,CAAC,KAAK;aACxB,cAAc,EAAE,CAAC,KAAK;aACtB,cAAc,EAAE,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../src/mcp/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,kDAAkD;AAClD,eAAO,MAAM,GAAG;aACf,WAAW,EAAE,CAAC,KAAK;aACnB,eAAe,EAAE,CAAC,KAAK;aACvB,gBAAgB,EAAE,CAAC,KAAK;aACxB,cAAc,EAAE,CAAC,KAAK;aACtB,cAAc,EAAE,CAAC,KAAK;aACtB,iBAAiB,EAAE,CAAC,KAAK;CAChB,CAAC;AAEX;;gFAEgF;AAChF,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,+EAA+E;AAC/E,qBAAa,QAAS,SAAQ,KAAK;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAKxD;CACD;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,mDAAmD;IACnD,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,wEAAwE;IACxE,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAE9F;;;GAGG;AACH,wBAAgB,UAAU,CACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GACxE,OAAO,CAAC,IAAI,CAAC,CAiMf"}
|
package/dist/mcp/jsonrpc.js
CHANGED
|
@@ -19,7 +19,12 @@ export const RPC = {
|
|
|
19
19
|
METHOD_NOT_FOUND: -32601,
|
|
20
20
|
INVALID_PARAMS: -32602,
|
|
21
21
|
INTERNAL_ERROR: -32603,
|
|
22
|
+
REQUEST_CANCELLED: -32800,
|
|
22
23
|
};
|
|
24
|
+
/** Maximum time stdio shutdown waits for request wrappers after aborting them.
|
|
25
|
+
* Non-cooperative user handlers are detached (their eventual rejection is
|
|
26
|
+
* observed) so a broken handler can never hold the MCP process open forever. */
|
|
27
|
+
export const TRANSPORT_SHUTDOWN_GRACE_MS = 100;
|
|
23
28
|
/** Thrown by a handler to return a structured JSON-RPC error to the client. */
|
|
24
29
|
export class RpcError extends Error {
|
|
25
30
|
code;
|
|
@@ -38,8 +43,24 @@ export class RpcError extends Error {
|
|
|
38
43
|
export function serveStdio(handlers, io = {}) {
|
|
39
44
|
const input = io.input ?? process.stdin;
|
|
40
45
|
const output = io.output ?? process.stdout;
|
|
46
|
+
const activeRequests = new Map();
|
|
47
|
+
const activeControllers = new Set();
|
|
48
|
+
const pending = new Set();
|
|
49
|
+
const requestKey = (id) => `${typeof id}:${String(id)}`;
|
|
50
|
+
let transportClosed = false;
|
|
51
|
+
let requestTransportTeardown;
|
|
41
52
|
const write = (obj) => {
|
|
42
|
-
|
|
53
|
+
if (transportClosed)
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
output.write(JSON.stringify(obj) + "\n");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Some Writable implementations throw synchronously instead of reporting
|
|
60
|
+
// failures through their callback. Route both forms through the same
|
|
61
|
+
// teardown so active work is aborted and shutdown remains bounded.
|
|
62
|
+
requestTransportTeardown?.();
|
|
63
|
+
}
|
|
43
64
|
};
|
|
44
65
|
const respondOk = (id, result) => {
|
|
45
66
|
write({ jsonrpc: "2.0", id, result: result === undefined ? null : result });
|
|
@@ -67,6 +88,17 @@ export function serveStdio(handlers, io = {}) {
|
|
|
67
88
|
respondErr(id, { code: RPC.INVALID_REQUEST, message: "Invalid Request" });
|
|
68
89
|
return;
|
|
69
90
|
}
|
|
91
|
+
// MCP cancellation is a notification aimed at an in-flight request. Handle
|
|
92
|
+
// it in the transport so every method automatically receives the same
|
|
93
|
+
// AbortSignal and hosts do not need bespoke cancellation handlers.
|
|
94
|
+
if (msg.method === "notifications/cancelled") {
|
|
95
|
+
const params = msg.params;
|
|
96
|
+
const cancelledId = params?.requestId;
|
|
97
|
+
if (typeof cancelledId === "string" || typeof cancelledId === "number") {
|
|
98
|
+
activeRequests.get(requestKey(cancelledId))?.abort();
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
70
102
|
const handler = handlers[msg.method];
|
|
71
103
|
if (!handler) {
|
|
72
104
|
// Unknown notifications are silently ignored (e.g. notifications/*).
|
|
@@ -74,15 +106,57 @@ export function serveStdio(handlers, io = {}) {
|
|
|
74
106
|
respondErr(id, { code: RPC.METHOD_NOT_FOUND, message: `Method not found: ${msg.method}` });
|
|
75
107
|
return;
|
|
76
108
|
}
|
|
109
|
+
const key = !isNotification && id !== null ? requestKey(id) : undefined;
|
|
110
|
+
if (key) {
|
|
111
|
+
const duplicate = activeRequests.get(key);
|
|
112
|
+
if (duplicate) {
|
|
113
|
+
// JSON-RPC ids identify one in-flight request. Never overwrite the
|
|
114
|
+
// original controller: abort the ambiguous first request and ignore the
|
|
115
|
+
// duplicate, yielding one deterministic cancellation response.
|
|
116
|
+
duplicate.abort();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const controller = new AbortController();
|
|
121
|
+
activeControllers.add(controller);
|
|
122
|
+
if (key)
|
|
123
|
+
activeRequests.set(key, controller);
|
|
124
|
+
const ABORTED = Symbol("aborted");
|
|
125
|
+
let abortListener;
|
|
126
|
+
const aborted = new Promise((resolve) => {
|
|
127
|
+
abortListener = () => resolve(ABORTED);
|
|
128
|
+
if (controller.signal.aborted)
|
|
129
|
+
resolve(ABORTED);
|
|
130
|
+
else
|
|
131
|
+
controller.signal.addEventListener("abort", abortListener, { once: true });
|
|
132
|
+
});
|
|
133
|
+
// Invoke immediately so synchronous protocol handlers can complete before a
|
|
134
|
+
// following stdin EOF, but normalize throws and async results into one promise.
|
|
135
|
+
let handlerPromise;
|
|
77
136
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
137
|
+
handlerPromise = Promise.resolve(handler(msg.params, { requestId: id, signal: controller.signal }));
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
handlerPromise = Promise.reject(error);
|
|
141
|
+
}
|
|
142
|
+
// Promise.race installs a rejection observer on handlerPromise. If abort wins,
|
|
143
|
+
// a later handler rejection is consumed and can never become unhandled.
|
|
144
|
+
try {
|
|
145
|
+
const result = await Promise.race([handlerPromise, aborted]);
|
|
146
|
+
if (!isNotification) {
|
|
147
|
+
if (result === ABORTED || controller.signal.aborted)
|
|
148
|
+
respondErr(id, { code: RPC.REQUEST_CANCELLED, message: "Request cancelled" });
|
|
149
|
+
else
|
|
150
|
+
respondOk(id, result);
|
|
151
|
+
}
|
|
81
152
|
}
|
|
82
153
|
catch (e) {
|
|
83
154
|
if (isNotification)
|
|
84
155
|
return; // can't report errors for notifications
|
|
85
|
-
if (
|
|
156
|
+
if (controller.signal.aborted) {
|
|
157
|
+
respondErr(id, { code: RPC.REQUEST_CANCELLED, message: "Request cancelled" });
|
|
158
|
+
}
|
|
159
|
+
else if (e instanceof RpcError) {
|
|
86
160
|
respondErr(id, { code: e.code, message: e.message, data: e.data });
|
|
87
161
|
}
|
|
88
162
|
else {
|
|
@@ -90,29 +164,84 @@ export function serveStdio(handlers, io = {}) {
|
|
|
90
164
|
respondErr(id, { code: RPC.INTERNAL_ERROR, message });
|
|
91
165
|
}
|
|
92
166
|
}
|
|
167
|
+
finally {
|
|
168
|
+
if (abortListener)
|
|
169
|
+
controller.signal.removeEventListener("abort", abortListener);
|
|
170
|
+
activeControllers.delete(controller);
|
|
171
|
+
if (key && activeRequests.get(key) === controller)
|
|
172
|
+
activeRequests.delete(key);
|
|
173
|
+
}
|
|
93
174
|
};
|
|
94
175
|
return new Promise((resolve) => {
|
|
95
176
|
let buffer = "";
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
177
|
+
let finishPromise;
|
|
178
|
+
let resolved = false;
|
|
179
|
+
const track = (promise) => {
|
|
180
|
+
pending.add(promise);
|
|
181
|
+
void promise.then(() => pending.delete(promise), () => pending.delete(promise));
|
|
182
|
+
};
|
|
183
|
+
const removeTransportListeners = () => {
|
|
184
|
+
input.removeListener("data", onData);
|
|
185
|
+
input.removeListener("end", onEnd);
|
|
186
|
+
input.removeListener("close", onClose);
|
|
187
|
+
input.removeListener("error", onInputError);
|
|
188
|
+
output.removeListener("error", onOutputError);
|
|
189
|
+
requestTransportTeardown = undefined;
|
|
190
|
+
};
|
|
191
|
+
const finish = () => {
|
|
192
|
+
transportClosed = true;
|
|
193
|
+
for (const controller of activeControllers)
|
|
194
|
+
controller.abort();
|
|
195
|
+
if (!finishPromise) {
|
|
196
|
+
finishPromise = new Promise((done) => {
|
|
197
|
+
let completed = false;
|
|
198
|
+
const settle = () => {
|
|
199
|
+
if (completed)
|
|
200
|
+
return;
|
|
201
|
+
completed = true;
|
|
202
|
+
clearTimeout(timer);
|
|
203
|
+
done();
|
|
204
|
+
};
|
|
205
|
+
const timer = setTimeout(settle, TRANSPORT_SHUTDOWN_GRACE_MS);
|
|
206
|
+
void Promise.allSettled([...pending]).then(settle);
|
|
207
|
+
}).then(() => {
|
|
208
|
+
removeTransportListeners();
|
|
209
|
+
if (!resolved) {
|
|
210
|
+
resolved = true;
|
|
211
|
+
resolve();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return finishPromise;
|
|
216
|
+
};
|
|
217
|
+
const teardown = () => void finish();
|
|
218
|
+
const onData = (data) => {
|
|
219
|
+
if (transportClosed)
|
|
220
|
+
return;
|
|
101
221
|
buffer += data.toString();
|
|
102
222
|
let i;
|
|
103
223
|
while ((i = buffer.indexOf("\n")) >= 0) {
|
|
104
224
|
const line = buffer.slice(0, i);
|
|
105
225
|
buffer = buffer.slice(i + 1);
|
|
106
|
-
|
|
226
|
+
track(handleLine(line));
|
|
107
227
|
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
228
|
+
};
|
|
229
|
+
const onEnd = () => {
|
|
230
|
+
if (transportClosed)
|
|
231
|
+
return;
|
|
232
|
+
if (buffer.trim())
|
|
233
|
+
track(handleLine(buffer));
|
|
234
|
+
teardown();
|
|
235
|
+
};
|
|
236
|
+
const onClose = teardown;
|
|
237
|
+
const onInputError = teardown;
|
|
238
|
+
const onOutputError = teardown;
|
|
239
|
+
requestTransportTeardown = teardown;
|
|
240
|
+
input.on("data", onData);
|
|
241
|
+
input.on("end", onEnd);
|
|
242
|
+
input.on("close", onClose);
|
|
243
|
+
input.on("error", onInputError);
|
|
244
|
+
output.on("error", onOutputError);
|
|
116
245
|
});
|
|
117
246
|
}
|
|
118
247
|
//# sourceMappingURL=jsonrpc.js.map
|
package/dist/mcp/jsonrpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonrpc.js","sourceRoot":"","sources":["../../src/mcp/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAeH,kDAAkD;AAClD,MAAM,CAAC,MAAM,GAAG,GAAG;IAClB,WAAW,EAAE,CAAC,KAAK;IACnB,eAAe,EAAE,CAAC,KAAK;IACvB,gBAAgB,EAAE,CAAC,KAAK;IACxB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"jsonrpc.js","sourceRoot":"","sources":["../../src/mcp/jsonrpc.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -21,16 +21,23 @@
|
|
|
21
21
|
* - taskflow_verify : statically verify a flow (no execution)
|
|
22
22
|
* - taskflow_compile : render a flow as a DAG diagram (SVG image) + status line
|
|
23
23
|
* - taskflow_peek : inspect a stored run's intermediate phase output
|
|
24
|
+
* - taskflow_trace : read a run's append-only event trace
|
|
25
|
+
* - taskflow_replay : re-evaluate a recorded trace under alternate knobs (zero tokens)
|
|
26
|
+
* - taskflow_why_stale / taskflow_recompute / taskflow_reconcile_workspace
|
|
27
|
+
* - taskflow_save / taskflow_search
|
|
24
28
|
*/
|
|
25
|
-
import { type RpcHandler } from "./jsonrpc.ts";
|
|
29
|
+
import { type RpcContext, type RpcHandler } from "./jsonrpc.ts";
|
|
30
|
+
import { saveRun, type RunState, type TraceEvent } from "taskflow-core";
|
|
26
31
|
import type { SubagentRunner, AgentConfig } from "taskflow-core";
|
|
32
|
+
export declare function formatTraceJsonMcp(events: TraceEvent[], requested?: unknown): string;
|
|
33
|
+
export declare function persistTerminalRun(state: RunState, cleanupConfig: Parameters<typeof saveRun>[1], write?: typeof saveRun): string | undefined;
|
|
27
34
|
/**
|
|
28
35
|
* Build the per-call tool handlers. `cwd` is the directory the server was
|
|
29
36
|
* launched in (where saved flows + agents are discovered, and where subagents
|
|
30
37
|
* run). `runner` is the host's SubagentRunner (codex/claude) — each phase's
|
|
31
38
|
* subagent executes through it.
|
|
32
39
|
*/
|
|
33
|
-
export declare function makeToolHandlers(cwd: string, runner: SubagentRunner<AgentConfig>): Record<string, (args: Record<string, unknown
|
|
40
|
+
export declare function makeToolHandlers(cwd: string, runner: SubagentRunner<AgentConfig>): Record<string, (args: Record<string, unknown>, context?: RpcContext) => Promise<unknown>>;
|
|
34
41
|
/** Build the full MCP method dispatch table (protocol + tools). */
|
|
35
42
|
export declare function makeMcpHandlers(cwd: string, runner: SubagentRunner<AgentConfig>): Record<string, RpcHandler>;
|
|
36
43
|
/** Start the stdio MCP server. Resolves when the client disconnects. */
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAA6B,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAM3F,OAAO,EAON,OAAO,EAsBP,KAAK,QAAQ,EAGb,KAAK,UAAU,EAQf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkNjE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAQpF;AAoXD,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,QAAQ,EACf,aAAa,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAC5C,KAAK,GAAE,OAAO,OAAiB,GAC7B,MAAM,GAAG,SAAS,CAOpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CA2V3F;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CA8B5G;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9G"}
|