brainferno-mcp-bridge 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/CHANGELOG.md +19 -0
- package/LICENSE +202 -0
- package/NOTICE +27 -0
- package/README.md +410 -0
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/bridge/handshake.d.ts +34 -0
- package/dist/bridge/handshake.js +36 -0
- package/dist/bridge/handshake.js.map +1 -0
- package/dist/bridge/script-escape.d.ts +16 -0
- package/dist/bridge/script-escape.js +47 -0
- package/dist/bridge/script-escape.js.map +1 -0
- package/dist/bridge/socket.d.ts +79 -0
- package/dist/bridge/socket.js +424 -0
- package/dist/bridge/socket.js.map +1 -0
- package/dist/bridge/types.d.ts +49 -0
- package/dist/bridge/types.js +38 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/config.d.ts +87 -0
- package/dist/config.js +172 -0
- package/dist/config.js.map +1 -0
- package/dist/drivers/ame-webservice.d.ts +118 -0
- package/dist/drivers/ame-webservice.js +356 -0
- package/dist/drivers/ame-webservice.js.map +1 -0
- package/dist/drivers/illustrator-delegate.d.ts +71 -0
- package/dist/drivers/illustrator-delegate.js +120 -0
- package/dist/drivers/illustrator-delegate.js.map +1 -0
- package/dist/drivers/osscript.d.ts +60 -0
- package/dist/drivers/osscript.js +230 -0
- package/dist/drivers/osscript.js.map +1 -0
- package/dist/http.d.ts +26 -0
- package/dist/http.js +126 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/install/cli.d.ts +2 -0
- package/dist/install/cli.js +310 -0
- package/dist/install/cli.js.map +1 -0
- package/dist/install/lib.d.ts +76 -0
- package/dist/install/lib.js +194 -0
- package/dist/install/lib.js.map +1 -0
- package/dist/jobs.d.ts +117 -0
- package/dist/jobs.js +196 -0
- package/dist/jobs.js.map +1 -0
- package/dist/logging.d.ts +8 -0
- package/dist/logging.js +33 -0
- package/dist/logging.js.map +1 -0
- package/dist/server.d.ts +38 -0
- package/dist/server.js +90 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/after-effects.d.ts +100 -0
- package/dist/tools/after-effects.js +695 -0
- package/dist/tools/after-effects.js.map +1 -0
- package/dist/tools/audio.d.ts +118 -0
- package/dist/tools/audio.js +356 -0
- package/dist/tools/audio.js.map +1 -0
- package/dist/tools/audition.d.ts +15 -0
- package/dist/tools/audition.js +329 -0
- package/dist/tools/audition.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +17 -0
- package/dist/tools/diagnostics.js +61 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/illustrator-delegate.d.ts +9 -0
- package/dist/tools/illustrator-delegate.js +61 -0
- package/dist/tools/illustrator-delegate.js.map +1 -0
- package/dist/tools/illustrator.d.ts +36 -0
- package/dist/tools/illustrator.js +299 -0
- package/dist/tools/illustrator.js.map +1 -0
- package/dist/tools/jobs.d.ts +39 -0
- package/dist/tools/jobs.js +83 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/media-encoder.d.ts +17 -0
- package/dist/tools/media-encoder.js +180 -0
- package/dist/tools/media-encoder.js.map +1 -0
- package/dist/tools/photoshop.d.ts +17 -0
- package/dist/tools/photoshop.js +202 -0
- package/dist/tools/photoshop.js.map +1 -0
- package/dist/tools/pipelines.d.ts +23 -0
- package/dist/tools/pipelines.js +254 -0
- package/dist/tools/pipelines.js.map +1 -0
- package/dist/tools/premiere.d.ts +26 -0
- package/dist/tools/premiere.js +396 -0
- package/dist/tools/premiere.js.map +1 -0
- package/dist/tools/result.d.ts +17 -0
- package/dist/tools/result.js +51 -0
- package/dist/tools/result.js.map +1 -0
- package/package.json +64 -0
- package/panels/panel-cep/CSXS/manifest.xml +53 -0
- package/panels/panel-cep/bridge-client.js +204 -0
- package/panels/panel-cep/host.jsx +62 -0
- package/panels/panel-cep/icons/logo.svg +61 -0
- package/panels/panel-cep/index.html +48 -0
- package/panels/panel-cep/main.js +173 -0
- package/panels/panel-uxp/README.md +36 -0
- package/panels/panel-uxp/bridge-client.js +204 -0
- package/panels/panel-uxp/commands.js +375 -0
- package/panels/panel-uxp/icons/icon.png +0 -0
- package/panels/panel-uxp/icons/icon@2x.png +0 -0
- package/panels/panel-uxp/icons/logo.svg +61 -0
- package/panels/panel-uxp/index.html +47 -0
- package/panels/panel-uxp/main.js +109 -0
- package/panels/panel-uxp/manifest.json +89 -0
- package/panels/panel-uxp-ppro/README.md +11 -0
- package/panels/panel-uxp-ppro/bridge-client.js +204 -0
- package/panels/panel-uxp-ppro/commands.js +797 -0
- package/panels/panel-uxp-ppro/icons/icon.png +0 -0
- package/panels/panel-uxp-ppro/icons/icon@2x.png +0 -0
- package/panels/panel-uxp-ppro/icons/logo.svg +61 -0
- package/panels/panel-uxp-ppro/index.html +64 -0
- package/panels/panel-uxp-ppro/main.js +113 -0
- package/panels/panel-uxp-ppro/manifest.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ame-webservice.js","sourceRoot":"","sources":["../../src/drivers/ame-webservice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegate lane for Illustrator: a thin MCP *client* to Adobe's official
|
|
3
|
+
* built-in Illustrator (Beta) MCP server (Streamable HTTP on localhost, Bearer
|
|
4
|
+
* key auth). It complements our os-script lane — Adobe's server analyzes,
|
|
5
|
+
* batch-recolors, and exports but cannot create or save, which is exactly what
|
|
6
|
+
* the os-script lane does.
|
|
7
|
+
*
|
|
8
|
+
* We do not mirror Adobe's ~40 tools (their names/schemas are unpublished and a
|
|
9
|
+
* moving beta target); instead we discover them at runtime and pass calls
|
|
10
|
+
* through. The connection is lazy — Illustrator Beta opens and closes
|
|
11
|
+
* independently of this server, so we connect on first use and degrade to a
|
|
12
|
+
* clear, actionable error when it is not reachable.
|
|
13
|
+
*
|
|
14
|
+
* The Bearer key is a capability key to the user's local Illustrator. It is held
|
|
15
|
+
* privately here, never logged, never put in an error message, and never sent to
|
|
16
|
+
* the model.
|
|
17
|
+
*/
|
|
18
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
19
|
+
export interface DelegateToolInfo {
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
/** JSON Schema for the tool arguments, passed through from Adobe verbatim. */
|
|
23
|
+
inputSchema?: unknown;
|
|
24
|
+
}
|
|
25
|
+
/** The subset of an MCP client this delegate needs — injectable for tests. */
|
|
26
|
+
export interface DelegateClient {
|
|
27
|
+
listTools(): Promise<{
|
|
28
|
+
tools: {
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
inputSchema?: unknown;
|
|
32
|
+
}[];
|
|
33
|
+
}>;
|
|
34
|
+
callTool(args: {
|
|
35
|
+
name: string;
|
|
36
|
+
arguments?: Record<string, unknown>;
|
|
37
|
+
}): Promise<CallToolResult>;
|
|
38
|
+
close(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export type DelegateClientFactory = (url: string, token: string) => Promise<DelegateClient>;
|
|
41
|
+
/** Raised when Adobe's Illustrator MCP server cannot be reached or used. */
|
|
42
|
+
export declare class DelegateUnavailableError extends Error {
|
|
43
|
+
constructor(message: string);
|
|
44
|
+
}
|
|
45
|
+
export interface IllustratorDelegateOptions {
|
|
46
|
+
url: string;
|
|
47
|
+
token: string;
|
|
48
|
+
/** Injectable for tests; defaults to a real Streamable-HTTP MCP client. */
|
|
49
|
+
clientFactory?: DelegateClientFactory;
|
|
50
|
+
}
|
|
51
|
+
export declare class IllustratorDelegate {
|
|
52
|
+
private readonly options;
|
|
53
|
+
private client;
|
|
54
|
+
private connecting;
|
|
55
|
+
constructor(options: IllustratorDelegateOptions);
|
|
56
|
+
private connect;
|
|
57
|
+
/** Drop the cached client so the next call reconnects (used after any error). */
|
|
58
|
+
private reset;
|
|
59
|
+
/** Reachability probe — never throws; safe as the agent's first diagnostic. */
|
|
60
|
+
status(): Promise<{
|
|
61
|
+
available: boolean;
|
|
62
|
+
url: string;
|
|
63
|
+
toolCount?: number;
|
|
64
|
+
message?: string;
|
|
65
|
+
}>;
|
|
66
|
+
/** Discover Adobe's tool surface (names + descriptions). */
|
|
67
|
+
listTools(): Promise<DelegateToolInfo[]>;
|
|
68
|
+
/** Forward a named call to Adobe's server and return its result verbatim. */
|
|
69
|
+
call(name: string, args: Record<string, unknown> | undefined): Promise<CallToolResult>;
|
|
70
|
+
close(): Promise<void>;
|
|
71
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegate lane for Illustrator: a thin MCP *client* to Adobe's official
|
|
3
|
+
* built-in Illustrator (Beta) MCP server (Streamable HTTP on localhost, Bearer
|
|
4
|
+
* key auth). It complements our os-script lane — Adobe's server analyzes,
|
|
5
|
+
* batch-recolors, and exports but cannot create or save, which is exactly what
|
|
6
|
+
* the os-script lane does.
|
|
7
|
+
*
|
|
8
|
+
* We do not mirror Adobe's ~40 tools (their names/schemas are unpublished and a
|
|
9
|
+
* moving beta target); instead we discover them at runtime and pass calls
|
|
10
|
+
* through. The connection is lazy — Illustrator Beta opens and closes
|
|
11
|
+
* independently of this server, so we connect on first use and degrade to a
|
|
12
|
+
* clear, actionable error when it is not reachable.
|
|
13
|
+
*
|
|
14
|
+
* The Bearer key is a capability key to the user's local Illustrator. It is held
|
|
15
|
+
* privately here, never logged, never put in an error message, and never sent to
|
|
16
|
+
* the model.
|
|
17
|
+
*/
|
|
18
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
19
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
20
|
+
import { log } from "../logging.js";
|
|
21
|
+
/** Raised when Adobe's Illustrator MCP server cannot be reached or used. */
|
|
22
|
+
export class DelegateUnavailableError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = "DelegateUnavailableError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const UNAVAILABLE_HINT = "Could not reach Illustrator's built-in MCP server. Open Illustrator (Beta) 30.4+ with a document, turn on " +
|
|
29
|
+
"MCP & Tools, and check the key — regenerating it in Illustrator invalidates the previous one (a 401). Note the " +
|
|
30
|
+
"server only runs while Illustrator Beta is open.";
|
|
31
|
+
export class IllustratorDelegate {
|
|
32
|
+
options;
|
|
33
|
+
client;
|
|
34
|
+
connecting;
|
|
35
|
+
constructor(options) {
|
|
36
|
+
this.options = options;
|
|
37
|
+
}
|
|
38
|
+
async connect() {
|
|
39
|
+
if (this.client !== undefined)
|
|
40
|
+
return this.client;
|
|
41
|
+
if (this.connecting !== undefined)
|
|
42
|
+
return this.connecting;
|
|
43
|
+
const factory = this.options.clientFactory ?? defaultClientFactory;
|
|
44
|
+
this.connecting = factory(this.options.url, this.options.token).then((client) => {
|
|
45
|
+
this.client = client;
|
|
46
|
+
this.connecting = undefined;
|
|
47
|
+
return client;
|
|
48
|
+
}, (error) => {
|
|
49
|
+
this.connecting = undefined;
|
|
50
|
+
// Never surface the raw error (it can carry the URL/credentials); log a
|
|
51
|
+
// succinct, secret-free line and hand back an actionable message.
|
|
52
|
+
log.warn(`illustrator delegate connect failed: ${error instanceof Error ? error.name : "error"}`);
|
|
53
|
+
throw new DelegateUnavailableError(UNAVAILABLE_HINT);
|
|
54
|
+
});
|
|
55
|
+
return this.connecting;
|
|
56
|
+
}
|
|
57
|
+
/** Drop the cached client so the next call reconnects (used after any error). */
|
|
58
|
+
reset() {
|
|
59
|
+
const client = this.client;
|
|
60
|
+
this.client = undefined;
|
|
61
|
+
if (client !== undefined)
|
|
62
|
+
void client.close().catch(() => { });
|
|
63
|
+
}
|
|
64
|
+
/** Reachability probe — never throws; safe as the agent's first diagnostic. */
|
|
65
|
+
async status() {
|
|
66
|
+
try {
|
|
67
|
+
const client = await this.connect();
|
|
68
|
+
const { tools } = await client.listTools();
|
|
69
|
+
return { available: true, url: this.options.url, toolCount: tools.length };
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.reset();
|
|
73
|
+
return {
|
|
74
|
+
available: false,
|
|
75
|
+
url: this.options.url,
|
|
76
|
+
message: error instanceof Error ? error.message : String(error),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Discover Adobe's tool surface (names + descriptions). */
|
|
81
|
+
async listTools() {
|
|
82
|
+
try {
|
|
83
|
+
const client = await this.connect();
|
|
84
|
+
const { tools } = await client.listTools();
|
|
85
|
+
return tools.map((tool) => ({ name: tool.name, description: tool.description, inputSchema: tool.inputSchema }));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.reset();
|
|
89
|
+
throw error instanceof DelegateUnavailableError ? error : new DelegateUnavailableError(UNAVAILABLE_HINT);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Forward a named call to Adobe's server and return its result verbatim. */
|
|
93
|
+
async call(name, args) {
|
|
94
|
+
try {
|
|
95
|
+
const client = await this.connect();
|
|
96
|
+
return await client.callTool({ name, arguments: args ?? {} });
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.reset();
|
|
100
|
+
throw error instanceof DelegateUnavailableError ? error : new DelegateUnavailableError(UNAVAILABLE_HINT);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async close() {
|
|
104
|
+
this.reset();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function defaultClientFactory(url, token) {
|
|
108
|
+
const client = new Client({ name: "brainferno-mcp-bridge-illustrator-delegate", version: "0.1.0" });
|
|
109
|
+
// Static per-install key: goes in requestInit.headers, NOT an authProvider.
|
|
110
|
+
const transport = new StreamableHTTPClientTransport(new URL(url), {
|
|
111
|
+
requestInit: { headers: { Authorization: `Bearer ${token}` } },
|
|
112
|
+
});
|
|
113
|
+
await client.connect(transport);
|
|
114
|
+
return {
|
|
115
|
+
listTools: () => client.listTools(),
|
|
116
|
+
callTool: (args) => client.callTool(args),
|
|
117
|
+
close: () => client.close(),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=illustrator-delegate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"illustrator-delegate.js","sourceRoot":"","sources":["../../src/drivers/illustrator-delegate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The os-script lane: drive an Adobe app that has no panel by injecting
|
|
3
|
+
* ExtendScript from outside the process.
|
|
4
|
+
*
|
|
5
|
+
* Windows: PowerShell -> COM `Illustrator.Application` -> DoJavaScript
|
|
6
|
+
* macOS: osascript -> AppleScript `do javascript`
|
|
7
|
+
*
|
|
8
|
+
* Both runners execute one tiny bootstrap (`$.evalFile(<temp .jsx>)`) so the
|
|
9
|
+
* real script never travels through shell quoting. The script's result comes
|
|
10
|
+
* back through a JSON result file the .jsx writes, not through stdout — return
|
|
11
|
+
* strings from COM/AppleScript are lossy and size-limited.
|
|
12
|
+
*
|
|
13
|
+
* ExtendScript is ES3 with no JSON object, so every script is wrapped in a
|
|
14
|
+
* prelude that ships a small stringifier, catches errors (with the line), and
|
|
15
|
+
* writes the outcome. Illustrator has no "allow scripts to write files"
|
|
16
|
+
* preference, so this works out of the box (unlike After Effects).
|
|
17
|
+
*
|
|
18
|
+
* Calls are serialized: one script at a time per host.
|
|
19
|
+
*/
|
|
20
|
+
import { type AppId } from "@brainferno/mcp-bridge-protocol";
|
|
21
|
+
import { type AppBridge, type EvalOptions, type JsonValue } from "../bridge/types.js";
|
|
22
|
+
/** Runs the bootstrap that evaluates `jsxPath` inside the host. Injectable for tests. */
|
|
23
|
+
export type ScriptRunner = (jsxPath: string, signal: AbortSignal) => Promise<void>;
|
|
24
|
+
export interface OsScriptBridgeOptions {
|
|
25
|
+
appId: AppId;
|
|
26
|
+
defaultTimeoutMs: number;
|
|
27
|
+
/** Override the platform runner (tests, or a custom bootstrap). */
|
|
28
|
+
runner?: ScriptRunner;
|
|
29
|
+
/** Where temp .jsx/.json files go. Defaults to the OS temp dir. */
|
|
30
|
+
workDir?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* ES3-safe prelude: a JSON stringifier and the result-file writer. Kept as a
|
|
34
|
+
* raw string so the backslashes below reach ExtendScript unchanged. No arrow
|
|
35
|
+
* functions, no const/let, no template literals, no JSON global — on purpose.
|
|
36
|
+
*/
|
|
37
|
+
export declare const JSX_PRELUDE: string;
|
|
38
|
+
/** Wraps a user script (an expression, typically an IIFE) into a self-reporting .jsx. */
|
|
39
|
+
export declare function wrapScript(script: string, resultPath: string): string;
|
|
40
|
+
/** Forward-slash path for use inside a JS/ExtendScript string on any OS. */
|
|
41
|
+
export declare function jsxPath(path: string): string;
|
|
42
|
+
/** Windows: PowerShell drives the COM automation server; a running instance is reused. */
|
|
43
|
+
export declare function windowsRunner(progId: string): ScriptRunner;
|
|
44
|
+
/** macOS: AppleScript `do javascript`. First run prompts for Automation permission (TCC). */
|
|
45
|
+
export declare function macRunner(appleScriptName: string): ScriptRunner;
|
|
46
|
+
export declare function platformRunner(appId: AppId): ScriptRunner;
|
|
47
|
+
export declare class OsScriptBridge implements AppBridge {
|
|
48
|
+
private readonly options;
|
|
49
|
+
readonly appId: AppId;
|
|
50
|
+
private readonly runner;
|
|
51
|
+
private readonly workDir;
|
|
52
|
+
private queue;
|
|
53
|
+
constructor(options: OsScriptBridgeOptions);
|
|
54
|
+
/** The lane can launch the app itself, so it is always "reachable". */
|
|
55
|
+
isConnected(): boolean;
|
|
56
|
+
execute(name: string, params?: JsonValue, options?: EvalOptions): Promise<JsonValue>;
|
|
57
|
+
evaluate(script: string, options?: EvalOptions): Promise<JsonValue>;
|
|
58
|
+
private runOne;
|
|
59
|
+
close(): Promise<void>;
|
|
60
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The os-script lane: drive an Adobe app that has no panel by injecting
|
|
3
|
+
* ExtendScript from outside the process.
|
|
4
|
+
*
|
|
5
|
+
* Windows: PowerShell -> COM `Illustrator.Application` -> DoJavaScript
|
|
6
|
+
* macOS: osascript -> AppleScript `do javascript`
|
|
7
|
+
*
|
|
8
|
+
* Both runners execute one tiny bootstrap (`$.evalFile(<temp .jsx>)`) so the
|
|
9
|
+
* real script never travels through shell quoting. The script's result comes
|
|
10
|
+
* back through a JSON result file the .jsx writes, not through stdout — return
|
|
11
|
+
* strings from COM/AppleScript are lossy and size-limited.
|
|
12
|
+
*
|
|
13
|
+
* ExtendScript is ES3 with no JSON object, so every script is wrapped in a
|
|
14
|
+
* prelude that ships a small stringifier, catches errors (with the line), and
|
|
15
|
+
* writes the outcome. Illustrator has no "allow scripts to write files"
|
|
16
|
+
* preference, so this works out of the box (unlike After Effects).
|
|
17
|
+
*
|
|
18
|
+
* Calls are serialized: one script at a time per host.
|
|
19
|
+
*/
|
|
20
|
+
import { spawn } from "node:child_process";
|
|
21
|
+
import { randomUUID } from "node:crypto";
|
|
22
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
23
|
+
import { tmpdir } from "node:os";
|
|
24
|
+
import { join } from "node:path";
|
|
25
|
+
import { APPS } from "@brainferno/mcp-bridge-protocol";
|
|
26
|
+
import { jsStringLiteral } from "../bridge/script-escape.js";
|
|
27
|
+
import { AppNotConnectedError, EvalTimeoutError, ScriptError, } from "../bridge/types.js";
|
|
28
|
+
import { log } from "../logging.js";
|
|
29
|
+
/**
|
|
30
|
+
* ES3-safe prelude: a JSON stringifier and the result-file writer. Kept as a
|
|
31
|
+
* raw string so the backslashes below reach ExtendScript unchanged. No arrow
|
|
32
|
+
* functions, no const/let, no template literals, no JSON global — on purpose.
|
|
33
|
+
*/
|
|
34
|
+
export const JSX_PRELUDE = String.raw `
|
|
35
|
+
function __acmStr(s) {
|
|
36
|
+
s = String(s); var out = "";
|
|
37
|
+
for (var i = 0; i < s.length; i++) {
|
|
38
|
+
var c = s.charAt(i), code = s.charCodeAt(i);
|
|
39
|
+
if (c === '"') out += '\\"';
|
|
40
|
+
else if (c === '\\') out += '\\\\';
|
|
41
|
+
else if (c === '\n') out += '\\n';
|
|
42
|
+
else if (c === '\r') out += '\\r';
|
|
43
|
+
else if (c === '\t') out += '\\t';
|
|
44
|
+
else if (code < 32 || code === 0x2028 || code === 0x2029) out += '\\u' + ('000' + code.toString(16)).slice(-4);
|
|
45
|
+
else out += c;
|
|
46
|
+
}
|
|
47
|
+
return '"' + out + '"';
|
|
48
|
+
}
|
|
49
|
+
function __acmJson(v) {
|
|
50
|
+
var t = typeof v;
|
|
51
|
+
if (v === null || v === undefined) return "null";
|
|
52
|
+
if (t === "number") return isFinite(v) ? String(v) : "null";
|
|
53
|
+
if (t === "boolean") return v ? "true" : "false";
|
|
54
|
+
if (t === "string") return __acmStr(v);
|
|
55
|
+
if (t === "function") return "null";
|
|
56
|
+
if (v instanceof Array) {
|
|
57
|
+
var a = [];
|
|
58
|
+
for (var i = 0; i < v.length; i++) a.push(__acmJson(v[i]));
|
|
59
|
+
return "[" + a.join(",") + "]";
|
|
60
|
+
}
|
|
61
|
+
if (t === "object") {
|
|
62
|
+
var o = [];
|
|
63
|
+
for (var k in v) {
|
|
64
|
+
var x = v[k];
|
|
65
|
+
if (typeof x === "function") continue;
|
|
66
|
+
o.push(__acmStr(k) + ":" + __acmJson(x));
|
|
67
|
+
}
|
|
68
|
+
return "{" + o.join(",") + "}";
|
|
69
|
+
}
|
|
70
|
+
return __acmStr(String(v));
|
|
71
|
+
}
|
|
72
|
+
function __acmWrite(path, text) {
|
|
73
|
+
var f = new File(path);
|
|
74
|
+
f.encoding = "UTF-8";
|
|
75
|
+
f.open("w");
|
|
76
|
+
f.write(text);
|
|
77
|
+
f.close();
|
|
78
|
+
}
|
|
79
|
+
`;
|
|
80
|
+
/** Wraps a user script (an expression, typically an IIFE) into a self-reporting .jsx. */
|
|
81
|
+
export function wrapScript(script, resultPath) {
|
|
82
|
+
return (JSX_PRELUDE +
|
|
83
|
+
"\nvar __acmResult;\n" +
|
|
84
|
+
"try {\n" +
|
|
85
|
+
" var __acmValue = " +
|
|
86
|
+
script +
|
|
87
|
+
";\n" +
|
|
88
|
+
" __acmResult = { ok: true, value: __acmValue === undefined ? null : __acmValue };\n" +
|
|
89
|
+
"} catch (e) {\n" +
|
|
90
|
+
" __acmResult = { ok: false, error: { message: String(e && e.message ? e.message : e), line: e && e.line ? e.line : null } };\n" +
|
|
91
|
+
"}\n" +
|
|
92
|
+
"__acmWrite(" +
|
|
93
|
+
jsStringLiteral(resultPath) +
|
|
94
|
+
", __acmJson(__acmResult));\n");
|
|
95
|
+
}
|
|
96
|
+
/** Forward-slash path for use inside a JS/ExtendScript string on any OS. */
|
|
97
|
+
export function jsxPath(path) {
|
|
98
|
+
return path.replace(/\\/g, "/");
|
|
99
|
+
}
|
|
100
|
+
function spawnRunner(cmd, args, signal, notConnectedHint) {
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
const child = spawn(cmd, args, { stdio: ["ignore", "pipe", "pipe"], signal, windowsHide: true });
|
|
103
|
+
let stderr = "";
|
|
104
|
+
child.stderr.on("data", (d) => {
|
|
105
|
+
stderr += d.toString();
|
|
106
|
+
});
|
|
107
|
+
child.on("error", (error) => reject(error));
|
|
108
|
+
child.on("close", (code) => {
|
|
109
|
+
if (code === 0) {
|
|
110
|
+
resolve();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const firstLine = stderr.trim().split("\n")[0] ?? "";
|
|
114
|
+
reject(new AppNotConnectedError("illustrator", `${notConnectedHint} (${firstLine || `exit ${code}`})`));
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/** Windows: PowerShell drives the COM automation server; a running instance is reused. */
|
|
119
|
+
export function windowsRunner(progId) {
|
|
120
|
+
return (path, signal) => {
|
|
121
|
+
const ps = [
|
|
122
|
+
"$ErrorActionPreference = 'Stop'",
|
|
123
|
+
`$ai = New-Object -ComObject ${progId}`,
|
|
124
|
+
`$null = $ai.DoJavaScript('$.evalFile(${JSON.stringify(jsxPath(path))})')`,
|
|
125
|
+
].join("; ");
|
|
126
|
+
return spawnRunner("powershell.exe", ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", ps], signal, "Could not reach Illustrator over COM. Is it installed? Check the winProgId");
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** macOS: AppleScript `do javascript`. First run prompts for Automation permission (TCC). */
|
|
130
|
+
export function macRunner(appleScriptName) {
|
|
131
|
+
return (path, signal) => {
|
|
132
|
+
const js = `$.evalFile(\\"${jsxPath(path)}\\")`;
|
|
133
|
+
const as = `tell application "${appleScriptName}" to do javascript "${js}"`;
|
|
134
|
+
return spawnRunner("osascript", ["-e", as], signal, "Could not reach Illustrator via AppleScript. Is it installed, and did you allow Automation for this app in System Settings > Privacy & Security?");
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export function platformRunner(appId) {
|
|
138
|
+
const app = APPS[appId];
|
|
139
|
+
if (process.platform === "win32") {
|
|
140
|
+
if (app.winProgId === undefined)
|
|
141
|
+
throw new Error(`${app.displayName} has no COM ProgID`);
|
|
142
|
+
return windowsRunner(app.winProgId);
|
|
143
|
+
}
|
|
144
|
+
if (process.platform === "darwin") {
|
|
145
|
+
if (app.appleScriptName === undefined)
|
|
146
|
+
throw new Error(`${app.displayName} has no AppleScript name`);
|
|
147
|
+
return macRunner(app.appleScriptName);
|
|
148
|
+
}
|
|
149
|
+
return () => Promise.reject(new AppNotConnectedError(appId, "The os-script lane needs macOS or Windows."));
|
|
150
|
+
}
|
|
151
|
+
export class OsScriptBridge {
|
|
152
|
+
options;
|
|
153
|
+
appId;
|
|
154
|
+
runner;
|
|
155
|
+
workDir;
|
|
156
|
+
queue = Promise.resolve();
|
|
157
|
+
constructor(options) {
|
|
158
|
+
this.options = options;
|
|
159
|
+
this.appId = options.appId;
|
|
160
|
+
this.runner = options.runner ?? platformRunner(options.appId);
|
|
161
|
+
this.workDir = options.workDir ?? join(tmpdir(), "brainferno-mcp-bridge", "osscript");
|
|
162
|
+
}
|
|
163
|
+
/** The lane can launch the app itself, so it is always "reachable". */
|
|
164
|
+
isConnected() {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
execute(name, params, options) {
|
|
168
|
+
if (name !== "eval") {
|
|
169
|
+
return Promise.reject(new ScriptError(this.appId, `The os-script lane only runs "eval" commands (got "${name}")`));
|
|
170
|
+
}
|
|
171
|
+
const script = params !== null && typeof params === "object" && !Array.isArray(params) ? params["script"] : undefined;
|
|
172
|
+
if (typeof script !== "string")
|
|
173
|
+
return Promise.reject(new ScriptError(this.appId, "eval needs params.script"));
|
|
174
|
+
return this.evaluate(script, options);
|
|
175
|
+
}
|
|
176
|
+
evaluate(script, options) {
|
|
177
|
+
const run = this.queue.catch(() => { }).then(() => this.runOne(script, options));
|
|
178
|
+
this.queue = run.catch(() => { });
|
|
179
|
+
return run;
|
|
180
|
+
}
|
|
181
|
+
async runOne(script, options) {
|
|
182
|
+
const timeoutMs = options?.timeoutMs ?? (options?.timeoutClass === "fast" ? 10_000 : this.options.defaultTimeoutMs);
|
|
183
|
+
await mkdir(this.workDir, { recursive: true });
|
|
184
|
+
const id = randomUUID();
|
|
185
|
+
const jsx = join(this.workDir, `${id}.jsx`);
|
|
186
|
+
const result = join(this.workDir, `${id}.result.json`);
|
|
187
|
+
await writeFile(jsx, wrapScript(script, jsxPath(result)), "utf8");
|
|
188
|
+
const controller = new AbortController();
|
|
189
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
190
|
+
try {
|
|
191
|
+
await this.runner(jsx, controller.signal);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (controller.signal.aborted)
|
|
195
|
+
throw new EvalTimeoutError(this.appId, timeoutMs);
|
|
196
|
+
if (error instanceof AppNotConnectedError)
|
|
197
|
+
throw error;
|
|
198
|
+
throw new AppNotConnectedError(this.appId, `Script runner failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
clearTimeout(timer);
|
|
202
|
+
}
|
|
203
|
+
let raw;
|
|
204
|
+
try {
|
|
205
|
+
raw = await readFile(result, "utf8");
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
throw new ScriptError(this.appId, "The script produced no result — it probably failed to parse (ES3 syntax only).");
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
void rm(jsx, { force: true }).catch(() => { });
|
|
212
|
+
void rm(result, { force: true }).catch(() => { });
|
|
213
|
+
}
|
|
214
|
+
let parsed;
|
|
215
|
+
try {
|
|
216
|
+
parsed = JSON.parse(raw);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
throw new ScriptError(this.appId, "The script wrote an unreadable result.");
|
|
220
|
+
}
|
|
221
|
+
if (!parsed.ok) {
|
|
222
|
+
throw new ScriptError(this.appId, parsed.error?.message ?? "script failed without a message", parsed.error?.line ?? undefined);
|
|
223
|
+
}
|
|
224
|
+
return (parsed.value ?? null);
|
|
225
|
+
}
|
|
226
|
+
async close() {
|
|
227
|
+
log.debug(`os-script bridge for ${this.appId} closed`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=osscript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osscript.js","sourceRoot":"","sources":["../../src/drivers/osscript.ts"],"names":[],"mappings":"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"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* Remote mode: the same tools over MCP's Streamable HTTP transport, for a
|
|
4
|
+
* Claude on another computer. Every request must carry
|
|
5
|
+
* `Authorization: Bearer <token>`; there is no anonymous path. One McpServer
|
|
6
|
+
* per session, all sharing the process-wide runtime (hub, jobs, drivers).
|
|
7
|
+
*
|
|
8
|
+
* The wire is plain HTTP: run it on a trusted LAN, a VPN/Tailscale, or behind
|
|
9
|
+
* a TLS tunnel. The Adobe panels never use this listener — they keep dialing
|
|
10
|
+
* the loopback hub.
|
|
11
|
+
*/
|
|
12
|
+
export interface HttpServerOptions {
|
|
13
|
+
host: string;
|
|
14
|
+
port: number;
|
|
15
|
+
token: string;
|
|
16
|
+
/** URL path; defaults to /mcp. */
|
|
17
|
+
path?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface RunningHttpServer {
|
|
20
|
+
host: string;
|
|
21
|
+
port: number;
|
|
22
|
+
path: string;
|
|
23
|
+
sessions(): number;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function startHttpServer(createSession: () => McpServer, o: HttpServerOptions): Promise<RunningHttpServer>;
|