staff-mcp 1.2.0 → 2.0.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.
Files changed (133) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +178 -49
  3. package/README_zh.md +176 -47
  4. package/dist/src/data/HttpDataSession.d.ts +22 -0
  5. package/dist/src/data/HttpDataSession.js +925 -0
  6. package/dist/src/data/HttpDataSession.js.map +1 -0
  7. package/dist/src/data/node.d.ts +4 -0
  8. package/dist/src/data/node.js +93 -0
  9. package/dist/src/data/node.js.map +1 -0
  10. package/dist/src/data/types.d.ts +54 -0
  11. package/dist/src/data/types.js +2 -0
  12. package/dist/src/data/types.js.map +1 -0
  13. package/dist/src/data-stdio-docker.d.ts +10 -0
  14. package/dist/src/data-stdio-docker.js +140 -0
  15. package/dist/src/data-stdio-docker.js.map +1 -0
  16. package/dist/src/docker-proxy.d.ts +6 -1
  17. package/dist/src/docker-proxy.js +324 -147
  18. package/dist/src/docker-proxy.js.map +1 -1
  19. package/dist/src/extensions/apps.d.ts +12 -0
  20. package/dist/src/extensions/apps.js +85 -0
  21. package/dist/src/extensions/apps.js.map +1 -0
  22. package/dist/src/extensions/config.d.ts +27 -0
  23. package/dist/src/extensions/config.js +91 -0
  24. package/dist/src/extensions/config.js.map +1 -0
  25. package/dist/src/extensions/protocol.d.ts +35 -0
  26. package/dist/src/extensions/protocol.js +47 -0
  27. package/dist/src/extensions/protocol.js.map +1 -0
  28. package/dist/src/extensions/runtime.d.ts +16 -0
  29. package/dist/src/extensions/runtime.js +266 -0
  30. package/dist/src/extensions/runtime.js.map +1 -0
  31. package/dist/src/file-manager/extension.d.ts +21 -0
  32. package/dist/src/file-manager/extension.js +514 -0
  33. package/dist/src/file-manager/extension.js.map +1 -0
  34. package/dist/src/file-manager/file-core.d.ts +128 -0
  35. package/dist/src/file-manager/file-core.js +750 -0
  36. package/dist/src/file-manager/file-core.js.map +1 -0
  37. package/dist/src/file-manager/transfers.d.ts +423 -0
  38. package/dist/src/file-manager/transfers.js +540 -0
  39. package/dist/src/file-manager/transfers.js.map +1 -0
  40. package/dist/src/file-manager/ui/index.html +81 -0
  41. package/dist/src/index.js +289 -128
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/lsp/manager.d.ts +2 -0
  44. package/dist/src/lsp/manager.js +22 -10
  45. package/dist/src/lsp/manager.js.map +1 -1
  46. package/dist/src/reverse/SseTransport.d.ts +34 -0
  47. package/dist/src/reverse/SseTransport.js +215 -0
  48. package/dist/src/reverse/SseTransport.js.map +1 -0
  49. package/dist/src/reverse/http.d.ts +7 -0
  50. package/dist/src/reverse/http.js +85 -0
  51. package/dist/src/reverse/http.js.map +1 -0
  52. package/dist/src/server.d.ts +4 -2
  53. package/dist/src/server.js +80 -18
  54. package/dist/src/server.js.map +1 -1
  55. package/dist/src/terminal/extension.d.ts +4 -0
  56. package/dist/src/terminal/extension.js +108 -0
  57. package/dist/src/terminal/extension.js.map +1 -0
  58. package/dist/src/terminal/pty.d.ts +14 -0
  59. package/dist/src/terminal/pty.js +121 -0
  60. package/dist/src/terminal/pty.js.map +1 -0
  61. package/dist/src/terminal/session.d.ts +136 -0
  62. package/dist/src/terminal/session.js +422 -0
  63. package/dist/src/terminal/session.js.map +1 -0
  64. package/dist/src/terminal/ui/index.html +183 -0
  65. package/dist/src/tools/file-tools.d.ts +2 -1
  66. package/dist/src/tools/file-tools.js +19 -7
  67. package/dist/src/tools/file-tools.js.map +1 -1
  68. package/dist/src/tools/mcp-client-tools.js +244 -104
  69. package/dist/src/tools/mcp-client-tools.js.map +1 -1
  70. package/dist/src/tools/shell-tools.js +1 -1
  71. package/dist/src/tools/shell-tools.js.map +1 -1
  72. package/dist/src/tools/skills.js +26 -1
  73. package/dist/src/tools/skills.js.map +1 -1
  74. package/dist/src/tools/system-tools.d.ts +9 -3
  75. package/dist/src/tools/system-tools.js +31 -48
  76. package/dist/src/tools/system-tools.js.map +1 -1
  77. package/dist/src/transports/http.d.ts +16 -2
  78. package/dist/src/transports/http.js +261 -59
  79. package/dist/src/transports/http.js.map +1 -1
  80. package/dist/src/transports/reverse.d.ts +23 -19
  81. package/dist/src/transports/reverse.js +130 -74
  82. package/dist/src/transports/reverse.js.map +1 -1
  83. package/dist/src/transports/stdio.d.ts +6 -2
  84. package/dist/src/transports/stdio.js +131 -19
  85. package/dist/src/transports/stdio.js.map +1 -1
  86. package/dist/src/utils/proxy.d.ts +3 -3
  87. package/dist/src/utils/proxy.js +84 -62
  88. package/dist/src/utils/proxy.js.map +1 -1
  89. package/dist/src/utils/server-activity.d.ts +6 -0
  90. package/dist/src/utils/server-activity.js +46 -0
  91. package/dist/src/utils/server-activity.js.map +1 -0
  92. package/dist/src/utils/server-lifecycle.d.ts +5 -0
  93. package/dist/src/utils/server-lifecycle.js +51 -0
  94. package/dist/src/utils/server-lifecycle.js.map +1 -0
  95. package/docs/file-manager.md +179 -0
  96. package/docs/terminal.md +66 -0
  97. package/package.json +40 -19
  98. package/dist/src/transports/fte-lifecycle.d.ts +0 -13
  99. package/dist/src/transports/fte-lifecycle.js +0 -76
  100. package/dist/src/transports/fte-lifecycle.js.map +0 -1
  101. package/dist/tests/docker-proxy.test.d.ts +0 -1
  102. package/dist/tests/docker-proxy.test.js +0 -395
  103. package/dist/tests/docker-proxy.test.js.map +0 -1
  104. package/dist/tests/file-write-queue.test.d.ts +0 -1
  105. package/dist/tests/file-write-queue.test.js +0 -105
  106. package/dist/tests/file-write-queue.test.js.map +0 -1
  107. package/dist/tests/fte-lifecycle.test.d.ts +0 -1
  108. package/dist/tests/fte-lifecycle.test.js +0 -118
  109. package/dist/tests/fte-lifecycle.test.js.map +0 -1
  110. package/dist/tests/lsp-client.test.d.ts +0 -1
  111. package/dist/tests/lsp-client.test.js +0 -52
  112. package/dist/tests/lsp-client.test.js.map +0 -1
  113. package/dist/tests/package-info.test.d.ts +0 -1
  114. package/dist/tests/package-info.test.js +0 -54
  115. package/dist/tests/package-info.test.js.map +0 -1
  116. package/dist/tests/proxy-no-proxy.test.d.ts +0 -1
  117. package/dist/tests/proxy-no-proxy.test.js +0 -156
  118. package/dist/tests/proxy-no-proxy.test.js.map +0 -1
  119. package/dist/tests/proxy.test.d.ts +0 -1
  120. package/dist/tests/proxy.test.js +0 -89
  121. package/dist/tests/proxy.test.js.map +0 -1
  122. package/dist/tests/reverse-reconnect.test.d.ts +0 -1
  123. package/dist/tests/reverse-reconnect.test.js +0 -89
  124. package/dist/tests/reverse-reconnect.test.js.map +0 -1
  125. package/dist/tests/security.test.d.ts +0 -1
  126. package/dist/tests/security.test.js +0 -21
  127. package/dist/tests/security.test.js.map +0 -1
  128. package/dist/tests/shell-tools.test.d.ts +0 -1
  129. package/dist/tests/shell-tools.test.js +0 -113
  130. package/dist/tests/shell-tools.test.js.map +0 -1
  131. package/dist/tests/test_files/test.d.ts +0 -1
  132. package/dist/tests/test_files/test.js +0 -4
  133. package/dist/tests/test_files/test.js.map +0 -1
@@ -0,0 +1,266 @@
1
+ import { McpError } from '@modelcontextprotocol/sdk/types.js';
2
+ import { z } from 'zod';
3
+ import { DATA_OPEN_METHOD } from '../data/HttpDataSession.js';
4
+ import { FileError } from '../file-manager/file-core.js';
5
+ import { registerFileManager } from '../file-manager/extension.js';
6
+ import { TerminalSession } from '../terminal/session.js';
7
+ import { registerTerminal } from '../terminal/extension.js';
8
+ import { DATA, FILES, TERMINAL, STREAMS, APPS, supports, extensionError, parse, } from './protocol.js';
9
+ import { registerApps } from './apps.js';
10
+ import { registerServerCleanup } from '../utils/server-lifecycle.js';
11
+ import { registerServerActivity } from '../utils/server-activity.js';
12
+ const dataFactories = new WeakMap();
13
+ /** Configure before connect; the factory runs only on a negotiated data/v1/configure. */
14
+ export function configureExtensionData(server, factory) {
15
+ dataFactories.set(server, factory);
16
+ }
17
+ /** Attach business lifecycle only. The official SDK receives the original transport unchanged. */
18
+ export function installExtensions(server, core, transferDirectory, workspaceCore, terminalRuntime) {
19
+ let terminalSession;
20
+ let openData;
21
+ let configureData;
22
+ let initialized = false;
23
+ const enabled = new Set([
24
+ APPS,
25
+ DATA,
26
+ ...(core ? [FILES] : []),
27
+ ...(terminalRuntime ? [STREAMS] : []),
28
+ ]);
29
+ const negotiated = (extension) => initialized && enabled.has(extension) && supports(server, extension);
30
+ const requireExtension = (extension) => {
31
+ if (!negotiated(extension))
32
+ extensionError('CAPABILITY_UNAVAILABLE', 'Extension version 1 is unavailable on this initialized session');
33
+ };
34
+ const createFileSession = core
35
+ ? registerFileManager(server, core, transferDirectory)
36
+ : undefined;
37
+ const previousInitialized = server.server.oninitialized;
38
+ server.server.oninitialized = () => {
39
+ initialized = true;
40
+ previousInitialized?.();
41
+ };
42
+ registerApps(server, requireExtension, () => !!terminalSession, negotiated);
43
+ if (terminalRuntime)
44
+ registerTerminal(server, () => {
45
+ requireExtension(STREAMS);
46
+ return terminalSession;
47
+ });
48
+ for (const method of ['cc.qqxing/data/v1/configure', DATA_OPEN_METHOD]) {
49
+ server.server.setRequestHandler(z.object({
50
+ method: z.literal(method),
51
+ params: z.unknown().optional(),
52
+ }), async (request, extra) => {
53
+ if (extra.signal.aborted)
54
+ extensionError('STALE_CONNECTION', 'Data request connection closed');
55
+ try {
56
+ requireExtension(DATA);
57
+ const handler = method === DATA_OPEN_METHOD ? openData : configureData;
58
+ if (!handler)
59
+ extensionError('STALE_CONNECTION', 'No active data connection');
60
+ return await handler(request.params);
61
+ }
62
+ catch (error) {
63
+ if (error instanceof FileError)
64
+ throw new McpError(error.rpcCode, error.message, {
65
+ code: error.code,
66
+ });
67
+ throw error;
68
+ }
69
+ });
70
+ }
71
+ const connect = server.connect.bind(server);
72
+ server.connect = async (transport) => {
73
+ let closed = false;
74
+ initialized = false;
75
+ const lifetime = new AbortController();
76
+ let data;
77
+ const currentData = () => {
78
+ if (closed || !data)
79
+ extensionError('CAPABILITY_UNAVAILABLE', 'Data session has not been configured');
80
+ return data.session;
81
+ };
82
+ const files = createFileSession?.(() => {
83
+ requireExtension(DATA);
84
+ const session = currentData();
85
+ if (!session.supports(FILES, 'host-to-remote') ||
86
+ !session.supports(FILES, 'remote-to-host'))
87
+ extensionError('CAPABILITY_UNAVAILABLE', 'Files data session is unavailable');
88
+ });
89
+ const terminal = terminalRuntime
90
+ ? new TerminalSession(workspaceCore, terminalRuntime, () => {
91
+ requireExtension(STREAMS);
92
+ requireExtension(DATA);
93
+ if (!currentData().supports(TERMINAL, 'duplex'))
94
+ extensionError('CAPABILITY_UNAVAILABLE', 'Terminal data session is unavailable');
95
+ })
96
+ : undefined;
97
+ terminalSession = terminal;
98
+ const accept = async (open, channel) => {
99
+ requireExtension(DATA);
100
+ if (open.purpose === FILES && files) {
101
+ requireExtension(FILES);
102
+ return files.transfers.acceptChannel(open, channel);
103
+ }
104
+ if (open.purpose === TERMINAL && terminal) {
105
+ requireExtension(STREAMS);
106
+ return terminal.acceptChannel(open, channel);
107
+ }
108
+ return extensionError('CAPABILITY_UNAVAILABLE', 'Unsupported data channel purpose');
109
+ };
110
+ const supportsPurpose = (purpose) => !closed &&
111
+ negotiated(DATA) &&
112
+ ((purpose === FILES && !!files && negotiated(FILES)) ||
113
+ (purpose === TERMINAL && !!terminal && negotiated(STREAMS)));
114
+ let configurationAttempted = false;
115
+ let configuration;
116
+ registerServerActivity(server, () => configuration !== undefined ||
117
+ !!files?.transfers.hasActivity() ||
118
+ !!terminal?.hasActivity() ||
119
+ !!data?.session.hasActivity());
120
+ let dataCleanup;
121
+ const disposeData = (owned) => {
122
+ dataCleanup ??= (async () => {
123
+ try {
124
+ owned.session.close();
125
+ }
126
+ finally {
127
+ await owned.close?.();
128
+ }
129
+ })();
130
+ return dataCleanup;
131
+ };
132
+ const configure = async (params) => {
133
+ if (closed)
134
+ extensionError('STALE_CONNECTION', 'Data connection closed');
135
+ const { binding, origin } = parse(z
136
+ .object({
137
+ binding: z.string().regex(/^[A-Za-z0-9_-]{16,256}$/),
138
+ origin: z.string().max(2048).optional(),
139
+ })
140
+ .strict(), params);
141
+ if (origin !== undefined) {
142
+ let endpoint;
143
+ try {
144
+ endpoint = new URL(origin);
145
+ }
146
+ catch {
147
+ return extensionError('INVALID_PARAMS', 'Invalid data advertisement origin');
148
+ }
149
+ if (!['http:', 'https:'].includes(endpoint.protocol) ||
150
+ endpoint.username ||
151
+ endpoint.password ||
152
+ endpoint.search ||
153
+ endpoint.hash ||
154
+ endpoint.origin !== origin)
155
+ extensionError('INVALID_PARAMS', 'Expected an absolute HTTP(S) origin without path or credentials');
156
+ }
157
+ if (configurationAttempted)
158
+ extensionError('INVALID_STATE', 'Data session is already configured');
159
+ configurationAttempted = true;
160
+ const factory = dataFactories.get(server);
161
+ if (!factory)
162
+ extensionError('CAPABILITY_UNAVAILABLE', 'Data endpoint is not configured');
163
+ configuration = Promise.resolve().then(() => factory(binding, accept, lifetime.signal, origin, supportsPurpose));
164
+ try {
165
+ let owned;
166
+ try {
167
+ owned = await configuration;
168
+ }
169
+ catch (error) {
170
+ if (closed)
171
+ extensionError('STALE_CONNECTION', 'Data connection closed during setup');
172
+ // Preserve explicit parameter/protocol errors, but a runtime
173
+ // endpoint failure must not take down standard MCP control.
174
+ if (error instanceof McpError)
175
+ throw error;
176
+ console.error('[staff-mcp] Warning: Extension data unavailable: endpoint setup failed.');
177
+ return extensionError('CAPABILITY_UNAVAILABLE', 'Data endpoint setup failed');
178
+ }
179
+ if (closed) {
180
+ await disposeData(owned);
181
+ return extensionError('STALE_CONNECTION', 'Data connection closed during setup');
182
+ }
183
+ data = owned;
184
+ return owned.endpoint ? { endpoint: owned.endpoint } : {};
185
+ }
186
+ finally {
187
+ // Keep only a pending setup, not a completed configuration receipt.
188
+ configuration = undefined;
189
+ }
190
+ };
191
+ const open = async (params) => {
192
+ if (closed)
193
+ extensionError('STALE_CONNECTION', 'Data connection closed');
194
+ if (!data)
195
+ extensionError('CAPABILITY_UNAVAILABLE', 'Data session has not been configured');
196
+ // Reject disabled/unnegotiated purposes before the data core allocates a channel.
197
+ const { open } = parse(z
198
+ .object({
199
+ open: z.object({ purpose: z.string() }).passthrough(),
200
+ })
201
+ .passthrough(), params);
202
+ if (!supportsPurpose(open.purpose))
203
+ extensionError('CAPABILITY_UNAVAILABLE', 'Unsupported data channel purpose');
204
+ requireExtension(open.purpose === TERMINAL ? STREAMS : open.purpose);
205
+ return { ...(await data.session.acceptOpen(params)) };
206
+ };
207
+ configureData = configure;
208
+ openData = open;
209
+ let cleanupPromise;
210
+ const cleanup = () => {
211
+ if (cleanupPromise)
212
+ return cleanupPromise;
213
+ closed = true;
214
+ initialized = false;
215
+ lifetime.abort();
216
+ if (openData === open)
217
+ openData = undefined;
218
+ if (configureData === configure)
219
+ configureData = undefined;
220
+ // Fence bytes synchronously; await staging, PTYs and listener ownership
221
+ // together. A late configure result still belongs to this session.
222
+ cleanupPromise = Promise.allSettled([
223
+ (async () => {
224
+ if (data)
225
+ await disposeData(data);
226
+ else if (configuration) {
227
+ const owned = await configuration.catch(() => undefined);
228
+ if (owned)
229
+ await disposeData(owned);
230
+ }
231
+ })(),
232
+ (async () => {
233
+ await terminal?.close();
234
+ })(),
235
+ (async () => {
236
+ await files?.close();
237
+ })(),
238
+ ]).then((results) => {
239
+ const errors = results
240
+ .filter((result) => result.status === 'rejected')
241
+ .map((result) => result.reason);
242
+ if (errors.length)
243
+ throw new AggregateError(errors, 'Extension cleanup failed');
244
+ });
245
+ return cleanupPromise;
246
+ };
247
+ registerServerCleanup(server, cleanup);
248
+ try {
249
+ await connect(transport);
250
+ }
251
+ catch (error) {
252
+ const pendingCleanup = cleanup();
253
+ void pendingCleanup.catch(() => { });
254
+ await transport.close().catch(() => { });
255
+ // Transports may reject start without notifying the SDK.
256
+ if (server.server.transport === transport)
257
+ transport.onclose?.();
258
+ await pendingCleanup.catch(() => console.error('[staff-mcp] Extension cleanup failed.'));
259
+ throw error;
260
+ }
261
+ if (server.server.transport !== transport)
262
+ await cleanup();
263
+ };
264
+ return requireExtension;
265
+ }
266
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/extensions/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { FileCore } from './file-core.js';
3
+ import { TransferManager } from './transfers.js';
4
+ import { readAppResource } from '../extensions/apps.js';
5
+ export declare function resourceUri(rootId: string, file: string): string;
6
+ /** One instance per physical transport generation; no negotiation or handles survive reconnect. */
7
+ export declare class FileManagerSession {
8
+ private readonly server;
9
+ readonly transfers: TransferManager;
10
+ initialized: boolean;
11
+ closed: boolean;
12
+ private readonly negotiated;
13
+ constructor(core: FileCore, server: McpServer, runtimeDirectory: string, requireData: () => void);
14
+ initialize(): void;
15
+ supports(extension: string): boolean;
16
+ requireExtension(extension?: string): void;
17
+ close(): Promise<void>;
18
+ }
19
+ /** Standard MCP resources work without creating optional extension sessions. */
20
+ export declare function registerFileResources(server: McpServer, core: FileCore, readApp?: (uri: string) => ReturnType<typeof readAppResource>): void;
21
+ export declare function registerFileManager(server: McpServer, core: FileCore, runtimeDirectory: string): (requireData: () => void) => FileManagerSession;