@automatalabs/pi-acp 0.1.3 → 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 +24 -3
- package/dist/agent.d.ts +11 -7
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +374 -60
- package/dist/child-process-registry.d.ts +82 -0
- package/dist/child-process-registry.d.ts.map +1 -0
- package/dist/child-process-registry.js +408 -0
- package/dist/config.d.ts +14 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +54 -10
- package/dist/deps.d.ts +3 -3
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +2 -2
- package/dist/errors.d.ts +17 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -5
- package/dist/index.js +5 -6
- package/dist/mcp-bridge.d.ts +235 -17
- package/dist/mcp-bridge.d.ts.map +1 -1
- package/dist/mcp-bridge.js +1331 -144
- package/dist/mcp-sampling-payload.d.ts +25 -0
- package/dist/mcp-sampling-payload.d.ts.map +1 -0
- package/dist/mcp-sampling-payload.js +263 -0
- package/dist/session.d.ts +27 -9
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +301 -145
- package/dist/translate.d.ts.map +1 -1
- package/dist/translate.js +10 -6
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/package.json +3 -3
- package/dist/structured-output.d.ts +0 -14
- package/dist/structured-output.d.ts.map +0 -1
- package/dist/structured-output.js +0 -71
package/dist/errors.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestError } from "@agentclientprotocol/sdk";
|
|
2
|
-
export type ErrorKind = "auth_error" | "rate_limit" | "billing_error" | "provider_error" | "invalid_model" | "empty_prompt" | "session_busy" | "invalid_config_value" | "invalid_config_type" | "unknown_config_option" | "invalid_cwd" | "unknown_session" | "session_already_open" | "session_terminated" | "session_corrupt" | "session_not_forkable" | "mcp_init_error" | "unsupported_mcp_transport" | "
|
|
2
|
+
export type ErrorKind = "auth_error" | "rate_limit" | "billing_error" | "provider_error" | "invalid_model" | "empty_prompt" | "session_busy" | "invalid_config_value" | "invalid_config_type" | "unknown_config_option" | "invalid_cwd" | "unknown_session" | "session_already_open" | "session_terminated" | "session_corrupt" | "session_not_forkable" | "mcp_init_error" | "unsupported_mcp_transport" | "extension_setup_error" | "child_cleanup_error" | "invalid_cursor" | "unknown_auth_method" | "notification_error" | "internal_error";
|
|
3
3
|
export interface DiagnosticLike {
|
|
4
4
|
type: string;
|
|
5
5
|
timestamp: number;
|
|
@@ -20,15 +20,28 @@ export declare function redactedDiagnostics(diagnostics: readonly DiagnosticLike
|
|
|
20
20
|
type: string;
|
|
21
21
|
timestamp: number;
|
|
22
22
|
}[] | undefined;
|
|
23
|
-
|
|
24
|
-
server?: string;
|
|
23
|
+
type DiagnosticDetails = {
|
|
25
24
|
details?: Array<{
|
|
26
25
|
type: string;
|
|
27
26
|
timestamp: number;
|
|
28
27
|
}>;
|
|
29
|
-
}
|
|
28
|
+
};
|
|
29
|
+
type ServerDetails = {
|
|
30
|
+
server: string;
|
|
31
|
+
};
|
|
32
|
+
type ChildDetails = {
|
|
33
|
+
details: {
|
|
34
|
+
remainingChildren: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export declare function adapterError(kind: "mcp_init_error" | "unsupported_mcp_transport", extras: ServerDetails): RequestError;
|
|
38
|
+
export declare function adapterError(kind: "provider_error" | "internal_error", extras?: DiagnosticDetails): RequestError;
|
|
39
|
+
export declare function adapterError(kind: "child_cleanup_error", extras: ChildDetails): RequestError;
|
|
40
|
+
export declare function adapterError(kind: Exclude<ErrorKind, "mcp_init_error" | "unsupported_mcp_transport" | "provider_error" | "internal_error" | "child_cleanup_error">): RequestError;
|
|
30
41
|
export declare function classifyPreflight(error: unknown): RequestError;
|
|
31
42
|
export declare function classifyTerminal(message: TerminalAssistantLike): RequestError;
|
|
32
43
|
export declare function unexpectedError(error: unknown, terminal?: TerminalAssistantLike): RequestError;
|
|
33
44
|
export declare function isRequestError(error: unknown): error is RequestError;
|
|
45
|
+
export declare function isChildCleanupError(error: unknown): error is RequestError;
|
|
46
|
+
export {};
|
|
34
47
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,cAAc,GACd,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,aAAa,GACb,iBAAiB,GACjB,sBAAsB,GACtB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,gBAAgB,GAChB,2BAA2B,GAC3B,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,cAAc,GACd,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,aAAa,GACb,iBAAiB,GACjB,sBAAsB,GACtB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,gBAAgB,GAChB,2BAA2B,GAC3B,uBAAuB,GACvB,qBAAqB,GACrB,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,CAAC;AA8CrB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS;;;gBAIrF;AAED,KAAK,iBAAiB,GAAG;IAAE,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAClF,KAAK,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACxC,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,2BAA2B,EAAE,MAAM,EAAE,aAAa,GAAG,YAAY,CAAC;AACxH,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC;AAClH,wBAAgB,YAAY,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC;AAC9F,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAClD,gBAAgB,GAAG,2BAA2B,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,qBAAqB,CAC7G,GAAG,YAAY,CAAC;AAajB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAW9D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,YAAY,CAsB7E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,YAAY,CAK9F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIzE"}
|
package/dist/errors.js
CHANGED
|
@@ -18,8 +18,8 @@ const LABELS = {
|
|
|
18
18
|
session_not_forkable: "session has no persisted history to fork",
|
|
19
19
|
mcp_init_error: "mcp server initialization failed",
|
|
20
20
|
unsupported_mcp_transport: "unsupported mcp transport",
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
extension_setup_error: "pi extension setup failed",
|
|
22
|
+
child_cleanup_error: "child process cleanup failed",
|
|
23
23
|
invalid_cursor: "invalid list cursor",
|
|
24
24
|
unknown_auth_method: "unknown auth method",
|
|
25
25
|
notification_error: "notification delivery failed",
|
|
@@ -38,7 +38,6 @@ const INVALID_KINDS = new Set([
|
|
|
38
38
|
"session_terminated",
|
|
39
39
|
"session_not_forkable",
|
|
40
40
|
"unsupported_mcp_transport",
|
|
41
|
-
"invalid_output_schema",
|
|
42
41
|
"invalid_cursor",
|
|
43
42
|
"unknown_auth_method",
|
|
44
43
|
]);
|
|
@@ -49,9 +48,9 @@ export function redactedDiagnostics(diagnostics) {
|
|
|
49
48
|
}
|
|
50
49
|
export function adapterError(kind, extras = {}) {
|
|
51
50
|
const data = { errorKind: kind, message: LABELS[kind] };
|
|
52
|
-
if (
|
|
51
|
+
if ("server" in extras)
|
|
53
52
|
data.server = extras.server;
|
|
54
|
-
if (extras.details !== undefined)
|
|
53
|
+
if ("details" in extras && extras.details !== undefined)
|
|
55
54
|
data.details = extras.details;
|
|
56
55
|
if (kind === "auth_error")
|
|
57
56
|
return RequestError.authRequired(data);
|
|
@@ -102,3 +101,9 @@ export function unexpectedError(error, terminal) {
|
|
|
102
101
|
export function isRequestError(error) {
|
|
103
102
|
return error instanceof RequestError;
|
|
104
103
|
}
|
|
104
|
+
export function isChildCleanupError(error) {
|
|
105
|
+
if (!(error instanceof RequestError) || error.code !== -32603)
|
|
106
|
+
return false;
|
|
107
|
+
const data = error.data;
|
|
108
|
+
return Boolean(data && typeof data === "object" && data.errorKind === "child_cleanup_error");
|
|
109
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -31,14 +31,13 @@ try {
|
|
|
31
31
|
const shutdown = (code) => {
|
|
32
32
|
shuttingDown ??= (async () => {
|
|
33
33
|
try {
|
|
34
|
-
await withTimeout(agent.dispose(),
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.error("shutdown error:", error);
|
|
38
|
-
}
|
|
39
|
-
finally {
|
|
34
|
+
await withTimeout(agent.dispose(), 66_000);
|
|
40
35
|
process.exit(code);
|
|
41
36
|
}
|
|
37
|
+
catch {
|
|
38
|
+
console.error("shutdown cleanup failed");
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
42
41
|
})();
|
|
43
42
|
return shuttingDown;
|
|
44
43
|
};
|
package/dist/mcp-bridge.d.ts
CHANGED
|
@@ -1,29 +1,140 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
3
|
-
import type {
|
|
1
|
+
import type { AgentContext, McpServer } from "@agentclientprotocol/sdk";
|
|
2
|
+
import type { AgentSession, InlineExtension, ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
import type { AssistantMessage } from "@earendil-works/pi-ai";
|
|
4
|
+
import type { RequestOptions } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
5
|
+
import type { Transport, TransportSendOptions } from "@modelcontextprotocol/sdk/shared/transport.js";
|
|
6
|
+
import { type CallToolResult, type ContentBlock, type JSONRPCMessage, type MessageExtraInfo, type ServerCapabilities, type Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import { AjvJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/ajv";
|
|
4
8
|
import type { PiAcpDeps } from "./deps.js";
|
|
5
|
-
export interface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
export interface McpSessionBinding {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
client: AgentContext;
|
|
13
|
+
sessionSignal: AbortSignal;
|
|
14
|
+
getPi(): AgentSession | undefined;
|
|
15
|
+
getTurnSignal(): AbortSignal | undefined;
|
|
16
|
+
isPublished(): boolean;
|
|
17
|
+
emitDiagnostic(text: string): void;
|
|
18
|
+
/** Adapter-allocated collision-safe token for this configured server. */
|
|
19
|
+
serverToken?: string;
|
|
20
|
+
poison?(server: string): void;
|
|
21
|
+
ownerToken?: object;
|
|
22
|
+
modelRuntime?: PiAcpDeps["modelRuntime"];
|
|
9
23
|
}
|
|
10
24
|
export interface McpListResult {
|
|
11
|
-
tools:
|
|
25
|
+
tools: Tool[];
|
|
12
26
|
nextCursor?: string;
|
|
27
|
+
raw?: unknown;
|
|
13
28
|
}
|
|
14
29
|
export interface McpClientHandle {
|
|
15
30
|
listTools(cursor: string | undefined, signal: AbortSignal, timeoutMs: number): Promise<McpListResult>;
|
|
16
|
-
callTool(name: string, args: unknown, signal: AbortSignal, timeoutMs: number): Promise<CallToolResult>;
|
|
31
|
+
callTool(name: string, args: unknown, signal: AbortSignal, timeoutMs: number, onprogress?: (progress: unknown) => void): Promise<CallToolResult>;
|
|
17
32
|
close(): Promise<void>;
|
|
33
|
+
ping?(signal: AbortSignal, timeoutMs: number): Promise<void>;
|
|
34
|
+
getCapabilities?(): ServerCapabilities | undefined;
|
|
35
|
+
getInstructions?(): string | undefined;
|
|
36
|
+
setLoggingLevel?(signal: AbortSignal, timeoutMs: number): Promise<void>;
|
|
37
|
+
listResources?(cursor: string | undefined, options: RequestOptions): Promise<unknown>;
|
|
38
|
+
listResourceTemplates?(cursor: string | undefined, options: RequestOptions): Promise<unknown>;
|
|
39
|
+
readResource?(uri: string, options: RequestOptions): Promise<unknown>;
|
|
40
|
+
subscribeResource?(uri: string, options: RequestOptions): Promise<unknown>;
|
|
41
|
+
unsubscribeResource?(uri: string, options: RequestOptions): Promise<unknown>;
|
|
42
|
+
listPrompts?(cursor: string | undefined, options: RequestOptions): Promise<unknown>;
|
|
43
|
+
getPrompt?(name: string, args: Record<string, string> | undefined, options: RequestOptions): Promise<unknown>;
|
|
44
|
+
complete?(params: unknown, options: RequestOptions): Promise<unknown>;
|
|
45
|
+
setToolsChangedHandler?(handler: () => void): void;
|
|
46
|
+
setDisabledHandler?(handler: () => void): void;
|
|
47
|
+
disableOnTimeout?(): void;
|
|
48
|
+
getPeerSignal?(): AbortSignal;
|
|
49
|
+
/** The per-server provider also supplied to this handle's SDK Client. */
|
|
50
|
+
jsonSchemaValidator?: AjvJsonSchemaValidator;
|
|
51
|
+
/** The handle's own close implementation enforces the shared physical deadline. */
|
|
52
|
+
closeIsBounded?: boolean;
|
|
18
53
|
}
|
|
19
54
|
export declare class McpTimeoutError extends Error {
|
|
20
55
|
constructor();
|
|
21
56
|
}
|
|
22
|
-
export
|
|
23
|
-
export declare
|
|
57
|
+
export type McpTerminalCause = "lifecycle" | "session" | "peer" | "timeout";
|
|
58
|
+
export declare class McpOperationTerminalError extends Error {
|
|
59
|
+
readonly terminalCause: McpTerminalCause;
|
|
60
|
+
readonly terminalReason?: unknown | undefined;
|
|
61
|
+
constructor(terminalCause: McpTerminalCause, terminalReason?: unknown | undefined);
|
|
62
|
+
}
|
|
63
|
+
export type McpIncomingTerminalCause = "peer" | "session" | "turn" | "timeout";
|
|
64
|
+
export declare class McpIncomingTerminalError extends Error {
|
|
65
|
+
readonly terminalCause: McpIncomingTerminalCause;
|
|
66
|
+
readonly terminalReason?: unknown | undefined;
|
|
67
|
+
constructor(terminalCause: McpIncomingTerminalCause, terminalReason?: unknown | undefined);
|
|
68
|
+
}
|
|
69
|
+
type McpOperationCommit<T> = {
|
|
70
|
+
status: "fulfilled";
|
|
71
|
+
value: T;
|
|
72
|
+
} | {
|
|
73
|
+
status: "rejected";
|
|
74
|
+
reason: unknown;
|
|
75
|
+
} | {
|
|
76
|
+
status: "terminal";
|
|
77
|
+
cause: McpTerminalCause;
|
|
78
|
+
reason: unknown;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* One terminal arbiter for every MCP request. Claims are committed in a
|
|
82
|
+
* microtask so conditions that become observable at the same boundary are
|
|
83
|
+
* resolved by the frozen precedence instead of Promise.race scheduling.
|
|
84
|
+
*/
|
|
85
|
+
export declare function settleMcpOperation<T>(operation: (requestSignal: AbortSignal) => Promise<T>, lifecycleSignal: AbortSignal | undefined, sessionSignal: AbortSignal | undefined, peerSignal: AbortSignal | undefined, timeoutMs: number, sleep: PiAcpDeps["sleep"], onCommit?: (outcome: McpOperationCommit<T>) => void): Promise<T>;
|
|
86
|
+
export declare function bounded<T>(operation: Promise<T> | (() => Promise<T>), signal: AbortSignal, timeoutMs: number, sleep: PiAcpDeps["sleep"]): Promise<T>;
|
|
87
|
+
export declare function settleIncomingMcpOperation<T>(operation: (requestSignal: AbortSignal) => Promise<T>, peerSignal: AbortSignal, sessionSignal: AbortSignal, turnSignal: AbortSignal | undefined, timeoutMs: number, sleep: PiAcpDeps["sleep"], onCommit?: (outcome: McpOperationCommit<T>) => void): Promise<T>;
|
|
88
|
+
export declare class CloseSignallingTransport implements Transport {
|
|
89
|
+
private readonly raw;
|
|
90
|
+
private readonly terminate;
|
|
91
|
+
private readonly onRawError;
|
|
92
|
+
private readonly onRawClose;
|
|
93
|
+
private readonly timeoutMs;
|
|
94
|
+
private readonly sleep;
|
|
95
|
+
private readonly serverToken;
|
|
96
|
+
onclose?: () => void;
|
|
97
|
+
onerror?: (error: Error) => void;
|
|
98
|
+
onmessage?: <T extends JSONRPCMessage>(message: T, extra?: MessageExtraInfo) => void;
|
|
99
|
+
private signalled;
|
|
100
|
+
private closePromise;
|
|
101
|
+
constructor(raw: Transport, terminate: (() => Promise<void>) | undefined, onRawError: (error: Error) => boolean, onRawClose: () => void, timeoutMs: number, sleep: PiAcpDeps["sleep"], serverToken: string);
|
|
102
|
+
get sessionId(): string | undefined;
|
|
103
|
+
setProtocolVersion(version: string): void;
|
|
104
|
+
start(): Promise<void>;
|
|
105
|
+
send(message: JSONRPCMessage, options?: TransportSendOptions): Promise<void>;
|
|
106
|
+
signalClose(): void;
|
|
107
|
+
close(): Promise<void>;
|
|
108
|
+
private closeOwned;
|
|
109
|
+
}
|
|
110
|
+
export declare function createMcpRootsResult(binding: Pick<McpSessionBinding, "cwd" | "sessionSignal">, progressToken: string | number | undefined, extra: {
|
|
111
|
+
signal: AbortSignal;
|
|
112
|
+
sendNotification(notification: {
|
|
113
|
+
method: "notifications/progress";
|
|
114
|
+
params: {
|
|
115
|
+
progressToken: string | number;
|
|
116
|
+
progress: number;
|
|
117
|
+
total: number;
|
|
118
|
+
};
|
|
119
|
+
}): Promise<void>;
|
|
120
|
+
}, onProgressFailure: () => void): {
|
|
121
|
+
roots: {
|
|
122
|
+
uri: string;
|
|
123
|
+
name: string;
|
|
124
|
+
}[];
|
|
125
|
+
};
|
|
126
|
+
export declare function mapMcpSamplingResult(message: AssistantMessage, stopSequences?: readonly string[]): {
|
|
127
|
+
role: "assistant";
|
|
128
|
+
model: string;
|
|
129
|
+
content: {
|
|
130
|
+
type: "text";
|
|
131
|
+
text: string;
|
|
132
|
+
};
|
|
133
|
+
stopReason: "maxTokens" | "endTurn" | "stopSequence";
|
|
134
|
+
};
|
|
135
|
+
export declare function connectDefaultMcpClient(server: McpServer, signal: AbortSignal, timeoutMs: number, sleep: PiAcpDeps["sleep"], binding?: McpSessionBinding): Promise<McpClientHandle>;
|
|
24
136
|
export declare function allocateAlias(server: string, tool: string, used: Set<string>): string;
|
|
25
|
-
|
|
26
|
-
export declare function convertMcpContent(content: McpContent): {
|
|
137
|
+
export declare function convertMcpContent(content: ContentBlock): {
|
|
27
138
|
type: "text";
|
|
28
139
|
text: string;
|
|
29
140
|
} | {
|
|
@@ -32,9 +143,6 @@ export declare function convertMcpContent(content: McpContent): {
|
|
|
32
143
|
mimeType: string;
|
|
33
144
|
};
|
|
34
145
|
export declare function convertMcpResult(result: CallToolResult): {
|
|
35
|
-
details?: {
|
|
36
|
-
[x: string]: unknown;
|
|
37
|
-
} | undefined;
|
|
38
146
|
content: ({
|
|
39
147
|
type: "text";
|
|
40
148
|
text: string;
|
|
@@ -43,6 +151,103 @@ export declare function convertMcpResult(result: CallToolResult): {
|
|
|
43
151
|
data: string;
|
|
44
152
|
mimeType: string;
|
|
45
153
|
})[];
|
|
154
|
+
details: {
|
|
155
|
+
[x: string]: unknown;
|
|
156
|
+
content: ({
|
|
157
|
+
type: "text";
|
|
158
|
+
text: string;
|
|
159
|
+
annotations?: {
|
|
160
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
161
|
+
priority?: number | undefined;
|
|
162
|
+
lastModified?: string | undefined;
|
|
163
|
+
} | undefined;
|
|
164
|
+
_meta?: {
|
|
165
|
+
[x: string]: unknown;
|
|
166
|
+
} | undefined;
|
|
167
|
+
} | {
|
|
168
|
+
type: "image";
|
|
169
|
+
data: string;
|
|
170
|
+
mimeType: string;
|
|
171
|
+
annotations?: {
|
|
172
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
173
|
+
priority?: number | undefined;
|
|
174
|
+
lastModified?: string | undefined;
|
|
175
|
+
} | undefined;
|
|
176
|
+
_meta?: {
|
|
177
|
+
[x: string]: unknown;
|
|
178
|
+
} | undefined;
|
|
179
|
+
} | {
|
|
180
|
+
type: "audio";
|
|
181
|
+
data: string;
|
|
182
|
+
mimeType: string;
|
|
183
|
+
annotations?: {
|
|
184
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
185
|
+
priority?: number | undefined;
|
|
186
|
+
lastModified?: string | undefined;
|
|
187
|
+
} | undefined;
|
|
188
|
+
_meta?: {
|
|
189
|
+
[x: string]: unknown;
|
|
190
|
+
} | undefined;
|
|
191
|
+
} | {
|
|
192
|
+
uri: string;
|
|
193
|
+
name: string;
|
|
194
|
+
type: "resource_link";
|
|
195
|
+
description?: string | undefined;
|
|
196
|
+
mimeType?: string | undefined;
|
|
197
|
+
size?: number | undefined;
|
|
198
|
+
annotations?: {
|
|
199
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
200
|
+
priority?: number | undefined;
|
|
201
|
+
lastModified?: string | undefined;
|
|
202
|
+
} | undefined;
|
|
203
|
+
_meta?: {
|
|
204
|
+
[x: string]: unknown;
|
|
205
|
+
} | undefined;
|
|
206
|
+
icons?: {
|
|
207
|
+
src: string;
|
|
208
|
+
mimeType?: string | undefined;
|
|
209
|
+
sizes?: string[] | undefined;
|
|
210
|
+
theme?: "light" | "dark" | undefined;
|
|
211
|
+
}[] | undefined;
|
|
212
|
+
title?: string | undefined;
|
|
213
|
+
} | {
|
|
214
|
+
type: "resource";
|
|
215
|
+
resource: {
|
|
216
|
+
uri: string;
|
|
217
|
+
text: string;
|
|
218
|
+
mimeType?: string | undefined;
|
|
219
|
+
_meta?: {
|
|
220
|
+
[x: string]: unknown;
|
|
221
|
+
} | undefined;
|
|
222
|
+
} | {
|
|
223
|
+
uri: string;
|
|
224
|
+
blob: string;
|
|
225
|
+
mimeType?: string | undefined;
|
|
226
|
+
_meta?: {
|
|
227
|
+
[x: string]: unknown;
|
|
228
|
+
} | undefined;
|
|
229
|
+
};
|
|
230
|
+
annotations?: {
|
|
231
|
+
audience?: ("user" | "assistant")[] | undefined;
|
|
232
|
+
priority?: number | undefined;
|
|
233
|
+
lastModified?: string | undefined;
|
|
234
|
+
} | undefined;
|
|
235
|
+
_meta?: {
|
|
236
|
+
[x: string]: unknown;
|
|
237
|
+
} | undefined;
|
|
238
|
+
})[];
|
|
239
|
+
_meta?: {
|
|
240
|
+
[x: string]: unknown;
|
|
241
|
+
progressToken?: string | number | undefined;
|
|
242
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
243
|
+
taskId: string;
|
|
244
|
+
} | undefined;
|
|
245
|
+
} | undefined;
|
|
246
|
+
structuredContent?: {
|
|
247
|
+
[x: string]: unknown;
|
|
248
|
+
} | undefined;
|
|
249
|
+
isError?: boolean | undefined;
|
|
250
|
+
};
|
|
46
251
|
};
|
|
47
252
|
export type McpResultProjection = ReturnType<typeof convertMcpResult>;
|
|
48
253
|
export interface McpBridge {
|
|
@@ -51,8 +256,21 @@ export interface McpBridge {
|
|
|
51
256
|
aliases: string[];
|
|
52
257
|
aliasServers: Map<string, string>;
|
|
53
258
|
failedResults: Map<string, McpResultProjection>;
|
|
259
|
+
inlineExtension: InlineExtension;
|
|
260
|
+
instructionsExtension: InlineExtension;
|
|
261
|
+
bindSession(session: AgentSession): void;
|
|
262
|
+
assertReady(): void;
|
|
263
|
+
acquireTurnBoundary(): Promise<() => void>;
|
|
264
|
+
/** Synchronously start every owned client close without aborting refresh work. */
|
|
265
|
+
startDisposal(): void;
|
|
266
|
+
/** Abort refresh admission/work after transport and session-lifetime close starts. */
|
|
267
|
+
abortRefreshes(): void;
|
|
268
|
+
/** Reopen refresh admission only after a successful cancel-only generation. */
|
|
269
|
+
resumeRefreshes(): void;
|
|
270
|
+
drainRefreshes(): Promise<void>;
|
|
271
|
+
close(): Promise<void>;
|
|
54
272
|
}
|
|
55
|
-
export declare function bridgeMcpServers(servers: readonly McpServer[], openSignal: AbortSignal, deps: PiAcpDeps): Promise<McpBridge>;
|
|
273
|
+
export declare function bridgeMcpServers(servers: readonly McpServer[], openSignal: AbortSignal, deps: PiAcpDeps, binding?: McpSessionBinding): Promise<McpBridge>;
|
|
56
274
|
export declare function disposeMcpBridge(clients: readonly McpClientHandle[], deps: PiAcpDeps): Promise<void>;
|
|
57
275
|
export {};
|
|
58
276
|
//# sourceMappingURL=mcp-bridge.d.ts.map
|
package/dist/mcp-bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bridge.d.ts","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-bridge.d.ts","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"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"}
|