wave-agent-sdk 0.13.0 → 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/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +3 -3
- 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/slashCommandManager.ts +3 -1
- package/src/managers/subagentManager.ts +50 -0
- package/src/services/autoMemoryService.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAWlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IAPnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,6BAA6B,CAAgC;gBAG3D,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,0BAA0B;IAK9B,UAAU,IAAI,IAAI;IAazB,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAyK3D;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;
|
|
1
|
+
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAWlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,SAAS;IAPnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,6BAA6B,CAAgC;gBAG3D,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,0BAA0B;IAK9B,UAAU,IAAI,IAAI;IAazB,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAyK3D;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IA0CP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAInD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IA2BnB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IAkD7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAQnC"}
|
|
@@ -237,7 +237,7 @@ export class SlashCommandManager {
|
|
|
237
237
|
if (args) {
|
|
238
238
|
processedContent = substituteCommandParameters(processedContent, args);
|
|
239
239
|
}
|
|
240
|
-
await this.executeCustomCommandInMainAgent(namespacedName, processedContent, command.config);
|
|
240
|
+
await this.executeCustomCommandInMainAgent(namespacedName, processedContent, command.config, args);
|
|
241
241
|
},
|
|
242
242
|
});
|
|
243
243
|
}
|
|
@@ -349,13 +349,13 @@ export class SlashCommandManager {
|
|
|
349
349
|
/**
|
|
350
350
|
* Execute custom command in main agent instead of sub-agent
|
|
351
351
|
*/
|
|
352
|
-
async executeCustomCommandInMainAgent(commandName, content, config) {
|
|
352
|
+
async executeCustomCommandInMainAgent(commandName, content, config, args) {
|
|
353
353
|
try {
|
|
354
354
|
// Parse bash commands from the content
|
|
355
355
|
const { commands, processedContent } = parseBashCommands(content);
|
|
356
356
|
// Add user message immediately so text block shows before bash execution
|
|
357
357
|
const messageId = this.messageManager.addUserMessage({
|
|
358
|
-
content: `/${commandName}`,
|
|
358
|
+
content: `/${commandName}${args ? ` ${args}` : ""}`,
|
|
359
359
|
customCommandContent: processedContent,
|
|
360
360
|
});
|
|
361
361
|
// Execute bash commands and update the message if any exist
|
|
@@ -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
|
@@ -350,6 +350,7 @@ export class SlashCommandManager {
|
|
|
350
350
|
namespacedName,
|
|
351
351
|
processedContent,
|
|
352
352
|
command.config,
|
|
353
|
+
args,
|
|
353
354
|
);
|
|
354
355
|
},
|
|
355
356
|
});
|
|
@@ -486,6 +487,7 @@ export class SlashCommandManager {
|
|
|
486
487
|
commandName: string,
|
|
487
488
|
content: string,
|
|
488
489
|
config?: { model?: string; allowedTools?: string[] },
|
|
490
|
+
args?: string,
|
|
489
491
|
): Promise<void> {
|
|
490
492
|
try {
|
|
491
493
|
// Parse bash commands from the content
|
|
@@ -493,7 +495,7 @@ export class SlashCommandManager {
|
|
|
493
495
|
|
|
494
496
|
// Add user message immediately so text block shows before bash execution
|
|
495
497
|
const messageId = this.messageManager.addUserMessage({
|
|
496
|
-
content: `/${commandName}`,
|
|
498
|
+
content: `/${commandName}${args ? ` ${args}` : ""}`,
|
|
497
499
|
customCommandContent: processedContent,
|
|
498
500
|
});
|
|
499
501
|
|
|
@@ -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
|
|