@modelprofile.com/flexharness 10.21.0 → 10.22.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_mcp/index.d.ts +22 -4
- package/dist_ts_mcp/index.js +13 -3
- package/dist_ts_tools/index.d.ts +1 -1
- package/dist_ts_tools/index.js +2 -2
- package/dist_ts_tools/tool.filesystem.d.ts +8 -0
- package/dist_ts_tools/tool.filesystem.js +11 -1
- package/package.json +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_mcp/index.ts +42 -6
- package/ts_mcp/readme.md +4 -0
- package/ts_tools/index.ts +1 -1
- package/ts_tools/readme.md +2 -0
- package/ts_tools/tool.filesystem.ts +12 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@modelprofile.com/flexharness',
|
|
6
|
-
version: '10.
|
|
6
|
+
version: '10.22.0',
|
|
7
7
|
description: 'The FlexHarness toolbox source repository and shared dependency catalog.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwrQkFBK0I7SUFDckMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
package/dist_ts_mcp/index.d.ts
CHANGED
|
@@ -18,19 +18,27 @@ export interface IMcpServerClientOptions {
|
|
|
18
18
|
clientOptions?: plugins.ClientOptions;
|
|
19
19
|
requestOptions?: plugins.RequestOptions;
|
|
20
20
|
}
|
|
21
|
-
export interface
|
|
21
|
+
export interface IMcpServerTrustOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Trusts the server's `readOnlyHint` annotations: `isReadOnlyToolCall` classifies a call of a tool
|
|
24
|
+
* the server annotates `readOnlyHint: true` as read-only. An annotation is the server's own claim,
|
|
25
|
+
* so no server's is trusted unless its configuration says so. Default: false.
|
|
26
|
+
*/
|
|
27
|
+
trustReadOnlyHints?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface IMcpStdioServerConfig extends plugins.StdioServerParameters, IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
22
30
|
type: 'stdio';
|
|
23
31
|
}
|
|
24
|
-
export interface IMcpStreamableHttpServerConfig extends IMcpServerClientOptions {
|
|
32
|
+
export interface IMcpStreamableHttpServerConfig extends IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
25
33
|
type: 'streamableHttp' | 'http';
|
|
26
34
|
url: string | URL;
|
|
27
35
|
transportOptions?: plugins.StreamableHTTPClientTransportOptions;
|
|
28
36
|
}
|
|
29
|
-
export interface IMcpTransportServerConfig extends IMcpServerClientOptions {
|
|
37
|
+
export interface IMcpTransportServerConfig extends IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
30
38
|
type: 'transport';
|
|
31
39
|
transport: plugins.Transport;
|
|
32
40
|
}
|
|
33
|
-
export interface IMcpClientServerConfig {
|
|
41
|
+
export interface IMcpClientServerConfig extends IMcpServerTrustOptions {
|
|
34
42
|
type: 'client';
|
|
35
43
|
client: IMcpClientLike;
|
|
36
44
|
}
|
|
@@ -65,6 +73,8 @@ export interface IMcpConnectedServer {
|
|
|
65
73
|
name: string;
|
|
66
74
|
client: IMcpClientLike;
|
|
67
75
|
tools: TMcpToolMetadata[];
|
|
76
|
+
/** Whether its configuration trusts the server's `readOnlyHint` annotations. */
|
|
77
|
+
trustReadOnlyHints: boolean;
|
|
68
78
|
}
|
|
69
79
|
export interface IMcpToolNameMapping {
|
|
70
80
|
serverName: string;
|
|
@@ -74,6 +84,14 @@ export interface ICreateMcpToolsResult {
|
|
|
74
84
|
tools: plugins.ToolSet;
|
|
75
85
|
servers: IMcpConnectedServer[];
|
|
76
86
|
toolNameMap: Record<string, IMcpToolNameMapping>;
|
|
87
|
+
/**
|
|
88
|
+
* Whether a call of `tools` only reads: its server's configuration trusts `readOnlyHint`, and the
|
|
89
|
+
* server annotates the tool `readOnlyHint: true`. Every other call is not read-only. Pass it as the
|
|
90
|
+
* tool handle's `isReadOnlyToolCall`, or ask it from that classifier.
|
|
91
|
+
*/
|
|
92
|
+
isReadOnlyToolCall: (call: {
|
|
93
|
+
toolName: string;
|
|
94
|
+
}) => boolean;
|
|
77
95
|
close: () => Promise<void>;
|
|
78
96
|
}
|
|
79
97
|
export declare const createMcpTools: (options: ICreateMcpToolsOptions) => Promise<ICreateMcpToolsResult>;
|
package/dist_ts_mcp/index.js
CHANGED
|
@@ -11,18 +11,27 @@ export const createMcpTools = async (options) => {
|
|
|
11
11
|
try {
|
|
12
12
|
for (const [serverName, config] of serverEntries) {
|
|
13
13
|
const client = await connectMcpServer(serverName, config, options);
|
|
14
|
-
const connectedServer = {
|
|
14
|
+
const connectedServer = {
|
|
15
|
+
name: serverName,
|
|
16
|
+
client,
|
|
17
|
+
tools: [],
|
|
18
|
+
trustReadOnlyHints: config.trustReadOnlyHints === true,
|
|
19
|
+
};
|
|
15
20
|
connectedServers.push(connectedServer);
|
|
16
21
|
connectedServer.tools = await listAllMcpTools(client, options.listToolsRequestOptions ?? getServerRequestOptions(config) ?? options.requestOptions, maxListToolsPages);
|
|
17
22
|
}
|
|
18
23
|
const exposedTools = {};
|
|
19
24
|
const toolNameMap = {};
|
|
25
|
+
const readOnlyToolNames = new Set();
|
|
20
26
|
const shouldPrefixToolNames = options.prefixToolNames ?? connectedServers.length > 1;
|
|
21
27
|
for (const { server, tool: mcpTool, exposedToolName } of nameMcpTools(connectedServers, shouldPrefixToolNames)) {
|
|
22
28
|
toolNameMap[exposedToolName] = {
|
|
23
29
|
serverName: server.name,
|
|
24
30
|
toolName: mcpTool.name,
|
|
25
31
|
};
|
|
32
|
+
if (server.trustReadOnlyHints && mcpTool.annotations?.readOnlyHint === true) {
|
|
33
|
+
readOnlyToolNames.add(exposedToolName);
|
|
34
|
+
}
|
|
26
35
|
exposedTools[exposedToolName] = plugins.tool({
|
|
27
36
|
description: mcpTool.description ?? `MCP tool ${mcpTool.name} from ${server.name}`,
|
|
28
37
|
inputSchema: plugins.jsonSchema(mcpTool.inputSchema),
|
|
@@ -44,6 +53,7 @@ export const createMcpTools = async (options) => {
|
|
|
44
53
|
tools: exposedTools,
|
|
45
54
|
servers: connectedServers,
|
|
46
55
|
toolNameMap,
|
|
56
|
+
isReadOnlyToolCall: ({ toolName }) => readOnlyToolNames.has(toolName),
|
|
47
57
|
close: async () => closeMcpClients(connectedServers),
|
|
48
58
|
};
|
|
49
59
|
}
|
|
@@ -167,7 +177,7 @@ const connectMcpServer = async (serverName, config, options) => {
|
|
|
167
177
|
};
|
|
168
178
|
const createMcpTransport = (config) => {
|
|
169
179
|
if (config.type === 'stdio') {
|
|
170
|
-
const { type, clientName, clientVersion, clientOptions, requestOptions, ...serverParameters } = config;
|
|
180
|
+
const { type, clientName, clientVersion, clientOptions, requestOptions, trustReadOnlyHints, ...serverParameters } = config;
|
|
171
181
|
return new plugins.StdioClientTransport(serverParameters);
|
|
172
182
|
}
|
|
173
183
|
if (config.type === 'streamableHttp' || config.type === 'http') {
|
|
@@ -374,4 +384,4 @@ const rethrowAfterCleanup = async (originalError, cleanup, message) => {
|
|
|
374
384
|
}
|
|
375
385
|
throw originalError;
|
|
376
386
|
};
|
|
377
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19tY3AvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxxQkFBcUIsR0FDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixNQUFNLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQWdHekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFDakMsT0FBK0IsRUFDQyxFQUFFO0lBQ2xDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsMEJBQTBCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFaEYsTUFBTSxnQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQztRQUNILEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkUsTUFBTSxlQUFlLEdBQXdCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3JGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2QyxlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUMzQyxNQUFNLEVBQ04sT0FBTyxDQUFDLHVCQUF1QixJQUFJLHVC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
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19tY3AvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxxQkFBcUIsR0FDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixNQUFNLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQWtIekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFDakMsT0FBK0IsRUFDQyxFQUFFO0lBQ2xDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsMEJBQTBCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFaEYsTUFBTSxnQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQztRQUNILEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkUsTUFBTSxlQUFlLEdBQXdCO2dCQUMzQyxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsTUFBTTtnQkFDTixLQUFLLEVBQUUsRUFBRTtnQkFDVCxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEtBQUssSUFBSTthQUN2RCxDQUFDO1lBQ0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZDLGVBQWUsQ0FBQyxLQUFLLEdBQUcs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
|
package/dist_ts_tools/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { createBrowserTools } from './tool.browser.js';
|
|
|
2
2
|
export { acquireToolExecutionContext, ToolExecutionAdapterCleanupError, } from './plugins.js';
|
|
3
3
|
export type { IToolExecutionAdapter, IToolExecutionAdapterRequest, IToolExecutionContextLease, } from './plugins.js';
|
|
4
4
|
export type { ICreateBrowserToolsOptions } from './tool.browser.js';
|
|
5
|
-
export { createFilesystemTools } from './tool.filesystem.js';
|
|
5
|
+
export { createFilesystemTools, isReadOnlyFilesystemToolCall } from './tool.filesystem.js';
|
|
6
6
|
export type { ICreateFilesystemToolsOptions } from './tool.filesystem.js';
|
|
7
7
|
export { createShellTools } from './tool.shell.js';
|
|
8
8
|
export type { ICreateShellToolsOptions } from './tool.shell.js';
|
package/dist_ts_tools/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { createBrowserTools } from './tool.browser.js';
|
|
2
2
|
export { acquireToolExecutionContext, ToolExecutionAdapterCleanupError, } from './plugins.js';
|
|
3
|
-
export { createFilesystemTools } from './tool.filesystem.js';
|
|
3
|
+
export { createFilesystemTools, isReadOnlyFilesystemToolCall } from './tool.filesystem.js';
|
|
4
4
|
export { createShellTools } from './tool.shell.js';
|
|
5
5
|
export { formatShellResult, formatToolOutput } from './tool.context.js';
|
|
6
6
|
export { InMemoryToolJobStore, ToolJobStoreConflictError } from './plugins.js';
|
|
7
7
|
export { httpTool } from './tool.http.js';
|
|
8
8
|
export { jsonTool } from './tool.json.js';
|
|
9
9
|
export { truncateOutput } from './plugins.js';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190b29scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGdDQUFnQyxHQUNqQyxNQUFNLGNBQWMsQ0FBQztBQU90QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTJCeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQyJ9
|
|
@@ -10,4 +10,12 @@ export interface ICreateFilesystemToolsOptions {
|
|
|
10
10
|
/** Maximum output bytes before truncating. */
|
|
11
11
|
maxBytes?: number;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Whether a call of `createFilesystemTools()`' tools only reads: `read_file` and `list_directory`
|
|
15
|
+
* change nothing and ask for no permission. Pass it as the tool handle's `isReadOnlyToolCall`, or ask
|
|
16
|
+
* it from that classifier, when the context's `fs.readFile` and `fs.listDirectory` do neither either.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isReadOnlyFilesystemToolCall(call: {
|
|
19
|
+
toolName: string;
|
|
20
|
+
}): boolean;
|
|
13
21
|
export declare function createFilesystemTools(context: IToolExecutionContext, options?: ICreateFilesystemToolsOptions): plugins.ToolSet;
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { formatToolOutput, } from './tool.context.js';
|
|
3
|
+
/** The tools of `createFilesystemTools()` that only read. */
|
|
4
|
+
const readOnlyFilesystemToolNames = new Set(['read_file', 'list_directory']);
|
|
5
|
+
/**
|
|
6
|
+
* Whether a call of `createFilesystemTools()`' tools only reads: `read_file` and `list_directory`
|
|
7
|
+
* change nothing and ask for no permission. Pass it as the tool handle's `isReadOnlyToolCall`, or ask
|
|
8
|
+
* it from that classifier, when the context's `fs.readFile` and `fs.listDirectory` do neither either.
|
|
9
|
+
*/
|
|
10
|
+
export function isReadOnlyFilesystemToolCall(call) {
|
|
11
|
+
return readOnlyFilesystemToolNames.has(call.toolName);
|
|
12
|
+
}
|
|
3
13
|
export function createFilesystemTools(context, options = {}) {
|
|
4
14
|
const truncate = (output) => plugins.truncateOutput(formatToolOutput(output), {
|
|
5
15
|
maxLines: options.maxLines,
|
|
@@ -144,4 +154,4 @@ export function createFilesystemTools(context, options = {}) {
|
|
|
144
154
|
}
|
|
145
155
|
return tools;
|
|
146
156
|
}
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5maWxlc3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdG9vbHMvdG9vbC5maWxlc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxtQkFBbUIsQ0FBQztBQWEzQiw2REFBNkQ7QUFDN0QsTUFBTSwyQkFBMkIsR0FBd0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBRWxHOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsSUFBMEI7SUFDckUsT0FBTywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsT0FBOEIsRUFBRSxVQUF5QyxFQUFFO0lBQy9HLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3JGLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7S0FDM0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNYLE1BQU0sS0FBSyxHQUFvQjtRQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixXQUFXLEVBQ1QscUdBQXFHO1lBQ3ZHLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDOUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3FCQUNqQixNQUFNLEVBQUU7cUJBQ1IsUUFBUSxF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
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"author": "Task Venture Capital GmbH",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "@modelprofile.com/flexharness",
|
|
5
|
-
"version": "10.
|
|
5
|
+
"version": "10.22.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"description": "Managed agent sessions with tools, MCP, chat, OCR, documents and browser control through focused subpath imports.",
|
|
8
8
|
"main": "./dist_ts/index.js",
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
89
|
"@cfworker/json-schema": "^4.1.1",
|
|
90
|
-
"@modelprofile.com/flexharness-agent": "10.
|
|
91
|
-
"@modelprofile.com/flexharness-models": "10.
|
|
90
|
+
"@modelprofile.com/flexharness-agent": "10.22.0",
|
|
91
|
+
"@modelprofile.com/flexharness-models": "10.22.0",
|
|
92
92
|
"@push.rocks/smartrequest": "^5.5.1",
|
|
93
93
|
"ai": "^7.0.111",
|
|
94
94
|
"zod": "^4.6.5"
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts_mcp/index.ts
CHANGED
|
@@ -27,22 +27,32 @@ export interface IMcpServerClientOptions {
|
|
|
27
27
|
requestOptions?: plugins.RequestOptions;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export interface
|
|
30
|
+
export interface IMcpServerTrustOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Trusts the server's `readOnlyHint` annotations: `isReadOnlyToolCall` classifies a call of a tool
|
|
33
|
+
* the server annotates `readOnlyHint: true` as read-only. An annotation is the server's own claim,
|
|
34
|
+
* so no server's is trusted unless its configuration says so. Default: false.
|
|
35
|
+
*/
|
|
36
|
+
trustReadOnlyHints?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface IMcpStdioServerConfig
|
|
40
|
+
extends plugins.StdioServerParameters, IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
31
41
|
type: 'stdio';
|
|
32
42
|
}
|
|
33
43
|
|
|
34
|
-
export interface IMcpStreamableHttpServerConfig extends IMcpServerClientOptions {
|
|
44
|
+
export interface IMcpStreamableHttpServerConfig extends IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
35
45
|
type: 'streamableHttp' | 'http';
|
|
36
46
|
url: string | URL;
|
|
37
47
|
transportOptions?: plugins.StreamableHTTPClientTransportOptions;
|
|
38
48
|
}
|
|
39
49
|
|
|
40
|
-
export interface IMcpTransportServerConfig extends IMcpServerClientOptions {
|
|
50
|
+
export interface IMcpTransportServerConfig extends IMcpServerClientOptions, IMcpServerTrustOptions {
|
|
41
51
|
type: 'transport';
|
|
42
52
|
transport: plugins.Transport;
|
|
43
53
|
}
|
|
44
54
|
|
|
45
|
-
export interface IMcpClientServerConfig {
|
|
55
|
+
export interface IMcpClientServerConfig extends IMcpServerTrustOptions {
|
|
46
56
|
type: 'client';
|
|
47
57
|
client: IMcpClientLike;
|
|
48
58
|
}
|
|
@@ -86,6 +96,8 @@ export interface IMcpConnectedServer {
|
|
|
86
96
|
name: string;
|
|
87
97
|
client: IMcpClientLike;
|
|
88
98
|
tools: TMcpToolMetadata[];
|
|
99
|
+
/** Whether its configuration trusts the server's `readOnlyHint` annotations. */
|
|
100
|
+
trustReadOnlyHints: boolean;
|
|
89
101
|
}
|
|
90
102
|
|
|
91
103
|
export interface IMcpToolNameMapping {
|
|
@@ -97,6 +109,12 @@ export interface ICreateMcpToolsResult {
|
|
|
97
109
|
tools: plugins.ToolSet;
|
|
98
110
|
servers: IMcpConnectedServer[];
|
|
99
111
|
toolNameMap: Record<string, IMcpToolNameMapping>;
|
|
112
|
+
/**
|
|
113
|
+
* Whether a call of `tools` only reads: its server's configuration trusts `readOnlyHint`, and the
|
|
114
|
+
* server annotates the tool `readOnlyHint: true`. Every other call is not read-only. Pass it as the
|
|
115
|
+
* tool handle's `isReadOnlyToolCall`, or ask it from that classifier.
|
|
116
|
+
*/
|
|
117
|
+
isReadOnlyToolCall: (call: { toolName: string }) => boolean;
|
|
100
118
|
close: () => Promise<void>;
|
|
101
119
|
}
|
|
102
120
|
|
|
@@ -113,7 +131,12 @@ export const createMcpTools = async (
|
|
|
113
131
|
try {
|
|
114
132
|
for (const [serverName, config] of serverEntries) {
|
|
115
133
|
const client = await connectMcpServer(serverName, config, options);
|
|
116
|
-
const connectedServer: IMcpConnectedServer = {
|
|
134
|
+
const connectedServer: IMcpConnectedServer = {
|
|
135
|
+
name: serverName,
|
|
136
|
+
client,
|
|
137
|
+
tools: [],
|
|
138
|
+
trustReadOnlyHints: config.trustReadOnlyHints === true,
|
|
139
|
+
};
|
|
117
140
|
connectedServers.push(connectedServer);
|
|
118
141
|
connectedServer.tools = await listAllMcpTools(
|
|
119
142
|
client,
|
|
@@ -124,6 +147,7 @@ export const createMcpTools = async (
|
|
|
124
147
|
|
|
125
148
|
const exposedTools: plugins.ToolSet = {};
|
|
126
149
|
const toolNameMap: Record<string, IMcpToolNameMapping> = {};
|
|
150
|
+
const readOnlyToolNames = new Set<string>();
|
|
127
151
|
const shouldPrefixToolNames = options.prefixToolNames ?? connectedServers.length > 1;
|
|
128
152
|
|
|
129
153
|
for (const { server, tool: mcpTool, exposedToolName } of nameMcpTools(connectedServers, shouldPrefixToolNames)) {
|
|
@@ -131,6 +155,9 @@ export const createMcpTools = async (
|
|
|
131
155
|
serverName: server.name,
|
|
132
156
|
toolName: mcpTool.name,
|
|
133
157
|
};
|
|
158
|
+
if (server.trustReadOnlyHints && mcpTool.annotations?.readOnlyHint === true) {
|
|
159
|
+
readOnlyToolNames.add(exposedToolName);
|
|
160
|
+
}
|
|
134
161
|
|
|
135
162
|
exposedTools[exposedToolName] = plugins.tool({
|
|
136
163
|
description: mcpTool.description ?? `MCP tool ${mcpTool.name} from ${server.name}`,
|
|
@@ -154,6 +181,7 @@ export const createMcpTools = async (
|
|
|
154
181
|
tools: exposedTools,
|
|
155
182
|
servers: connectedServers,
|
|
156
183
|
toolNameMap,
|
|
184
|
+
isReadOnlyToolCall: ({ toolName }) => readOnlyToolNames.has(toolName),
|
|
157
185
|
close: async () => closeMcpClients(connectedServers),
|
|
158
186
|
};
|
|
159
187
|
} catch (error) {
|
|
@@ -359,7 +387,15 @@ const createMcpTransport = (
|
|
|
359
387
|
config: Exclude<TMcpServerConfig, IMcpClientServerConfig>,
|
|
360
388
|
): plugins.Transport => {
|
|
361
389
|
if (config.type === 'stdio') {
|
|
362
|
-
const {
|
|
390
|
+
const {
|
|
391
|
+
type,
|
|
392
|
+
clientName,
|
|
393
|
+
clientVersion,
|
|
394
|
+
clientOptions,
|
|
395
|
+
requestOptions,
|
|
396
|
+
trustReadOnlyHints,
|
|
397
|
+
...serverParameters
|
|
398
|
+
} = config;
|
|
363
399
|
return new plugins.StdioClientTransport(serverParameters);
|
|
364
400
|
}
|
|
365
401
|
|
package/ts_mcp/readme.md
CHANGED
|
@@ -9,6 +9,10 @@ pnpm add @modelprofile.com/flexharness @modelcontextprotocol/sdk
|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
`createMcpTools()` connects MCP servers and exposes their tools as AI SDK tools.
|
|
12
|
+
Its `isReadOnlyToolCall` is the tool handle's classifier for them: a call is read-only when the
|
|
13
|
+
server annotates its tool `readOnlyHint: true` and the server's configuration sets
|
|
14
|
+
`trustReadOnlyHints: true`, so those reads run concurrently. No server's annotations are trusted
|
|
15
|
+
by default; `servers` carries each server's `trustReadOnlyHints`.
|
|
12
16
|
`createMcpToolCatalog()` makes the tools servers list into a FlexHarness tool catalog
|
|
13
17
|
(`search_tools`, `describe_tools`, `execute`, `run_code`): one catalog object for every
|
|
14
18
|
run, each call on the client `resolveClient` names for its run, method paths equal to
|
package/ts_tools/index.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type {
|
|
|
9
9
|
IToolExecutionContextLease,
|
|
10
10
|
} from './plugins.js';
|
|
11
11
|
export type { ICreateBrowserToolsOptions } from './tool.browser.js';
|
|
12
|
-
export { createFilesystemTools } from './tool.filesystem.js';
|
|
12
|
+
export { createFilesystemTools, isReadOnlyFilesystemToolCall } from './tool.filesystem.js';
|
|
13
13
|
export type { ICreateFilesystemToolsOptions } from './tool.filesystem.js';
|
|
14
14
|
export { createShellTools } from './tool.shell.js';
|
|
15
15
|
export type { ICreateShellToolsOptions } from './tool.shell.js';
|
package/ts_tools/readme.md
CHANGED
|
@@ -15,6 +15,8 @@ for composition examples and the SmartAI/SmartAgent migration map.
|
|
|
15
15
|
|
|
16
16
|
`createFilesystemTools(context, options)` exposes `read_file`, `write_file`, `list_directory` and, unless `includeDelete: false`, `delete_file` over the context's `fs`. `write_file` and `delete_file` ask `context.requestPermission` (`write`, `delete`) before they change anything.
|
|
17
17
|
|
|
18
|
+
`isReadOnlyFilesystemToolCall({ toolName })` is true for `read_file` and `list_directory`, which change nothing and ask for no permission. Pass it as the FlexHarness tool handle's `isReadOnlyToolCall`, or ask it from that classifier, and their calls run concurrently; leave it out for a context whose `fs.readFile` or `fs.listDirectory` changes something or asks for permission.
|
|
19
|
+
|
|
18
20
|
`includeEdit: true` adds `edit_file { path, find, replace, replaceAll? }`. It replaces one exact occurrence of `find`, or every occurrence with `replaceAll`, and refuses a `find` that does not occur or, without `replaceAll`, occurs more than once. The replacement text is literal. It asks for `write` permission before it reads the file, so an edit made while the request waits is kept. It is off by default, so the tools an existing agent sees do not change.
|
|
19
21
|
|
|
20
22
|
```typescript
|
|
@@ -15,6 +15,18 @@ export interface ICreateFilesystemToolsOptions {
|
|
|
15
15
|
maxBytes?: number;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/** The tools of `createFilesystemTools()` that only read. */
|
|
19
|
+
const readOnlyFilesystemToolNames: ReadonlySet<string> = new Set(['read_file', 'list_directory']);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Whether a call of `createFilesystemTools()`' tools only reads: `read_file` and `list_directory`
|
|
23
|
+
* change nothing and ask for no permission. Pass it as the tool handle's `isReadOnlyToolCall`, or ask
|
|
24
|
+
* it from that classifier, when the context's `fs.readFile` and `fs.listDirectory` do neither either.
|
|
25
|
+
*/
|
|
26
|
+
export function isReadOnlyFilesystemToolCall(call: { toolName: string }): boolean {
|
|
27
|
+
return readOnlyFilesystemToolNames.has(call.toolName);
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
export function createFilesystemTools(context: IToolExecutionContext, options: ICreateFilesystemToolsOptions = {}): plugins.ToolSet {
|
|
19
31
|
const truncate = (output: unknown) => plugins.truncateOutput(formatToolOutput(output), {
|
|
20
32
|
maxLines: options.maxLines,
|