wave-agent-sdk 0.16.10 → 0.16.12

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 (74) hide show
  1. package/dist/agent.d.ts +5 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +15 -0
  4. package/dist/constants/toolLimits.d.ts +2 -0
  5. package/dist/constants/toolLimits.d.ts.map +1 -1
  6. package/dist/constants/toolLimits.js +2 -0
  7. package/dist/managers/aiManager.d.ts +5 -0
  8. package/dist/managers/aiManager.d.ts.map +1 -1
  9. package/dist/managers/aiManager.js +21 -0
  10. package/dist/managers/hookManager.d.ts +6 -3
  11. package/dist/managers/hookManager.d.ts.map +1 -1
  12. package/dist/managers/hookManager.js +36 -13
  13. package/dist/managers/mcpManager.d.ts +4 -28
  14. package/dist/managers/mcpManager.d.ts.map +1 -1
  15. package/dist/managers/mcpManager.js +10 -127
  16. package/dist/services/authService.d.ts +33 -1
  17. package/dist/services/authService.d.ts.map +1 -1
  18. package/dist/services/authService.js +212 -11
  19. package/dist/services/configurationService.d.ts.map +1 -1
  20. package/dist/services/configurationService.js +4 -1
  21. package/dist/services/hook.d.ts +4 -0
  22. package/dist/services/hook.d.ts.map +1 -1
  23. package/dist/services/hook.js +10 -0
  24. package/dist/services/interactionService.d.ts.map +1 -1
  25. package/dist/services/interactionService.js +0 -12
  26. package/dist/services/remoteSettingsService.d.ts.map +1 -1
  27. package/dist/services/remoteSettingsService.js +3 -2
  28. package/dist/tools/bashTool.d.ts.map +1 -1
  29. package/dist/tools/bashTool.js +58 -32
  30. package/dist/tools/types.d.ts +4 -0
  31. package/dist/tools/types.d.ts.map +1 -1
  32. package/dist/types/agent.d.ts +7 -0
  33. package/dist/types/agent.d.ts.map +1 -1
  34. package/dist/types/auth.d.ts +12 -0
  35. package/dist/types/auth.d.ts.map +1 -1
  36. package/dist/types/hooks.d.ts +5 -1
  37. package/dist/types/hooks.d.ts.map +1 -1
  38. package/dist/types/hooks.js +1 -0
  39. package/dist/types/mcp.d.ts +1 -1
  40. package/dist/types/mcp.d.ts.map +1 -1
  41. package/dist/utils/containerSetup.d.ts.map +1 -1
  42. package/dist/utils/containerSetup.js +3 -12
  43. package/dist/utils/gitUtils.d.ts +18 -1
  44. package/dist/utils/gitUtils.d.ts.map +1 -1
  45. package/dist/utils/gitUtils.js +120 -49
  46. package/dist/utils/mcpUtils.d.ts.map +1 -1
  47. package/dist/utils/mcpUtils.js +6 -1
  48. package/dist/utils/toolResultStorage.d.ts +46 -0
  49. package/dist/utils/toolResultStorage.d.ts.map +1 -0
  50. package/dist/utils/toolResultStorage.js +90 -0
  51. package/dist/utils/worktreeUtils.d.ts.map +1 -1
  52. package/dist/utils/worktreeUtils.js +58 -0
  53. package/package.json +3 -3
  54. package/src/agent.ts +17 -0
  55. package/src/constants/toolLimits.ts +3 -0
  56. package/src/managers/aiManager.ts +37 -0
  57. package/src/managers/hookManager.ts +42 -17
  58. package/src/managers/mcpManager.ts +10 -178
  59. package/src/services/authService.ts +243 -16
  60. package/src/services/configurationService.ts +6 -1
  61. package/src/services/hook.ts +15 -0
  62. package/src/services/interactionService.ts +0 -18
  63. package/src/services/remoteSettingsService.ts +3 -2
  64. package/src/tools/bashTool.ts +70 -38
  65. package/src/tools/types.ts +4 -0
  66. package/src/types/agent.ts +7 -0
  67. package/src/types/auth.ts +10 -0
  68. package/src/types/hooks.ts +7 -1
  69. package/src/types/mcp.ts +1 -1
  70. package/src/utils/containerSetup.ts +3 -13
  71. package/src/utils/gitUtils.ts +123 -48
  72. package/src/utils/mcpUtils.ts +12 -1
  73. package/src/utils/toolResultStorage.ts +117 -0
  74. package/src/utils/worktreeUtils.ts +63 -0
package/dist/agent.d.ts CHANGED
@@ -65,6 +65,11 @@ export declare class Agent {
65
65
  get latestTotalTokens(): number;
66
66
  /** Get working directory */
67
67
  get workingDirectory(): string;
68
+ /**
69
+ * Set the working directory
70
+ * @param newCwd - The new working directory
71
+ */
72
+ setWorkdir(newCwd: string): void;
68
73
  /** Get project memory content */
69
74
  get projectMemory(): string;
70
75
  /** Get user memory content */
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -121,6 +121,12 @@ export class Agent {
121
121
  this.pendingNotificationPromises.push(pendingPromise);
122
122
  }
123
123
  };
124
+ // Wire up CWD change callback from AIManager to sync Agent's workdir
125
+ this.aiManager.setOnCwdChange((newCwd) => {
126
+ this.workdir = newCwd;
127
+ this.container.register("Workdir", newCwd);
128
+ this.options.callbacks?.onWorkdirChange?.(newCwd);
129
+ });
124
130
  // Wire up message queue to process when agent becomes idle
125
131
  this.messageQueue.onMessageEnqueued = () => {
126
132
  // If the AI is NOT loading and command is not running, trigger dequeue
@@ -173,6 +179,15 @@ export class Agent {
173
179
  get workingDirectory() {
174
180
  return this.workdir;
175
181
  }
182
+ /**
183
+ * Set the working directory
184
+ * @param newCwd - The new working directory
185
+ */
186
+ setWorkdir(newCwd) {
187
+ this.workdir = newCwd;
188
+ this.container.register("Workdir", newCwd);
189
+ this.options.callbacks?.onWorkdirChange?.(newCwd);
190
+ }
176
191
  /** Get project memory content */
177
192
  get projectMemory() {
178
193
  const memoryService = this.container.get("MemoryService");
@@ -3,6 +3,8 @@
3
3
  */
4
4
  /** System-wide default max result size in characters. */
5
5
  export declare const DEFAULT_MAX_RESULT_SIZE_CHARS = 50000;
6
+ /** Per-command cap for bash tool output before persistence. */
7
+ export declare const BASH_MAX_OUTPUT_CHARS = 30000;
6
8
  /** Per-command cap for skill bash substitution (inline/block). */
7
9
  export declare const SKILL_BASH_MAX_OUTPUT_CHARS = 30000;
8
10
  /** Preview size in characters when output is persisted to disk. */
@@ -1 +1 @@
1
- {"version":3,"file":"toolLimits.d.ts","sourceRoot":"","sources":["../../src/constants/toolLimits.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,kEAAkE;AAClE,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,OAAQ,CAAC"}
1
+ {"version":3,"file":"toolLimits.d.ts","sourceRoot":"","sources":["../../src/constants/toolLimits.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,kEAAkE;AAClE,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,OAAQ,CAAC"}
@@ -3,6 +3,8 @@
3
3
  */
4
4
  /** System-wide default max result size in characters. */
5
5
  export const DEFAULT_MAX_RESULT_SIZE_CHARS = 50000;
6
+ /** Per-command cap for bash tool output before persistence. */
7
+ export const BASH_MAX_OUTPUT_CHARS = 30000;
6
8
  /** Per-command cap for skill bash substitution (inline/block). */
7
9
  export const SKILL_BASH_MAX_OUTPUT_CHARS = 30000;
8
10
  /** Preview size in characters when output is persisted to disk. */
@@ -3,6 +3,7 @@ import { Container } from "../utils/container.js";
3
3
  export interface AIManagerCallbacks {
4
4
  onCompactionStateChange?: (isCompacting: boolean) => void;
5
5
  onUsageAdded?: (usage: Usage) => void;
6
+ onCwdChange?: (newCwd: string) => void;
6
7
  }
7
8
  export interface AIManagerOptions {
8
9
  callbacks?: AIManagerCallbacks;
@@ -26,6 +27,8 @@ export declare class AIManager {
26
27
  private subagentType?;
27
28
  private stream;
28
29
  private modelOverride?;
30
+ private _onCwdChange?;
31
+ private originalWorkdir;
29
32
  private consecutiveCompactionFailures;
30
33
  private readonly maxTurns?;
31
34
  constructor(container: Container, options: AIManagerOptions);
@@ -44,11 +47,13 @@ export declare class AIManager {
44
47
  getLanguage(): string | undefined;
45
48
  getAutoMemoryEnabled(): boolean;
46
49
  getWorkdir(): string;
50
+ getOriginalWorkdir(): string;
47
51
  /**
48
52
  * Update the working directory mid-session (e.g., when entering/exiting a worktree).
49
53
  * Also updates process.chdir() so bash commands use the new directory.
50
54
  */
51
55
  setWorkdir(newWorkdir: string): void;
56
+ setOnCwdChange(callback: (newCwd: string) => void): void;
52
57
  private isCompacting;
53
58
  private callbacks;
54
59
  /**
@@ -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;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"}
1
+ {"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ export class AIManager {
23
23
  this.stream = options.stream ?? true; // Default to true if not specified
24
24
  this.callbacks = options.callbacks ?? {};
25
25
  this.modelOverride = options.modelOverride;
26
+ this._onCwdChange = options.callbacks?.onCwdChange; // Initialize onCwdChange
27
+ this.originalWorkdir = options.workdir;
26
28
  this.maxTurns = options.maxTurns;
27
29
  }
28
30
  get toolManager() {
@@ -84,6 +86,9 @@ export class AIManager {
84
86
  getWorkdir() {
85
87
  return this.container.get("Workdir") ?? process.cwd();
86
88
  }
89
+ getOriginalWorkdir() {
90
+ return this.originalWorkdir;
91
+ }
87
92
  /**
88
93
  * Update the working directory mid-session (e.g., when entering/exiting a worktree).
89
94
  * Also updates process.chdir() so bash commands use the new directory.
@@ -92,6 +97,9 @@ export class AIManager {
92
97
  this.container.register("Workdir", newWorkdir);
93
98
  process.chdir(newWorkdir);
94
99
  }
100
+ setOnCwdChange(callback) {
101
+ this._onCwdChange = callback;
102
+ }
95
103
  /**
96
104
  * Get filtered tool configuration based on tools list
97
105
  */
@@ -144,6 +152,7 @@ export class AIManager {
144
152
  if (toolPlugin?.formatCompactParams) {
145
153
  const context = {
146
154
  workdir: this.getWorkdir(),
155
+ originalWorkdir: this.originalWorkdir,
147
156
  taskManager: this.taskManager,
148
157
  };
149
158
  return toolPlugin.formatCompactParams(toolArgs, context);
@@ -732,6 +741,7 @@ export class AIManager {
732
741
  abortSignal: toolAbortController.signal,
733
742
  backgroundTaskManager: this.backgroundTaskManager,
734
743
  workdir: this.getWorkdir(),
744
+ originalWorkdir: this.originalWorkdir,
735
745
  messageId: this.messageManager.getMessages().slice(-1)[0]?.id,
736
746
  sessionId: this.messageManager.getSessionId(),
737
747
  toolCallId: toolId,
@@ -750,6 +760,17 @@ export class AIManager {
750
760
  stage: "running", // Keep it in running stage while updating result
751
761
  });
752
762
  },
763
+ onCwdChange: async (newCwd) => {
764
+ const oldCwd = this.getWorkdir();
765
+ this.container.register("Workdir", newCwd);
766
+ this._onCwdChange?.(newCwd);
767
+ if (this.hookManager) {
768
+ const sessionId = this.messageManager.getSessionId();
769
+ const transcriptPath = this.messageManager.getTranscriptPath();
770
+ const env = Object.fromEntries(Object.entries(process.env).filter((e) => e[1] !== undefined));
771
+ await this.hookManager.executeCwdChangedHooks(oldCwd, newCwd, sessionId, transcriptPath, env);
772
+ }
773
+ },
753
774
  };
754
775
  // Execute tool
755
776
  const toolResult = await this.toolManager.execute(functionToolCall.function?.name || "", toolArgs, context);
@@ -16,10 +16,9 @@ export declare class HookManager {
16
16
  private readonly workdir;
17
17
  constructor(container: Container, workdir: string, matcher?: HookMatcher);
18
18
  /**
19
- * Load and merge hook configurations from user and project settings
20
- * Project settings take precedence over user settings
19
+ * Load hook configuration from programmatic source (AgentOptions.hooks)
21
20
  */
22
- loadConfiguration(userHooks?: PartialHookConfiguration, projectHooks?: PartialHookConfiguration): void;
21
+ loadConfiguration(hooks?: PartialHookConfiguration): void;
23
22
  /**
24
23
  * Load hooks configuration from a pre-loaded WaveConfiguration
25
24
  * Configuration loading is now handled by ConfigurationService
@@ -98,6 +97,10 @@ export declare class HookManager {
98
97
  totalCommands: number;
99
98
  eventBreakdown: Record<HookEvent, number>;
100
99
  };
100
+ /**
101
+ * Execute CwdChanged hooks.
102
+ */
103
+ executeCwdChangedHooks(oldCwd: string, newCwd: string, sessionId: string, transcriptPath: string, env: Record<string, string>): Promise<HookExecutionResult[]>;
101
104
  /**
102
105
  * Register hooks provided by a plugin
103
106
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"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"}
@@ -16,18 +16,12 @@ export class HookManager {
16
16
  this.matcher = matcher;
17
17
  }
18
18
  /**
19
- * Load and merge hook configurations from user and project settings
20
- * Project settings take precedence over user settings
19
+ * Load hook configuration from programmatic source (AgentOptions.hooks)
21
20
  */
22
- loadConfiguration(userHooks, projectHooks) {
21
+ loadConfiguration(hooks) {
23
22
  const merged = {};
24
- // Start with user hooks
25
- if (userHooks) {
26
- this.mergeHooksConfiguration(merged, userHooks);
27
- }
28
- // Override with project hooks (project settings take precedence)
29
- if (projectHooks) {
30
- this.mergeHooksConfiguration(merged, projectHooks);
23
+ if (hooks) {
24
+ this.mergeHooksConfiguration(merged, hooks);
31
25
  }
32
26
  // Validate merged configuration
33
27
  const validation = this.validatePartialConfiguration(merged);
@@ -462,9 +456,13 @@ export class HookManager {
462
456
  mergeHooksConfiguration(target, source) {
463
457
  for (const [event, configs] of Object.entries(source)) {
464
458
  if (isValidHookEvent(event)) {
465
- // For now, completely replace event configs rather than merging
466
- // This ensures project settings completely override user settings for each event
467
- target[event] = [...configs];
459
+ // Concatenate hook configs so multiple sources (programmatic, file-based, plugins) coexist
460
+ if (!target[event]) {
461
+ target[event] = [...configs];
462
+ }
463
+ else {
464
+ target[event] = [...target[event], ...configs];
465
+ }
468
466
  }
469
467
  }
470
468
  }
@@ -478,6 +476,7 @@ export class HookManager {
478
476
  event === "SubagentStop" ||
479
477
  event === "WorktreeCreate" ||
480
478
  event === "WorktreeRemove" ||
479
+ event === "CwdChanged" ||
481
480
  event === "SessionStart" ||
482
481
  event === "SessionEnd") {
483
482
  return true;
@@ -554,6 +553,7 @@ export class HookManager {
554
553
  PermissionRequest: 0,
555
554
  WorktreeCreate: 0,
556
555
  WorktreeRemove: 0,
556
+ CwdChanged: 0,
557
557
  SessionStart: 0,
558
558
  SessionEnd: 0,
559
559
  },
@@ -568,6 +568,7 @@ export class HookManager {
568
568
  PermissionRequest: 0,
569
569
  WorktreeCreate: 0,
570
570
  WorktreeRemove: 0,
571
+ CwdChanged: 0,
571
572
  SessionStart: 0,
572
573
  SessionEnd: 0,
573
574
  };
@@ -587,6 +588,28 @@ export class HookManager {
587
588
  eventBreakdown,
588
589
  };
589
590
  }
591
+ /**
592
+ * Execute CwdChanged hooks.
593
+ */
594
+ async executeCwdChangedHooks(oldCwd, newCwd, sessionId, transcriptPath, env) {
595
+ const context = {
596
+ event: "CwdChanged",
597
+ projectDir: this.workdir,
598
+ timestamp: new Date(),
599
+ sessionId,
600
+ transcriptPath,
601
+ cwd: newCwd,
602
+ oldCwd,
603
+ newCwd,
604
+ env,
605
+ };
606
+ const results = await this.executeHooks("CwdChanged", context);
607
+ if (results.length > 0) {
608
+ // For CwdChanged hooks, we don't block, just log errors
609
+ this.processHookResults("CwdChanged", results);
610
+ }
611
+ return results;
612
+ }
590
613
  /**
591
614
  * Register hooks provided by a plugin
592
615
  */
@@ -10,32 +10,14 @@ export interface McpManagerOptions {
10
10
  logger?: Logger;
11
11
  /** Pre-configured MCP servers passed from constructor options */
12
12
  mcpServers?: Record<string, McpServerConfig>;
13
- /** Wave server URL for resolving ${WAVE_SERVER_URL} templates in MCP configs */
14
- serverUrl?: string;
15
- /** SSO token for resolving ${WAVE_SSO_TOKEN} templates in MCP configs */
16
- ssoToken?: string;
17
13
  }
18
14
  export declare function expandEnvVars(value: string): string;
19
15
  /**
20
- * Context for resolving Wave-specific MCP template variables.
16
+ * Walk an MCP config and resolve environment variables in all string fields.
17
+ * Only expands ${VAR} from process.env (skipping WAVE_PLUGIN_ROOT which is
18
+ * handled at spawn time).
21
19
  */
22
- export interface McpResolverContext {
23
- serverUrl?: string;
24
- ssoToken?: string;
25
- }
26
- /**
27
- * Walk a single McpServerConfig and replace Wave template variables.
28
- * Only replaces ${WAVE_SERVER_URL} and ${WAVE_SSO_TOKEN} — does not touch
29
- * arbitrary env vars (that is what expandEnvVars handles).
30
- */
31
- export declare function resolveMcpTemplates(config: McpServerConfig, ctx: McpResolverContext): McpServerConfig;
32
- /**
33
- * Walk an MCP config and resolve variables in all string fields.
34
- * Applies two steps in order:
35
- * 1. expandEnvVars — resolves ${VAR} from process.env
36
- * 2. resolveMcpTemplates — resolves ${WAVE_SERVER_URL}, ${WAVE_SSO_TOKEN} from context
37
- */
38
- export declare function resolveMcpConfig(config: McpConfig, ctx?: McpResolverContext): McpConfig;
20
+ export declare function resolveMcpConfig(config: McpConfig): McpConfig;
39
21
  export declare class McpManager {
40
22
  private container;
41
23
  private config;
@@ -45,7 +27,6 @@ export declare class McpManager {
45
27
  private workdir;
46
28
  private callbacks;
47
29
  private mcpServers;
48
- private resolverCtx;
49
30
  private reconnectTimers;
50
31
  private reconnectAttempts;
51
32
  constructor(container: Container, options?: McpManagerOptions);
@@ -87,11 +68,6 @@ export declare class McpManager {
87
68
  }>;
88
69
  private executeToolOnConnection;
89
70
  cleanup(): Promise<void>;
90
- /**
91
- * Update credentials and reconnect MCP servers that use template variables.
92
- * Called after SSO login to refresh ${WAVE_SSO_TOKEN} and ${WAVE_SERVER_URL}.
93
- */
94
- refreshCredentials(serverUrl?: string, ssoToken?: string): Promise<void>;
95
71
  /**
96
72
  * Get all currently available MCP tools as plugins
97
73
  */
@@ -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;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"}
1
+ {"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"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"}
@@ -10,16 +10,12 @@ 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 = [
14
- "WAVE_SERVER_URL",
15
- "WAVE_SSO_TOKEN",
16
- "WAVE_PLUGIN_ROOT",
17
- ];
13
+ const WAVE_TEMPLATE_VARS = ["WAVE_PLUGIN_ROOT"];
18
14
  export function expandEnvVars(value) {
19
15
  return value.replace(/\$\{([^}]+)\}/g, (_match, expr) => {
20
16
  const [varName, ...rest] = expr.split(":-");
21
17
  const defaultValue = rest.join(":-");
22
- // Skip Wave-specific template variables — they are handled by resolveMcpTemplates
18
+ // Skip Wave-specific template variables — they are handled at spawn time
23
19
  if (WAVE_TEMPLATE_VARS.includes(varName)) {
24
20
  return _match; // return original ${...} string untouched
25
21
  }
@@ -27,58 +23,14 @@ export function expandEnvVars(value) {
27
23
  });
28
24
  }
29
25
  /**
30
- * Walk a single McpServerConfig and replace Wave template variables.
31
- * Only replaces ${WAVE_SERVER_URL} and ${WAVE_SSO_TOKEN} does not touch
32
- * arbitrary env vars (that is what expandEnvVars handles).
26
+ * Walk an MCP config and resolve environment variables in all string fields.
27
+ * Only expands ${VAR} from process.env (skipping WAVE_PLUGIN_ROOT which is
28
+ * handled at spawn time).
33
29
  */
34
- export function resolveMcpTemplates(config, ctx) {
35
- const resolved = { ...config };
36
- const replace = (value) => {
37
- let result = value;
38
- if (ctx.serverUrl !== undefined) {
39
- result = result.replace(/\$\{WAVE_SERVER_URL\}/g, ctx.serverUrl);
40
- }
41
- if (ctx.ssoToken !== undefined) {
42
- result = result.replace(/\$\{WAVE_SSO_TOKEN\}/g, ctx.ssoToken);
43
- }
44
- return result;
45
- };
46
- if (resolved.command) {
47
- resolved.command = replace(resolved.command);
48
- }
49
- if (resolved.args) {
50
- resolved.args = resolved.args.map(replace);
51
- }
52
- if (resolved.env) {
53
- const resolvedEnv = {};
54
- for (const [key, val] of Object.entries(resolved.env)) {
55
- resolvedEnv[key] = replace(val);
56
- }
57
- resolved.env = resolvedEnv;
58
- }
59
- if (resolved.url) {
60
- resolved.url = replace(resolved.url);
61
- }
62
- if (resolved.headers) {
63
- const resolvedHeaders = {};
64
- for (const [key, val] of Object.entries(resolved.headers)) {
65
- resolvedHeaders[key] = replace(val);
66
- }
67
- resolved.headers = resolvedHeaders;
68
- }
69
- return resolved;
70
- }
71
- /**
72
- * Walk an MCP config and resolve variables in all string fields.
73
- * Applies two steps in order:
74
- * 1. expandEnvVars — resolves ${VAR} from process.env
75
- * 2. resolveMcpTemplates — resolves ${WAVE_SERVER_URL}, ${WAVE_SSO_TOKEN} from context
76
- */
77
- export function resolveMcpConfig(config, ctx) {
30
+ export function resolveMcpConfig(config) {
78
31
  const resolved = { mcpServers: {} };
79
32
  for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
80
- // Step 1: expand env vars from process.env
81
- let resolvedServer = { ...serverConfig };
33
+ const resolvedServer = { ...serverConfig };
82
34
  if (resolvedServer.command) {
83
35
  resolvedServer.command = expandEnvVars(resolvedServer.command);
84
36
  }
@@ -102,10 +54,6 @@ export function resolveMcpConfig(config, ctx) {
102
54
  }
103
55
  resolvedServer.headers = resolvedHeaders;
104
56
  }
105
- // Step 2: resolve Wave template variables from context
106
- if (ctx) {
107
- resolvedServer = resolveMcpTemplates(resolvedServer, ctx);
108
- }
109
57
  resolved.mcpServers[name] = resolvedServer;
110
58
  }
111
59
  return resolved;
@@ -122,10 +70,6 @@ export class McpManager {
122
70
  this.reconnectAttempts = new Map();
123
71
  this.callbacks = options.callbacks || {};
124
72
  this.mcpServers = options.mcpServers;
125
- this.resolverCtx = {
126
- serverUrl: options.serverUrl,
127
- ssoToken: options.ssoToken,
128
- };
129
73
  }
130
74
  /**
131
75
  * Initialize MCP manager with working directory and optionally auto-connect
@@ -181,7 +125,7 @@ export class McpManager {
181
125
  try {
182
126
  const configContent = await fs.readFile(this.configPath, "utf-8");
183
127
  const rawConfig = JSON.parse(configContent);
184
- const workspaceConfig = resolveMcpConfig(rawConfig, this.resolverCtx);
128
+ const workspaceConfig = resolveMcpConfig(rawConfig);
185
129
  // Extract original (pre-resolution) URLs for safe display
186
130
  const originalUrls = {};
187
131
  for (const [name, serverConfig] of Object.entries(rawConfig.mcpServers)) {
@@ -266,8 +210,8 @@ export class McpManager {
266
210
  }
267
211
  // Capture original URL before any resolution for safe display
268
212
  const originalUrl = config.url;
269
- // Step 1: expand env vars from process.env (e.g. ${TAVILY_API_KEY})
270
- let resolvedConfig = { ...config };
213
+ // Expand env vars from process.env (e.g. ${TAVILY_API_KEY})
214
+ const resolvedConfig = { ...config };
271
215
  if (resolvedConfig.command) {
272
216
  resolvedConfig.command = expandEnvVars(resolvedConfig.command);
273
217
  }
@@ -291,8 +235,6 @@ export class McpManager {
291
235
  }
292
236
  resolvedConfig.headers = resolvedHeaders;
293
237
  }
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 });
296
238
  const newServer = {
297
239
  name,
298
240
  config: resolvedConfig,
@@ -697,65 +639,6 @@ export class McpManager {
697
639
  const disconnectPromises = Array.from(this.connections.keys()).map((name) => this.disconnectServer(name));
698
640
  await Promise.all(disconnectPromises);
699
641
  }
700
- /**
701
- * Update credentials and reconnect MCP servers that use template variables.
702
- * Called after SSO login to refresh ${WAVE_SSO_TOKEN} and ${WAVE_SERVER_URL}.
703
- */
704
- async refreshCredentials(serverUrl, ssoToken) {
705
- // Update resolver context
706
- this.resolverCtx = {
707
- serverUrl: serverUrl ?? this.resolverCtx?.serverUrl,
708
- ssoToken: ssoToken ?? this.resolverCtx?.ssoToken,
709
- };
710
- logger?.info(`MCP refreshCredentials: serverUrl=${serverUrl}, hasToken=${!!ssoToken}`);
711
- // Collect servers that need reconnection
712
- const serversToReconnect = [];
713
- for (const [name, server] of this.servers) {
714
- // Re-resolve config with new credentials
715
- const originalConfig = server.config;
716
- const resolvedConfig = resolveMcpTemplates(originalConfig, this.resolverCtx);
717
- // Update the stored config, preserving originalUrl
718
- this.servers.set(name, {
719
- ...server,
720
- config: resolvedConfig,
721
- });
722
- if (this.config && this.config.mcpServers[name]) {
723
- this.config.mcpServers[name] = resolvedConfig;
724
- }
725
- // Determine if reconnection is needed
726
- const wasConnected = this.connections.has(name);
727
- const wasDisconnected = server.status === "disconnected" ||
728
- server.status === "error" ||
729
- server.status === "reconnecting";
730
- if (wasConnected) {
731
- // Disconnect first, then reconnect with new resolved config
732
- await this.disconnectServer(name);
733
- serversToReconnect.push(name);
734
- }
735
- else if (wasDisconnected) {
736
- // Was disconnected or errored — try to reconnect now that we have credentials
737
- serversToReconnect.push(name);
738
- }
739
- }
740
- // Reconnect servers
741
- for (const name of serversToReconnect) {
742
- logger?.debug(`Reconnecting MCP server after credential refresh: ${name}`);
743
- this.connectServer(name)
744
- .then((success) => {
745
- if (success) {
746
- logger?.info(`Successfully reconnected MCP server: ${name}`);
747
- }
748
- else {
749
- logger?.warn(`Failed to reconnect MCP server: ${name}`);
750
- }
751
- })
752
- .catch((error) => {
753
- logger?.error(`Reconnection to MCP server ${name} failed:`, error);
754
- });
755
- }
756
- // Trigger state change callback
757
- this.callbacks.onMcpServersChange?.(this.getAllServers());
758
- }
759
642
  // ========== Tools Registry Methods ==========
760
643
  /**
761
644
  * Get all currently available MCP tools as plugins
@@ -9,6 +9,9 @@ export declare class AuthService {
9
9
  private static instance;
10
10
  private _serverUrl;
11
11
  private onAuthChangeCallbacks;
12
+ private _refreshPromise;
13
+ private _authFileMtime;
14
+ private static readonly REFRESH_BUFFER_MS;
12
15
  static getInstance(): AuthService;
13
16
  /**
14
17
  * Set server URL programmatically (e.g. from AgentOptions.serverUrl).
@@ -37,15 +40,44 @@ export declare class AuthService {
37
40
  }): Promise<string>;
38
41
  /**
39
42
  * Exchange a short-lived authorization code for a JWT token.
40
- * Returns both the token and user info.
43
+ * Returns token, optional refresh token, optional expiresIn, and user info.
41
44
  */
42
45
  private exchangeCode;
43
46
  private startLocalAuthServer;
44
47
  private openBrowser;
45
48
  isSSOAuthenticated(): boolean;
49
+ /**
50
+ * Check if the current token is expired or within the refresh buffer.
51
+ * Returns false if no expiry info (backward compat — treated as never-expiring).
52
+ */
53
+ isTokenExpired(): boolean;
54
+ /**
55
+ * Check if the token needs refresh and refresh it if possible.
56
+ * Deduplicates concurrent refresh calls (401 dedup).
57
+ */
58
+ checkAndRefreshTokenIfNeeded(): Promise<boolean>;
59
+ /**
60
+ * Refresh the access token using the stored refresh token.
61
+ * Returns true on success, false on failure.
62
+ */
63
+ private refreshToken;
64
+ /**
65
+ * Check if another process has refreshed the token on disk.
66
+ * Returns true if a fresh token was found and loaded.
67
+ */
68
+ /** @internal Check if another process has refreshed the token on disk */
69
+ tryReadRefreshedTokenFromDisk(): boolean;
46
70
  getAuthUser(): AuthUser | undefined;
47
71
  }
48
72
  export declare const authService: AuthService;
73
+ /**
74
+ * Create a fetch wrapper that handles SSO token refresh transparently.
75
+ *
76
+ * 1. Proactive refresh: calls checkAndRefreshTokenIfNeeded() before each request
77
+ * 2. Updates Authorization header with fresh token
78
+ * 3. Reactive 401/403 recovery: tries disk refresh then force refresh, retries once
79
+ */
80
+ export declare function createAuthAwareFetch(innerFetch: typeof fetch): typeof fetch;
49
81
  /**
50
82
  * Get or create a persistent anonymous ID for telemetry.
51
83
  *