@inspectr/mcplab 1.25.0 → 1.26.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 (56) hide show
  1. package/dist/app/assets/index-WORUf0Lp.js +258 -0
  2. package/dist/app/assets/index-jX47Pkmh.css +1 -0
  3. package/dist/app/index.html +2 -2
  4. package/dist/app-server/copilotkit-telemetry.d.ts +6 -0
  5. package/dist/app-server/copilotkit-telemetry.d.ts.map +1 -0
  6. package/dist/app-server/copilotkit-telemetry.js +8 -0
  7. package/dist/app-server/copilotkit-telemetry.js.map +1 -0
  8. package/dist/app-server/dev-mcp.d.ts +2 -5
  9. package/dist/app-server/global-copilot-domain.d.ts +30 -0
  10. package/dist/app-server/global-copilot-domain.d.ts.map +1 -0
  11. package/dist/app-server/global-copilot-domain.js +106 -0
  12. package/dist/app-server/global-copilot-domain.js.map +1 -0
  13. package/dist/app-server/global-copilot-mastra-route.d.ts +2 -0
  14. package/dist/app-server/global-copilot-mastra-route.d.ts.map +1 -0
  15. package/dist/app-server/global-copilot-mastra-route.js +5 -0
  16. package/dist/app-server/global-copilot-mastra-route.js.map +1 -0
  17. package/dist/app-server/global-copilot-mastra-runtime.d.ts +9 -0
  18. package/dist/app-server/global-copilot-mastra-runtime.d.ts.map +1 -0
  19. package/dist/app-server/global-copilot-mastra-runtime.js +61 -0
  20. package/dist/app-server/global-copilot-mastra-runtime.js.map +1 -0
  21. package/dist/app-server/global-copilot-mastra-storage.d.ts +8 -0
  22. package/dist/app-server/global-copilot-mastra-storage.d.ts.map +1 -0
  23. package/dist/app-server/global-copilot-mastra-storage.js +26 -0
  24. package/dist/app-server/global-copilot-mastra-storage.js.map +1 -0
  25. package/dist/app-server/global-copilot-mastra-threads.d.ts +5 -0
  26. package/dist/app-server/global-copilot-mastra-threads.d.ts.map +1 -0
  27. package/dist/app-server/global-copilot-mastra-threads.js +21 -0
  28. package/dist/app-server/global-copilot-mastra-threads.js.map +1 -0
  29. package/dist/app-server/global-copilot-mastra-tools.d.ts +50 -0
  30. package/dist/app-server/global-copilot-mastra-tools.d.ts.map +1 -0
  31. package/dist/app-server/global-copilot-mastra-tools.js +175 -0
  32. package/dist/app-server/global-copilot-mastra-tools.js.map +1 -0
  33. package/dist/app-server/global-copilot-mastra.d.ts +44 -0
  34. package/dist/app-server/global-copilot-mastra.d.ts.map +1 -0
  35. package/dist/app-server/global-copilot-mastra.js +198 -0
  36. package/dist/app-server/global-copilot-mastra.js.map +1 -0
  37. package/dist/app-server/global-copilot-memory.d.ts +70 -0
  38. package/dist/app-server/global-copilot-memory.d.ts.map +1 -0
  39. package/dist/app-server/global-copilot-memory.js +119 -0
  40. package/dist/app-server/global-copilot-memory.js.map +1 -0
  41. package/dist/app-server/global-copilot-threads.d.ts +14 -0
  42. package/dist/app-server/global-copilot-threads.d.ts.map +1 -0
  43. package/dist/app-server/global-copilot-threads.js +74 -0
  44. package/dist/app-server/global-copilot-threads.js.map +1 -0
  45. package/dist/app-server/oauth-debugger-domain.d.ts +183 -203
  46. package/dist/app-server/oauth-debugger-domain.d.ts.map +1 -1
  47. package/dist/app-server/oauth-debugger-domain.js +38 -21
  48. package/dist/app-server/oauth-debugger-domain.js.map +1 -1
  49. package/dist/app-server/result-assistant-domain.d.ts +65 -81
  50. package/dist/app-server/scenario-assistant-domain.d.ts +127 -153
  51. package/dist/app-server/settings-store.d.ts +4 -4
  52. package/dist/app-server/store-utils.d.ts +1 -1
  53. package/dist/app-server/types.d.ts +25 -25
  54. package/package.json +1 -1
  55. package/dist/app/assets/index-DgUUu84k.js +0 -258
  56. package/dist/app/assets/index-ICO1prXk.css +0 -1
@@ -0,0 +1,50 @@
1
+ import { McpClientManager, type ServerConfig, type ToolDef } from '@inspectr/mcplab-core';
2
+ import type { AppSettings } from './types.js';
3
+ export type GlobalCopilotReadBudget = {
4
+ used: number;
5
+ batchSize: number;
6
+ };
7
+ type GlobalCopilotApprovalMode = 'automatic' | 'confirmation';
8
+ export type GlobalCopilotMcpManager = Pick<McpClientManager, 'connectAll' | 'listTools' | 'callTool' | 'disconnectAll'>;
9
+ export declare class GlobalCopilotMcpConnectionPool {
10
+ private readonly manager;
11
+ private readonly connected;
12
+ constructor(manager?: GlobalCopilotMcpManager);
13
+ private configKey;
14
+ ensureConnected(serverName: string, server: ServerConfig): Promise<void>;
15
+ listTools(serverName: string, server: ServerConfig): Promise<ToolDef[]>;
16
+ callTool(serverName: string, server: ServerConfig, toolName: string, arguments_: Record<string, unknown>): Promise<unknown>;
17
+ close(): Promise<void>;
18
+ }
19
+ export declare function createGlobalCopilotMcpTool(params: {
20
+ definition: ToolDef;
21
+ serverName: string;
22
+ toolName: string;
23
+ approval: GlobalCopilotApprovalMode;
24
+ budget: GlobalCopilotReadBudget;
25
+ execute: (arguments_: Record<string, unknown>) => Promise<unknown>;
26
+ }): import("@mastra/core/tools").Tool<any, unknown, {
27
+ kind: "continue_reading" | "mcp_tool_approval";
28
+ serverName: string;
29
+ toolName: string;
30
+ arguments: Record<string, unknown>;
31
+ batchSize?: number | undefined;
32
+ }, {
33
+ approved: boolean;
34
+ }, import("@mastra/core/tools").ToolExecutionContext<{
35
+ kind: "continue_reading" | "mcp_tool_approval";
36
+ serverName: string;
37
+ toolName: string;
38
+ arguments: Record<string, unknown>;
39
+ batchSize?: number | undefined;
40
+ }, {
41
+ approved: boolean;
42
+ }, unknown>, string, unknown>;
43
+ export declare function buildGlobalCopilotMastraTools(params: {
44
+ settings: AppSettings;
45
+ context: any;
46
+ budget?: GlobalCopilotReadBudget;
47
+ pool?: GlobalCopilotMcpConnectionPool;
48
+ }): Promise<Record<string, ReturnType<typeof createGlobalCopilotMcpTool>>>;
49
+ export {};
50
+ //# sourceMappingURL=global-copilot-mastra-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-copilot-mastra-tools.d.ts","sourceRoot":"","sources":["../../src/app-server/global-copilot-mastra-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,uBAAuB,CAAC;AAa/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,yBAAyB,GAAG,WAAW,GAAG,cAAc,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,gBAAgB,EAChB,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAC1D,CAAC;AAEF,qBAAa,8BAA8B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE3C,OAAO,GAAE,uBAAgD;IAIrE,OAAO,CAAC,SAAS;IAIX,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKvE,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,OAAO,CAAC;IAKb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B;AAgBD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,MAAM,EAAE,uBAAuB,CAAC;IAChC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpE;;;;;;;;;;;;;;;;8BAkCA;AAuDD,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,IAAI,CAAC,EAAE,8BAA8B,CAAC;CACvC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAuDzE"}
@@ -0,0 +1,175 @@
1
+ import { McpClientManager } from '@inspectr/mcplab-core';
2
+ import { createTool } from '@mastra/core/tools';
3
+ import { jsonSchema } from '@mastra/schema-compat';
4
+ import { z } from 'zod';
5
+ import { makeAssistantToolPublicName, truncateJson } from './assistant-common.js';
6
+ import { globalCopilotExternalServers, globalCopilotMcplabToolPolicy, globalCopilotMcpToolErrorMessage, globalCopilotMcpToolPayload, localMcplabMcpUrl } from './global-copilot-domain.js';
7
+ import { readLibraries } from './libraries-store.js';
8
+ export class GlobalCopilotMcpConnectionPool {
9
+ manager;
10
+ connected = new Map();
11
+ constructor(manager = new McpClientManager()) {
12
+ this.manager = manager;
13
+ }
14
+ configKey(server) {
15
+ return JSON.stringify(server);
16
+ }
17
+ async ensureConnected(serverName, server) {
18
+ const key = this.configKey(server);
19
+ if (this.connected.get(serverName) === key)
20
+ return;
21
+ await this.manager.connectAll({ [serverName]: server });
22
+ this.connected.set(serverName, key);
23
+ }
24
+ async listTools(serverName, server) {
25
+ await this.ensureConnected(serverName, server);
26
+ return this.manager.listTools(serverName);
27
+ }
28
+ async callTool(serverName, server, toolName, arguments_) {
29
+ await this.ensureConnected(serverName, server);
30
+ return this.manager.callTool(serverName, toolName, arguments_);
31
+ }
32
+ async close() {
33
+ this.connected.clear();
34
+ await this.manager.disconnectAll().catch(() => undefined);
35
+ }
36
+ }
37
+ const approvalResumeSchema = z
38
+ .object({ approved: z.boolean() })
39
+ .strict();
40
+ const approvalSuspendSchema = z
41
+ .object({
42
+ kind: z.enum(['continue_reading', 'mcp_tool_approval']),
43
+ serverName: z.string(),
44
+ toolName: z.string(),
45
+ arguments: z.record(z.unknown()),
46
+ batchSize: z.number().int().positive().optional()
47
+ })
48
+ .strict();
49
+ export function createGlobalCopilotMcpTool(params) {
50
+ return createTool({
51
+ id: params.definition.name,
52
+ description: params.definition.description ?? '',
53
+ inputSchema: jsonSchema(params.definition.inputSchema),
54
+ suspendSchema: approvalSuspendSchema,
55
+ resumeSchema: approvalResumeSchema,
56
+ execute: async (arguments_, context) => {
57
+ const resumeData = context?.agent?.resumeData;
58
+ if (resumeData && !resumeData.approved) {
59
+ return { approved: false, reason: 'Denied by user.' };
60
+ }
61
+ const readBudgetExhausted = params.approval === 'automatic' && params.budget.used >= params.budget.batchSize;
62
+ const needsApproval = params.approval === 'confirmation' || readBudgetExhausted;
63
+ if (needsApproval && !resumeData) {
64
+ await context?.agent?.suspend({
65
+ kind: readBudgetExhausted ? 'continue_reading' : 'mcp_tool_approval',
66
+ serverName: params.serverName,
67
+ toolName: params.toolName,
68
+ arguments: arguments_ ?? {},
69
+ ...(readBudgetExhausted ? { batchSize: params.budget.batchSize } : {})
70
+ });
71
+ return { suspended: true };
72
+ }
73
+ if (params.approval === 'automatic') {
74
+ if (readBudgetExhausted)
75
+ params.budget.used = 0;
76
+ params.budget.used += 1;
77
+ }
78
+ return params.execute(arguments_ ?? {});
79
+ }
80
+ });
81
+ }
82
+ async function discoverServerTools(serverName, server, pool) {
83
+ if (pool)
84
+ return pool.listTools(serverName, server);
85
+ const mcp = new McpClientManager();
86
+ try {
87
+ await mcp.connectAll({ [serverName]: server });
88
+ return await mcp.listTools(serverName);
89
+ }
90
+ finally {
91
+ await mcp.disconnectAll().catch(() => undefined);
92
+ }
93
+ }
94
+ async function executeRevalidatedMcpTool(params) {
95
+ if (params.pool) {
96
+ const known = (await params.pool.listTools(params.serverName, params.server)).some((tool) => tool.name === params.toolName);
97
+ if (!known)
98
+ throw new Error(`MCP tool '${params.toolName}' is no longer available.`);
99
+ const result = await params.pool.callTool(params.serverName, params.server, params.toolName, params.arguments_);
100
+ const toolError = globalCopilotMcpToolErrorMessage(result);
101
+ if (toolError)
102
+ throw new Error(toolError);
103
+ return truncateJson(globalCopilotMcpToolPayload(result), 4000);
104
+ }
105
+ const mcp = new McpClientManager();
106
+ try {
107
+ await mcp.connectAll({ [params.serverName]: params.server });
108
+ const known = (await mcp.listTools(params.serverName)).some((tool) => tool.name === params.toolName);
109
+ if (!known)
110
+ throw new Error(`MCP tool '${params.toolName}' is no longer available.`);
111
+ const result = await mcp.callTool(params.serverName, params.toolName, params.arguments_);
112
+ const toolError = globalCopilotMcpToolErrorMessage(result);
113
+ if (toolError)
114
+ throw new Error(toolError);
115
+ return truncateJson(globalCopilotMcpToolPayload(result), 4000);
116
+ }
117
+ finally {
118
+ await mcp.disconnectAll().catch(() => undefined);
119
+ }
120
+ }
121
+ export async function buildGlobalCopilotMastraTools(params) {
122
+ const libraries = readLibraries(params.settings.librariesDir);
123
+ const activeTestCaseId = typeof params.context?.activeTestCaseId === 'string'
124
+ ? params.context.activeTestCaseId
125
+ : undefined;
126
+ const scenarioEditor = params.context?.scenarioEditor;
127
+ const servers = {
128
+ mcplab: { transport: 'http', url: localMcplabMcpUrl() },
129
+ ...globalCopilotExternalServers(libraries, activeTestCaseId, scenarioEditor)
130
+ };
131
+ const usedNames = new Set();
132
+ const budget = params.budget ?? { used: 0, batchSize: 5 };
133
+ const tools = {};
134
+ for (const [serverName, server] of Object.entries(servers)) {
135
+ let definitions;
136
+ try {
137
+ definitions = await discoverServerTools(serverName, server, params.pool);
138
+ }
139
+ catch {
140
+ continue;
141
+ }
142
+ for (const definition of definitions) {
143
+ const policy = serverName === 'mcplab'
144
+ ? globalCopilotMcplabToolPolicy(definition.name)
145
+ : { expose: true, automatic: false };
146
+ if (!policy.expose)
147
+ continue;
148
+ const publicName = makeAssistantToolPublicName(serverName, definition.name, usedNames);
149
+ tools[publicName] = createGlobalCopilotMcpTool({
150
+ definition: {
151
+ ...definition,
152
+ name: publicName,
153
+ ...(serverName === 'mcplab'
154
+ ? {}
155
+ : {
156
+ description: `${definition.description ?? ''}\n[External MCP server: requires confirmation before every call.]`.trim()
157
+ })
158
+ },
159
+ serverName,
160
+ toolName: definition.name,
161
+ approval: policy.automatic ? 'automatic' : 'confirmation',
162
+ budget,
163
+ execute: (arguments_) => executeRevalidatedMcpTool({
164
+ serverName,
165
+ server,
166
+ toolName: definition.name,
167
+ arguments_: arguments_,
168
+ pool: params.pool
169
+ })
170
+ });
171
+ }
172
+ }
173
+ return tools;
174
+ }
175
+ //# sourceMappingURL=global-copilot-mastra-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-copilot-mastra-tools.js","sourceRoot":"","sources":["../../src/app-server/global-copilot-mastra-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AgentConfig } from '@inspectr/mcplab-core';
3
+ import { MastraAgent } from '@ag-ui/mastra';
4
+ import type { MastraMemory } from '@mastra/core/memory';
5
+ import type { MastraCompositeStore } from '@mastra/core/storage';
6
+ import type { AppSettings } from './types.js';
7
+ export declare const GLOBAL_COPILOT_AGENT_ID = "mcplab-global-copilot";
8
+ export type GlobalCopilotModelDescriptor = {
9
+ provider: AgentConfig['provider'];
10
+ model: string;
11
+ temperature?: number;
12
+ maxTokens?: number;
13
+ system?: string;
14
+ };
15
+ export declare function globalCopilotModelDescriptor(agent: AgentConfig): GlobalCopilotModelDescriptor;
16
+ type ProviderEnvironment = Record<string, string | undefined>;
17
+ export declare function validateGlobalCopilotProviderEnvironment(agent: AgentConfig, environment?: ProviderEnvironment): void;
18
+ export declare function createGlobalCopilotLanguageModel(agent: AgentConfig, environment?: ProviderEnvironment): any;
19
+ export declare function createGlobalCopilotMastraAgent(params: {
20
+ agentConfig: AgentConfig;
21
+ instructions: string | ((args: any) => string);
22
+ resourceId: string;
23
+ environment?: ProviderEnvironment;
24
+ memory?: MastraMemory;
25
+ storage?: MastraCompositeStore;
26
+ tools?: any;
27
+ }): MastraAgent;
28
+ export declare function createGlobalCopilotRuntimeHandler(agent: MastraAgent): (reqOrRequest: IncomingMessage | Request, res?: ServerResponse) => Promise<void> | Promise<Response> | Response;
29
+ export declare function disableGlobalCopilotKitTelemetry(): void;
30
+ export declare function globalCopilotWorkspaceResourceId(workspaceRoot: string): string;
31
+ export declare function globalCopilotContextFromAgUi(context: unknown): unknown;
32
+ export declare function persistGlobalCopilotPendingInterrupts(params: {
33
+ memory: MastraMemory;
34
+ resourceId: string;
35
+ agent: MastraAgent;
36
+ }): Promise<void>;
37
+ export declare function handleGlobalCopilotKit(params: {
38
+ req: IncomingMessage;
39
+ res: ServerResponse;
40
+ settings: AppSettings;
41
+ asJson: (res: ServerResponse, status: number, body: unknown) => void;
42
+ }): Promise<void>;
43
+ export {};
44
+ //# sourceMappingURL=global-copilot-mastra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-copilot-mastra.d.ts","sourceRoot":"","sources":["../../src/app-server/global-copilot-mastra.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,eAAO,MAAM,uBAAuB,0BAA0B,CAAC;AAE/D,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,WAAW,GACjB,4BAA4B,CAQ9B;AAED,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAQ9D,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,WAAW,EAClB,WAAW,GAAE,mBAAiC,GAC7C,IAAI,CAYN;AAOD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,WAAW,EAClB,WAAW,GAAE,mBAAiC,GAC7C,GAAG,CAmBL;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,GAAG,WAAW,CAgCd;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,WAAW,mHAQnE;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CActE;AAED,wBAAsB,qCAAqC,CAAC,MAAM,EAAE;IAClE,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAahB;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,GAAG,EAAE,eAAe,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACtE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDhB"}
@@ -0,0 +1,198 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { MastraAgent } from '@ag-ui/mastra';
3
+ import { createAnthropic } from '@ai-sdk/anthropic';
4
+ import { createAzure } from '@ai-sdk/azure';
5
+ import { createOpenAI } from '@ai-sdk/openai';
6
+ import { CopilotRuntime, ExperimentalEmptyAdapter, copilotRuntimeNodeHttpEndpoint } from '@copilotkit/runtime';
7
+ import { Agent } from '@mastra/core/agent';
8
+ import { Mastra } from '@mastra/core/mastra';
9
+ import { readLibraries } from './libraries-store.js';
10
+ import { globalCopilotSystemPrompt, selectGlobalCopilotAgentName } from './global-copilot-domain.js';
11
+ import { buildGlobalCopilotMastraTools, GlobalCopilotMcpConnectionPool } from './global-copilot-mastra-tools.js';
12
+ import { getGlobalCopilotMemoryRuntime } from './global-copilot-memory.js';
13
+ export const GLOBAL_COPILOT_AGENT_ID = 'mcplab-global-copilot';
14
+ export function globalCopilotModelDescriptor(agent) {
15
+ return {
16
+ provider: agent.provider,
17
+ model: agent.model,
18
+ ...(agent.temperature === undefined ? {} : { temperature: agent.temperature }),
19
+ ...(agent.max_tokens === undefined ? {} : { maxTokens: agent.max_tokens }),
20
+ ...(agent.system === undefined ? {} : { system: agent.system })
21
+ };
22
+ }
23
+ function requireEnvironment(environment, name) {
24
+ const value = environment[name]?.trim();
25
+ if (!value)
26
+ throw new Error(`Missing ${name}`);
27
+ return value;
28
+ }
29
+ export function validateGlobalCopilotProviderEnvironment(agent, environment = process.env) {
30
+ if (agent.provider === 'openai') {
31
+ requireEnvironment(environment, 'OPENAI_API_KEY');
32
+ return;
33
+ }
34
+ if (agent.provider === 'anthropic') {
35
+ requireEnvironment(environment, 'ANTHROPIC_API_KEY');
36
+ return;
37
+ }
38
+ requireEnvironment(environment, 'AZURE_OPENAI_API_KEY');
39
+ requireEnvironment(environment, 'AZURE_OPENAI_ENDPOINT');
40
+ requireEnvironment(environment, 'AZURE_OPENAI_DEPLOYMENT');
41
+ }
42
+ function azureOpenAIBaseUrl(endpoint) {
43
+ const normalized = endpoint.replace(/\/+$/, '');
44
+ return normalized.endsWith('/openai') ? normalized : `${normalized}/openai`;
45
+ }
46
+ export function createGlobalCopilotLanguageModel(agent, environment = process.env) {
47
+ validateGlobalCopilotProviderEnvironment(agent, environment);
48
+ if (agent.provider === 'openai') {
49
+ return createOpenAI({ apiKey: requireEnvironment(environment, 'OPENAI_API_KEY') }).chat(agent.model);
50
+ }
51
+ if (agent.provider === 'anthropic') {
52
+ return createAnthropic({ apiKey: requireEnvironment(environment, 'ANTHROPIC_API_KEY') })(agent.model);
53
+ }
54
+ const deployment = requireEnvironment(environment, 'AZURE_OPENAI_DEPLOYMENT');
55
+ return createAzure({
56
+ apiKey: requireEnvironment(environment, 'AZURE_OPENAI_API_KEY'),
57
+ baseURL: azureOpenAIBaseUrl(requireEnvironment(environment, 'AZURE_OPENAI_ENDPOINT')),
58
+ apiVersion: environment.AZURE_OPENAI_API_VERSION?.trim() || undefined,
59
+ useDeploymentBasedUrls: true
60
+ }).chat(deployment);
61
+ }
62
+ export function createGlobalCopilotMastraAgent(params) {
63
+ const descriptor = globalCopilotModelDescriptor(params.agentConfig);
64
+ const agent = new Agent({
65
+ id: GLOBAL_COPILOT_AGENT_ID,
66
+ name: 'MCPLab Global Copilot',
67
+ instructions: params.instructions,
68
+ model: createGlobalCopilotLanguageModel(params.agentConfig, params.environment),
69
+ ...(params.memory ? { memory: params.memory } : {}),
70
+ ...(params.tools ? { tools: params.tools } : {}),
71
+ defaultOptions: {
72
+ maxSteps: params.agentConfig.max_turns ?? 30,
73
+ modelSettings: {
74
+ ...(descriptor.temperature === undefined
75
+ ? {}
76
+ : { temperature: descriptor.temperature }),
77
+ ...(descriptor.maxTokens === undefined
78
+ ? {}
79
+ : { maxOutputTokens: descriptor.maxTokens })
80
+ }
81
+ }
82
+ });
83
+ const registeredAgent = params.storage
84
+ ? new Mastra({
85
+ agents: { [GLOBAL_COPILOT_AGENT_ID]: agent },
86
+ storage: params.storage
87
+ }).getAgent(GLOBAL_COPILOT_AGENT_ID)
88
+ : agent;
89
+ return new MastraAgent({
90
+ agent: registeredAgent,
91
+ resourceId: params.resourceId,
92
+ emitInterruptOutcome: true
93
+ });
94
+ }
95
+ export function createGlobalCopilotRuntimeHandler(agent) {
96
+ disableGlobalCopilotKitTelemetry();
97
+ const runtime = new CopilotRuntime({ agents: { [GLOBAL_COPILOT_AGENT_ID]: agent } });
98
+ return copilotRuntimeNodeHttpEndpoint({
99
+ endpoint: '/api/copilotkit',
100
+ runtime,
101
+ serviceAdapter: new ExperimentalEmptyAdapter()
102
+ });
103
+ }
104
+ export function disableGlobalCopilotKitTelemetry() {
105
+ process.env.COPILOTKIT_TELEMETRY_DISABLED = 'true';
106
+ }
107
+ export function globalCopilotWorkspaceResourceId(workspaceRoot) {
108
+ return createHash('sha256').update(workspaceRoot).digest('hex');
109
+ }
110
+ export function globalCopilotContextFromAgUi(context) {
111
+ if (!Array.isArray(context))
112
+ return context;
113
+ const entry = context.find((item) => item &&
114
+ typeof item === 'object' &&
115
+ item.description === 'Current MCPLab application context');
116
+ if (typeof entry?.value !== 'string')
117
+ return entry?.value ?? {};
118
+ try {
119
+ return JSON.parse(entry.value);
120
+ }
121
+ catch {
122
+ return {};
123
+ }
124
+ }
125
+ export async function persistGlobalCopilotPendingInterrupts(params) {
126
+ const threadId = params.agent.threadId;
127
+ if (!threadId)
128
+ return;
129
+ const thread = await params.memory.getThreadById({ threadId });
130
+ if (!thread || thread.resourceId !== params.resourceId)
131
+ return;
132
+ await params.memory.updateThread({
133
+ id: thread.id,
134
+ title: thread.title ?? 'New conversation',
135
+ metadata: {
136
+ ...(thread.metadata ?? {}),
137
+ globalCopilotPendingInterrupts: params.agent.pendingInterrupts
138
+ }
139
+ });
140
+ }
141
+ export async function handleGlobalCopilotKit(params) {
142
+ const libraries = readLibraries(params.settings.librariesDir);
143
+ const agentName = selectGlobalCopilotAgentName({
144
+ globalCopilotAgentName: params.settings.globalCopilotAgentName,
145
+ scenarioAssistantAgentName: params.settings.scenarioAssistantAgentName,
146
+ agentNames: Object.keys(libraries.agents)
147
+ });
148
+ const agentConfig = agentName ? libraries.agents[agentName] : undefined;
149
+ if (!agentConfig) {
150
+ params.asJson(params.res, 400, {
151
+ error: 'No Global Copilot agent is configured. Add an agent in Libraries > Agents or configure it in Settings.'
152
+ });
153
+ return;
154
+ }
155
+ const connectionPool = new GlobalCopilotMcpConnectionPool();
156
+ try {
157
+ const memoryRuntime = await getGlobalCopilotMemoryRuntime(params.settings.workspaceRoot);
158
+ const readBudget = { used: 0, batchSize: 5 };
159
+ const agent = createGlobalCopilotMastraAgent({
160
+ agentConfig,
161
+ resourceId: globalCopilotWorkspaceResourceId(params.settings.workspaceRoot),
162
+ memory: memoryRuntime.memory,
163
+ storage: memoryRuntime.storage,
164
+ tools: async ({ requestContext }) => {
165
+ const context = globalCopilotContextFromAgUi(requestContext?.get?.('ag-ui')?.context);
166
+ return buildGlobalCopilotMastraTools({
167
+ settings: params.settings,
168
+ context,
169
+ budget: readBudget,
170
+ pool: connectionPool
171
+ });
172
+ },
173
+ instructions: ({ requestContext }) => {
174
+ const context = globalCopilotContextFromAgUi(requestContext?.get?.('ag-ui')?.context);
175
+ return [agentConfig.system, globalCopilotSystemPrompt(context)].filter(Boolean).join('\n\n');
176
+ }
177
+ });
178
+ await createGlobalCopilotRuntimeHandler(agent)(params.req, params.res);
179
+ await persistGlobalCopilotPendingInterrupts({
180
+ memory: memoryRuntime.memory,
181
+ resourceId: globalCopilotWorkspaceResourceId(params.settings.workspaceRoot),
182
+ agent
183
+ });
184
+ }
185
+ catch (error) {
186
+ if (params.res.headersSent) {
187
+ params.res.end();
188
+ return;
189
+ }
190
+ params.asJson(params.res, 500, {
191
+ error: error instanceof Error ? error.message : String(error)
192
+ });
193
+ }
194
+ finally {
195
+ await connectionPool.close();
196
+ }
197
+ }
198
+ //# sourceMappingURL=global-copilot-mastra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-copilot-mastra.js","sourceRoot":"","sources":["../../src/app-server/global-copilot-mastra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { StorageThreadType } from '@mastra/core/memory';
2
+ import { LibSQLStore } from '@mastra/libsql';
3
+ import { Memory } from '@mastra/memory';
4
+ import { z } from 'zod';
5
+ export declare const globalCopilotWorkingMemorySchema: z.ZodObject<{
6
+ goal: z.ZodString;
7
+ constraints: z.ZodArray<z.ZodString, "many">;
8
+ decisions: z.ZodArray<z.ZodString, "many">;
9
+ followUps: z.ZodArray<z.ZodString, "many">;
10
+ }, "strict", z.ZodTypeAny, {
11
+ goal: string;
12
+ constraints: string[];
13
+ decisions: string[];
14
+ followUps: string[];
15
+ }, {
16
+ goal: string;
17
+ constraints: string[];
18
+ decisions: string[];
19
+ followUps: string[];
20
+ }>;
21
+ export declare const GLOBAL_COPILOT_MEMORY_OPTIONS: {
22
+ lastMessages: number;
23
+ semanticRecall: false;
24
+ workingMemory: {
25
+ enabled: boolean;
26
+ scope: "thread";
27
+ schema: z.ZodObject<{
28
+ goal: z.ZodString;
29
+ constraints: z.ZodArray<z.ZodString, "many">;
30
+ decisions: z.ZodArray<z.ZodString, "many">;
31
+ followUps: z.ZodArray<z.ZodString, "many">;
32
+ }, "strict", z.ZodTypeAny, {
33
+ goal: string;
34
+ constraints: string[];
35
+ decisions: string[];
36
+ followUps: string[];
37
+ }, {
38
+ goal: string;
39
+ constraints: string[];
40
+ decisions: string[];
41
+ followUps: string[];
42
+ }>;
43
+ };
44
+ };
45
+ export declare function globalCopilotMemoryDatabasePath(workspaceRoot: string): string;
46
+ export type GlobalCopilotMemoryRuntime = {
47
+ storage: LibSQLStore;
48
+ memory: Memory;
49
+ close: () => Promise<void>;
50
+ };
51
+ export declare function createGlobalCopilotMemoryRuntime(params: {
52
+ databasePath: string;
53
+ }): Promise<GlobalCopilotMemoryRuntime>;
54
+ export declare class GlobalCopilotThreadService {
55
+ private readonly memory;
56
+ private readonly resourceId;
57
+ private readonly maxThreads;
58
+ constructor(memory: Memory, resourceId: string, maxThreads?: number);
59
+ list(): Promise<StorageThreadType[]>;
60
+ get(id: string): Promise<StorageThreadType>;
61
+ create(params: {
62
+ id: string;
63
+ title?: string;
64
+ }): Promise<StorageThreadType>;
65
+ rename(id: string, title: string): Promise<StorageThreadType>;
66
+ delete(id: string): Promise<void>;
67
+ private prune;
68
+ }
69
+ export declare function getGlobalCopilotMemoryRuntime(workspaceRoot: string): Promise<GlobalCopilotMemoryRuntime>;
70
+ //# sourceMappingURL=global-copilot-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-copilot-memory.d.ts","sourceRoot":"","sources":["../../src/app-server/global-copilot-memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;EAOlC,CAAC;AAEZ,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;CAQzC,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,wBAAsB,gCAAgC,CAAC,MAAM,EAAE;IAC7D,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAYtC;AAED,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,SAAM;IAG7B,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IASpC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAW3C,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgB1E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAW7D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKzB,KAAK;CAWpB;AAID,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,0BAA0B,CAAC,CASrC"}