wave-agent-sdk 0.16.8 → 0.16.10
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/agent.d.ts.map +1 -1
- package/dist/agent.js +3 -0
- package/dist/constants/tools.d.ts +0 -1
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +0 -1
- package/dist/managers/aiManager.d.ts +0 -8
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +0 -45
- package/dist/managers/mcpManager.d.ts +5 -0
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +107 -12
- package/dist/managers/toolManager.d.ts +0 -6
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +1 -28
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +1 -12
- package/dist/services/authService.d.ts +10 -0
- package/dist/services/authService.d.ts.map +1 -1
- package/dist/services/authService.js +45 -0
- package/dist/services/configurationService.d.ts +1 -0
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +48 -15
- package/dist/services/initializationService.d.ts.map +1 -1
- package/dist/services/initializationService.js +11 -0
- package/dist/services/pluginLoader.d.ts.map +1 -1
- package/dist/services/pluginLoader.js +2 -2
- package/dist/services/remoteSettingsService.d.ts +21 -0
- package/dist/services/remoteSettingsService.d.ts.map +1 -0
- package/dist/services/remoteSettingsService.js +279 -0
- package/dist/telemetry/instrumentation.d.ts +5 -2
- package/dist/telemetry/instrumentation.d.ts.map +1 -1
- package/dist/telemetry/instrumentation.js +8 -4
- package/dist/tools/buildTool.d.ts +0 -2
- package/dist/tools/buildTool.d.ts.map +1 -1
- package/dist/tools/buildTool.js +0 -2
- package/dist/tools/cronCreateTool.d.ts.map +1 -1
- package/dist/tools/cronCreateTool.js +0 -1
- package/dist/tools/cronDeleteTool.d.ts.map +1 -1
- package/dist/tools/cronDeleteTool.js +0 -1
- package/dist/tools/cronListTool.d.ts.map +1 -1
- package/dist/tools/cronListTool.js +0 -1
- package/dist/tools/enterWorktreeTool.d.ts.map +1 -1
- package/dist/tools/enterWorktreeTool.js +0 -1
- package/dist/tools/exitWorktreeTool.d.ts.map +1 -1
- package/dist/tools/exitWorktreeTool.js +0 -1
- package/dist/tools/taskManagementTools.d.ts.map +1 -1
- package/dist/tools/taskManagementTools.js +0 -4
- package/dist/tools/types.d.ts +0 -15
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/webFetchTool.d.ts.map +1 -1
- package/dist/tools/webFetchTool.js +0 -1
- package/dist/types/configuration.d.ts +20 -0
- package/dist/types/configuration.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +3 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +10 -0
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +0 -1
- package/dist/utils/openaiClient.d.ts.map +1 -1
- package/dist/utils/openaiClient.js +4 -2
- package/package.json +1 -1
- package/src/agent.ts +3 -0
- package/src/constants/tools.ts +0 -1
- package/src/managers/aiManager.ts +0 -48
- package/src/managers/mcpManager.ts +122 -16
- package/src/managers/toolManager.ts +1 -32
- package/src/prompts/index.ts +0 -13
- package/src/services/authService.ts +56 -0
- package/src/services/configurationService.ts +56 -19
- package/src/services/initializationService.ts +13 -0
- package/src/services/pluginLoader.ts +2 -2
- package/src/services/remoteSettingsService.ts +314 -0
- package/src/telemetry/instrumentation.ts +12 -4
- package/src/tools/buildTool.ts +0 -4
- package/src/tools/cronCreateTool.ts +0 -1
- package/src/tools/cronDeleteTool.ts +0 -1
- package/src/tools/cronListTool.ts +0 -1
- package/src/tools/enterWorktreeTool.ts +0 -1
- package/src/tools/exitWorktreeTool.ts +0 -1
- package/src/tools/taskManagementTools.ts +0 -4
- package/src/tools/types.ts +0 -15
- package/src/tools/webFetchTool.ts +0 -1
- package/src/types/configuration.ts +23 -0
- package/src/types/mcp.ts +8 -1
- package/src/utils/containerSetup.ts +10 -0
- package/src/utils/mcpUtils.ts +0 -1
- package/src/utils/openaiClient.ts +5 -2
- package/dist/tools/toolSearchTool.d.ts +0 -15
- package/dist/tools/toolSearchTool.d.ts.map +0 -1
- package/dist/tools/toolSearchTool.js +0 -200
- package/dist/utils/isDeferredTool.d.ts +0 -19
- package/dist/utils/isDeferredTool.d.ts.map +0 -1
- package/dist/utils/isDeferredTool.js +0 -31
- package/src/tools/toolSearchTool.ts +0 -245
- package/src/utils/isDeferredTool.ts +0 -36
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAO9E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAElB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EACf,aAAa,EACb,WAAW,EACX,KAAK,EACL,cAAc,EACd,cAAc,EACf,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -9,6 +9,7 @@ import { ConfigurationService } from "./services/configurationService.js";
|
|
|
9
9
|
import { setupAgentContainer } from "./utils/containerSetup.js";
|
|
10
10
|
import { initializeTelemetry, shutdownTelemetry, } from "./telemetry/instrumentation.js";
|
|
11
11
|
import { logOTelEvent } from "./telemetry/events.js";
|
|
12
|
+
import { remoteSettingsService } from "./services/remoteSettingsService.js";
|
|
12
13
|
export class Agent {
|
|
13
14
|
// Dynamic configuration getter methods
|
|
14
15
|
getGatewayConfig() {
|
|
@@ -524,6 +525,8 @@ export class Agent {
|
|
|
524
525
|
catch (error) {
|
|
525
526
|
this.logger?.error("Error shutting down live configuration reload:", error);
|
|
526
527
|
}
|
|
528
|
+
// Cleanup remote settings polling
|
|
529
|
+
remoteSettingsService.shutdown();
|
|
527
530
|
// Cleanup memory store
|
|
528
531
|
}
|
|
529
532
|
/**
|
|
@@ -21,5 +21,4 @@ export declare const CRON_LIST_TOOL_NAME = "CronList";
|
|
|
21
21
|
export declare const WEB_FETCH_TOOL_NAME = "WebFetch";
|
|
22
22
|
export declare const ENTER_WORKTREE_TOOL_NAME = "EnterWorktree";
|
|
23
23
|
export declare const EXIT_WORKTREE_TOOL_NAME = "ExitWorktree";
|
|
24
|
-
export declare const TOOL_SEARCH_TOOL_NAME = "ToolSearch";
|
|
25
24
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/constants/tools.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAC7D,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AACxD,eAAO,MAAM,uBAAuB,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/constants/tools.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAC7D,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AACxD,eAAO,MAAM,uBAAuB,iBAAiB,CAAC"}
|
package/dist/constants/tools.js
CHANGED
|
@@ -28,8 +28,6 @@ export declare class AIManager {
|
|
|
28
28
|
private modelOverride?;
|
|
29
29
|
private consecutiveCompactionFailures;
|
|
30
30
|
private readonly maxTurns?;
|
|
31
|
-
/** Tracks which deferred tools have been discovered via ToolSearch */
|
|
32
|
-
private discoveredTools;
|
|
33
31
|
constructor(container: Container, options: AIManagerOptions);
|
|
34
32
|
private get toolManager();
|
|
35
33
|
private get messageManager();
|
|
@@ -87,11 +85,5 @@ export declare class AIManager {
|
|
|
87
85
|
* Execute PostToolUse hooks after tool completion
|
|
88
86
|
*/
|
|
89
87
|
private executePostToolUseHooks;
|
|
90
|
-
/**
|
|
91
|
-
* Parse ToolSearch result content to extract discovered tool names.
|
|
92
|
-
* ToolSearch returns content like "ToolName: description\nParameters: {...}"
|
|
93
|
-
* or shortResult like "Discovered tools: ToolA, ToolB".
|
|
94
|
-
*/
|
|
95
|
-
private trackDiscoveredTools;
|
|
96
88
|
}
|
|
97
89
|
//# sourceMappingURL=aiManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,KAAK,EAGN,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAclD,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,KAAK,EAGN,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAclD,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,SAAS;IAclB,OAAO,CAAC,SAAS;IAbZ,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,6BAA6B,CAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;gBAIzB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,gBAAgB;IAU3B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAIxB;IAED,OAAO,KAAK,WAAW,GAItB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,gBAAgB,GAM3B;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAGM,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IA6B7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,oBAAoB,IAAI,OAAO;IAI/B,UAAU,IAAI,MAAM;IAI3B;;;OAGG;IACI,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK3C,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAevB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAUtC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAsBf,6BAA6B;IAiSpC,eAAe,IAAI,OAAO;IAI1B,eAAe,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAOnD,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,YAAY,GAEvB;IAEY,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oEAAoE;QACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,IAAI,CAAC;IAwtBhB;;;;OAIG;YACW,gBAAgB;IAkF9B;;;OAGG;YACW,sBAAsB;IAsEpC;;OAEG;YACW,uBAAuB;CA0DtC"}
|
|
@@ -17,8 +17,6 @@ export class AIManager {
|
|
|
17
17
|
this.abortController = null;
|
|
18
18
|
this.toolAbortController = null;
|
|
19
19
|
this.consecutiveCompactionFailures = 0;
|
|
20
|
-
/** Tracks which deferred tools have been discovered via ToolSearch */
|
|
21
|
-
this.discoveredTools = new Set();
|
|
22
20
|
this.isCompacting = false;
|
|
23
21
|
this.systemPrompt = options.systemPrompt;
|
|
24
22
|
this.subagentType = options.subagentType; // Store subagent type
|
|
@@ -108,7 +106,6 @@ export class AIManager {
|
|
|
108
106
|
availableSkills,
|
|
109
107
|
workdir: this.getWorkdir(),
|
|
110
108
|
isSubagent: !!this.subagentType,
|
|
111
|
-
discoveredTools: this.discoveredTools,
|
|
112
109
|
});
|
|
113
110
|
}
|
|
114
111
|
setIsLoading(isLoading) {
|
|
@@ -780,10 +777,6 @@ export class AIManager {
|
|
|
780
777
|
});
|
|
781
778
|
// Execute PostToolUse hooks after successful tool completion
|
|
782
779
|
await this.executePostToolUseHooks(toolId, toolName, toolArgs, toolResult);
|
|
783
|
-
// Track discovered tools from ToolSearch results
|
|
784
|
-
if (toolName === "ToolSearch" && toolResult.success) {
|
|
785
|
-
this.trackDiscoveredTools(toolResult.content);
|
|
786
|
-
}
|
|
787
780
|
}
|
|
788
781
|
catch (toolError) {
|
|
789
782
|
const errorMessage = toolError instanceof Error
|
|
@@ -1131,42 +1124,4 @@ export class AIManager {
|
|
|
1131
1124
|
logger?.error("PostToolUse hook execution failed:", error);
|
|
1132
1125
|
}
|
|
1133
1126
|
}
|
|
1134
|
-
/**
|
|
1135
|
-
* Parse ToolSearch result content to extract discovered tool names.
|
|
1136
|
-
* ToolSearch returns content like "ToolName: description\nParameters: {...}"
|
|
1137
|
-
* or shortResult like "Discovered tools: ToolA, ToolB".
|
|
1138
|
-
*/
|
|
1139
|
-
trackDiscoveredTools(content) {
|
|
1140
|
-
// Try to extract tool names from shortResult-style content
|
|
1141
|
-
const discoveredMatch = content.match(/Discovered tools?: ([\w-, ]+)/);
|
|
1142
|
-
if (discoveredMatch) {
|
|
1143
|
-
const names = discoveredMatch[1]
|
|
1144
|
-
.split(",")
|
|
1145
|
-
.map((n) => n.trim())
|
|
1146
|
-
.filter(Boolean);
|
|
1147
|
-
for (const name of names) {
|
|
1148
|
-
this.discoveredTools.add(name);
|
|
1149
|
-
}
|
|
1150
|
-
logger?.debug("Discovered tools:", names);
|
|
1151
|
-
return;
|
|
1152
|
-
}
|
|
1153
|
-
// Fallback: extract tool names from "ToolName: description" pattern
|
|
1154
|
-
const lines = content.split("\n");
|
|
1155
|
-
const nonToolKeywords = new Set([
|
|
1156
|
-
"parameters",
|
|
1157
|
-
"description",
|
|
1158
|
-
"result",
|
|
1159
|
-
"error",
|
|
1160
|
-
"content",
|
|
1161
|
-
"type",
|
|
1162
|
-
"properties",
|
|
1163
|
-
"required",
|
|
1164
|
-
]);
|
|
1165
|
-
for (const line of lines) {
|
|
1166
|
-
const toolMatch = line.match(/^([\w-]+):/);
|
|
1167
|
-
if (toolMatch && !nonToolKeywords.has(toolMatch[1].toLowerCase())) {
|
|
1168
|
-
this.discoveredTools.add(toolMatch[1]);
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
}
|
|
1172
1127
|
}
|
|
@@ -68,6 +68,11 @@ export declare class McpManager {
|
|
|
68
68
|
* Delays: 1s, 2s, 4s, 8s, 16s, 30s, 30s, ...
|
|
69
69
|
*/
|
|
70
70
|
private scheduleReconnect;
|
|
71
|
+
/**
|
|
72
|
+
* Poll listTools() to detect when the SDK's auto-reconnect succeeds
|
|
73
|
+
* after a transient SSE disconnect. Restores status to "connected".
|
|
74
|
+
*/
|
|
75
|
+
private pollReconnectRecovery;
|
|
71
76
|
private cancelReconnect;
|
|
72
77
|
disconnectServer(name: string): Promise<boolean>;
|
|
73
78
|
getAllConnectedTools(): McpTool[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAC3D;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAC3D;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,kBAAkB,GACtB,eAAe,CA2CjB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,GAAG,CAAC,EAAE,kBAAkB,GACvB,SAAS,CA4CX;AAED,qBAAa,UAAU;IAcnB,OAAO,CAAC,SAAS;IAbnB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,UAAU,CAA8C;IAEhE,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,iBAAiB,CAAkC;gBAGjD,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,iBAAsB;IAUjC;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgDV,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO/C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgEvC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,SAAS,IAAI,SAAS,GAAG,IAAI;IAI7B,aAAa,IAAI,eAAe,EAAE;IAIlC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IASzE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO;IA6DzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgB7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwNnD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;;OAGG;YACW,qBAAqB;IA4CnC,OAAO,CAAC,eAAe;IASjB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BtD,oBAAoB,IAAI,OAAO,EAAE;IAW3B,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC;YAsDY,uBAAuB;IA8D/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;;OAGG;IACG,kBAAkB,CACtB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAyEhB;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IA6BjC;;OAEG;IACH,iBAAiB,IAAI,0BAA0B,EAAE;IAIjD;;OAEG;IACG,wBAAwB,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IActB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAcjC"}
|
|
@@ -10,7 +10,11 @@ import { logger } from "../utils/globalLogger.js";
|
|
|
10
10
|
* Expand environment variables in a string value.
|
|
11
11
|
* Supports ${VAR} and ${VAR:-default} patterns.
|
|
12
12
|
*/
|
|
13
|
-
const WAVE_TEMPLATE_VARS = [
|
|
13
|
+
const WAVE_TEMPLATE_VARS = [
|
|
14
|
+
"WAVE_SERVER_URL",
|
|
15
|
+
"WAVE_SSO_TOKEN",
|
|
16
|
+
"WAVE_PLUGIN_ROOT",
|
|
17
|
+
];
|
|
14
18
|
export function expandEnvVars(value) {
|
|
15
19
|
return value.replace(/\$\{([^}]+)\}/g, (_match, expr) => {
|
|
16
20
|
const [varName, ...rest] = expr.split(":-");
|
|
@@ -176,7 +180,13 @@ export class McpManager {
|
|
|
176
180
|
}
|
|
177
181
|
try {
|
|
178
182
|
const configContent = await fs.readFile(this.configPath, "utf-8");
|
|
179
|
-
const
|
|
183
|
+
const rawConfig = JSON.parse(configContent);
|
|
184
|
+
const workspaceConfig = resolveMcpConfig(rawConfig, this.resolverCtx);
|
|
185
|
+
// Extract original (pre-resolution) URLs for safe display
|
|
186
|
+
const originalUrls = {};
|
|
187
|
+
for (const [name, serverConfig] of Object.entries(rawConfig.mcpServers)) {
|
|
188
|
+
originalUrls[name] = serverConfig.url;
|
|
189
|
+
}
|
|
180
190
|
// Merge workspace config with any existing config (e.g., from plugins or constructor)
|
|
181
191
|
// Constructor-provided servers take precedence, then workspace config, then existing config
|
|
182
192
|
const merged = { mcpServers: {} };
|
|
@@ -198,6 +208,7 @@ export class McpManager {
|
|
|
198
208
|
this.servers.set(name, {
|
|
199
209
|
...existingServer,
|
|
200
210
|
config, // Update config in case it changed
|
|
211
|
+
originalUrl: originalUrls[name] ?? existingServer.originalUrl,
|
|
201
212
|
});
|
|
202
213
|
}
|
|
203
214
|
else {
|
|
@@ -205,6 +216,7 @@ export class McpManager {
|
|
|
205
216
|
this.servers.set(name, {
|
|
206
217
|
name,
|
|
207
218
|
config,
|
|
219
|
+
originalUrl: originalUrls[name],
|
|
208
220
|
status: "disconnected",
|
|
209
221
|
});
|
|
210
222
|
}
|
|
@@ -252,11 +264,39 @@ export class McpManager {
|
|
|
252
264
|
if (this.servers.has(name)) {
|
|
253
265
|
return false;
|
|
254
266
|
}
|
|
255
|
-
//
|
|
256
|
-
const
|
|
267
|
+
// Capture original URL before any resolution for safe display
|
|
268
|
+
const originalUrl = config.url;
|
|
269
|
+
// Step 1: expand env vars from process.env (e.g. ${TAVILY_API_KEY})
|
|
270
|
+
let resolvedConfig = { ...config };
|
|
271
|
+
if (resolvedConfig.command) {
|
|
272
|
+
resolvedConfig.command = expandEnvVars(resolvedConfig.command);
|
|
273
|
+
}
|
|
274
|
+
if (resolvedConfig.args) {
|
|
275
|
+
resolvedConfig.args = resolvedConfig.args.map(expandEnvVars);
|
|
276
|
+
}
|
|
277
|
+
if (resolvedConfig.env) {
|
|
278
|
+
const resolvedEnv = {};
|
|
279
|
+
for (const [key, val] of Object.entries(resolvedConfig.env)) {
|
|
280
|
+
resolvedEnv[key] = expandEnvVars(val);
|
|
281
|
+
}
|
|
282
|
+
resolvedConfig.env = resolvedEnv;
|
|
283
|
+
}
|
|
284
|
+
if (resolvedConfig.url) {
|
|
285
|
+
resolvedConfig.url = expandEnvVars(resolvedConfig.url);
|
|
286
|
+
}
|
|
287
|
+
if (resolvedConfig.headers) {
|
|
288
|
+
const resolvedHeaders = {};
|
|
289
|
+
for (const [key, val] of Object.entries(resolvedConfig.headers)) {
|
|
290
|
+
resolvedHeaders[key] = expandEnvVars(val);
|
|
291
|
+
}
|
|
292
|
+
resolvedConfig.headers = resolvedHeaders;
|
|
293
|
+
}
|
|
294
|
+
// Step 2: resolve Wave template variables (e.g. ${WAVE_SERVER_URL}, ${WAVE_SSO_TOKEN})
|
|
295
|
+
resolvedConfig = resolveMcpTemplates(resolvedConfig, this.resolverCtx ?? { serverUrl: undefined, ssoToken: undefined });
|
|
257
296
|
const newServer = {
|
|
258
297
|
name,
|
|
259
298
|
config: resolvedConfig,
|
|
299
|
+
originalUrl,
|
|
260
300
|
status: "disconnected",
|
|
261
301
|
};
|
|
262
302
|
this.servers.set(name, newServer);
|
|
@@ -401,13 +441,28 @@ export class McpManager {
|
|
|
401
441
|
else {
|
|
402
442
|
throw new Error(`MCP server ${name} configuration must include either 'command' or 'url'`);
|
|
403
443
|
}
|
|
404
|
-
// Handle transport errors
|
|
444
|
+
// Handle transport errors (e.g. SSE stream disconnected)
|
|
445
|
+
// The SDK auto-reconnects for transient SSE errors, so we use
|
|
446
|
+
// "reconnecting" status instead of "error". We then poll listTools()
|
|
447
|
+
// to detect when reconnection succeeds.
|
|
405
448
|
transport.onerror = (error) => {
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
449
|
+
const isTransient = error.message?.includes("SSE stream disconnected");
|
|
450
|
+
if (isTransient) {
|
|
451
|
+
logger?.warn(`MCP Server ${name} transient transport error (SDK will auto-reconnect): ${error.message}`);
|
|
452
|
+
this.updateServerStatus(name, {
|
|
453
|
+
status: "reconnecting",
|
|
454
|
+
error: error.message,
|
|
455
|
+
});
|
|
456
|
+
// Poll to detect when the SDK's auto-reconnect succeeds
|
|
457
|
+
this.pollReconnectRecovery(name, client);
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
logger?.error(`MCP Server ${name} transport error:`, error);
|
|
461
|
+
this.updateServerStatus(name, {
|
|
462
|
+
status: "error",
|
|
463
|
+
error: error.message,
|
|
464
|
+
});
|
|
465
|
+
}
|
|
411
466
|
};
|
|
412
467
|
transport.onclose = () => {
|
|
413
468
|
logger?.debug(`MCP Server ${name} transport closed`);
|
|
@@ -478,6 +533,44 @@ export class McpManager {
|
|
|
478
533
|
}, delay);
|
|
479
534
|
this.reconnectTimers.set(name, timer);
|
|
480
535
|
}
|
|
536
|
+
/**
|
|
537
|
+
* Poll listTools() to detect when the SDK's auto-reconnect succeeds
|
|
538
|
+
* after a transient SSE disconnect. Restores status to "connected".
|
|
539
|
+
*/
|
|
540
|
+
async pollReconnectRecovery(name, client) {
|
|
541
|
+
const maxAttempts = 10;
|
|
542
|
+
const delay = 3000; // Match SDK's reconnection delay
|
|
543
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
544
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
545
|
+
const serverStatus = this.servers.get(name);
|
|
546
|
+
if (serverStatus?.status !== "reconnecting") {
|
|
547
|
+
return; // Status changed by onclose or user action — stop polling
|
|
548
|
+
}
|
|
549
|
+
try {
|
|
550
|
+
const toolsResponse = await client.listTools();
|
|
551
|
+
const tools = toolsResponse.tools?.map((tool) => ({
|
|
552
|
+
name: tool.name,
|
|
553
|
+
description: tool.description,
|
|
554
|
+
inputSchema: tool.inputSchema,
|
|
555
|
+
})) || [];
|
|
556
|
+
logger?.info(`MCP Server ${name} auto-reconnected successfully (attempt ${i + 1})`);
|
|
557
|
+
this.updateServerStatus(name, {
|
|
558
|
+
status: "connected",
|
|
559
|
+
tools,
|
|
560
|
+
toolCount: tools.length,
|
|
561
|
+
lastConnected: Date.now(),
|
|
562
|
+
error: undefined,
|
|
563
|
+
});
|
|
564
|
+
this.reconnectAttempts.delete(name);
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
catch {
|
|
568
|
+
logger?.debug(`MCP Server ${name} reconnect recovery check ${i + 1}/${maxAttempts} failed`);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
// If we exhausted attempts, fall through to McpManager's own reconnect
|
|
572
|
+
logger?.warn(`MCP Server ${name} SDK auto-reconnect did not recover after ${maxAttempts} attempts`);
|
|
573
|
+
}
|
|
481
574
|
cancelReconnect(name) {
|
|
482
575
|
const timer = this.reconnectTimers.get(name);
|
|
483
576
|
if (timer) {
|
|
@@ -621,7 +714,7 @@ export class McpManager {
|
|
|
621
714
|
// Re-resolve config with new credentials
|
|
622
715
|
const originalConfig = server.config;
|
|
623
716
|
const resolvedConfig = resolveMcpTemplates(originalConfig, this.resolverCtx);
|
|
624
|
-
// Update the stored config
|
|
717
|
+
// Update the stored config, preserving originalUrl
|
|
625
718
|
this.servers.set(name, {
|
|
626
719
|
...server,
|
|
627
720
|
config: resolvedConfig,
|
|
@@ -631,7 +724,9 @@ export class McpManager {
|
|
|
631
724
|
}
|
|
632
725
|
// Determine if reconnection is needed
|
|
633
726
|
const wasConnected = this.connections.has(name);
|
|
634
|
-
const wasDisconnected = server.status === "disconnected" ||
|
|
727
|
+
const wasDisconnected = server.status === "disconnected" ||
|
|
728
|
+
server.status === "error" ||
|
|
729
|
+
server.status === "reconnecting";
|
|
635
730
|
if (wasConnected) {
|
|
636
731
|
// Disconnect first, then reconnect with new resolved config
|
|
637
732
|
await this.disconnectServer(name);
|
|
@@ -77,8 +77,6 @@ declare class ToolManager {
|
|
|
77
77
|
availableSkills?: SkillMetadata[];
|
|
78
78
|
workdir?: string;
|
|
79
79
|
isSubagent?: boolean;
|
|
80
|
-
/** Set of discovered deferred tool names to include in the API call */
|
|
81
|
-
discoveredTools?: Set<string>;
|
|
82
80
|
}): ChatCompletionFunctionTool[];
|
|
83
81
|
/**
|
|
84
82
|
* Get the list of registered tool plugins
|
|
@@ -97,10 +95,6 @@ declare class ToolManager {
|
|
|
97
95
|
* Get the permission manager
|
|
98
96
|
*/
|
|
99
97
|
getPermissionManager(): PermissionManager | undefined;
|
|
100
|
-
/**
|
|
101
|
-
* Get the names of all deferred tools (those that require ToolSearch to discover).
|
|
102
|
-
*/
|
|
103
|
-
getDeferredToolNames(): string[];
|
|
104
98
|
/**
|
|
105
99
|
* Get the task manager
|
|
106
100
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA4B7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA4B7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,kBAAkB;IAMvC,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,IAAI,IAAI;IAyCrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IAgJtB,IAAI,IAAI,UAAU,EAAE;IAYpB,cAAc,CAAC,OAAO,CAAC,EAAE;QACvB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;QAC7C,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,0BAA0B,EAAE;IAuDhC;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAa1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAKd;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -21,8 +21,6 @@ import { enterWorktreeTool } from "../tools/enterWorktreeTool.js";
|
|
|
21
21
|
import { exitWorktreeTool } from "../tools/exitWorktreeTool.js";
|
|
22
22
|
import * as aiService from "../services/aiService.js";
|
|
23
23
|
import { logger } from "../utils/globalLogger.js";
|
|
24
|
-
import { toolSearchTool } from "../tools/toolSearchTool.js";
|
|
25
|
-
import { isDeferredTool } from "../utils/isDeferredTool.js";
|
|
26
24
|
import { startToolSpan, endToolSpan } from "../telemetry/sessionTracing.js";
|
|
27
25
|
/**
|
|
28
26
|
* Tool Manager
|
|
@@ -94,7 +92,6 @@ class ToolManager {
|
|
|
94
92
|
webFetchTool,
|
|
95
93
|
enterWorktreeTool,
|
|
96
94
|
exitWorktreeTool,
|
|
97
|
-
toolSearchTool,
|
|
98
95
|
];
|
|
99
96
|
for (const tool of builtInTools) {
|
|
100
97
|
if (this.shouldEnableTool(tool.name)) {
|
|
@@ -153,7 +150,7 @@ class ToolManager {
|
|
|
153
150
|
permissionMode: effectivePermissionMode,
|
|
154
151
|
canUseToolCallback,
|
|
155
152
|
permissionManager,
|
|
156
|
-
toolManager: this,
|
|
153
|
+
toolManager: this,
|
|
157
154
|
taskManager: this.container.get("TaskManager"),
|
|
158
155
|
reversionManager: this.container.get("ReversionManager"),
|
|
159
156
|
backgroundTaskManager: this.container.get("BackgroundTaskManager"),
|
|
@@ -263,7 +260,6 @@ class ToolManager {
|
|
|
263
260
|
getToolsConfig(options) {
|
|
264
261
|
const permissionManager = this.container.get("PermissionManager");
|
|
265
262
|
const effectivePermissionMode = this.getPermissionMode();
|
|
266
|
-
const discoveredTools = options?.discoveredTools;
|
|
267
263
|
const builtInToolsConfig = Array.from(this.toolsRegistry.values())
|
|
268
264
|
.filter((tool) => {
|
|
269
265
|
// If tool is explicitly denied by name in permission rules, filter it out
|
|
@@ -284,10 +280,6 @@ class ToolManager {
|
|
|
284
280
|
return (effectivePermissionMode !== "plan" &&
|
|
285
281
|
effectivePermissionMode !== "bypassPermissions");
|
|
286
282
|
}
|
|
287
|
-
// Exclude deferred tools that haven't been discovered yet
|
|
288
|
-
if (isDeferredTool(tool) && !discoveredTools?.has(tool.name)) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
283
|
return true;
|
|
292
284
|
})
|
|
293
285
|
.map((tool) => {
|
|
@@ -310,10 +302,6 @@ class ToolManager {
|
|
|
310
302
|
if (permissionManager?.isToolDenied(tool.function.name)) {
|
|
311
303
|
return false;
|
|
312
304
|
}
|
|
313
|
-
// Exclude MCP tools that haven't been discovered yet
|
|
314
|
-
if (discoveredTools && !discoveredTools.has(tool.function.name)) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
305
|
return true;
|
|
318
306
|
});
|
|
319
307
|
return [...builtInToolsConfig, ...mcpToolsConfig];
|
|
@@ -350,21 +338,6 @@ class ToolManager {
|
|
|
350
338
|
getPermissionManager() {
|
|
351
339
|
return this.container.get("PermissionManager");
|
|
352
340
|
}
|
|
353
|
-
/**
|
|
354
|
-
* Get the names of all deferred tools (those that require ToolSearch to discover).
|
|
355
|
-
*/
|
|
356
|
-
getDeferredToolNames() {
|
|
357
|
-
const permissionManager = this.container.get("PermissionManager");
|
|
358
|
-
const builtInDeferred = Array.from(this.toolsRegistry.values())
|
|
359
|
-
.filter((tool) => isDeferredTool(tool))
|
|
360
|
-
.filter((tool) => !permissionManager?.isToolDenied(tool.name))
|
|
361
|
-
.map((tool) => tool.name);
|
|
362
|
-
const mcpDeferred = this.mcpManager
|
|
363
|
-
.getMcpToolsConfig()
|
|
364
|
-
.filter((tool) => !permissionManager?.isToolDenied(tool.function.name))
|
|
365
|
-
.map((tool) => tool.function.name);
|
|
366
|
-
return [...builtInDeferred, ...mcpDeferred];
|
|
367
|
-
}
|
|
368
341
|
/**
|
|
369
342
|
* Get the task manager
|
|
370
343
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAiBzD,eAAO,MAAM,kBAAkB,oKAAoK,CAAC;AAEpM,eAAO,MAAM,kBAAkB,opIAcqQ,CAAC;AAErS,eAAO,MAAM,wBAAwB,25DASqmB,CAAC;AAE3oB,eAAO,MAAM,WAAW,ihDAWqH,CAAC;AAE9I;;GAEG;AACH,eAAO,MAAM,wBAAwB,+uBAWiH,CAAC;AAEvJ,eAAO,MAAM,qBAAqB,6sBAMuL,CAAC;AAE1N,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,EACnB,UAAU,GAAE,OAAe,GAC1B,MAAM,CAmFR;AAED,eAAO,MAAM,qBAAqB,oKAAqB,CAAC;AAExD,eAAO,MAAM,8BAA8B,44DA8CI,CAAC;AAEhD,eAAO,MAAM,yBAAyB,wHAAwH,CAAC;AAC/J,eAAO,MAAM,iBAAiB,qWAG4B,CAAC;AAE3D,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,CAAC,EAAE,cAAc,CAAC;CAC5B,GACL,MAAM,CAgER;AAED,wBAAgB,iCAAiC,CAC/C,oBAAoB,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,GACd,MAAM,CAkCR"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -3,8 +3,7 @@ import { isGitRepository } from "../utils/gitUtils.js";
|
|
|
3
3
|
import { getCurrentWorktreeSession } from "../utils/worktreeSession.js";
|
|
4
4
|
import { buildAutoMemoryPrompt } from "./autoMemory.js";
|
|
5
5
|
import { EXPLORE_SUBAGENT_TYPE, PLAN_SUBAGENT_TYPE, } from "../constants/subagents.js";
|
|
6
|
-
import { ASK_USER_QUESTION_TOOL_NAME, EDIT_TOOL_NAME, WRITE_TOOL_NAME, EXIT_PLAN_MODE_TOOL_NAME, AGENT_TOOL_NAME, BASH_TOOL_NAME, READ_TOOL_NAME, GLOB_TOOL_NAME, GREP_TOOL_NAME,
|
|
7
|
-
import { isDeferredTool } from "../utils/isDeferredTool.js";
|
|
6
|
+
import { ASK_USER_QUESTION_TOOL_NAME, EDIT_TOOL_NAME, WRITE_TOOL_NAME, EXIT_PLAN_MODE_TOOL_NAME, AGENT_TOOL_NAME, BASH_TOOL_NAME, READ_TOOL_NAME, GLOB_TOOL_NAME, GREP_TOOL_NAME, } from "../constants/tools.js";
|
|
8
7
|
export const BASE_SYSTEM_PROMPT = `You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.`;
|
|
9
8
|
export const DOING_TASKS_PROMPT = `# Doing tasks
|
|
10
9
|
- The user will primarily request you to perform software engineering tasks. These may include solving bugs, adding new functionality, refactoring code, explaining code, and more. When given an unclear or generic instruction, consider it in the context of these software engineering tasks and the current working directory. For example, if the user asks you to change "methodName" to snake case, do not reply with just "method_name", instead find the method in the code and modify the code.
|
|
@@ -207,16 +206,6 @@ export function buildSystemPrompt(basePrompt, tools, options = {}) {
|
|
|
207
206
|
if (tools.length > 0) {
|
|
208
207
|
prompt += `\n\n${TOOL_POLICY}`;
|
|
209
208
|
}
|
|
210
|
-
// List available deferred tool names with descriptions so the model knows they exist
|
|
211
|
-
// and can decide which ones to discover via ToolSearch
|
|
212
|
-
const deferredTools = tools.filter(isDeferredTool);
|
|
213
|
-
if (deferredTools.length > 0) {
|
|
214
|
-
const lines = deferredTools.map((t) => {
|
|
215
|
-
const desc = t.config.function?.description;
|
|
216
|
-
return desc ? `${t.name} - ${desc}` : t.name;
|
|
217
|
-
});
|
|
218
|
-
prompt += `\n\n<available-deferred-tools>\n${lines.join("\n")}\nThese tools are NOT loaded yet — call ${TOOL_SEARCH_TOOL_NAME} first to discover their schemas before invoking them.</available-deferred-tools>`;
|
|
219
|
-
}
|
|
220
209
|
prompt += `\n\n${OUTPUT_EFFICIENCY_PROMPT}`;
|
|
221
210
|
prompt += `\n\n${TONE_AND_STYLE_PROMPT}`;
|
|
222
211
|
if (options.permissionMode === "dontAsk") {
|
|
@@ -46,4 +46,14 @@ export declare class AuthService {
|
|
|
46
46
|
getAuthUser(): AuthUser | undefined;
|
|
47
47
|
}
|
|
48
48
|
export declare const authService: AuthService;
|
|
49
|
+
/**
|
|
50
|
+
* Get or create a persistent anonymous ID for telemetry.
|
|
51
|
+
*
|
|
52
|
+
* Stored in ~/.wave/config.json as { anonymousId: "..." }.
|
|
53
|
+
* Generated once on first run (32-byte random hex) and reused thereafter.
|
|
54
|
+
* Falls back to an in-memory ID if file I/O fails.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getOrCreateAnonymousId(): string;
|
|
57
|
+
/** @internal — reset anonymous ID cache for testing only */
|
|
58
|
+
export declare function __resetAnonymousIdForTesting(): void;
|
|
49
59
|
//# sourceMappingURL=authService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.d.ts","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"authService.d.ts","sourceRoot":"","sources":["../../src/services/authService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO7D,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,qBAAqB,CACxB;IAEL,MAAM,CAAC,WAAW,IAAI,WAAW;IAOjC;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI/B;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IASvE,OAAO,CAAC,gBAAgB;IAUxB,WAAW,IAAI,MAAM;IAKrB,QAAQ,IAAI,UAAU;IAatB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAUlC,SAAS,IAAI,IAAI;IAcjB,WAAW,IAAI,MAAM,GAAG,SAAS;IAKjC,YAAY,IAAI,MAAM;IAUhB,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAClC,mGAAmG;QACnG,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,oFAAoF;QACpF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnB;;;OAGG;YACW,YAAY;IA0B1B,OAAO,CAAC,oBAAoB;YAoGd,WAAW;IAmBzB,kBAAkB,IAAI,OAAO;IAI7B,WAAW,IAAI,QAAQ,GAAG,SAAS;CAIpC;AAED,eAAO,MAAM,WAAW,aAA4B,CAAC;AAErD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAsC/C;AAED,4DAA4D;AAC5D,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|
|
@@ -7,10 +7,13 @@
|
|
|
7
7
|
import { readFileSync, writeFileSync, existsSync, chmodSync, rmSync, mkdirSync, } from "fs";
|
|
8
8
|
import * as path from "path";
|
|
9
9
|
import * as os from "os";
|
|
10
|
+
import { randomBytes } from "crypto";
|
|
10
11
|
import { createServer } from "http";
|
|
11
12
|
import { URL } from "url";
|
|
12
13
|
import { execFile } from "child_process";
|
|
13
14
|
import { promisify } from "util";
|
|
15
|
+
/** Persistent anonymous ID for telemetry fallback when SSO is not authenticated. */
|
|
16
|
+
let _anonymousId;
|
|
14
17
|
const execFileAsync = promisify(execFile);
|
|
15
18
|
export class AuthService {
|
|
16
19
|
constructor() {
|
|
@@ -238,3 +241,45 @@ export class AuthService {
|
|
|
238
241
|
}
|
|
239
242
|
}
|
|
240
243
|
export const authService = AuthService.getInstance();
|
|
244
|
+
/**
|
|
245
|
+
* Get or create a persistent anonymous ID for telemetry.
|
|
246
|
+
*
|
|
247
|
+
* Stored in ~/.wave/config.json as { anonymousId: "..." }.
|
|
248
|
+
* Generated once on first run (32-byte random hex) and reused thereafter.
|
|
249
|
+
* Falls back to an in-memory ID if file I/O fails.
|
|
250
|
+
*/
|
|
251
|
+
export function getOrCreateAnonymousId() {
|
|
252
|
+
if (_anonymousId)
|
|
253
|
+
return _anonymousId;
|
|
254
|
+
try {
|
|
255
|
+
const configPath = path.join(os.homedir(), ".wave", "config.json");
|
|
256
|
+
if (existsSync(configPath)) {
|
|
257
|
+
const content = readFileSync(configPath, "utf-8");
|
|
258
|
+
const config = JSON.parse(content);
|
|
259
|
+
if (config.anonymousId) {
|
|
260
|
+
_anonymousId = config.anonymousId;
|
|
261
|
+
return _anonymousId;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Generate and persist
|
|
265
|
+
_anonymousId = randomBytes(32).toString("hex");
|
|
266
|
+
const waveDir = path.dirname(configPath);
|
|
267
|
+
if (!existsSync(waveDir)) {
|
|
268
|
+
mkdirSync(waveDir, { recursive: true });
|
|
269
|
+
}
|
|
270
|
+
const existing = existsSync(configPath)
|
|
271
|
+
? JSON.parse(readFileSync(configPath, "utf-8"))
|
|
272
|
+
: {};
|
|
273
|
+
writeFileSync(configPath, JSON.stringify({ ...existing, anonymousId: _anonymousId }, null, 2), "utf-8");
|
|
274
|
+
chmodSync(configPath, 0o600);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// File I/O failed — use in-memory fallback
|
|
278
|
+
_anonymousId = randomBytes(32).toString("hex");
|
|
279
|
+
}
|
|
280
|
+
return _anonymousId;
|
|
281
|
+
}
|
|
282
|
+
/** @internal — reset anonymous ID cache for testing only */
|
|
283
|
+
export function __resetAnonymousIdForTesting() {
|
|
284
|
+
_anonymousId = undefined;
|
|
285
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,WAAW,EAGX,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,WAAW,EAGX,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAOvC;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAqB;IAE/C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAMvC;;OAEG;IACG,uBAAuB,CAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;IAkEnC;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAkLlE;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAwC7D;;;OAGG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAcrD;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;;;;;;;;OAUG;IACH,oBAAoB,CAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,EAC5C,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,aAAa;IA0EhB;;;;;;;;OAQG;IACH,kBAAkB,CAChB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,cAAc,GAC9B,WAAW;IAuDd;;;;;OAKG;IACH,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IAwBxD;;;;;OAKG;IACH,eAAe,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAmBjE;;;;OAIG;IACH,wBAAwB,IAAI,OAAO;IAkBnC;;;;OAIG;IACH,0BAA0B,IAAI,MAAM;IAqBpC;;;;;OAKG;IACH,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IAwBzD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;YAKf,sBAAsB;IAqBpC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAwB/B;;OAEG;IACH,sBAAsB,IAClB,OAAO,CAAC,OAAO,uBAAuB,EAAE,eAAe,CAAC,GACxD,SAAS;IAIb;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB;IAa1D;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClE;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAuChB;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAKzE;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACX,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAapC;;OAEG;IACG,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACG,0BAA0B,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAmChB;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKjE;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;CAGnE;AAKD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,2BAA2B,CAsD7B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC9C,OAAO,GAAE,uBAA4B,GACpC,wBAAwB,CAoC1B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GACf,iBAAiB,GAAG,IAAI,CA+B1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,IAAI,CA0K1B"}
|