wave-agent-sdk 0.10.3 → 0.11.0
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 +8 -6
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +12 -9
- package/dist/builtin-skills/builtin-skills/loop/SKILL.md +53 -0
- package/dist/builtin-skills/builtin-skills/loop/parsing.ts +159 -0
- package/dist/builtin-skills/builtin-skills/settings/HOOKS.md +82 -0
- package/dist/builtin-skills/{settings → builtin-skills/settings}/SKILL.md +1 -1
- package/dist/builtin-skills/loop/parsing.d.ts +13 -0
- package/dist/builtin-skills/loop/parsing.d.ts.map +1 -0
- package/dist/builtin-skills/loop/parsing.js +125 -0
- 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 +11 -0
- 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/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 +33 -12
- 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/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +8 -32
- 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/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +40 -13
- 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/package.json +2 -1
- package/src/agent.ts +17 -12
- package/src/builtin-skills/loop/SKILL.md +53 -0
- package/src/builtin-skills/loop/parsing.ts +159 -0
- package/src/builtin-skills/settings/HOOKS.md +44 -57
- package/src/builtin-skills/settings/SKILL.md +1 -1
- 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 +12 -0
- package/src/managers/subagentManager.ts +15 -19
- package/src/managers/toolManager.ts +37 -4
- 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 +43 -14
- package/src/tools/cronCreateTool.ts +73 -0
- package/src/tools/cronDeleteTool.ts +47 -0
- package/src/tools/cronListTool.ts +38 -0
- package/src/tools/readTool.ts +11 -33
- 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/containerSetup.ts +50 -16
- package/src/utils/mcpUtils.ts +2 -5
- package/dist/builtin-skills/settings/HOOKS.md +0 -95
|
@@ -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;AAQlD,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;
|
|
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;AAQlD,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;IAgCjC;;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"}
|
|
@@ -53,6 +53,17 @@ export class SlashCommandManager {
|
|
|
53
53
|
await this.aiManager.sendAIMessage();
|
|
54
54
|
},
|
|
55
55
|
});
|
|
56
|
+
// Register built-in clear command
|
|
57
|
+
this.registerCommand({
|
|
58
|
+
id: "clear",
|
|
59
|
+
name: "clear",
|
|
60
|
+
description: "Clear conversation history and reset session",
|
|
61
|
+
handler: async () => {
|
|
62
|
+
this.aiManager.abortAIMessage();
|
|
63
|
+
this.messageManager.clearMessages();
|
|
64
|
+
await this.taskManager.syncWithSession();
|
|
65
|
+
},
|
|
66
|
+
});
|
|
56
67
|
}
|
|
57
68
|
/**
|
|
58
69
|
* Load custom commands from filesystem
|
|
@@ -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"}
|
|
@@ -5,6 +5,9 @@ import { editTool } from "../tools/editTool.js";
|
|
|
5
5
|
import { writeTool } from "../tools/writeTool.js";
|
|
6
6
|
import { exitPlanModeTool } from "../tools/exitPlanMode.js";
|
|
7
7
|
import { askUserQuestionTool } from "../tools/askUserQuestion.js";
|
|
8
|
+
import { cronCreateTool } from "../tools/cronCreateTool.js";
|
|
9
|
+
import { cronDeleteTool } from "../tools/cronDeleteTool.js";
|
|
10
|
+
import { cronListTool } from "../tools/cronListTool.js";
|
|
8
11
|
// New tools
|
|
9
12
|
import { globTool } from "../tools/globTool.js";
|
|
10
13
|
import { grepTool } from "../tools/grepTool.js";
|
|
@@ -77,6 +80,9 @@ class ToolManager {
|
|
|
77
80
|
taskGetTool,
|
|
78
81
|
taskUpdateTool,
|
|
79
82
|
taskListTool,
|
|
83
|
+
cronCreateTool,
|
|
84
|
+
cronDeleteTool,
|
|
85
|
+
cronListTool,
|
|
80
86
|
];
|
|
81
87
|
for (const tool of builtInTools) {
|
|
82
88
|
if (this.shouldEnableTool(tool.name)) {
|
|
@@ -85,9 +91,14 @@ class ToolManager {
|
|
|
85
91
|
}
|
|
86
92
|
}
|
|
87
93
|
/**
|
|
88
|
-
* Check if a tool should be enabled based on tools configuration
|
|
94
|
+
* Check if a tool should be enabled based on tools configuration and permission rules
|
|
89
95
|
*/
|
|
90
96
|
shouldEnableTool(name) {
|
|
97
|
+
const permissionManager = this.container.get("PermissionManager");
|
|
98
|
+
// If tool is explicitly denied by name in permission rules, filter it out
|
|
99
|
+
if (permissionManager?.isToolDenied(name)) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
91
102
|
if (!this.tools) {
|
|
92
103
|
return true;
|
|
93
104
|
}
|
|
@@ -136,6 +147,9 @@ class ToolManager {
|
|
|
136
147
|
skillManager: this.container.has("SkillManager")
|
|
137
148
|
? this.container.get("SkillManager")
|
|
138
149
|
: undefined,
|
|
150
|
+
cronManager: this.container.has("CronManager")
|
|
151
|
+
? this.container.get("CronManager")
|
|
152
|
+
: undefined,
|
|
139
153
|
sessionId: context.sessionId,
|
|
140
154
|
toolCallId: context.toolCallId,
|
|
141
155
|
};
|
|
@@ -175,14 +189,22 @@ class ToolManager {
|
|
|
175
189
|
};
|
|
176
190
|
}
|
|
177
191
|
list() {
|
|
178
|
-
const
|
|
179
|
-
const
|
|
192
|
+
const permissionManager = this.container.get("PermissionManager");
|
|
193
|
+
const builtInTools = Array.from(this.toolsRegistry.values()).filter((tool) => !permissionManager?.isToolDenied(tool.name));
|
|
194
|
+
const mcpTools = this.mcpManager
|
|
195
|
+
.getMcpToolPlugins()
|
|
196
|
+
.filter((tool) => !permissionManager?.isToolDenied(tool.name));
|
|
180
197
|
return [...builtInTools, ...mcpTools];
|
|
181
198
|
}
|
|
182
199
|
getToolsConfig(options) {
|
|
200
|
+
const permissionManager = this.container.get("PermissionManager");
|
|
183
201
|
const effectivePermissionMode = this.getPermissionMode();
|
|
184
202
|
const builtInToolsConfig = Array.from(this.toolsRegistry.values())
|
|
185
203
|
.filter((tool) => {
|
|
204
|
+
// If tool is explicitly denied by name in permission rules, filter it out
|
|
205
|
+
if (permissionManager?.isToolDenied(tool.name)) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
186
208
|
if (effectivePermissionMode === "bypassPermissions") {
|
|
187
209
|
if (tool.name === "ExitPlanMode" || tool.name === "AskUserQuestion") {
|
|
188
210
|
return false;
|
|
@@ -207,7 +229,9 @@ class ToolManager {
|
|
|
207
229
|
}
|
|
208
230
|
return config;
|
|
209
231
|
});
|
|
210
|
-
const mcpToolsConfig = this.mcpManager
|
|
232
|
+
const mcpToolsConfig = this.mcpManager
|
|
233
|
+
.getMcpToolsConfig()
|
|
234
|
+
.filter((tool) => !permissionManager?.isToolDenied(tool.function.name));
|
|
211
235
|
return [...builtInToolsConfig, ...mcpToolsConfig];
|
|
212
236
|
}
|
|
213
237
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"configurationService.d.ts","sourceRoot":"","sources":["../../src/services/configurationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -187,17 +187,17 @@ export class ConfigurationService {
|
|
|
187
187
|
result.errors.push("All permission deny rules must be strings");
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
// Validate
|
|
191
|
-
if (config.permissions.
|
|
190
|
+
// Validate permissionMode if present
|
|
191
|
+
if (config.permissions.permissionMode !== undefined) {
|
|
192
192
|
const validModes = [
|
|
193
193
|
"default",
|
|
194
194
|
"bypassPermissions",
|
|
195
195
|
"acceptEdits",
|
|
196
196
|
"plan",
|
|
197
197
|
];
|
|
198
|
-
if (!validModes.includes(config.permissions.
|
|
198
|
+
if (!validModes.includes(config.permissions.permissionMode)) {
|
|
199
199
|
result.isValid = false;
|
|
200
|
-
result.errors.push(`Invalid
|
|
200
|
+
result.errors.push(`Invalid permissionMode: "${config.permissions.permissionMode}". Must be one of: ${validModes.join(", ")}`);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
}
|
|
@@ -765,9 +765,10 @@ export function loadMergedWaveConfig(workdir) {
|
|
|
765
765
|
]),
|
|
766
766
|
];
|
|
767
767
|
}
|
|
768
|
-
// Merge
|
|
769
|
-
if (config.permissions.
|
|
770
|
-
mergedConfig.permissions.
|
|
768
|
+
// Merge permissionMode (last one wins)
|
|
769
|
+
if (config.permissions.permissionMode !== undefined) {
|
|
770
|
+
mergedConfig.permissions.permissionMode =
|
|
771
|
+
config.permissions.permissionMode;
|
|
771
772
|
}
|
|
772
773
|
// Merge additionalDirectories
|
|
773
774
|
if (config.permissions.additionalDirectories) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/services/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EAElC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/services/hook.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EAElC,MAAM,mBAAmB,CAAC;AA0E3B;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,EAC5D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CA0I9B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,EAC5D,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAchC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsBtD"}
|
package/dist/services/hook.js
CHANGED
|
@@ -31,7 +31,9 @@ async function buildHookJsonInput(context) {
|
|
|
31
31
|
hook_event_name: context.event,
|
|
32
32
|
};
|
|
33
33
|
// Add optional fields based on event type
|
|
34
|
-
if (context.event === "PreToolUse" ||
|
|
34
|
+
if (context.event === "PreToolUse" ||
|
|
35
|
+
context.event === "PostToolUse" ||
|
|
36
|
+
context.event === "PermissionRequest") {
|
|
35
37
|
if (context.toolName) {
|
|
36
38
|
jsonInput.tool_name = context.toolName;
|
|
37
39
|
}
|
|
@@ -50,15 +52,6 @@ async function buildHookJsonInput(context) {
|
|
|
50
52
|
if (context.subagentType !== undefined) {
|
|
51
53
|
jsonInput.subagent_type = context.subagentType;
|
|
52
54
|
}
|
|
53
|
-
// Add notification fields for Notification events
|
|
54
|
-
if (context.event === "Notification") {
|
|
55
|
-
if (context.message !== undefined) {
|
|
56
|
-
jsonInput.message = context.message;
|
|
57
|
-
}
|
|
58
|
-
if (context.notificationType !== undefined) {
|
|
59
|
-
jsonInput.notification_type = context.notificationType;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
55
|
// Add name field for WorktreeCreate events
|
|
63
56
|
if (context.event === "WorktreeCreate") {
|
|
64
57
|
if (context.worktreeName !== undefined) {
|
|
@@ -54,8 +54,8 @@ export class InitializationService {
|
|
|
54
54
|
if (configResult.configuration.permissions.deny) {
|
|
55
55
|
permissionManager.updateDeniedRules(configResult.configuration.permissions.deny);
|
|
56
56
|
}
|
|
57
|
-
if (configResult.configuration.permissions.
|
|
58
|
-
permissionManager.
|
|
57
|
+
if (configResult.configuration.permissions.permissionMode) {
|
|
58
|
+
permissionManager.updateConfiguredPermissionMode(configResult.configuration.permissions.permissionMode);
|
|
59
59
|
}
|
|
60
60
|
if (configResult.configuration.permissions.additionalDirectories) {
|
|
61
61
|
permissionManager.updateAdditionalDirectories(configResult.configuration.permissions.additionalDirectories);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonlHandler.d.ts","sourceRoot":"","sources":["../../src/services/jsonlHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;;IAQlE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoCvD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgCtE;;OAEG;IACH,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"jsonlHandler.d.ts","sourceRoot":"","sources":["../../src/services/jsonlHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;;IAQlE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAyChB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoCvD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgCtE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;YACW,eAAe;IAW7B;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IA6BvD;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAUjD;;;;;OAKG;IACH,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,UAAU,GAC/B,MAAM;CAcV"}
|
|
@@ -152,6 +152,9 @@ export class JsonlHandler {
|
|
|
152
152
|
validateMessages(messages) {
|
|
153
153
|
for (let i = 0; i < messages.length; i++) {
|
|
154
154
|
const message = messages[i];
|
|
155
|
+
if (!message.id) {
|
|
156
|
+
throw new Error(`Message at index ${i} is missing required field: id`);
|
|
157
|
+
}
|
|
155
158
|
if (!message.role) {
|
|
156
159
|
throw new Error(`Message at index ${i} is missing required field: role`);
|
|
157
160
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { FileSnapshot } from "../types/reversion.js";
|
|
2
2
|
export declare class ReversionService {
|
|
3
3
|
private historyBaseDir;
|
|
4
|
-
private
|
|
5
|
-
constructor(
|
|
4
|
+
private rootSessionId;
|
|
5
|
+
constructor(rootSessionId: string);
|
|
6
6
|
private getFilePathHash;
|
|
7
7
|
private getNextVersion;
|
|
8
8
|
private updateVersionsFile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reversionService.d.ts","sourceRoot":"","sources":["../../src/services/reversionService.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"reversionService.d.ts","sourceRoot":"","sources":["../../src/services/reversionService.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM;IAUjC,OAAO,CAAC,eAAe;YAIT,cAAc;YAad,kBAAkB;IAOhC;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB3D;;OAEG;IACG,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWvE;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;YAI7B,eAAe;CAG9B"}
|
|
@@ -3,9 +3,9 @@ import { join } from "path";
|
|
|
3
3
|
import { homedir } from "os";
|
|
4
4
|
import { createHash } from "crypto";
|
|
5
5
|
export class ReversionService {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
8
|
-
this.historyBaseDir = join(homedir(), ".wave", "file-history",
|
|
6
|
+
constructor(rootSessionId) {
|
|
7
|
+
this.rootSessionId = rootSessionId;
|
|
8
|
+
this.historyBaseDir = join(homedir(), ".wave", "file-history", rootSessionId || "default");
|
|
9
9
|
}
|
|
10
10
|
getFilePathHash(filePath) {
|
|
11
11
|
return createHash("md5").update(filePath).digest("hex");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/services/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAOjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CACd,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,cAAc,CAAC,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CACxE,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAGD,eAAO,MAAM,WAAW,QAAuC,CAAC;AAoChE;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,UAAmB,GACxC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,UAAmB,GACxC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,UAAmB,GACxC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,EAAE,EACtB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,UAAmB,EACzC,aAAa,CAAC,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAuEf;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,UAAmB,GACxC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/services/session.ts"],"names":[],"mappings":"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"}
|