wave-agent-sdk 0.16.8 → 0.16.9

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 (76) hide show
  1. package/dist/constants/tools.d.ts +0 -1
  2. package/dist/constants/tools.d.ts.map +1 -1
  3. package/dist/constants/tools.js +0 -1
  4. package/dist/managers/aiManager.d.ts +0 -8
  5. package/dist/managers/aiManager.d.ts.map +1 -1
  6. package/dist/managers/aiManager.js +0 -45
  7. package/dist/managers/mcpManager.d.ts +5 -0
  8. package/dist/managers/mcpManager.d.ts.map +1 -1
  9. package/dist/managers/mcpManager.js +107 -12
  10. package/dist/managers/toolManager.d.ts +0 -6
  11. package/dist/managers/toolManager.d.ts.map +1 -1
  12. package/dist/managers/toolManager.js +1 -28
  13. package/dist/prompts/index.d.ts.map +1 -1
  14. package/dist/prompts/index.js +1 -12
  15. package/dist/services/authService.d.ts +10 -0
  16. package/dist/services/authService.d.ts.map +1 -1
  17. package/dist/services/authService.js +45 -0
  18. package/dist/services/configurationService.d.ts.map +1 -1
  19. package/dist/services/configurationService.js +8 -14
  20. package/dist/services/pluginLoader.d.ts.map +1 -1
  21. package/dist/services/pluginLoader.js +2 -2
  22. package/dist/telemetry/instrumentation.d.ts +5 -2
  23. package/dist/telemetry/instrumentation.d.ts.map +1 -1
  24. package/dist/telemetry/instrumentation.js +8 -4
  25. package/dist/tools/buildTool.d.ts +0 -2
  26. package/dist/tools/buildTool.d.ts.map +1 -1
  27. package/dist/tools/buildTool.js +0 -2
  28. package/dist/tools/cronCreateTool.d.ts.map +1 -1
  29. package/dist/tools/cronCreateTool.js +0 -1
  30. package/dist/tools/cronDeleteTool.d.ts.map +1 -1
  31. package/dist/tools/cronDeleteTool.js +0 -1
  32. package/dist/tools/cronListTool.d.ts.map +1 -1
  33. package/dist/tools/cronListTool.js +0 -1
  34. package/dist/tools/enterWorktreeTool.d.ts.map +1 -1
  35. package/dist/tools/enterWorktreeTool.js +0 -1
  36. package/dist/tools/exitWorktreeTool.d.ts.map +1 -1
  37. package/dist/tools/exitWorktreeTool.js +0 -1
  38. package/dist/tools/taskManagementTools.d.ts.map +1 -1
  39. package/dist/tools/taskManagementTools.js +0 -4
  40. package/dist/tools/types.d.ts +0 -15
  41. package/dist/tools/types.d.ts.map +1 -1
  42. package/dist/tools/webFetchTool.d.ts.map +1 -1
  43. package/dist/tools/webFetchTool.js +0 -1
  44. package/dist/types/mcp.d.ts +3 -1
  45. package/dist/types/mcp.d.ts.map +1 -1
  46. package/dist/utils/mcpUtils.d.ts.map +1 -1
  47. package/dist/utils/mcpUtils.js +0 -1
  48. package/package.json +1 -1
  49. package/src/constants/tools.ts +0 -1
  50. package/src/managers/aiManager.ts +0 -48
  51. package/src/managers/mcpManager.ts +122 -16
  52. package/src/managers/toolManager.ts +1 -32
  53. package/src/prompts/index.ts +0 -13
  54. package/src/services/authService.ts +56 -0
  55. package/src/services/configurationService.ts +8 -18
  56. package/src/services/pluginLoader.ts +2 -2
  57. package/src/telemetry/instrumentation.ts +12 -4
  58. package/src/tools/buildTool.ts +0 -4
  59. package/src/tools/cronCreateTool.ts +0 -1
  60. package/src/tools/cronDeleteTool.ts +0 -1
  61. package/src/tools/cronListTool.ts +0 -1
  62. package/src/tools/enterWorktreeTool.ts +0 -1
  63. package/src/tools/exitWorktreeTool.ts +0 -1
  64. package/src/tools/taskManagementTools.ts +0 -4
  65. package/src/tools/types.ts +0 -15
  66. package/src/tools/webFetchTool.ts +0 -1
  67. package/src/types/mcp.ts +8 -1
  68. package/src/utils/mcpUtils.ts +0 -1
  69. package/dist/tools/toolSearchTool.d.ts +0 -15
  70. package/dist/tools/toolSearchTool.d.ts.map +0 -1
  71. package/dist/tools/toolSearchTool.js +0 -200
  72. package/dist/utils/isDeferredTool.d.ts +0 -19
  73. package/dist/utils/isDeferredTool.d.ts.map +0 -1
  74. package/dist/utils/isDeferredTool.js +0 -31
  75. package/src/tools/toolSearchTool.ts +0 -245
  76. package/src/utils/isDeferredTool.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"pluginLoader.d.ts","sourceRoot":"","sources":["../../src/services/pluginLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,SAAS,EACT,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAIpC,qBAAa,YAAY;IACvB;;;OAGG;WACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6CtE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAK7D;;;OAGG;WACU,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuC7D;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUjC;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUjC;;OAEG;WACU,eAAe,CAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAgBhD;;OAEG;WACU,UAAU,CACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA2BnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
1
+ {"version":3,"file":"pluginLoader.d.ts","sourceRoot":"","sources":["../../src/services/pluginLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,SAAS,EACT,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAGpC,qBAAa,YAAY;IACvB;;;OAGG;WACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6CtE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAK7D;;;OAGG;WACU,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuC7D;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUjC;;OAEG;WACU,aAAa,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAWjC;;OAEG;WACU,eAAe,CAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAgBhD;;OAEG;WACU,UAAU,CACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA2BnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
@@ -3,7 +3,6 @@ import * as path from "path";
3
3
  import { scanCommandsDirectory } from "../utils/customCommands.js";
4
4
  import { parseSkillFile } from "../utils/skillParser.js";
5
5
  import { parseAgentFile, } from "../utils/subagentParser.js";
6
- import { resolveMcpConfig } from "../managers/mcpManager.js";
7
6
  import { logger } from "../utils/globalLogger.js";
8
7
  export class PluginLoader {
9
8
  /**
@@ -112,7 +111,8 @@ export class PluginLoader {
112
111
  const mcpPath = path.join(pluginPath, ".mcp.json");
113
112
  try {
114
113
  const content = await fs.readFile(mcpPath, "utf-8");
115
- return resolveMcpConfig(JSON.parse(content));
114
+ // Return raw config — let McpManager resolve templates and capture originalUrl
115
+ return JSON.parse(content);
116
116
  }
117
117
  catch {
118
118
  return undefined;
@@ -63,8 +63,11 @@ export declare function getCurrentConfig(): TelemetryConfig | undefined;
63
63
  export declare function isInitialized(): boolean;
64
64
  export { JsonlSpanExporter, JsonlLogExporter };
65
65
  /**
66
- * Get telemetry attributes based on the authenticated SSO user.
67
- * Returns user.id and user.email when SSO authenticated, empty object otherwise.
66
+ * Get telemetry attributes for the current session.
67
+ *
68
+ * Priority:
69
+ * 1. SSO authenticated → server-provided user.id + user.email
70
+ * 2. Not authenticated → persistent anonymous ID from ~/.wave/config.json
68
71
  */
69
72
  export declare function getTelemetryAttributes(): Record<string, string>;
70
73
  //# sourceMappingURL=instrumentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/telemetry/instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AA2JjC;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACxC,eAAe,CAmBjB;AAwCD;;GAEG;AACH,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GACjD,IAAI;IAwBP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;GAEG;AACH,cAAM,gBAAiB,YAAW,iBAAiB;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B,MAAM,CACJ,IAAI,EAAE,iBAAiB,EAAE,EACzB,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GACjD,IAAI;IAuBP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBvD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,oBAAoB,CAAC,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAGD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc/D"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/telemetry/instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AA8JjC;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACxC,eAAe,CAmBjB;AAwCD;;GAEG;AACH,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GACjD,IAAI;IAwBP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;GAEG;AACH,cAAM,gBAAiB,YAAW,iBAAiB;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAI7B,MAAM,CACJ,IAAI,EAAE,iBAAiB,EAAE,EACzB,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GACjD,IAAI;IAuBP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBvD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,cAAc,oBAAoB,CAAC,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,GAAG,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAGD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/D"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { logger } from "../utils/globalLogger.js";
8
8
  import * as fs from "node:fs";
9
- import { AuthService } from "../services/authService.js";
9
+ import { AuthService, getOrCreateAnonymousId, } from "../services/authService.js";
10
10
  // Lazy-loaded OTEL modules — only imported when telemetry is initialized
11
11
  let sdkNode;
12
12
  let api;
@@ -371,8 +371,11 @@ export function isInitialized() {
371
371
  // Export JSONL exporters for testing
372
372
  export { JsonlSpanExporter, JsonlLogExporter };
373
373
  /**
374
- * Get telemetry attributes based on the authenticated SSO user.
375
- * Returns user.id and user.email when SSO authenticated, empty object otherwise.
374
+ * Get telemetry attributes for the current session.
375
+ *
376
+ * Priority:
377
+ * 1. SSO authenticated → server-provided user.id + user.email
378
+ * 2. Not authenticated → persistent anonymous ID from ~/.wave/config.json
376
379
  */
377
380
  export function getTelemetryAttributes() {
378
381
  try {
@@ -388,5 +391,6 @@ export function getTelemetryAttributes() {
388
391
  catch {
389
392
  // AuthService not available or not authenticated
390
393
  }
391
- return {};
394
+ // Fallback to anonymous ID
395
+ return { "user.id": getOrCreateAnonymousId() };
392
396
  }
@@ -14,8 +14,6 @@ export interface ToolDef {
14
14
  isSubagent?: boolean;
15
15
  }) => string);
16
16
  formatCompactParams?: (params: Record<string, unknown>, context: ToolContext) => string;
17
- shouldDefer?: boolean;
18
- alwaysLoad?: boolean;
19
17
  additionalProperties?: boolean;
20
18
  }
21
19
  export declare function buildTool(def: ToolDef): ToolPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"buildTool.d.ts","sourceRoot":"","sources":["../../src/tools/buildTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,IAAI,CAAC,EAAE;QACP,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,KAAK,MAAM,CAAC,CAAC;IAClB,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,WAAW,KACjB,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAiClD"}
1
+ {"version":3,"file":"buildTool.d.ts","sourceRoot":"","sources":["../../src/tools/buildTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,IAAI,CAAC,EAAE;QACP,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,KAAK,MAAM,CAAC,CAAC;IAClB,mBAAmB,CAAC,EAAE,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,WAAW,KACjB,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA+BlD"}
@@ -27,7 +27,5 @@ export function buildTool(def) {
27
27
  execute: def.execute,
28
28
  prompt: promptFn,
29
29
  formatCompactParams: def.formatCompactParams,
30
- shouldDefer: def.shouldDefer ?? false,
31
- alwaysLoad: def.alwaysLoad ?? false,
32
30
  };
33
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cronCreateTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronCreateTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAgDjE,eAAO,MAAM,cAAc,EAAE,UAiH5B,CAAC"}
1
+ {"version":3,"file":"cronCreateTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronCreateTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAgDjE,eAAO,MAAM,cAAc,EAAE,UAgH5B,CAAC"}
@@ -43,7 +43,6 @@ Recurring tasks auto-expire after ${DEFAULT_MAX_AGE_DAYS} days — they fire one
43
43
  Returns a job ID you can pass to CronDelete.`;
44
44
  export const cronCreateTool = {
45
45
  name: CRON_CREATE_TOOL_NAME,
46
- shouldDefer: true,
47
46
  config: {
48
47
  type: "function",
49
48
  function: {
@@ -1 +1 @@
1
- {"version":3,"file":"cronDeleteTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronDeleteTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAOjE,eAAO,MAAM,cAAc,EAAE,UA4C5B,CAAC"}
1
+ {"version":3,"file":"cronDeleteTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronDeleteTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAOjE,eAAO,MAAM,cAAc,EAAE,UA2C5B,CAAC"}
@@ -3,7 +3,6 @@ const CRON_DELETE_DESCRIPTION = "Cancel a scheduled cron job by ID";
3
3
  const CRON_DELETE_PROMPT = `Cancel a cron job previously scheduled with CronCreate. Removes it from both the in-memory session store and durable file storage (if applicable).`;
4
4
  export const cronDeleteTool = {
5
5
  name: CRON_DELETE_TOOL_NAME,
6
- shouldDefer: true,
7
6
  config: {
8
7
  type: "function",
9
8
  function: {
@@ -1 +1 @@
1
- {"version":3,"file":"cronListTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronListTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAOjE,eAAO,MAAM,YAAY,EAAE,UAwC1B,CAAC"}
1
+ {"version":3,"file":"cronListTool.d.ts","sourceRoot":"","sources":["../../src/tools/cronListTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAOjE,eAAO,MAAM,YAAY,EAAE,UAuC1B,CAAC"}
@@ -3,7 +3,6 @@ const CRON_LIST_DESCRIPTION = "List scheduled cron jobs";
3
3
  const CRON_LIST_PROMPT = `List all cron jobs scheduled via CronCreate in this session.`;
4
4
  export const cronListTool = {
5
5
  name: CRON_LIST_TOOL_NAME,
6
- shouldDefer: true,
7
6
  config: {
8
7
  type: "function",
9
8
  function: {
@@ -1 +1 @@
1
- {"version":3,"file":"enterWorktreeTool.d.ts","sourceRoot":"","sources":["../../src/tools/enterWorktreeTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAetE,eAAO,MAAM,0BAA0B,qxCA0BtC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,UAsI/B,CAAC"}
1
+ {"version":3,"file":"enterWorktreeTool.d.ts","sourceRoot":"","sources":["../../src/tools/enterWorktreeTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAetE,eAAO,MAAM,0BAA0B,qxCA0BtC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,UAqI/B,CAAC"}
@@ -36,7 +36,6 @@ export const ENTER_WORKTREE_TOOL_PROMPT = `Use this tool ONLY when the user expl
36
36
  `;
37
37
  export const enterWorktreeTool = {
38
38
  name: ENTER_WORKTREE_TOOL_NAME,
39
- shouldDefer: true,
40
39
  config: {
41
40
  type: "function",
42
41
  function: {
@@ -1 +1 @@
1
- {"version":3,"file":"exitWorktreeTool.d.ts","sourceRoot":"","sources":["../../src/tools/exitWorktreeTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAYtE,eAAO,MAAM,yBAAyB,gvDA4BrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,UAkM9B,CAAC"}
1
+ {"version":3,"file":"exitWorktreeTool.d.ts","sourceRoot":"","sources":["../../src/tools/exitWorktreeTool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAYtE,eAAO,MAAM,yBAAyB,gvDA4BrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,UAiM9B,CAAC"}
@@ -37,7 +37,6 @@ If called outside an EnterWorktree session, the tool is a **no-op**: it reports
37
37
  `;
38
38
  export const exitWorktreeTool = {
39
39
  name: EXIT_WORKTREE_TOOL_NAME,
40
- shouldDefer: true,
41
40
  config: {
42
41
  type: "function",
43
42
  function: {
@@ -1 +1 @@
1
- {"version":3,"file":"taskManagementTools.d.ts","sourceRoot":"","sources":["../../src/tools/taskManagementTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AASjE,eAAO,MAAM,cAAc,EAAE,UAqI5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,UA0DzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAiW5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAmE1B,CAAC"}
1
+ {"version":3,"file":"taskManagementTools.d.ts","sourceRoot":"","sources":["../../src/tools/taskManagementTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AASjE,eAAO,MAAM,cAAc,EAAE,UAoI5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,UAyDzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAgW5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAkE1B,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { TASK_CREATE_TOOL_NAME, TASK_GET_TOOL_NAME, TASK_UPDATE_TOOL_NAME, TASK_LIST_TOOL_NAME, } from "../constants/tools.js";
2
2
  export const taskCreateTool = {
3
3
  name: TASK_CREATE_TOOL_NAME,
4
- shouldDefer: true,
5
4
  config: {
6
5
  type: "function",
7
6
  function: {
@@ -124,7 +123,6 @@ NOTE that you should not use this tool if there is only one trivial task to do.
124
123
  };
125
124
  export const taskGetTool = {
126
125
  name: TASK_GET_TOOL_NAME,
127
- shouldDefer: true,
128
126
  config: {
129
127
  type: "function",
130
128
  function: {
@@ -181,7 +179,6 @@ Returns full task details:
181
179
  };
182
180
  export const taskUpdateTool = {
183
181
  name: TASK_UPDATE_TOOL_NAME,
184
- shouldDefer: true,
185
182
  config: {
186
183
  type: "function",
187
184
  function: {
@@ -481,7 +478,6 @@ Set up task dependencies:
481
478
  };
482
479
  export const taskListTool = {
483
480
  name: TASK_LIST_TOOL_NAME,
484
- shouldDefer: true,
485
481
  config: {
486
482
  type: "function",
487
483
  function: {
@@ -19,21 +19,6 @@ export interface ToolPlugin {
19
19
  workdir?: string;
20
20
  isSubagent?: boolean;
21
21
  }) => string;
22
- /**
23
- * When true, this tool is deferred — it's not sent to the API until the model
24
- * discovers it via ToolSearch. MCP tools are always deferred.
25
- */
26
- shouldDefer?: boolean;
27
- /**
28
- * When true, this tool is never deferred — its full schema always appears in
29
- * the initial prompt even when tool search is enabled.
30
- */
31
- alwaysLoad?: boolean;
32
- /**
33
- * When true, this is an MCP tool (auto-set by McpManager). MCP tools are
34
- * always deferred unless they have alwaysLoad: true.
35
- */
36
- isMcp?: boolean;
37
22
  }
38
23
  export interface ToolResult {
39
24
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webFetchTool.d.ts","sourceRoot":"","sources":["../../src/tools/webFetchTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAoGtE,eAAO,MAAM,YAAY,EAAE,UAqL1B,CAAC"}
1
+ {"version":3,"file":"webFetchTool.d.ts","sourceRoot":"","sources":["../../src/tools/webFetchTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAoGtE,eAAO,MAAM,YAAY,EAAE,UAoL1B,CAAC"}
@@ -77,7 +77,6 @@ const GITHUB_URL_ERROR = "For GitHub URLs, please use the 'gh' CLI via the Bash
77
77
  // --- Tool ---
78
78
  export const webFetchTool = {
79
79
  name: WEB_FETCH_TOOL_NAME,
80
- shouldDefer: true,
81
80
  config: {
82
81
  type: "function",
83
82
  function: {
@@ -22,7 +22,9 @@ export interface McpTool {
22
22
  export interface McpServerStatus {
23
23
  name: string;
24
24
  config: McpServerConfig;
25
- status: "disconnected" | "connected" | "connecting" | "error";
25
+ /** Pre-resolution URL with template variables (e.g. ${WAVE_SSO_TOKEN}) preserved for safe display */
26
+ originalUrl?: string;
27
+ status: "disconnected" | "connected" | "connecting" | "reconnecting" | "error";
26
28
  tools?: McpTool[];
27
29
  toolCount?: number;
28
30
  capabilities?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IAC9D,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EACF,cAAc,GACd,WAAW,GACX,YAAY,GACZ,cAAc,GACd,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcpUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mcpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA8ClE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAgB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC,GACD,UAAU,CAyBZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EAAE,GACzB,eAAe,GAAG,SAAS,CAK7B"}
1
+ {"version":3,"file":"mcpUtils.d.ts","sourceRoot":"","sources":["../../src/utils/mcpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA8ClE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAgB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,WAAW,KAClB,OAAO,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC,GACD,UAAU,CAwBZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EAAE,GACzB,eAAe,GAAG,SAAS,CAK7B"}
@@ -57,7 +57,6 @@ export function createMcpToolPlugin(mcpTool, serverName, executeTool) {
57
57
  return {
58
58
  name: prefixedName,
59
59
  config: mcpToolToOpenAITool(mcpTool, serverName),
60
- isMcp: true, // MCP tools are always deferred
61
60
  async execute(args, context) {
62
61
  try {
63
62
  const result = await executeTool(prefixedName, args, context);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-agent-sdk",
3
- "version": "0.16.8",
3
+ "version": "0.16.9",
4
4
  "description": "SDK for building AI-powered development tools and agents",
5
5
  "keywords": [
6
6
  "ai",
@@ -21,4 +21,3 @@ export const CRON_LIST_TOOL_NAME = "CronList";
21
21
  export const WEB_FETCH_TOOL_NAME = "WebFetch";
22
22
  export const ENTER_WORKTREE_TOOL_NAME = "EnterWorktree";
23
23
  export const EXIT_WORKTREE_TOOL_NAME = "ExitWorktree";
24
- export const TOOL_SEARCH_TOOL_NAME = "ToolSearch";
@@ -66,8 +66,6 @@ export class AIManager {
66
66
  private modelOverride?: string;
67
67
  private consecutiveCompactionFailures: number = 0;
68
68
  private readonly maxTurns?: number;
69
- /** Tracks which deferred tools have been discovered via ToolSearch */
70
- private discoveredTools = new Set<string>();
71
69
 
72
70
  // Service overrides
73
71
  constructor(
@@ -203,7 +201,6 @@ export class AIManager {
203
201
  availableSkills,
204
202
  workdir: this.getWorkdir(),
205
203
  isSubagent: !!this.subagentType,
206
- discoveredTools: this.discoveredTools,
207
204
  });
208
205
  }
209
206
 
@@ -1060,11 +1057,6 @@ export class AIManager {
1060
1057
  toolArgs,
1061
1058
  toolResult,
1062
1059
  );
1063
-
1064
- // Track discovered tools from ToolSearch results
1065
- if (toolName === "ToolSearch" && toolResult.success) {
1066
- this.trackDiscoveredTools(toolResult.content);
1067
- }
1068
1060
  } catch (toolError) {
1069
1061
  const errorMessage =
1070
1062
  toolError instanceof Error
@@ -1533,44 +1525,4 @@ export class AIManager {
1533
1525
  logger?.error("PostToolUse hook execution failed:", error);
1534
1526
  }
1535
1527
  }
1536
-
1537
- /**
1538
- * Parse ToolSearch result content to extract discovered tool names.
1539
- * ToolSearch returns content like "ToolName: description\nParameters: {...}"
1540
- * or shortResult like "Discovered tools: ToolA, ToolB".
1541
- */
1542
- private trackDiscoveredTools(content: string): void {
1543
- // Try to extract tool names from shortResult-style content
1544
- const discoveredMatch = content.match(/Discovered tools?: ([\w-, ]+)/);
1545
- if (discoveredMatch) {
1546
- const names = discoveredMatch[1]!
1547
- .split(",")
1548
- .map((n) => n.trim())
1549
- .filter(Boolean);
1550
- for (const name of names) {
1551
- this.discoveredTools.add(name);
1552
- }
1553
- logger?.debug("Discovered tools:", names);
1554
- return;
1555
- }
1556
-
1557
- // Fallback: extract tool names from "ToolName: description" pattern
1558
- const lines = content.split("\n");
1559
- const nonToolKeywords = new Set([
1560
- "parameters",
1561
- "description",
1562
- "result",
1563
- "error",
1564
- "content",
1565
- "type",
1566
- "properties",
1567
- "required",
1568
- ]);
1569
- for (const line of lines) {
1570
- const toolMatch = line.match(/^([\w-]+):/);
1571
- if (toolMatch && !nonToolKeywords.has(toolMatch[1]!.toLowerCase())) {
1572
- this.discoveredTools.add(toolMatch[1]!);
1573
- }
1574
- }
1575
- }
1576
1528
  }
@@ -44,7 +44,11 @@ export interface McpManagerOptions {
44
44
  * Expand environment variables in a string value.
45
45
  * Supports ${VAR} and ${VAR:-default} patterns.
46
46
  */
47
- const WAVE_TEMPLATE_VARS = ["WAVE_SERVER_URL", "WAVE_SSO_TOKEN"];
47
+ const WAVE_TEMPLATE_VARS = [
48
+ "WAVE_SERVER_URL",
49
+ "WAVE_SSO_TOKEN",
50
+ "WAVE_PLUGIN_ROOT",
51
+ ];
48
52
 
49
53
  export function expandEnvVars(value: string): string {
50
54
  return value.replace(/\$\{([^}]+)\}/g, (_match, expr: string) => {
@@ -268,10 +272,14 @@ export class McpManager {
268
272
 
269
273
  try {
270
274
  const configContent = await fs.readFile(this.configPath, "utf-8");
271
- const workspaceConfig = resolveMcpConfig(
272
- JSON.parse(configContent),
273
- this.resolverCtx,
274
- );
275
+ const rawConfig: McpConfig = JSON.parse(configContent);
276
+ const workspaceConfig = resolveMcpConfig(rawConfig, this.resolverCtx);
277
+
278
+ // Extract original (pre-resolution) URLs for safe display
279
+ const originalUrls: Record<string, string | undefined> = {};
280
+ for (const [name, serverConfig] of Object.entries(rawConfig.mcpServers)) {
281
+ originalUrls[name] = serverConfig.url;
282
+ }
275
283
 
276
284
  // Merge workspace config with any existing config (e.g., from plugins or constructor)
277
285
  // Constructor-provided servers take precedence, then workspace config, then existing config
@@ -296,12 +304,14 @@ export class McpManager {
296
304
  this.servers.set(name, {
297
305
  ...existingServer,
298
306
  config, // Update config in case it changed
307
+ originalUrl: originalUrls[name] ?? existingServer.originalUrl,
299
308
  });
300
309
  } else {
301
310
  // New server, initialize with disconnected status
302
311
  this.servers.set(name, {
303
312
  name,
304
313
  config,
314
+ originalUrl: originalUrls[name],
305
315
  status: "disconnected",
306
316
  });
307
317
  }
@@ -355,15 +365,45 @@ export class McpManager {
355
365
  return false;
356
366
  }
357
367
 
358
- // Resolve template variables before storing
359
- const resolvedConfig = resolveMcpTemplates(
360
- config,
368
+ // Capture original URL before any resolution for safe display
369
+ const originalUrl = config.url;
370
+
371
+ // Step 1: expand env vars from process.env (e.g. ${TAVILY_API_KEY})
372
+ let resolvedConfig: McpServerConfig = { ...config };
373
+ if (resolvedConfig.command) {
374
+ resolvedConfig.command = expandEnvVars(resolvedConfig.command);
375
+ }
376
+ if (resolvedConfig.args) {
377
+ resolvedConfig.args = resolvedConfig.args.map(expandEnvVars);
378
+ }
379
+ if (resolvedConfig.env) {
380
+ const resolvedEnv: Record<string, string> = {};
381
+ for (const [key, val] of Object.entries(resolvedConfig.env)) {
382
+ resolvedEnv[key] = expandEnvVars(val);
383
+ }
384
+ resolvedConfig.env = resolvedEnv;
385
+ }
386
+ if (resolvedConfig.url) {
387
+ resolvedConfig.url = expandEnvVars(resolvedConfig.url);
388
+ }
389
+ if (resolvedConfig.headers) {
390
+ const resolvedHeaders: Record<string, string> = {};
391
+ for (const [key, val] of Object.entries(resolvedConfig.headers)) {
392
+ resolvedHeaders[key] = expandEnvVars(val);
393
+ }
394
+ resolvedConfig.headers = resolvedHeaders;
395
+ }
396
+
397
+ // Step 2: resolve Wave template variables (e.g. ${WAVE_SERVER_URL}, ${WAVE_SSO_TOKEN})
398
+ resolvedConfig = resolveMcpTemplates(
399
+ resolvedConfig,
361
400
  this.resolverCtx ?? { serverUrl: undefined, ssoToken: undefined },
362
401
  );
363
402
 
364
403
  const newServer: McpServerStatus = {
365
404
  name,
366
405
  config: resolvedConfig,
406
+ originalUrl,
367
407
  status: "disconnected",
368
408
  };
369
409
 
@@ -545,13 +585,29 @@ export class McpManager {
545
585
  );
546
586
  }
547
587
 
548
- // Handle transport errors
588
+ // Handle transport errors (e.g. SSE stream disconnected)
589
+ // The SDK auto-reconnects for transient SSE errors, so we use
590
+ // "reconnecting" status instead of "error". We then poll listTools()
591
+ // to detect when reconnection succeeds.
549
592
  transport.onerror = (error: Error) => {
550
- logger?.error(`MCP Server ${name} transport error:`, error);
551
- this.updateServerStatus(name, {
552
- status: "error",
553
- error: error.message,
554
- });
593
+ const isTransient = error.message?.includes("SSE stream disconnected");
594
+ if (isTransient) {
595
+ logger?.warn(
596
+ `MCP Server ${name} transient transport error (SDK will auto-reconnect): ${error.message}`,
597
+ );
598
+ this.updateServerStatus(name, {
599
+ status: "reconnecting",
600
+ error: error.message,
601
+ });
602
+ // Poll to detect when the SDK's auto-reconnect succeeds
603
+ this.pollReconnectRecovery(name, client);
604
+ } else {
605
+ logger?.error(`MCP Server ${name} transport error:`, error);
606
+ this.updateServerStatus(name, {
607
+ status: "error",
608
+ error: error.message,
609
+ });
610
+ }
555
611
  };
556
612
 
557
613
  transport.onclose = () => {
@@ -631,6 +687,54 @@ export class McpManager {
631
687
  this.reconnectTimers.set(name, timer);
632
688
  }
633
689
 
690
+ /**
691
+ * Poll listTools() to detect when the SDK's auto-reconnect succeeds
692
+ * after a transient SSE disconnect. Restores status to "connected".
693
+ */
694
+ private async pollReconnectRecovery(
695
+ name: string,
696
+ client: Client,
697
+ ): Promise<void> {
698
+ const maxAttempts = 10;
699
+ const delay = 3000; // Match SDK's reconnection delay
700
+ for (let i = 0; i < maxAttempts; i++) {
701
+ await new Promise((r) => setTimeout(r, delay));
702
+ const serverStatus = this.servers.get(name);
703
+ if (serverStatus?.status !== "reconnecting") {
704
+ return; // Status changed by onclose or user action — stop polling
705
+ }
706
+ try {
707
+ const toolsResponse = await client.listTools();
708
+ const tools =
709
+ toolsResponse.tools?.map((tool) => ({
710
+ name: tool.name,
711
+ description: tool.description,
712
+ inputSchema: tool.inputSchema,
713
+ })) || [];
714
+ logger?.info(
715
+ `MCP Server ${name} auto-reconnected successfully (attempt ${i + 1})`,
716
+ );
717
+ this.updateServerStatus(name, {
718
+ status: "connected",
719
+ tools,
720
+ toolCount: tools.length,
721
+ lastConnected: Date.now(),
722
+ error: undefined,
723
+ });
724
+ this.reconnectAttempts.delete(name);
725
+ return;
726
+ } catch {
727
+ logger?.debug(
728
+ `MCP Server ${name} reconnect recovery check ${i + 1}/${maxAttempts} failed`,
729
+ );
730
+ }
731
+ }
732
+ // If we exhausted attempts, fall through to McpManager's own reconnect
733
+ logger?.warn(
734
+ `MCP Server ${name} SDK auto-reconnect did not recover after ${maxAttempts} attempts`,
735
+ );
736
+ }
737
+
634
738
  private cancelReconnect(name: string): void {
635
739
  const timer = this.reconnectTimers.get(name);
636
740
  if (timer) {
@@ -846,7 +950,7 @@ export class McpManager {
846
950
  this.resolverCtx,
847
951
  );
848
952
 
849
- // Update the stored config
953
+ // Update the stored config, preserving originalUrl
850
954
  this.servers.set(name, {
851
955
  ...server,
852
956
  config: resolvedConfig,
@@ -859,7 +963,9 @@ export class McpManager {
859
963
  // Determine if reconnection is needed
860
964
  const wasConnected = this.connections.has(name);
861
965
  const wasDisconnected =
862
- server.status === "disconnected" || server.status === "error";
966
+ server.status === "disconnected" ||
967
+ server.status === "error" ||
968
+ server.status === "reconnecting";
863
969
 
864
970
  if (wasConnected) {
865
971
  // Disconnect first, then reconnect with new resolved config