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.
@@ -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":"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"}
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: parentPermissionManager?.getConfiguredPermissionMode(),
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;CAgE5B"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-agent-sdk",
3
- "version": "0.13.1",
3
+ "version": "0.13.2",
4
4
  "description": "SDK for building AI-powered development tools and agents",
5
5
  "keywords": [
6
6
  "ai",
@@ -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