wave-agent-sdk 0.13.1 → 0.13.2
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/managers/subagentManager.d.ts +8 -0
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +41 -1
- package/dist/services/autoMemoryService.d.ts.map +1 -1
- package/dist/services/autoMemoryService.js +1 -0
- package/package.json +1 -1
- package/src/managers/subagentManager.ts +50 -0
- package/src/services/autoMemoryService.ts +1 -0
|
@@ -6,6 +6,7 @@ import { MessageManager } from "./messageManager.js";
|
|
|
6
6
|
import { ToolManager } from "./toolManager.js";
|
|
7
7
|
import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
|
|
8
8
|
import { Container } from "../utils/container.js";
|
|
9
|
+
import type { PermissionMode } from "../types/permissions.js";
|
|
9
10
|
export interface SubagentManagerCallbacks {
|
|
10
11
|
/** Triggered when subagent adds user message */
|
|
11
12
|
onSubagentUserMessageAdded?: (subagentId: string, params: UserMessageParams) => void;
|
|
@@ -47,6 +48,7 @@ export interface SubagentManagerOptions {
|
|
|
47
48
|
}
|
|
48
49
|
export declare class SubagentManager {
|
|
49
50
|
private instances;
|
|
51
|
+
private subagentPermissionManagers;
|
|
50
52
|
private cachedConfigurations;
|
|
51
53
|
private workdir;
|
|
52
54
|
private callbacks?;
|
|
@@ -59,6 +61,10 @@ export declare class SubagentManager {
|
|
|
59
61
|
* Initialize the SubagentManager by loading and caching configurations
|
|
60
62
|
*/
|
|
61
63
|
initialize(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Sync parent permission rules to all running subagents
|
|
66
|
+
*/
|
|
67
|
+
private syncPermissionRulesToSubagents;
|
|
62
68
|
/**
|
|
63
69
|
* Load all available subagent configurations and cache them
|
|
64
70
|
*/
|
|
@@ -81,6 +87,7 @@ export declare class SubagentManager {
|
|
|
81
87
|
allowedTools?: string[];
|
|
82
88
|
model?: string;
|
|
83
89
|
stream?: boolean;
|
|
90
|
+
permissionModeOverride?: PermissionMode;
|
|
84
91
|
}, runInBackground?: boolean, onUpdate?: () => void): Promise<SubagentInstance>;
|
|
85
92
|
/**
|
|
86
93
|
* Create a new subagent instance initialized with a copy of the current message history.
|
|
@@ -90,6 +97,7 @@ export declare class SubagentManager {
|
|
|
90
97
|
description: string;
|
|
91
98
|
allowedTools?: string[];
|
|
92
99
|
model?: string;
|
|
100
|
+
permissionModeOverride?: PermissionMode;
|
|
93
101
|
}, onUpdate?: () => void): Promise<SubagentInstance>;
|
|
94
102
|
/**
|
|
95
103
|
* Execute agent using subagent instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { logger } from "../utils/globalLogger.js";
|
|
|
11
11
|
export class SubagentManager {
|
|
12
12
|
constructor(container, options) {
|
|
13
13
|
this.instances = new Map();
|
|
14
|
+
this.subagentPermissionManagers = new Map();
|
|
14
15
|
this.cachedConfigurations = null;
|
|
15
16
|
this.container = container;
|
|
16
17
|
this.workdir = options.workdir;
|
|
@@ -26,6 +27,41 @@ export class SubagentManager {
|
|
|
26
27
|
*/
|
|
27
28
|
async initialize() {
|
|
28
29
|
await this.loadConfigurations();
|
|
30
|
+
// Hook into parent PermissionManager's update methods to propagate rules to subagents
|
|
31
|
+
const parentPm = this.container.get("PermissionManager");
|
|
32
|
+
if (parentPm &&
|
|
33
|
+
typeof parentPm.updateAllowedRules === "function" &&
|
|
34
|
+
typeof parentPm.updateDeniedRules === "function" &&
|
|
35
|
+
typeof parentPm.updateAdditionalDirectories === "function") {
|
|
36
|
+
const origUpdateAllowed = parentPm.updateAllowedRules.bind(parentPm);
|
|
37
|
+
const origUpdateDenied = parentPm.updateDeniedRules.bind(parentPm);
|
|
38
|
+
const origUpdateDirs = parentPm.updateAdditionalDirectories.bind(parentPm);
|
|
39
|
+
parentPm.updateAllowedRules = (rules) => {
|
|
40
|
+
origUpdateAllowed(rules);
|
|
41
|
+
this.syncPermissionRulesToSubagents();
|
|
42
|
+
};
|
|
43
|
+
parentPm.updateDeniedRules = (rules) => {
|
|
44
|
+
origUpdateDenied(rules);
|
|
45
|
+
this.syncPermissionRulesToSubagents();
|
|
46
|
+
};
|
|
47
|
+
parentPm.updateAdditionalDirectories = (directories) => {
|
|
48
|
+
origUpdateDirs(directories);
|
|
49
|
+
this.syncPermissionRulesToSubagents();
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Sync parent permission rules to all running subagents
|
|
55
|
+
*/
|
|
56
|
+
syncPermissionRulesToSubagents() {
|
|
57
|
+
const parentPm = this.container.get("PermissionManager");
|
|
58
|
+
if (!parentPm)
|
|
59
|
+
return;
|
|
60
|
+
for (const [, pm] of this.subagentPermissionManagers) {
|
|
61
|
+
pm.updateAllowedRules(parentPm.getAllowedRules());
|
|
62
|
+
pm.updateDeniedRules(parentPm.getDeniedRules());
|
|
63
|
+
pm.updateAdditionalDirectories(parentPm.getAdditionalDirectories());
|
|
64
|
+
}
|
|
29
65
|
}
|
|
30
66
|
/**
|
|
31
67
|
* Load all available subagent configurations and cache them
|
|
@@ -69,7 +105,8 @@ export class SubagentManager {
|
|
|
69
105
|
const parentPermissionManager = this.container.get("PermissionManager");
|
|
70
106
|
const subagentPermissionManager = new PermissionManager(subagentContainer, {
|
|
71
107
|
workdir: this.workdir,
|
|
72
|
-
configuredPermissionMode:
|
|
108
|
+
configuredPermissionMode: parameters.permissionModeOverride ??
|
|
109
|
+
parentPermissionManager?.getConfiguredPermissionMode(),
|
|
73
110
|
allowedRules: parentPermissionManager?.getAllowedRules(),
|
|
74
111
|
deniedRules: parentPermissionManager?.getDeniedRules(),
|
|
75
112
|
instanceAllowedRules: parentPermissionManager?.getInstanceAllowedRules?.(),
|
|
@@ -82,6 +119,8 @@ export class SubagentManager {
|
|
|
82
119
|
planFilePath: parentPermissionManager?.getPlanFilePath(),
|
|
83
120
|
});
|
|
84
121
|
subagentContainer.register("PermissionManager", subagentPermissionManager);
|
|
122
|
+
// Track this subagent's PermissionManager for rule sync
|
|
123
|
+
this.subagentPermissionManagers.set(subagentId, subagentPermissionManager);
|
|
85
124
|
// Add temporary permission rules if provided
|
|
86
125
|
if (parameters.allowedTools) {
|
|
87
126
|
logger.debug(`Adding ${parameters.allowedTools.length} temporary permission rules to subagent ${subagentId}`, { rules: parameters.allowedTools });
|
|
@@ -394,6 +433,7 @@ export class SubagentManager {
|
|
|
394
433
|
instance.status === "error" ||
|
|
395
434
|
instance.status === "aborted")) {
|
|
396
435
|
this.instances.delete(subagentId);
|
|
436
|
+
this.subagentPermissionManagers.delete(subagentId);
|
|
397
437
|
}
|
|
398
438
|
}
|
|
399
439
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoMemoryService.d.ts","sourceRoot":"","sources":["../../src/services/autoMemoryService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAUlD;;;GAGG;AACH,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,wBAAwB,CAAa;gBAEzB,SAAS,EAAE,SAAS;IAExC,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE/C;;OAEG;YACW,aAAa;
|
|
1
|
+
{"version":3,"file":"autoMemoryService.d.ts","sourceRoot":"","sources":["../../src/services/autoMemoryService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAUlD;;;GAGG;AACH,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,wBAAwB,CAAa;gBAEzB,SAAS,EAAE,SAAS;IAExC,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE/C;;OAEG;YACW,aAAa;CAiE5B"}
|
|
@@ -125,6 +125,7 @@ export class AutoMemoryService {
|
|
|
125
125
|
`Edit(${memoryDir}/**/*)`,
|
|
126
126
|
],
|
|
127
127
|
model: "fastModel", // Use fast model for background tasks to reduce latency and cost
|
|
128
|
+
permissionModeOverride: "default", // Force default mode to prevent acceptEdits bypass
|
|
128
129
|
});
|
|
129
130
|
const prompt = buildAutoMemoryExtractionPrompt(newMessageCount, existingMemoriesManifest);
|
|
130
131
|
// Execute in background so it doesn't block the main conversation flow
|
package/package.json
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
|
|
22
22
|
import { Container } from "../utils/container.js";
|
|
23
23
|
import type { PermissionManager } from "./permissionManager.js";
|
|
24
|
+
import type { PermissionMode } from "../types/permissions.js";
|
|
24
25
|
import { ConfigurationService } from "../services/configurationService.js";
|
|
25
26
|
|
|
26
27
|
export interface SubagentManagerCallbacks {
|
|
@@ -85,6 +86,7 @@ export interface SubagentManagerOptions {
|
|
|
85
86
|
|
|
86
87
|
export class SubagentManager {
|
|
87
88
|
private instances = new Map<string, SubagentInstance>();
|
|
89
|
+
private subagentPermissionManagers = new Map<string, PermissionManager>();
|
|
88
90
|
private cachedConfigurations: SubagentConfiguration[] | null = null;
|
|
89
91
|
|
|
90
92
|
private workdir: string;
|
|
@@ -110,6 +112,47 @@ export class SubagentManager {
|
|
|
110
112
|
*/
|
|
111
113
|
async initialize(): Promise<void> {
|
|
112
114
|
await this.loadConfigurations();
|
|
115
|
+
|
|
116
|
+
// Hook into parent PermissionManager's update methods to propagate rules to subagents
|
|
117
|
+
const parentPm = this.container.get<PermissionManager>("PermissionManager");
|
|
118
|
+
if (
|
|
119
|
+
parentPm &&
|
|
120
|
+
typeof parentPm.updateAllowedRules === "function" &&
|
|
121
|
+
typeof parentPm.updateDeniedRules === "function" &&
|
|
122
|
+
typeof parentPm.updateAdditionalDirectories === "function"
|
|
123
|
+
) {
|
|
124
|
+
const origUpdateAllowed = parentPm.updateAllowedRules.bind(parentPm);
|
|
125
|
+
const origUpdateDenied = parentPm.updateDeniedRules.bind(parentPm);
|
|
126
|
+
const origUpdateDirs =
|
|
127
|
+
parentPm.updateAdditionalDirectories.bind(parentPm);
|
|
128
|
+
|
|
129
|
+
parentPm.updateAllowedRules = (rules: string[]) => {
|
|
130
|
+
origUpdateAllowed(rules);
|
|
131
|
+
this.syncPermissionRulesToSubagents();
|
|
132
|
+
};
|
|
133
|
+
parentPm.updateDeniedRules = (rules: string[]) => {
|
|
134
|
+
origUpdateDenied(rules);
|
|
135
|
+
this.syncPermissionRulesToSubagents();
|
|
136
|
+
};
|
|
137
|
+
parentPm.updateAdditionalDirectories = (directories: string[]) => {
|
|
138
|
+
origUpdateDirs(directories);
|
|
139
|
+
this.syncPermissionRulesToSubagents();
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Sync parent permission rules to all running subagents
|
|
146
|
+
*/
|
|
147
|
+
private syncPermissionRulesToSubagents(): void {
|
|
148
|
+
const parentPm = this.container.get<PermissionManager>("PermissionManager");
|
|
149
|
+
if (!parentPm) return;
|
|
150
|
+
|
|
151
|
+
for (const [, pm] of this.subagentPermissionManagers) {
|
|
152
|
+
pm.updateAllowedRules(parentPm.getAllowedRules());
|
|
153
|
+
pm.updateDeniedRules(parentPm.getDeniedRules());
|
|
154
|
+
pm.updateAdditionalDirectories(parentPm.getAdditionalDirectories());
|
|
155
|
+
}
|
|
113
156
|
}
|
|
114
157
|
|
|
115
158
|
/**
|
|
@@ -159,6 +202,7 @@ export class SubagentManager {
|
|
|
159
202
|
allowedTools?: string[];
|
|
160
203
|
model?: string;
|
|
161
204
|
stream?: boolean;
|
|
205
|
+
permissionModeOverride?: PermissionMode;
|
|
162
206
|
},
|
|
163
207
|
runInBackground?: boolean,
|
|
164
208
|
onUpdate?: () => void,
|
|
@@ -183,6 +227,7 @@ export class SubagentManager {
|
|
|
183
227
|
const subagentPermissionManager = new PermissionManager(subagentContainer, {
|
|
184
228
|
workdir: this.workdir,
|
|
185
229
|
configuredPermissionMode:
|
|
230
|
+
parameters.permissionModeOverride ??
|
|
186
231
|
parentPermissionManager?.getConfiguredPermissionMode(),
|
|
187
232
|
allowedRules: parentPermissionManager?.getAllowedRules(),
|
|
188
233
|
deniedRules: parentPermissionManager?.getDeniedRules(),
|
|
@@ -200,6 +245,9 @@ export class SubagentManager {
|
|
|
200
245
|
});
|
|
201
246
|
subagentContainer.register("PermissionManager", subagentPermissionManager);
|
|
202
247
|
|
|
248
|
+
// Track this subagent's PermissionManager for rule sync
|
|
249
|
+
this.subagentPermissionManagers.set(subagentId, subagentPermissionManager);
|
|
250
|
+
|
|
203
251
|
// Add temporary permission rules if provided
|
|
204
252
|
if (parameters.allowedTools) {
|
|
205
253
|
logger.debug(
|
|
@@ -273,6 +321,7 @@ export class SubagentManager {
|
|
|
273
321
|
description: string;
|
|
274
322
|
allowedTools?: string[];
|
|
275
323
|
model?: string;
|
|
324
|
+
permissionModeOverride?: PermissionMode;
|
|
276
325
|
},
|
|
277
326
|
onUpdate?: () => void,
|
|
278
327
|
): Promise<SubagentInstance> {
|
|
@@ -595,6 +644,7 @@ export class SubagentManager {
|
|
|
595
644
|
instance.status === "aborted")
|
|
596
645
|
) {
|
|
597
646
|
this.instances.delete(subagentId);
|
|
647
|
+
this.subagentPermissionManagers.delete(subagentId);
|
|
598
648
|
}
|
|
599
649
|
}
|
|
600
650
|
|
|
@@ -157,6 +157,7 @@ export class AutoMemoryService {
|
|
|
157
157
|
`Edit(${memoryDir}/**/*)`,
|
|
158
158
|
],
|
|
159
159
|
model: "fastModel", // Use fast model for background tasks to reduce latency and cost
|
|
160
|
+
permissionModeOverride: "default", // Force default mode to prevent acceptEdits bypass
|
|
160
161
|
},
|
|
161
162
|
);
|
|
162
163
|
|