@gtkx/mcp 0.21.0 → 1.0.0-rc.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.
Files changed (73) hide show
  1. package/README.md +137 -34
  2. package/bin/gtkx-mcp.js +9 -1
  3. package/dist/app-router.d.ts +35 -0
  4. package/dist/app-router.d.ts.map +1 -0
  5. package/dist/app-router.js +143 -0
  6. package/dist/app-router.js.map +1 -0
  7. package/dist/connection-registry.d.ts +12 -0
  8. package/dist/connection-registry.d.ts.map +1 -0
  9. package/dist/connection-registry.js +39 -0
  10. package/dist/connection-registry.js.map +1 -0
  11. package/dist/internal.d.ts +4 -0
  12. package/dist/internal.d.ts.map +1 -0
  13. package/dist/internal.js +4 -0
  14. package/dist/internal.js.map +1 -0
  15. package/dist/protocol/errors.d.ts +25 -87
  16. package/dist/protocol/errors.d.ts.map +1 -1
  17. package/dist/protocol/errors.js +38 -101
  18. package/dist/protocol/errors.js.map +1 -1
  19. package/dist/protocol/schemas.d.ts +93 -0
  20. package/dist/protocol/schemas.d.ts.map +1 -0
  21. package/dist/protocol/schemas.js +63 -0
  22. package/dist/protocol/schemas.js.map +1 -0
  23. package/dist/reference.d.ts +13 -0
  24. package/dist/reference.d.ts.map +1 -0
  25. package/dist/reference.js +293 -0
  26. package/dist/reference.js.map +1 -0
  27. package/dist/server.d.ts +14 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +244 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/socket-server.d.ts +5 -38
  32. package/dist/socket-server.d.ts.map +1 -1
  33. package/dist/socket-server.js +36 -108
  34. package/dist/socket-server.js.map +1 -1
  35. package/dist/tool.d.ts +22 -0
  36. package/dist/tool.d.ts.map +1 -0
  37. package/dist/tool.js +40 -0
  38. package/dist/tool.js.map +1 -0
  39. package/dist/transport.d.ts +49 -0
  40. package/dist/transport.d.ts.map +1 -0
  41. package/dist/transport.js +152 -0
  42. package/dist/transport.js.map +1 -0
  43. package/package.json +15 -11
  44. package/src/app-router.ts +209 -0
  45. package/src/connection-registry.ts +57 -0
  46. package/src/internal.ts +17 -0
  47. package/src/protocol/errors.ts +67 -110
  48. package/src/protocol/schemas.ts +173 -0
  49. package/src/reference.ts +449 -0
  50. package/src/server.ts +334 -0
  51. package/src/socket-server.ts +46 -147
  52. package/src/tool.ts +73 -0
  53. package/src/transport.ts +242 -0
  54. package/dist/cli.d.ts +0 -3
  55. package/dist/cli.d.ts.map +0 -1
  56. package/dist/cli.js +0 -399
  57. package/dist/cli.js.map +0 -1
  58. package/dist/connection-manager.d.ts +0 -48
  59. package/dist/connection-manager.d.ts.map +0 -1
  60. package/dist/connection-manager.js +0 -185
  61. package/dist/connection-manager.js.map +0 -1
  62. package/dist/index.d.ts +0 -5
  63. package/dist/index.d.ts.map +0 -1
  64. package/dist/index.js +0 -5
  65. package/dist/index.js.map +0 -1
  66. package/dist/protocol/types.d.ts +0 -132
  67. package/dist/protocol/types.d.ts.map +0 -1
  68. package/dist/protocol/types.js +0 -46
  69. package/dist/protocol/types.js.map +0 -1
  70. package/src/cli.ts +0 -449
  71. package/src/connection-manager.ts +0 -247
  72. package/src/index.ts +0 -27
  73. package/src/protocol/types.ts +0 -153
@@ -1,48 +0,0 @@
1
- import EventEmitter from "node:events";
2
- import { type AppInfo } from "./protocol/types.js";
3
- import type { AppConnection, SocketServer } from "./socket-server.js";
4
- type ConnectionManagerEventMap = {
5
- appRegistered: [AppInfo];
6
- appUnregistered: [string];
7
- };
8
- type RegisteredApp = {
9
- info: AppInfo;
10
- connection: AppConnection;
11
- };
12
- /**
13
- * Manages connections between the MCP server and GTKX applications.
14
- *
15
- * Handles app registration, request routing, and connection lifecycle.
16
- */
17
- export declare class ConnectionManager extends EventEmitter<ConnectionManagerEventMap> {
18
- private socketServer;
19
- private static readonly DEFAULT_WAIT_TIMEOUT;
20
- private apps;
21
- private connectionToApp;
22
- private pendingRequests;
23
- private requestTimeout;
24
- constructor(socketServer: SocketServer, options?: {
25
- requestTimeout?: number;
26
- });
27
- getApps(): AppInfo[];
28
- getApp(appId: string): AppInfo | undefined;
29
- hasConnectedApps(): boolean;
30
- getDefaultApp(): RegisteredApp | undefined;
31
- /**
32
- * Waits for at least one app to connect and register.
33
- *
34
- * @param timeout - Maximum time to wait in milliseconds (default: 10000)
35
- * @returns Promise that resolves with the first registered app info
36
- * @throws Error if timeout is reached before any app registers
37
- */
38
- waitForApp(timeout?: number): Promise<AppInfo>;
39
- sendToApp<T>(appId: string | undefined, method: string, params?: unknown): Promise<T>;
40
- cleanup(): void;
41
- private handleRequest;
42
- private handleResponse;
43
- private handleRegister;
44
- private handleUnregister;
45
- private handleDisconnection;
46
- }
47
- export {};
48
- //# sourceMappingURL=connection-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../src/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AASvC,OAAO,EAAE,KAAK,OAAO,EAA2D,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEtE,KAAK,yBAAyB,GAAG;IAC7B,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC;IACzB,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC;AAQF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IAStE,OAAO,CAAC,YAAY;IARxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAErD,OAAO,CAAC,IAAI,CAAyC;IACrD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAAS;gBAGnB,YAAY,EAAE,YAAY,EAClC,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO;IAkB7C,OAAO,IAAI,OAAO,EAAE;IAIpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI1C,gBAAgB,IAAI,OAAO;IAI3B,aAAa,IAAI,aAAa,GAAG,SAAS;IAK1C;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,GAAE,MAA+C,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BhF,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAuC3F,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,mBAAmB;CAQ9B"}
@@ -1,185 +0,0 @@
1
- import EventEmitter from "node:events";
2
- import { appNotFoundError, invalidRequestError, ipcTimeoutError, McpError, noAppConnectedError, } from "./protocol/errors.js";
3
- import { RegisterParamsSchema } from "./protocol/types.js";
4
- /**
5
- * Manages connections between the MCP server and GTKX applications.
6
- *
7
- * Handles app registration, request routing, and connection lifecycle.
8
- */
9
- export class ConnectionManager extends EventEmitter {
10
- socketServer;
11
- static DEFAULT_WAIT_TIMEOUT = 10000;
12
- apps = new Map();
13
- connectionToApp = new Map();
14
- pendingRequests = new Map();
15
- requestTimeout;
16
- constructor(socketServer, options = {}) {
17
- super();
18
- this.socketServer = socketServer;
19
- this.requestTimeout = options.requestTimeout ?? 30000;
20
- this.socketServer.on("request", (connection, request) => {
21
- this.handleRequest(connection, request);
22
- });
23
- this.socketServer.on("response", (_connection, response) => {
24
- this.handleResponse(response);
25
- });
26
- this.socketServer.on("disconnection", (connection) => {
27
- this.handleDisconnection(connection);
28
- });
29
- }
30
- getApps() {
31
- return Array.from(this.apps.values()).map((app) => app.info);
32
- }
33
- getApp(appId) {
34
- return this.apps.get(appId)?.info;
35
- }
36
- hasConnectedApps() {
37
- return this.apps.size > 0;
38
- }
39
- getDefaultApp() {
40
- const first = this.apps.values().next();
41
- return first.done ? undefined : first.value;
42
- }
43
- /**
44
- * Waits for at least one app to connect and register.
45
- *
46
- * @param timeout - Maximum time to wait in milliseconds (default: 10000)
47
- * @returns Promise that resolves with the first registered app info
48
- * @throws Error if timeout is reached before any app registers
49
- */
50
- waitForApp(timeout = ConnectionManager.DEFAULT_WAIT_TIMEOUT) {
51
- const defaultApp = this.getDefaultApp();
52
- if (defaultApp) {
53
- return Promise.resolve(defaultApp.info);
54
- }
55
- return new Promise((resolve, reject) => {
56
- const timeoutId = setTimeout(() => {
57
- this.off("appRegistered", onRegister);
58
- reject(new Error(`Timeout waiting for app registration after ${timeout}ms. ` +
59
- "Make sure your GTKX app is running with 'gtkx dev'."));
60
- }, timeout);
61
- const onRegister = (appInfo) => {
62
- clearTimeout(timeoutId);
63
- this.off("appRegistered", onRegister);
64
- resolve(appInfo);
65
- };
66
- this.on("appRegistered", onRegister);
67
- });
68
- }
69
- async sendToApp(appId, method, params) {
70
- const app = appId ? this.apps.get(appId) : this.getDefaultApp();
71
- if (!app) {
72
- if (appId) {
73
- throw appNotFoundError(appId);
74
- }
75
- throw noAppConnectedError();
76
- }
77
- const requestId = crypto.randomUUID();
78
- const request = {
79
- id: requestId,
80
- method,
81
- params,
82
- };
83
- return new Promise((resolve, reject) => {
84
- const timeout = setTimeout(() => {
85
- this.pendingRequests.delete(requestId);
86
- reject(ipcTimeoutError(this.requestTimeout));
87
- }, this.requestTimeout);
88
- this.pendingRequests.set(requestId, {
89
- resolve: resolve,
90
- reject,
91
- timeout,
92
- });
93
- const sent = this.socketServer.send(app.connection.id, request);
94
- if (!sent) {
95
- clearTimeout(timeout);
96
- this.pendingRequests.delete(requestId);
97
- reject(appNotFoundError(app.info.appId));
98
- return;
99
- }
100
- });
101
- }
102
- cleanup() {
103
- for (const pending of this.pendingRequests.values()) {
104
- clearTimeout(pending.timeout);
105
- pending.reject(new Error("Connection manager shutting down"));
106
- }
107
- this.pendingRequests.clear();
108
- }
109
- handleRequest(connection, request) {
110
- if (request.method === "app.register") {
111
- this.handleRegister(connection, request);
112
- return;
113
- }
114
- if (request.method === "app.unregister") {
115
- this.handleUnregister(connection, request);
116
- return;
117
- }
118
- }
119
- handleResponse(response) {
120
- const pending = this.pendingRequests.get(response.id);
121
- if (!pending) {
122
- return;
123
- }
124
- clearTimeout(pending.timeout);
125
- this.pendingRequests.delete(response.id);
126
- if (response.error) {
127
- const err = response.error;
128
- pending.reject(new McpError(err.code, err.message, err.data));
129
- }
130
- else {
131
- pending.resolve(response.result);
132
- }
133
- }
134
- handleRegister(connection, request) {
135
- const parseResult = RegisterParamsSchema.safeParse(request.params);
136
- if (!parseResult.success) {
137
- const response = {
138
- id: request.id,
139
- error: invalidRequestError(parseResult.error.message).toIpcError(),
140
- };
141
- this.socketServer.send(connection.id, response);
142
- return;
143
- }
144
- const params = parseResult.data;
145
- const appInfo = {
146
- appId: params.appId,
147
- pid: params.pid,
148
- windows: [],
149
- };
150
- const registeredApp = {
151
- info: appInfo,
152
- connection,
153
- };
154
- this.apps.set(params.appId, registeredApp);
155
- this.connectionToApp.set(connection.id, params.appId);
156
- const response = {
157
- id: request.id,
158
- result: { success: true },
159
- };
160
- this.socketServer.send(connection.id, response);
161
- this.emit("appRegistered", appInfo);
162
- }
163
- handleUnregister(connection, request) {
164
- const appId = this.connectionToApp.get(connection.id);
165
- if (appId) {
166
- this.apps.delete(appId);
167
- this.connectionToApp.delete(connection.id);
168
- this.emit("appUnregistered", appId);
169
- }
170
- const response = {
171
- id: request.id,
172
- result: { success: true },
173
- };
174
- this.socketServer.send(connection.id, response);
175
- }
176
- handleDisconnection(connection) {
177
- const appId = this.connectionToApp.get(connection.id);
178
- if (appId) {
179
- this.apps.delete(appId);
180
- this.connectionToApp.delete(connection.id);
181
- this.emit("appUnregistered", appId);
182
- }
183
- }
184
- }
185
- //# sourceMappingURL=connection-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../src/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EAER,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmD,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAmB5G;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,YAAuC;IAS9D;IARJ,MAAM,CAAU,oBAAoB,GAAG,KAAK,CAAC;IAE7C,IAAI,GAA+B,IAAI,GAAG,EAAE,CAAC;IAC7C,eAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjD,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACzD,cAAc,CAAS;IAE/B,YACY,YAA0B,EAClC,UAAuC,EAAE;QAEzC,KAAK,EAAE,CAAC;QAHA,iBAAY,GAAZ,YAAY,CAAc;QAIlC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QAEtD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE;YACpD,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,EAAE;YACjD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtC,CAAC;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,UAAkB,iBAAiB,CAAC,oBAAoB;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBACtC,MAAM,CACF,IAAI,KAAK,CACL,8CAA8C,OAAO,MAAM;oBACvD,qDAAqD,CAC5D,CACJ,CAAC;YACN,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE;gBACpC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBACtC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,KAAyB,EAAE,MAAc,EAAE,MAAgB;QAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEhE,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,mBAAmB,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,OAAO,GAAe;YACxB,EAAE,EAAE,SAAS;YACb,MAAM;YACN,MAAM;SACT,CAAC;QAEF,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACjD,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAExB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE;gBAChC,OAAO,EAAE,OAAoC;gBAC7C,MAAM;gBACN,OAAO;aACV,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACvC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzC,OAAO;YACX,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEO,aAAa,CAAC,UAAyB,EAAE,OAAmB;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO;QACX,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO;QACX,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,QAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAoB,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,UAAyB,EAAE,OAAmB;QACjE,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAgB;gBAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE;aACrE,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAChD,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;QAChC,MAAM,OAAO,GAAY;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,EAAE;SACd,CAAC;QAEF,MAAM,aAAa,GAAkB;YACjC,IAAI,EAAE,OAAO;YACb,UAAU;SACb,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAgB;YAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC5B,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAEO,gBAAgB,CAAC,UAAyB,EAAE,OAAmB;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAgB;YAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC5B,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEO,mBAAmB,CAAC,UAAyB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;IACL,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export { ConnectionManager } from "./connection-manager.js";
2
- export { appNotFoundError, invalidRequestError, ipcTimeoutError, McpError, McpErrorCode, methodNotFoundError, noAppConnectedError, widgetNotFoundError, } from "./protocol/errors.js";
3
- export { type AppInfo, DEFAULT_SOCKET_PATH, getRuntimeDir, type IpcError, IpcErrorSchema, type IpcMessage, type IpcMethod, type IpcRequest, IpcRequestSchema, type IpcResponse, IpcResponseSchema, type QueryOptions, type SerializedWidget, } from "./protocol/types.js";
4
- export { type AppConnection, SocketServer } from "./socket-server.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,KAAK,OAAO,EACZ,mBAAmB,EACnB,aAAa,EACb,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,UAAU,EACf,gBAAgB,EAChB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- export { ConnectionManager } from "./connection-manager.js";
2
- export { appNotFoundError, invalidRequestError, ipcTimeoutError, McpError, McpErrorCode, methodNotFoundError, noAppConnectedError, widgetNotFoundError, } from "./protocol/errors.js";
3
- export { DEFAULT_SOCKET_PATH, getRuntimeDir, IpcErrorSchema, IpcRequestSchema, IpcResponseSchema, } from "./protocol/types.js";
4
- export { SocketServer } from "./socket-server.js";
5
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEH,mBAAmB,EACnB,aAAa,EAEb,cAAc,EAId,gBAAgB,EAEhB,iBAAiB,GAGpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAsB,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,132 +0,0 @@
1
- import { z } from "zod";
2
- /**
3
- * Zod schema for validating IPC requests.
4
- */
5
- export declare const IpcRequestSchema: z.ZodObject<{
6
- id: z.ZodString;
7
- method: z.ZodString;
8
- params: z.ZodOptional<z.ZodUnknown>;
9
- }, z.core.$strip>;
10
- /**
11
- * An IPC request message.
12
- */
13
- export type IpcRequest = z.infer<typeof IpcRequestSchema>;
14
- /**
15
- * An IPC error object.
16
- */
17
- export type IpcError = {
18
- /** Error code */
19
- code: number;
20
- /** Error message */
21
- message: string;
22
- /** Additional error data */
23
- data?: unknown;
24
- };
25
- /**
26
- * Zod schema for validating IPC errors.
27
- */
28
- export declare const IpcErrorSchema: z.ZodObject<{
29
- code: z.ZodNumber;
30
- message: z.ZodString;
31
- data: z.ZodOptional<z.ZodUnknown>;
32
- }, z.core.$strip>;
33
- /**
34
- * Zod schema for validating IPC responses.
35
- */
36
- export declare const IpcResponseSchema: z.ZodObject<{
37
- id: z.ZodString;
38
- result: z.ZodOptional<z.ZodUnknown>;
39
- error: z.ZodOptional<z.ZodObject<{
40
- code: z.ZodNumber;
41
- message: z.ZodString;
42
- data: z.ZodOptional<z.ZodUnknown>;
43
- }, z.core.$strip>>;
44
- }, z.core.$strip>;
45
- /**
46
- * An IPC response message.
47
- */
48
- export type IpcResponse = z.infer<typeof IpcResponseSchema>;
49
- /**
50
- * A serialized representation of a GTK widget for IPC transfer.
51
- */
52
- export type SerializedWidget = {
53
- /** Unique widget identifier */
54
- id: string;
55
- /** Widget type name (e.g., "GtkButton") */
56
- type: string;
57
- /** Accessible role */
58
- role: string;
59
- /** Widget name (test ID) */
60
- name: string | null;
61
- /** Accessible label */
62
- label: string | null;
63
- /** Text content */
64
- text: string | null;
65
- /** Whether the widget is sensitive (interactive) */
66
- sensitive: boolean;
67
- /** Whether the widget is visible */
68
- visible: boolean;
69
- /** CSS class names */
70
- cssClasses: string[];
71
- /** Child widgets */
72
- children: SerializedWidget[];
73
- /** Widget bounds in window coordinates */
74
- bounds?: {
75
- x: number;
76
- y: number;
77
- width: number;
78
- height: number;
79
- };
80
- };
81
- /**
82
- * Information about a connected GTKX application.
83
- */
84
- export type AppInfo = {
85
- /** Application ID (e.g., "com.example.myapp") */
86
- appId: string;
87
- /** Process ID */
88
- pid: number;
89
- /** Open windows */
90
- windows: Array<{
91
- id: string;
92
- title: string | null;
93
- }>;
94
- };
95
- /**
96
- * Options for widget queries.
97
- */
98
- export type QueryOptions = {
99
- /** Widget name to match */
100
- name?: string;
101
- /** Require exact match */
102
- exact?: boolean;
103
- /** Query timeout in milliseconds */
104
- timeout?: number;
105
- };
106
- /**
107
- * Zod schema for app registration parameters.
108
- * @internal
109
- */
110
- export declare const RegisterParamsSchema: z.ZodObject<{
111
- appId: z.ZodString;
112
- pid: z.ZodNumber;
113
- }, z.core.$strip>;
114
- /**
115
- * Available IPC methods.
116
- */
117
- export type IpcMethod = "app.register" | "app.unregister" | "app.getWindows" | "widget.getTree" | "widget.query" | "widget.getProps" | "widget.click" | "widget.type" | "widget.fireEvent" | "widget.screenshot";
118
- /**
119
- * Union type for any IPC message (request or response).
120
- */
121
- export type IpcMessage = IpcRequest | IpcResponse;
122
- /**
123
- * Gets the XDG runtime directory or falls back to system temp.
124
- *
125
- * @returns Path to the runtime directory
126
- */
127
- export declare const getRuntimeDir: () => string;
128
- /**
129
- * Default path for the MCP socket file.
130
- */
131
- export declare const DEFAULT_SOCKET_PATH: string;
132
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACnB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;iBAIzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;iBAI5B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uBAAuB;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mBAAmB;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,0CAA0C;IAC1C,MAAM,CAAC,EAAE;QACL,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IAClB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,OAAO,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC,CAAC;CACN,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACvB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GACf,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,mBAAmB,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,MAAiD,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAyC,CAAC"}
@@ -1,46 +0,0 @@
1
- import { tmpdir } from "node:os";
2
- import { join } from "node:path";
3
- import { z } from "zod";
4
- /**
5
- * Zod schema for validating IPC requests.
6
- */
7
- export const IpcRequestSchema = z.object({
8
- id: z.string(),
9
- method: z.string(),
10
- params: z.unknown().optional(),
11
- });
12
- /**
13
- * Zod schema for validating IPC errors.
14
- */
15
- export const IpcErrorSchema = z.object({
16
- code: z.number(),
17
- message: z.string(),
18
- data: z.unknown().optional(),
19
- });
20
- /**
21
- * Zod schema for validating IPC responses.
22
- */
23
- export const IpcResponseSchema = z.object({
24
- id: z.string(),
25
- result: z.unknown().optional(),
26
- error: IpcErrorSchema.optional(),
27
- });
28
- /**
29
- * Zod schema for app registration parameters.
30
- * @internal
31
- */
32
- export const RegisterParamsSchema = z.object({
33
- appId: z.string(),
34
- pid: z.number(),
35
- });
36
- /**
37
- * Gets the XDG runtime directory or falls back to system temp.
38
- *
39
- * @returns Path to the runtime directory
40
- */
41
- export const getRuntimeDir = () => process.env.XDG_RUNTIME_DIR ?? tmpdir();
42
- /**
43
- * Default path for the MCP socket file.
44
- */
45
- export const DEFAULT_SOCKET_PATH = join(getRuntimeDir(), "gtkx-mcp.sock");
46
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAmBH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAmEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAsBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,eAAe,CAAC,CAAC"}