wave-agent-sdk 0.10.4 → 0.11.1
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/builtin/skills/init/SKILL.md +26 -0
- package/builtin/skills/loop/SKILL.md +53 -0
- package/builtin/skills/settings/ENV.md +64 -0
- package/builtin/skills/settings/HOOKS.md +94 -0
- package/builtin/skills/settings/MCP.md +55 -0
- package/builtin/skills/settings/MEMORY_RULES.md +60 -0
- package/{dist/builtin-skills → builtin/skills}/settings/SKILL.md +23 -16
- package/builtin/skills/settings/SKILLS.md +63 -0
- package/builtin/skills/settings/SUBAGENTS.md +60 -0
- package/builtin/subagents/bash.md +18 -0
- package/builtin/subagents/explore.md +42 -0
- package/builtin/subagents/general-purpose.md +20 -0
- package/builtin/subagents/plan.md +55 -0
- package/dist/agent.d.ts +8 -6
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +12 -9
- package/dist/constants/tools.d.ts +3 -0
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/managers/aiManager.d.ts +0 -2
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +53 -14
- package/dist/managers/cronManager.d.ts +19 -0
- package/dist/managers/cronManager.d.ts.map +1 -0
- package/dist/managers/cronManager.js +124 -0
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +21 -13
- package/dist/managers/liveConfigManager.js +1 -1
- package/dist/managers/mcpManager.d.ts +1 -1
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +10 -2
- package/dist/managers/messageManager.d.ts +0 -1
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.d.ts +27 -7
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +119 -14
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +7 -12
- package/dist/managers/subagentManager.d.ts +3 -0
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +10 -17
- package/dist/managers/toolManager.d.ts +1 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +28 -4
- package/dist/prompts/index.d.ts +0 -5
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +1 -136
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +8 -7
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +3 -10
- package/dist/services/initializationService.js +2 -2
- package/dist/services/jsonlHandler.d.ts.map +1 -1
- package/dist/services/jsonlHandler.js +3 -0
- package/dist/services/reversionService.d.ts +2 -2
- package/dist/services/reversionService.d.ts.map +1 -1
- package/dist/services/reversionService.js +3 -3
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +18 -11
- package/dist/tools/agentTool.js +1 -1
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +5 -5
- package/dist/tools/cronCreateTool.d.ts +3 -0
- package/dist/tools/cronCreateTool.d.ts.map +1 -0
- package/dist/tools/cronCreateTool.js +59 -0
- package/dist/tools/cronDeleteTool.d.ts +3 -0
- package/dist/tools/cronDeleteTool.d.ts.map +1 -0
- package/dist/tools/cronDeleteTool.js +38 -0
- package/dist/tools/cronListTool.d.ts +3 -0
- package/dist/tools/cronListTool.d.ts.map +1 -0
- package/dist/tools/cronListTool.js +30 -0
- package/dist/tools/skillTool.d.ts +0 -3
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +4 -3
- package/dist/tools/taskOutputTool.d.ts.map +1 -1
- package/dist/tools/taskOutputTool.js +15 -8
- package/dist/tools/types.d.ts +2 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +10 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/configuration.d.ts +1 -1
- package/dist/types/configuration.d.ts.map +1 -1
- package/dist/types/cron.d.ts +10 -0
- package/dist/types/cron.d.ts.map +1 -0
- package/dist/types/cron.js +1 -0
- package/dist/types/hooks.d.ts +1 -5
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/messaging.d.ts +1 -1
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/utils/configPaths.d.ts +4 -0
- package/dist/utils/configPaths.d.ts.map +1 -1
- package/dist/utils/configPaths.js +11 -9
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +40 -13
- package/dist/utils/fileSearch.d.ts.map +1 -1
- package/dist/utils/fileSearch.js +7 -1
- package/dist/utils/mcpUtils.d.ts +2 -2
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +1 -5
- package/dist/utils/subagentParser.d.ts.map +1 -1
- package/dist/utils/subagentParser.js +14 -4
- package/package.json +4 -2
- package/src/agent.ts +17 -12
- package/src/constants/tools.ts +3 -0
- package/src/index.ts +1 -0
- package/src/managers/aiManager.ts +72 -24
- package/src/managers/cronManager.ts +167 -0
- package/src/managers/hookManager.ts +27 -13
- package/src/managers/liveConfigManager.ts +2 -2
- package/src/managers/mcpManager.ts +23 -2
- package/src/managers/messageManager.ts +0 -6
- package/src/managers/permissionManager.ts +154 -18
- package/src/managers/slashCommandManager.ts +7 -14
- package/src/managers/subagentManager.ts +15 -19
- package/src/managers/toolManager.ts +37 -4
- package/src/prompts/index.ts +0 -144
- package/src/services/configurationService.ts +8 -7
- package/src/services/hook.ts +5 -11
- package/src/services/initializationService.ts +3 -3
- package/src/services/jsonlHandler.ts +4 -0
- package/src/services/reversionService.ts +9 -4
- package/src/services/session.ts +19 -12
- package/src/tools/agentTool.ts +1 -1
- package/src/tools/bashTool.ts +6 -5
- package/src/tools/cronCreateTool.ts +73 -0
- package/src/tools/cronDeleteTool.ts +47 -0
- package/src/tools/cronListTool.ts +38 -0
- package/src/tools/skillTool.ts +6 -4
- package/src/tools/taskOutputTool.ts +14 -8
- package/src/tools/types.ts +2 -0
- package/src/types/agent.ts +10 -0
- package/src/types/configuration.ts +1 -1
- package/src/types/cron.ts +9 -0
- package/src/types/hooks.ts +5 -9
- package/src/types/index.ts +1 -0
- package/src/types/messaging.ts +1 -1
- package/src/utils/configPaths.ts +12 -10
- package/src/utils/containerSetup.ts +50 -16
- package/src/utils/fileSearch.ts +7 -1
- package/src/utils/mcpUtils.ts +2 -5
- package/src/utils/subagentParser.ts +16 -6
- package/dist/builtin-skills/settings/HOOKS.md +0 -95
- package/dist/utils/builtinSubagents.d.ts +0 -7
- package/dist/utils/builtinSubagents.d.ts.map +0 -1
- package/dist/utils/builtinSubagents.js +0 -94
- package/src/builtin-skills/settings/HOOKS.md +0 -95
- package/src/builtin-skills/settings/SKILL.md +0 -86
- package/src/utils/builtinSubagents.ts +0 -122
|
@@ -175,7 +175,7 @@ export class LiveConfigManager {
|
|
|
175
175
|
}
|
|
176
176
|
// Update permission manager if available
|
|
177
177
|
if (this.permissionManager) {
|
|
178
|
-
this.permissionManager.
|
|
178
|
+
this.permissionManager.updateConfiguredPermissionMode(this.currentConfiguration.permissions?.permissionMode);
|
|
179
179
|
this.permissionManager.updateAllowedRules(this.currentConfiguration.permissions?.allow || []);
|
|
180
180
|
this.permissionManager.updateDeniedRules(this.currentConfiguration.permissions?.deny || []);
|
|
181
181
|
this.permissionManager.updateAdditionalDirectories(this.currentConfiguration.permissions?.additionalDirectories || []);
|
|
@@ -34,7 +34,7 @@ export declare class McpManager {
|
|
|
34
34
|
connectServer(name: string): Promise<boolean>;
|
|
35
35
|
disconnectServer(name: string): Promise<boolean>;
|
|
36
36
|
getAllConnectedTools(): McpTool[];
|
|
37
|
-
executeMcpTool(toolName: string, args: Record<string, unknown
|
|
37
|
+
executeMcpTool(toolName: string, args: Record<string, unknown>, context?: ToolContext): Promise<{
|
|
38
38
|
success: boolean;
|
|
39
39
|
content: string;
|
|
40
40
|
serverName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAIA,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,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CACxD;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IASnB,OAAO,CAAC,SAAS;IARnB,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;gBAG7B,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,iBAAsB;IAKjC;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IAwCV,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO/C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0CvC,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;IAyBzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgB7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4F7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BtD,oBAAoB,IAAI,OAAO,EAAE;IAW3B,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAIA,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,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CACxD;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IASnB,OAAO,CAAC,SAAS;IARnB,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;gBAG7B,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,iBAAsB;IAKjC;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IAwCV,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO/C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0CvC,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;IAyBzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgB7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4F7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BtD,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;IAS9B;;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"}
|
|
@@ -267,11 +267,19 @@ export class McpManager {
|
|
|
267
267
|
return allTools;
|
|
268
268
|
}
|
|
269
269
|
// Execute MCP tool
|
|
270
|
-
async executeMcpTool(toolName, args) {
|
|
270
|
+
async executeMcpTool(toolName, args, context) {
|
|
271
271
|
// Check if it's a prefixed name: mcp__[serverName]__[toolName]
|
|
272
272
|
if (!toolName.startsWith("mcp__")) {
|
|
273
273
|
throw new Error(`Invalid MCP tool name: ${toolName}. Must start with 'mcp__'`);
|
|
274
274
|
}
|
|
275
|
+
// Permission check
|
|
276
|
+
if (context?.permissionManager) {
|
|
277
|
+
const permissionContext = context.permissionManager.createContext(toolName, context.permissionMode || "default", context.canUseToolCallback, args, context.toolCallId);
|
|
278
|
+
const decision = await context.permissionManager.checkPermission(permissionContext);
|
|
279
|
+
if (decision.behavior === "deny") {
|
|
280
|
+
throw new Error(decision.message || "Permission denied");
|
|
281
|
+
}
|
|
282
|
+
}
|
|
275
283
|
const parts = toolName.split("__");
|
|
276
284
|
if (parts.length < 3) {
|
|
277
285
|
throw new Error(`Invalid MCP tool name format: ${toolName}. Expected 'mcp__[server]__[tool]'`);
|
|
@@ -351,7 +359,7 @@ export class McpManager {
|
|
|
351
359
|
// Find which server this tool belongs to
|
|
352
360
|
const server = findToolServer(tool.name, servers);
|
|
353
361
|
if (server) {
|
|
354
|
-
const plugin = createMcpToolPlugin(tool, server.name, (name, args) => this.executeMcpTool(name, args));
|
|
362
|
+
const plugin = createMcpToolPlugin(tool, server.name, (name, args, context) => this.executeMcpTool(name, args, context));
|
|
355
363
|
mcpTools.set(plugin.name, plugin);
|
|
356
364
|
}
|
|
357
365
|
}
|
|
@@ -16,7 +16,6 @@ export interface MessageManagerCallbacks {
|
|
|
16
16
|
onErrorBlockAdded?: (error: string) => void;
|
|
17
17
|
onCompressBlockAdded?: (content: string) => void;
|
|
18
18
|
onCompressionStateChange?: (isCompressing: boolean) => void;
|
|
19
|
-
onMemoryBlockAdded?: (content: string, success: boolean, type: "project" | "user", storagePath: string) => void;
|
|
20
19
|
onAddBangMessage?: (command: string) => void;
|
|
21
20
|
onUpdateBangMessage?: (command: string, output: string) => void;
|
|
22
21
|
onCompleteBangMessage?: (command: string, exitCode: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,iBAAiB,EACjB,KAAK,0BAA0B,EAEhC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAIL,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAK5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,yBAAyB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAE3C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAEzD,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAErC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzE,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,16 @@ import type { PermissionDecision, ToolPermissionContext, PermissionCallback, Per
|
|
|
9
9
|
import type { Logger } from "../types/index.js";
|
|
10
10
|
import { Container } from "../utils/container.js";
|
|
11
11
|
export interface PermissionManagerOptions {
|
|
12
|
-
/** Configured
|
|
13
|
-
|
|
12
|
+
/** Configured permission mode from settings */
|
|
13
|
+
configuredPermissionMode?: PermissionMode;
|
|
14
14
|
/** Allowed rules from settings */
|
|
15
15
|
allowedRules?: string[];
|
|
16
16
|
/** Denied rules from settings */
|
|
17
17
|
deniedRules?: string[];
|
|
18
|
+
/** Instance-specific allowed rules (from AgentOptions) */
|
|
19
|
+
instanceAllowedRules?: string[];
|
|
20
|
+
/** Instance-specific denied rules (from AgentOptions) */
|
|
21
|
+
instanceDeniedRules?: string[];
|
|
18
22
|
/** Additional directories considered part of the Safe Zone */
|
|
19
23
|
additionalDirectories?: string[];
|
|
20
24
|
/** The main working directory */
|
|
@@ -26,29 +30,33 @@ export interface PermissionManagerOptions {
|
|
|
26
30
|
}
|
|
27
31
|
export declare class PermissionManager {
|
|
28
32
|
private container;
|
|
29
|
-
private
|
|
33
|
+
private configuredPermissionMode?;
|
|
30
34
|
private allowedRules;
|
|
31
35
|
private deniedRules;
|
|
36
|
+
private instanceAllowedRules;
|
|
37
|
+
private instanceDeniedRules;
|
|
32
38
|
private temporaryRules;
|
|
33
39
|
private additionalDirectories;
|
|
34
40
|
private systemAdditionalDirectories;
|
|
35
41
|
private workdir?;
|
|
36
42
|
private planFilePath?;
|
|
37
|
-
private
|
|
43
|
+
private worktreeName?;
|
|
44
|
+
private mainRepoRoot?;
|
|
45
|
+
private onConfiguredPermissionModeChange?;
|
|
38
46
|
private _logger?;
|
|
39
47
|
constructor(container: Container, options?: PermissionManagerOptions);
|
|
40
48
|
/**
|
|
41
49
|
* Set a callback to be notified when the effective permission mode changes due to configuration updates
|
|
42
50
|
*/
|
|
43
|
-
|
|
51
|
+
setOnConfiguredPermissionModeChange(callback: (mode: PermissionMode) => void): void;
|
|
44
52
|
/**
|
|
45
53
|
* Update the configured default mode (e.g., when configuration reloads)
|
|
46
54
|
*/
|
|
47
|
-
|
|
55
|
+
updateConfiguredPermissionMode(permissionMode?: PermissionMode): void;
|
|
48
56
|
/**
|
|
49
57
|
* Get the configured default mode
|
|
50
58
|
*/
|
|
51
|
-
|
|
59
|
+
getConfiguredPermissionMode(): PermissionMode | undefined;
|
|
52
60
|
/**
|
|
53
61
|
* Get all currently allowed rules (user-defined)
|
|
54
62
|
*/
|
|
@@ -57,6 +65,14 @@ export declare class PermissionManager {
|
|
|
57
65
|
* Get all currently denied rules
|
|
58
66
|
*/
|
|
59
67
|
getDeniedRules(): string[];
|
|
68
|
+
/**
|
|
69
|
+
* Get all instance-specific allowed rules
|
|
70
|
+
*/
|
|
71
|
+
getInstanceAllowedRules(): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Get all instance-specific denied rules
|
|
74
|
+
*/
|
|
75
|
+
getInstanceDeniedRules(): string[];
|
|
60
76
|
/**
|
|
61
77
|
* Get all additional directories
|
|
62
78
|
*/
|
|
@@ -122,6 +138,10 @@ export declare class PermissionManager {
|
|
|
122
138
|
* Determine if a tool requires permission checks based on its name
|
|
123
139
|
*/
|
|
124
140
|
isRestrictedTool(toolName: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Check if a tool is completely denied by name in instance or global rules
|
|
143
|
+
*/
|
|
144
|
+
isToolDenied(toolName: string): boolean;
|
|
125
145
|
/**
|
|
126
146
|
* Helper method to create a permission context for CLI integration
|
|
127
147
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAgBhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA4DlD,MAAM,WAAW,wBAAwB;IACvC
|
|
1
|
+
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,40 +70,46 @@ export class PermissionManager {
|
|
|
70
70
|
this.container = container;
|
|
71
71
|
this.allowedRules = [];
|
|
72
72
|
this.deniedRules = [];
|
|
73
|
+
this.instanceAllowedRules = [];
|
|
74
|
+
this.instanceDeniedRules = [];
|
|
73
75
|
this.temporaryRules = [];
|
|
74
76
|
this.additionalDirectories = [];
|
|
75
77
|
this.systemAdditionalDirectories = [];
|
|
76
|
-
this.
|
|
78
|
+
this.configuredPermissionMode = options.configuredPermissionMode;
|
|
77
79
|
this.allowedRules = options.allowedRules || [];
|
|
78
80
|
this.deniedRules = options.deniedRules || [];
|
|
81
|
+
this.instanceAllowedRules = options.instanceAllowedRules || [];
|
|
82
|
+
this.instanceDeniedRules = options.instanceDeniedRules || [];
|
|
79
83
|
this.workdir = options.workdir;
|
|
80
84
|
this.planFilePath = options.planFilePath;
|
|
81
85
|
this._logger = options.logger;
|
|
82
86
|
this.updateAdditionalDirectories(options.additionalDirectories || []);
|
|
87
|
+
this.worktreeName = this.container.get("WorktreeName");
|
|
88
|
+
this.mainRepoRoot = this.container.get("MainRepoRoot");
|
|
83
89
|
}
|
|
84
90
|
/**
|
|
85
91
|
* Set a callback to be notified when the effective permission mode changes due to configuration updates
|
|
86
92
|
*/
|
|
87
|
-
|
|
88
|
-
this.
|
|
93
|
+
setOnConfiguredPermissionModeChange(callback) {
|
|
94
|
+
this.onConfiguredPermissionModeChange = callback;
|
|
89
95
|
}
|
|
90
96
|
/**
|
|
91
97
|
* Update the configured default mode (e.g., when configuration reloads)
|
|
92
98
|
*/
|
|
93
|
-
|
|
99
|
+
updateConfiguredPermissionMode(permissionMode) {
|
|
94
100
|
const oldEffectiveMode = this.getCurrentEffectiveMode();
|
|
95
|
-
this.
|
|
101
|
+
this.configuredPermissionMode = permissionMode;
|
|
96
102
|
const newEffectiveMode = this.getCurrentEffectiveMode();
|
|
97
103
|
if (oldEffectiveMode !== newEffectiveMode &&
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
104
|
+
this.onConfiguredPermissionModeChange) {
|
|
105
|
+
this.onConfiguredPermissionModeChange(newEffectiveMode);
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
/**
|
|
103
109
|
* Get the configured default mode
|
|
104
110
|
*/
|
|
105
|
-
|
|
106
|
-
return this.
|
|
111
|
+
getConfiguredPermissionMode() {
|
|
112
|
+
return this.configuredPermissionMode;
|
|
107
113
|
}
|
|
108
114
|
/**
|
|
109
115
|
* Get all currently allowed rules (user-defined)
|
|
@@ -117,6 +123,18 @@ export class PermissionManager {
|
|
|
117
123
|
getDeniedRules() {
|
|
118
124
|
return [...this.deniedRules];
|
|
119
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Get all instance-specific allowed rules
|
|
128
|
+
*/
|
|
129
|
+
getInstanceAllowedRules() {
|
|
130
|
+
return [...this.instanceAllowedRules];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get all instance-specific denied rules
|
|
134
|
+
*/
|
|
135
|
+
getInstanceDeniedRules() {
|
|
136
|
+
return [...this.instanceDeniedRules];
|
|
137
|
+
}
|
|
120
138
|
/**
|
|
121
139
|
* Get all additional directories
|
|
122
140
|
*/
|
|
@@ -235,8 +253,8 @@ export class PermissionManager {
|
|
|
235
253
|
return cliPermissionMode;
|
|
236
254
|
}
|
|
237
255
|
// Use configured default mode if available
|
|
238
|
-
if (this.
|
|
239
|
-
return this.
|
|
256
|
+
if (this.configuredPermissionMode !== undefined) {
|
|
257
|
+
return this.configuredPermissionMode;
|
|
240
258
|
}
|
|
241
259
|
// Fall back to system default
|
|
242
260
|
return "default";
|
|
@@ -246,6 +264,46 @@ export class PermissionManager {
|
|
|
246
264
|
* Called by individual tools after validation/diff, before real operation
|
|
247
265
|
*/
|
|
248
266
|
async checkPermission(context) {
|
|
267
|
+
// 0. Check instance-specific denied rules first - Deny always takes precedence
|
|
268
|
+
for (const rule of this.instanceDeniedRules) {
|
|
269
|
+
if (this.matchesRule(context, rule)) {
|
|
270
|
+
logger?.warn("Permission denied by instance rule", {
|
|
271
|
+
toolName: context.toolName,
|
|
272
|
+
rule,
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
behavior: "deny",
|
|
276
|
+
message: `Access to tool '${context.toolName}' is explicitly denied by instance rule: ${rule}`,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// 0. Check worktree safety for Write and Edit tools
|
|
281
|
+
if (this.worktreeName &&
|
|
282
|
+
this.mainRepoRoot &&
|
|
283
|
+
this.workdir &&
|
|
284
|
+
(context.toolName === WRITE_TOOL_NAME ||
|
|
285
|
+
context.toolName === EDIT_TOOL_NAME)) {
|
|
286
|
+
const targetPath = context.toolInput?.file_path;
|
|
287
|
+
if (targetPath) {
|
|
288
|
+
const absoluteTargetPath = path.resolve(this.workdir, targetPath);
|
|
289
|
+
const isInsideMainRepo = isPathInside(absoluteTargetPath, this.mainRepoRoot);
|
|
290
|
+
const isInsideWorktree = isPathInside(absoluteTargetPath, this.workdir);
|
|
291
|
+
// If it's inside the main repo but NOT inside the current worktree
|
|
292
|
+
if (isInsideMainRepo && !isInsideWorktree) {
|
|
293
|
+
logger?.warn("Worktree safety violation", {
|
|
294
|
+
toolName: context.toolName,
|
|
295
|
+
targetPath,
|
|
296
|
+
worktreeName: this.worktreeName,
|
|
297
|
+
mainRepoRoot: this.mainRepoRoot,
|
|
298
|
+
workdir: this.workdir,
|
|
299
|
+
});
|
|
300
|
+
return {
|
|
301
|
+
behavior: "deny",
|
|
302
|
+
message: `Access denied: You are currently in a worktree session ("${this.worktreeName}"). Modifying files in the main repository (outside the worktree) is not allowed. Please only modify files within the worktree directory: ${this.workdir}`,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
249
307
|
// 0. Check denied rules first - Deny always takes precedence
|
|
250
308
|
for (const rule of this.deniedRules) {
|
|
251
309
|
if (this.matchesRule(context, rule)) {
|
|
@@ -263,7 +321,7 @@ export class PermissionManager {
|
|
|
263
321
|
if (context.permissionMode === "bypassPermissions") {
|
|
264
322
|
return { behavior: "allow" };
|
|
265
323
|
}
|
|
266
|
-
// 1.1 If acceptEdits mode, allow Edit, Write
|
|
324
|
+
// 1.1 If acceptEdits mode, allow Edit, Write, and mkdir in safe zone
|
|
267
325
|
if (context.permissionMode === "acceptEdits") {
|
|
268
326
|
const autoAcceptedTools = [EDIT_TOOL_NAME, WRITE_TOOL_NAME];
|
|
269
327
|
if (autoAcceptedTools.includes(context.toolName)) {
|
|
@@ -285,6 +343,31 @@ export class PermissionManager {
|
|
|
285
343
|
}
|
|
286
344
|
}
|
|
287
345
|
}
|
|
346
|
+
// Special case for mkdir in Bash tool
|
|
347
|
+
if (context.toolName === BASH_TOOL_NAME && context.toolInput?.command) {
|
|
348
|
+
const command = String(context.toolInput.command).trim();
|
|
349
|
+
if (command.startsWith("mkdir ")) {
|
|
350
|
+
const parts = splitBashCommand(command);
|
|
351
|
+
// Check if it's a simple mkdir command (first part is mkdir)
|
|
352
|
+
if (parts.length === 1) {
|
|
353
|
+
const processedPart = stripEnvVars(parts[0]);
|
|
354
|
+
if (processedPart.startsWith("mkdir ")) {
|
|
355
|
+
const args = processedPart.slice(6).trim();
|
|
356
|
+
const pathArgs = (args.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || []).filter((arg) => !arg.startsWith("-")) || [];
|
|
357
|
+
if (pathArgs.length > 0) {
|
|
358
|
+
const allPathsSafe = pathArgs.every((pathArg) => {
|
|
359
|
+
const cleanPath = pathArg.replace(/^['"](.*)['"]$/, "$1");
|
|
360
|
+
const { isInside } = this.isInsideSafeZone(cleanPath, context.toolInput?.workdir);
|
|
361
|
+
return isInside;
|
|
362
|
+
});
|
|
363
|
+
if (allPathsSafe) {
|
|
364
|
+
return { behavior: "allow" };
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
288
371
|
}
|
|
289
372
|
// 1.2 Check if tool call is allowed by persistent or temporary rules
|
|
290
373
|
if (this.isAllowedByRule(context)) {
|
|
@@ -360,7 +443,22 @@ export class PermissionManager {
|
|
|
360
443
|
* Determine if a tool requires permission checks based on its name
|
|
361
444
|
*/
|
|
362
445
|
isRestrictedTool(toolName) {
|
|
363
|
-
return RESTRICTED_TOOLS.includes(toolName)
|
|
446
|
+
return (RESTRICTED_TOOLS.includes(toolName) ||
|
|
447
|
+
toolName.startsWith("mcp__"));
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Check if a tool is completely denied by name in instance or global rules
|
|
451
|
+
*/
|
|
452
|
+
isToolDenied(toolName) {
|
|
453
|
+
// Check instance-specific denied rules
|
|
454
|
+
if (this.instanceDeniedRules.includes(toolName)) {
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
// Check global denied rules
|
|
458
|
+
if (this.deniedRules.includes(toolName)) {
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
return false;
|
|
364
462
|
}
|
|
365
463
|
/**
|
|
366
464
|
* Helper method to create a permission context for CLI integration
|
|
@@ -376,6 +474,9 @@ export class PermissionManager {
|
|
|
376
474
|
suggestedPrefix = getSmartPrefix(processedPart) ?? undefined;
|
|
377
475
|
}
|
|
378
476
|
}
|
|
477
|
+
else if (toolName.startsWith("mcp__")) {
|
|
478
|
+
suggestedPrefix = toolName;
|
|
479
|
+
}
|
|
379
480
|
const context = {
|
|
380
481
|
toolName,
|
|
381
482
|
permissionMode,
|
|
@@ -568,7 +669,11 @@ export class PermissionManager {
|
|
|
568
669
|
// For other tools, check if any rule matches
|
|
569
670
|
return rules.some((rule) => this.matchesRule(ctx, rule));
|
|
570
671
|
};
|
|
571
|
-
// Check
|
|
672
|
+
// Check instance-specific allowed rules first
|
|
673
|
+
if (isAllowedByRuleList(context, this.instanceAllowedRules)) {
|
|
674
|
+
return true;
|
|
675
|
+
}
|
|
676
|
+
// Check temporary rules
|
|
572
677
|
if (isAllowedByRuleList(context, this.temporaryRules)) {
|
|
573
678
|
return true;
|
|
574
679
|
}
|
|
@@ -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;
|
|
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;AAOlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAAS;gBAGd,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,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4C1B;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IA2E3D;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IA2CP;;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;IAenB;;;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;IAsD7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { loadCustomSlashCommands } from "../utils/customCommands.js";
|
|
2
2
|
import { substituteCommandParameters, parseSlashCommandInput, hasParameterPlaceholders, } from "../utils/commandArgumentParser.js";
|
|
3
3
|
import { parseBashCommands, replaceBashCommandsWithOutput, executeBashCommands, } from "../utils/markdownParser.js";
|
|
4
|
-
import { INIT_PROMPT } from "../prompts/index.js";
|
|
5
4
|
import { logger } from "../utils/globalLogger.js";
|
|
6
5
|
export class SlashCommandManager {
|
|
7
6
|
constructor(container, options) {
|
|
@@ -38,19 +37,15 @@ export class SlashCommandManager {
|
|
|
38
37
|
return this.container.get("SkillManager");
|
|
39
38
|
}
|
|
40
39
|
initializeBuiltinCommands() {
|
|
41
|
-
// Register built-in
|
|
40
|
+
// Register built-in clear command
|
|
42
41
|
this.registerCommand({
|
|
43
|
-
id: "
|
|
44
|
-
name: "
|
|
45
|
-
description: "
|
|
42
|
+
id: "clear",
|
|
43
|
+
name: "clear",
|
|
44
|
+
description: "Clear conversation history and reset session",
|
|
46
45
|
handler: async () => {
|
|
47
|
-
|
|
48
|
-
this.messageManager.
|
|
49
|
-
|
|
50
|
-
customCommandContent: INIT_PROMPT,
|
|
51
|
-
});
|
|
52
|
-
// Execute the AI conversation with the init prompt
|
|
53
|
-
await this.aiManager.sendAIMessage();
|
|
46
|
+
this.aiManager.abortAIMessage();
|
|
47
|
+
this.messageManager.clearMessages();
|
|
48
|
+
await this.taskManager.syncWithSession();
|
|
54
49
|
},
|
|
55
50
|
});
|
|
56
51
|
}
|
|
@@ -43,6 +43,7 @@ export interface SubagentManagerOptions {
|
|
|
43
43
|
workdir: string;
|
|
44
44
|
callbacks?: SubagentManagerCallbacks;
|
|
45
45
|
onUsageAdded?: (usage: Usage) => void;
|
|
46
|
+
stream: boolean;
|
|
46
47
|
}
|
|
47
48
|
export declare class SubagentManager {
|
|
48
49
|
private instances;
|
|
@@ -51,6 +52,7 @@ export declare class SubagentManager {
|
|
|
51
52
|
private callbacks?;
|
|
52
53
|
private onUsageAdded?;
|
|
53
54
|
private container;
|
|
55
|
+
private stream;
|
|
54
56
|
constructor(container: Container, options: SubagentManagerOptions);
|
|
55
57
|
private get configurationService();
|
|
56
58
|
/**
|
|
@@ -78,6 +80,7 @@ export declare class SubagentManager {
|
|
|
78
80
|
subagent_type: string;
|
|
79
81
|
allowedTools?: string[];
|
|
80
82
|
model?: string;
|
|
83
|
+
stream?: boolean;
|
|
81
84
|
}, runInBackground?: boolean, onUpdate?: () => void): Promise<SubagentInstance>;
|
|
82
85
|
/**
|
|
83
86
|
* 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;AAIlD,MAAM,WAAW,wBAAwB;IAEvC,gDAAgD;IAChD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,KACtB,IAAI,CAAC;IACV,wDAAwD;IACxD,+BAA+B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,0DAA0D;IAC1D,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,4DAA4D;IAC5D,mCAAmC,CAAC,EAAE,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,oDAAoD;IACpD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0BAA0B,KAC/B,IAAI,CAAC;IACV,8CAA8C;IAC9C,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7E,yDAAyD;IACzD,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,IAAI,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACtE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ export class SubagentManager {
|
|
|
16
16
|
this.workdir = options.workdir;
|
|
17
17
|
this.callbacks = options.callbacks; // Store SubagentManagerCallbacks
|
|
18
18
|
this.onUsageAdded = options.onUsageAdded;
|
|
19
|
+
this.stream = options.stream;
|
|
19
20
|
}
|
|
20
21
|
get configurationService() {
|
|
21
22
|
return this.container.get("ConfigurationService");
|
|
@@ -68,9 +69,14 @@ export class SubagentManager {
|
|
|
68
69
|
const parentPermissionManager = this.container.get("PermissionManager");
|
|
69
70
|
const subagentPermissionManager = new PermissionManager(subagentContainer, {
|
|
70
71
|
workdir: this.workdir,
|
|
71
|
-
|
|
72
|
+
configuredPermissionMode: parentPermissionManager?.getConfiguredPermissionMode(),
|
|
72
73
|
allowedRules: parentPermissionManager?.getAllowedRules(),
|
|
73
74
|
deniedRules: parentPermissionManager?.getDeniedRules(),
|
|
75
|
+
instanceAllowedRules: parentPermissionManager?.getInstanceAllowedRules?.(),
|
|
76
|
+
instanceDeniedRules: [
|
|
77
|
+
...(parentPermissionManager?.getInstanceDeniedRules?.() || []),
|
|
78
|
+
AGENT_TOOL_NAME, // Always deny Agent tool in subagents to prevent recursion
|
|
79
|
+
],
|
|
74
80
|
additionalDirectories: parentPermissionManager?.getAdditionalDirectories(),
|
|
75
81
|
planFilePath: parentPermissionManager?.getPlanFilePath(),
|
|
76
82
|
});
|
|
@@ -102,6 +108,7 @@ export class SubagentManager {
|
|
|
102
108
|
systemPrompt: configuration.systemPrompt,
|
|
103
109
|
subagentType: parameters.subagent_type, // Pass subagent type for hook context
|
|
104
110
|
modelOverride: parameters.model || configuration.model, // Pass model override
|
|
111
|
+
stream: parameters.stream ?? this.stream, // Pass streaming mode flag
|
|
105
112
|
callbacks: {
|
|
106
113
|
onUsageAdded: this.onUsageAdded,
|
|
107
114
|
},
|
|
@@ -255,23 +262,9 @@ export class SubagentManager {
|
|
|
255
262
|
try {
|
|
256
263
|
// Add the user's prompt as a message
|
|
257
264
|
instance.messageManager.addUserMessage({ content: prompt });
|
|
258
|
-
//
|
|
259
|
-
// Use instance.configuration.tools if provided, otherwise fallback to all tools
|
|
260
|
-
let enabledTools = instance.configuration.tools;
|
|
261
|
-
// Always filter out the Agent tool to prevent subagents from creating sub-subagents
|
|
262
|
-
if (enabledTools) {
|
|
263
|
-
enabledTools = enabledTools.filter((tool) => tool !== AGENT_TOOL_NAME);
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
// If no tools specified, get all tools except Agent
|
|
267
|
-
const allTools = instance.toolManager.list().map((tool) => tool.name);
|
|
268
|
-
enabledTools = allTools.filter((tool) => tool !== AGENT_TOOL_NAME);
|
|
269
|
-
}
|
|
270
|
-
// Execute the AI request with tool restrictions
|
|
265
|
+
// Execute the AI request
|
|
271
266
|
// The AIManager will handle abort signals through its own abort controllers
|
|
272
|
-
const executeAI = instance.aiManager.sendAIMessage(
|
|
273
|
-
tools: enabledTools,
|
|
274
|
-
});
|
|
267
|
+
const executeAI = instance.aiManager.sendAIMessage();
|
|
275
268
|
// If we have an abort signal, race against it using utilities to prevent listener accumulation
|
|
276
269
|
if (abortSignal && !instance.backgroundTaskId) {
|
|
277
270
|
await Promise.race([
|
|
@@ -51,7 +51,7 @@ declare class ToolManager {
|
|
|
51
51
|
*/
|
|
52
52
|
initializeBuiltInTools(): void;
|
|
53
53
|
/**
|
|
54
|
-
* Check if a tool should be enabled based on tools configuration
|
|
54
|
+
* Check if a tool should be enabled based on tools configuration and permission rules
|
|
55
55
|
*/
|
|
56
56
|
private shouldEnableTool;
|
|
57
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAyB7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,kBAAkB;IAKvC,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,IAAI,IAAI;IA+BrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IA6FtB,IAAI,IAAI,UAAU,EAAE;IAYpB,cAAc,CAAC,OAAO,CAAC,EAAE;QACvB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;QAC7C,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,0BAA0B,EAAE;IAwChC;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAa1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAKd;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|