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.
- package/dist/agent.d.ts +5 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +15 -0
- package/dist/constants/toolLimits.d.ts +2 -0
- package/dist/constants/toolLimits.d.ts.map +1 -1
- package/dist/constants/toolLimits.js +2 -0
- package/dist/managers/aiManager.d.ts +5 -0
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +21 -0
- package/dist/managers/hookManager.d.ts +6 -3
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +36 -13
- package/dist/managers/mcpManager.d.ts +4 -28
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +10 -127
- package/dist/services/authService.d.ts +33 -1
- package/dist/services/authService.d.ts.map +1 -1
- package/dist/services/authService.js +212 -11
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +4 -1
- package/dist/services/hook.d.ts +4 -0
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +10 -0
- package/dist/services/interactionService.d.ts.map +1 -1
- package/dist/services/interactionService.js +0 -12
- package/dist/services/remoteSettingsService.d.ts.map +1 -1
- package/dist/services/remoteSettingsService.js +3 -2
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +58 -32
- package/dist/tools/types.d.ts +4 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +7 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/auth.d.ts +12 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +5 -1
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +1 -0
- package/dist/types/mcp.d.ts +1 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +3 -12
- package/dist/utils/gitUtils.d.ts +18 -1
- package/dist/utils/gitUtils.d.ts.map +1 -1
- package/dist/utils/gitUtils.js +120 -49
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +6 -1
- package/dist/utils/toolResultStorage.d.ts +46 -0
- package/dist/utils/toolResultStorage.d.ts.map +1 -0
- package/dist/utils/toolResultStorage.js +90 -0
- package/dist/utils/worktreeUtils.d.ts.map +1 -1
- package/dist/utils/worktreeUtils.js +58 -0
- package/package.json +3 -3
- package/src/agent.ts +17 -0
- package/src/constants/toolLimits.ts +3 -0
- package/src/managers/aiManager.ts +37 -0
- package/src/managers/hookManager.ts +42 -17
- package/src/managers/mcpManager.ts +10 -178
- package/src/services/authService.ts +243 -16
- package/src/services/configurationService.ts +6 -1
- package/src/services/hook.ts +15 -0
- package/src/services/interactionService.ts +0 -18
- package/src/services/remoteSettingsService.ts +3 -2
- package/src/tools/bashTool.ts +70 -38
- package/src/tools/types.ts +4 -0
- package/src/types/agent.ts +7 -0
- package/src/types/auth.ts +10 -0
- package/src/types/hooks.ts +7 -1
- package/src/types/mcp.ts +1 -1
- package/src/utils/containerSetup.ts +3 -13
- package/src/utils/gitUtils.ts +123 -48
- package/src/utils/mcpUtils.ts +12 -1
- package/src/utils/toolResultStorage.ts +117 -0
- 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 */
|
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;AAqB1B,qBAAa,KAAK;IAChB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,2BAA2B,CAAuB;IAC1D,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,gBAAgB,CAAsB;IAG9C,OAAO,CAAC,OAAO,CAAe;IAGvB,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IAS7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC;;;OAGG;IACI,mBAAmB,IAAI,MAAM,EAAE;IAItC;;;;;;;;OAQG;IACH,OAAO;
|
|
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;
|
|
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
|
|
20
|
-
* Project settings take precedence over user settings
|
|
19
|
+
* Load hook configuration from programmatic source (AgentOptions.hooks)
|
|
21
20
|
*/
|
|
22
|
-
loadConfiguration(
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAItB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,qBAAa,WAAW;IAMpB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGvB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAA+B;IAM1C
|
|
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
|
|
20
|
-
* Project settings take precedence over user settings
|
|
19
|
+
* Load hook configuration from programmatic source (AgentOptions.hooks)
|
|
21
20
|
*/
|
|
22
|
-
loadConfiguration(
|
|
21
|
+
loadConfiguration(hooks) {
|
|
23
22
|
const merged = {};
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
//
|
|
466
|
-
|
|
467
|
-
|
|
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
|
-
*
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
31
|
-
* Only
|
|
32
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
//
|
|
270
|
-
|
|
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
|
|
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
|
*
|