wave-agent-sdk 0.5.0 → 0.6.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/dist/agent.d.ts +14 -6
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +65 -88
- package/dist/constants/prompts.d.ts +18 -14
- package/dist/constants/prompts.d.ts.map +1 -1
- package/dist/constants/prompts.js +130 -54
- package/dist/constants/tools.d.ts +4 -1
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +4 -1
- 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 +2 -5
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +59 -48
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +59 -53
- package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
- package/dist/managers/foregroundTaskManager.js +3 -2
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/messageManager.d.ts +14 -10
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +102 -62
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +25 -15
- package/dist/managers/planManager.d.ts +1 -1
- package/dist/managers/planManager.d.ts.map +1 -1
- package/dist/managers/planManager.js +2 -2
- package/dist/managers/slashCommandManager.d.ts +3 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +7 -2
- package/dist/managers/subagentManager.d.ts +4 -0
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +22 -14
- package/dist/managers/toolManager.d.ts +11 -0
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +20 -2
- package/dist/services/aiService.d.ts +0 -1
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +4 -140
- package/dist/services/memory.d.ts +0 -3
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +0 -59
- package/dist/services/session.d.ts +15 -1
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +57 -1
- package/dist/services/taskManager.d.ts +21 -0
- package/dist/services/taskManager.d.ts.map +1 -0
- package/dist/services/taskManager.js +158 -0
- package/dist/tools/askUserQuestion.d.ts.map +1 -1
- package/dist/tools/askUserQuestion.js +39 -25
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +7 -9
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +2 -1
- package/dist/tools/exitPlanMode.d.ts.map +1 -1
- package/dist/tools/exitPlanMode.js +25 -1
- package/dist/tools/globTool.d.ts.map +1 -1
- package/dist/tools/globTool.js +8 -2
- package/dist/tools/grepTool.d.ts.map +1 -1
- package/dist/tools/grepTool.js +17 -6
- package/dist/tools/lsTool.d.ts.map +1 -1
- package/dist/tools/lsTool.js +3 -1
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +16 -1
- package/dist/tools/taskManagementTools.d.ts +6 -0
- package/dist/tools/taskManagementTools.d.ts.map +1 -0
- package/dist/tools/taskManagementTools.js +453 -0
- package/dist/tools/taskOutputTool.d.ts.map +1 -1
- package/dist/tools/taskOutputTool.js +32 -8
- package/dist/tools/taskStopTool.d.ts.map +1 -1
- package/dist/tools/taskStopTool.js +7 -1
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +6 -1
- package/dist/tools/types.d.ts +9 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +9 -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 +2 -8
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/processes.d.ts +11 -6
- package/dist/types/processes.d.ts.map +1 -1
- package/dist/types/tasks.d.ts +13 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +1 -0
- package/dist/types/tools.d.ts +4 -1
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/builtinSubagents.d.ts.map +1 -1
- package/dist/utils/builtinSubagents.js +38 -1
- package/dist/utils/cacheControlUtils.d.ts.map +1 -1
- package/dist/utils/cacheControlUtils.js +18 -12
- package/dist/utils/constants.d.ts +0 -4
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +0 -4
- package/dist/utils/convertMessagesForAPI.js +2 -2
- package/dist/utils/messageOperations.d.ts +2 -35
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +4 -97
- package/dist/utils/nameGenerator.d.ts +1 -1
- package/dist/utils/nameGenerator.d.ts.map +1 -1
- package/dist/utils/nameGenerator.js +19 -3
- package/package.json +1 -1
- package/src/agent.ts +90 -101
- package/src/constants/prompts.ts +156 -65
- package/src/constants/tools.ts +4 -1
- package/src/index.ts +1 -0
- package/src/managers/aiManager.ts +79 -70
- package/src/managers/backgroundTaskManager.ts +53 -54
- package/src/managers/foregroundTaskManager.ts +3 -2
- package/src/managers/mcpManager.ts +6 -3
- package/src/managers/messageManager.ts +137 -73
- package/src/managers/permissionManager.ts +32 -21
- package/src/managers/planManager.ts +2 -2
- package/src/managers/slashCommandManager.ts +11 -2
- package/src/managers/subagentManager.ts +33 -14
- package/src/managers/toolManager.ts +32 -2
- package/src/services/aiService.ts +3 -145
- package/src/services/memory.ts +0 -72
- package/src/services/session.ts +73 -0
- package/src/services/taskManager.ts +188 -0
- package/src/tools/askUserQuestion.ts +51 -29
- package/src/tools/bashTool.ts +9 -15
- package/src/tools/editTool.ts +3 -1
- package/src/tools/exitPlanMode.ts +26 -2
- package/src/tools/globTool.ts +10 -2
- package/src/tools/grepTool.ts +17 -6
- package/src/tools/lsTool.ts +3 -1
- package/src/tools/readTool.ts +17 -1
- package/src/tools/taskManagementTools.ts +498 -0
- package/src/tools/taskOutputTool.ts +34 -12
- package/src/tools/taskStopTool.ts +7 -1
- package/src/tools/taskTool.ts +7 -1
- package/src/tools/types.ts +10 -0
- package/src/tools/writeTool.ts +9 -2
- package/src/types/index.ts +1 -0
- package/src/types/messaging.ts +1 -9
- package/src/types/processes.ts +13 -7
- package/src/types/tasks.ts +13 -0
- package/src/types/tools.ts +4 -1
- package/src/utils/builtinSubagents.ts +47 -1
- package/src/utils/cacheControlUtils.ts +26 -18
- package/src/utils/constants.ts +0 -5
- package/src/utils/convertMessagesForAPI.ts +2 -2
- package/src/utils/messageOperations.ts +5 -136
- package/src/utils/nameGenerator.ts +20 -3
- package/dist/tools/todoWriteTool.d.ts +0 -6
- package/dist/tools/todoWriteTool.d.ts.map +0 -1
- package/dist/tools/todoWriteTool.js +0 -220
- package/src/tools/todoWriteTool.ts +0 -257
|
@@ -44,6 +44,29 @@ export class BackgroundTaskManager {
|
|
|
44
44
|
status: "running",
|
|
45
45
|
stdout: "",
|
|
46
46
|
stderr: "",
|
|
47
|
+
onStop: () => {
|
|
48
|
+
try {
|
|
49
|
+
if (child.pid) {
|
|
50
|
+
process.kill(-child.pid, "SIGTERM");
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
if (child.pid && !child.killed) {
|
|
53
|
+
try {
|
|
54
|
+
process.kill(-child.pid, "SIGKILL");
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
logger.error("Failed to force kill process:", error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, 1000);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
child.kill("SIGTERM");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
child.kill("SIGTERM");
|
|
68
|
+
}
|
|
69
|
+
},
|
|
47
70
|
};
|
|
48
71
|
this.tasks.set(id, shell);
|
|
49
72
|
this.notifyTasksChange();
|
|
@@ -114,6 +137,29 @@ export class BackgroundTaskManager {
|
|
|
114
137
|
status: "running",
|
|
115
138
|
stdout: initialStdout,
|
|
116
139
|
stderr: initialStderr,
|
|
140
|
+
onStop: () => {
|
|
141
|
+
try {
|
|
142
|
+
if (child.pid) {
|
|
143
|
+
process.kill(-child.pid, "SIGTERM");
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
if (child.pid && !child.killed) {
|
|
146
|
+
try {
|
|
147
|
+
process.kill(-child.pid, "SIGKILL");
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
logger.error("Failed to force kill process:", error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}, 1000);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
child.kill("SIGTERM");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
child.kill("SIGTERM");
|
|
161
|
+
}
|
|
162
|
+
},
|
|
117
163
|
};
|
|
118
164
|
this.tasks.set(id, shell);
|
|
119
165
|
this.notifyTasksChange();
|
|
@@ -177,64 +223,24 @@ export class BackgroundTaskManager {
|
|
|
177
223
|
if (!task || task.status !== "running") {
|
|
178
224
|
return false;
|
|
179
225
|
}
|
|
180
|
-
if (task.
|
|
181
|
-
const shell = task;
|
|
226
|
+
if (task.onStop) {
|
|
182
227
|
try {
|
|
183
|
-
|
|
184
|
-
if (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (shell.status === "running" &&
|
|
189
|
-
shell.process.pid &&
|
|
190
|
-
!shell.process.killed) {
|
|
191
|
-
try {
|
|
192
|
-
process.kill(-shell.process.pid, "SIGKILL");
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
logger.error("Failed to force kill process:", error);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}, 1000);
|
|
228
|
+
const result = task.onStop();
|
|
229
|
+
if (result instanceof Promise) {
|
|
230
|
+
result.catch((error) => {
|
|
231
|
+
logger.error("Error in background task onStop callback:", error);
|
|
232
|
+
});
|
|
199
233
|
}
|
|
200
|
-
shell.status = "killed";
|
|
201
|
-
shell.endTime = Date.now();
|
|
202
|
-
shell.runtime = shell.endTime - shell.startTime;
|
|
203
|
-
this.notifyTasksChange();
|
|
204
|
-
return true;
|
|
205
234
|
}
|
|
206
|
-
catch {
|
|
207
|
-
|
|
208
|
-
try {
|
|
209
|
-
shell.process.kill("SIGTERM");
|
|
210
|
-
setTimeout(() => {
|
|
211
|
-
if (!shell.process.killed) {
|
|
212
|
-
shell.process.kill("SIGKILL");
|
|
213
|
-
}
|
|
214
|
-
}, 1000);
|
|
215
|
-
shell.status = "killed";
|
|
216
|
-
shell.endTime = Date.now();
|
|
217
|
-
shell.runtime = shell.endTime - shell.startTime;
|
|
218
|
-
this.notifyTasksChange();
|
|
219
|
-
return true;
|
|
220
|
-
}
|
|
221
|
-
catch (directKillError) {
|
|
222
|
-
logger.error("Failed to kill child process:", directKillError);
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
logger.error("Error in background task onStop callback:", error);
|
|
225
237
|
}
|
|
226
238
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
task.endTime = Date.now();
|
|
233
|
-
task.runtime = task.endTime - task.startTime;
|
|
234
|
-
this.notifyTasksChange();
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
return false;
|
|
239
|
+
task.status = "killed";
|
|
240
|
+
task.endTime = Date.now();
|
|
241
|
+
task.runtime = task.endTime - task.startTime;
|
|
242
|
+
this.notifyTasksChange();
|
|
243
|
+
return true;
|
|
238
244
|
}
|
|
239
245
|
cleanup() {
|
|
240
246
|
// Kill all running tasks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foregroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/foregroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,qBAAqB,CAAwB;IAE9C,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIlD,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMpC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"foregroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/foregroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,qBAAqB,CAAwB;IAE9C,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIlD,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMpC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C,cAAc,IAAI,OAAO;CAGjC"}
|
|
@@ -9,8 +9,9 @@ export class ForegroundTaskManager {
|
|
|
9
9
|
this.activeForegroundTasks = this.activeForegroundTasks.filter((t) => t.id !== id);
|
|
10
10
|
}
|
|
11
11
|
async backgroundCurrentTask() {
|
|
12
|
-
const
|
|
13
|
-
|
|
12
|
+
const tasks = [...this.activeForegroundTasks].reverse();
|
|
13
|
+
this.activeForegroundTasks = [];
|
|
14
|
+
for (const task of tasks) {
|
|
14
15
|
await task.backgroundHandler();
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -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,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;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,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;IACvC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,GAAE,iBAAsB;IAK3C;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4CV,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,GAC5B,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;YAqCY,uBAAuB;IA8D/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;
|
|
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,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;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,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;IACvC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,GAAE,iBAAsB;IAK3C;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IA4CV,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,GAC5B,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;YAqCY,uBAAuB;IA8D/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IA0BjC;;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"}
|
|
@@ -8,7 +8,6 @@ export interface MessageManagerCallbacks {
|
|
|
8
8
|
onMessagesChange?: (messages: Message[]) => void;
|
|
9
9
|
onSessionIdChange?: (sessionId: string) => void;
|
|
10
10
|
onLatestTotalTokensChange?: (latestTotalTokens: number) => void;
|
|
11
|
-
onUserInputHistoryChange?: (history: string[]) => void;
|
|
12
11
|
onUsagesChange?: (usages: Usage[]) => void;
|
|
13
12
|
onUserMessageAdded?: (params: UserMessageParams) => void;
|
|
14
13
|
onAssistantMessageAdded?: () => void;
|
|
@@ -16,7 +15,7 @@ export interface MessageManagerCallbacks {
|
|
|
16
15
|
onAssistantReasoningUpdated?: (chunk: string, accumulated: string) => void;
|
|
17
16
|
onToolBlockUpdated?: (params: AgentToolBlockUpdateParams) => void;
|
|
18
17
|
onErrorBlockAdded?: (error: string) => void;
|
|
19
|
-
onCompressBlockAdded?: (
|
|
18
|
+
onCompressBlockAdded?: (content: string) => void;
|
|
20
19
|
onCompressionStateChange?: (isCompressing: boolean) => void;
|
|
21
20
|
onMemoryBlockAdded?: (content: string, success: boolean, type: "project" | "user", storagePath: string) => void;
|
|
22
21
|
onAddCommandOutputMessage?: (command: string) => void;
|
|
@@ -31,6 +30,8 @@ export interface MessageManagerCallbacks {
|
|
|
31
30
|
subagent_type: string;
|
|
32
31
|
}) => void;
|
|
33
32
|
onSubAgentBlockUpdated?: (subagentId: string, status: "active" | "completed" | "error" | "aborted") => void;
|
|
33
|
+
onFileHistoryBlockAdded?: (snapshots: import("../types/reversion.js").FileSnapshot[]) => void;
|
|
34
|
+
onSubagentTaskStopRequested?: (subagentId: string) => void;
|
|
34
35
|
}
|
|
35
36
|
export interface MessageManagerOptions {
|
|
36
37
|
callbacks: MessageManagerCallbacks;
|
|
@@ -42,9 +43,10 @@ export interface MessageManagerOptions {
|
|
|
42
43
|
}
|
|
43
44
|
export declare class MessageManager {
|
|
44
45
|
private sessionId;
|
|
46
|
+
private rootSessionId;
|
|
47
|
+
private parentSessionId?;
|
|
45
48
|
private messages;
|
|
46
49
|
private latestTotalTokens;
|
|
47
|
-
private userInputHistory;
|
|
48
50
|
private workdir;
|
|
49
51
|
private encodedWorkdir;
|
|
50
52
|
private logger?;
|
|
@@ -57,9 +59,10 @@ export declare class MessageManager {
|
|
|
57
59
|
private subagentType?;
|
|
58
60
|
constructor(options: MessageManagerOptions);
|
|
59
61
|
getSessionId(): string;
|
|
62
|
+
getRootSessionId(): string;
|
|
63
|
+
getParentSessionId(): string | undefined;
|
|
60
64
|
getMessages(): Message[];
|
|
61
65
|
getlatestTotalTokens(): number;
|
|
62
|
-
getUserInputHistory(): string[];
|
|
63
66
|
getWorkdir(): string;
|
|
64
67
|
/**
|
|
65
68
|
* Returns all files mentioned in the current conversation context.
|
|
@@ -87,9 +90,8 @@ export declare class MessageManager {
|
|
|
87
90
|
*/
|
|
88
91
|
saveSession(): Promise<void>;
|
|
89
92
|
setlatestTotalTokens(latestTotalTokens: number): void;
|
|
90
|
-
setUserInputHistory(userInputHistory: string[]): void;
|
|
91
93
|
/**
|
|
92
|
-
* Clear messages
|
|
94
|
+
* Clear messages
|
|
93
95
|
*/
|
|
94
96
|
clearMessages(): void;
|
|
95
97
|
/**
|
|
@@ -101,8 +103,6 @@ export declare class MessageManager {
|
|
|
101
103
|
*/
|
|
102
104
|
triggerSlashCommandsChange(commands: SlashCommand[]): void;
|
|
103
105
|
initializeFromSession(sessionData: SessionData): void;
|
|
104
|
-
addToInputHistory(input: string): void;
|
|
105
|
-
clearInputHistory(): void;
|
|
106
106
|
addUserMessage(params: UserMessageParams): void;
|
|
107
107
|
addAssistantMessage(content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage, additionalFields?: Record<string, unknown>): void;
|
|
108
108
|
mergeAssistantAdditionalFields(additionalFields: Record<string, unknown>): void;
|
|
@@ -110,9 +110,9 @@ export declare class MessageManager {
|
|
|
110
110
|
addErrorBlock(error: string): void;
|
|
111
111
|
addInfoBlock(content: string): void;
|
|
112
112
|
/**
|
|
113
|
-
* Compress messages and update session, delete compressed messages, only keep compressed messages and
|
|
113
|
+
* Compress messages and update session, delete compressed messages, only keep compressed messages and last 3 messages
|
|
114
114
|
*/
|
|
115
|
-
compressMessagesAndUpdateSession(
|
|
115
|
+
compressMessagesAndUpdateSession(compressedContent: string, usage?: Usage): void;
|
|
116
116
|
addFileHistoryBlock(snapshots: import("../types/reversion.js").FileSnapshot[]): void;
|
|
117
117
|
addCommandOutputMessage(command: string): void;
|
|
118
118
|
updateCommandOutputMessage(command: string, output: string): void;
|
|
@@ -147,6 +147,10 @@ export declare class MessageManager {
|
|
|
147
147
|
* Used for hook error handling when the user prompt needs to be erased
|
|
148
148
|
*/
|
|
149
149
|
removeLastUserMessage(): void;
|
|
150
|
+
getFullMessageThread(): Promise<{
|
|
151
|
+
messages: Message[];
|
|
152
|
+
sessionIds: string[];
|
|
153
|
+
}>;
|
|
150
154
|
/**
|
|
151
155
|
* Truncate history to a specific index and revert file changes.
|
|
152
156
|
* @param index - The index of the user message to truncate to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages,
|
|
1
|
+
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, addSubagentBlockToMessage, updateSubagentBlockInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
|
|
4
4
|
import { pathEncoder } from "../utils/pathEncoder.js";
|
|
@@ -6,9 +6,9 @@ export class MessageManager {
|
|
|
6
6
|
constructor(options) {
|
|
7
7
|
this.filesInContext = new Set(); // Track files mentioned in the conversation
|
|
8
8
|
this.sessionId = generateSessionId();
|
|
9
|
+
this.rootSessionId = this.sessionId;
|
|
9
10
|
this.messages = [];
|
|
10
11
|
this.latestTotalTokens = 0;
|
|
11
|
-
this.userInputHistory = [];
|
|
12
12
|
this.workdir = options.workdir;
|
|
13
13
|
this.encodedWorkdir = pathEncoder.encodeSync(this.workdir); // Cache encoded workdir
|
|
14
14
|
this.callbacks = options.callbacks;
|
|
@@ -24,15 +24,18 @@ export class MessageManager {
|
|
|
24
24
|
getSessionId() {
|
|
25
25
|
return this.sessionId;
|
|
26
26
|
}
|
|
27
|
+
getRootSessionId() {
|
|
28
|
+
return this.rootSessionId;
|
|
29
|
+
}
|
|
30
|
+
getParentSessionId() {
|
|
31
|
+
return this.parentSessionId;
|
|
32
|
+
}
|
|
27
33
|
getMessages() {
|
|
28
34
|
return [...this.messages];
|
|
29
35
|
}
|
|
30
36
|
getlatestTotalTokens() {
|
|
31
37
|
return this.latestTotalTokens;
|
|
32
38
|
}
|
|
33
|
-
getUserInputHistory() {
|
|
34
|
-
return [...this.userInputHistory];
|
|
35
|
-
}
|
|
36
39
|
getWorkdir() {
|
|
37
40
|
return this.workdir;
|
|
38
41
|
}
|
|
@@ -122,7 +125,7 @@ export class MessageManager {
|
|
|
122
125
|
}
|
|
123
126
|
// Use JSONL format for new sessions
|
|
124
127
|
await appendMessages(this.sessionId, unsavedMessages, // Only append new messages
|
|
125
|
-
this.workdir, this.sessionType);
|
|
128
|
+
this.workdir, this.sessionType, this.rootSessionId, this.parentSessionId);
|
|
126
129
|
// Update the saved message count
|
|
127
130
|
this.savedMessageCount = this.messages.length;
|
|
128
131
|
}
|
|
@@ -136,17 +139,13 @@ export class MessageManager {
|
|
|
136
139
|
this.callbacks.onLatestTotalTokensChange?.(latestTotalTokens);
|
|
137
140
|
}
|
|
138
141
|
}
|
|
139
|
-
setUserInputHistory(userInputHistory) {
|
|
140
|
-
this.userInputHistory = [...userInputHistory];
|
|
141
|
-
this.callbacks.onUserInputHistoryChange?.(this.userInputHistory);
|
|
142
|
-
}
|
|
143
142
|
/**
|
|
144
|
-
* Clear messages
|
|
143
|
+
* Clear messages
|
|
145
144
|
*/
|
|
146
145
|
clearMessages() {
|
|
147
146
|
this.setMessages([]);
|
|
148
|
-
this.setUserInputHistory([]);
|
|
149
147
|
this.setSessionId(generateSessionId());
|
|
148
|
+
this.rootSessionId = this.sessionId;
|
|
150
149
|
this.setlatestTotalTokens(0);
|
|
151
150
|
this.savedMessageCount = 0; // Reset saved message count
|
|
152
151
|
}
|
|
@@ -165,29 +164,15 @@ export class MessageManager {
|
|
|
165
164
|
// Initialize state from session data
|
|
166
165
|
initializeFromSession(sessionData) {
|
|
167
166
|
this.setSessionId(sessionData.id);
|
|
167
|
+
this.rootSessionId = sessionData.rootSessionId || sessionData.id;
|
|
168
|
+
this.parentSessionId = sessionData.parentSessionId;
|
|
168
169
|
this.setMessages([...sessionData.messages]);
|
|
169
170
|
this.updateFilesInContext(sessionData.messages);
|
|
170
171
|
this.setlatestTotalTokens(sessionData.metadata.latestTotalTokens);
|
|
171
|
-
// Extract user input history from session messages
|
|
172
|
-
this.setUserInputHistory(extractUserInputHistory(sessionData.messages));
|
|
173
172
|
// Set saved message count to the number of loaded messages since they're already saved
|
|
174
173
|
// This must be done after setSessionId which resets it to 0
|
|
175
174
|
this.savedMessageCount = sessionData.messages.length;
|
|
176
175
|
}
|
|
177
|
-
// Add to input history
|
|
178
|
-
addToInputHistory(input) {
|
|
179
|
-
// Avoid adding duplicate inputs
|
|
180
|
-
if (this.userInputHistory.length > 0 &&
|
|
181
|
-
this.userInputHistory[this.userInputHistory.length - 1] === input) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// Limit history records, keep the latest 100
|
|
185
|
-
this.setUserInputHistory([...this.userInputHistory, input].slice(-100));
|
|
186
|
-
}
|
|
187
|
-
// Clear input history
|
|
188
|
-
clearInputHistory() {
|
|
189
|
-
this.setUserInputHistory([]);
|
|
190
|
-
}
|
|
191
176
|
// Encapsulated message operation functions
|
|
192
177
|
addUserMessage(params) {
|
|
193
178
|
const newMessages = addUserMessageToMessages({
|
|
@@ -236,17 +221,7 @@ export class MessageManager {
|
|
|
236
221
|
updateToolBlock(params) {
|
|
237
222
|
const newMessages = updateToolBlockInMessage({
|
|
238
223
|
messages: this.messages,
|
|
239
|
-
|
|
240
|
-
parameters: params.parameters,
|
|
241
|
-
result: params.result,
|
|
242
|
-
success: params.success,
|
|
243
|
-
error: params.error,
|
|
244
|
-
stage: params.stage,
|
|
245
|
-
name: params.name,
|
|
246
|
-
shortResult: params.shortResult,
|
|
247
|
-
images: params.images,
|
|
248
|
-
compactParams: params.compactParams,
|
|
249
|
-
parametersChunk: params.parametersChunk,
|
|
224
|
+
...params,
|
|
250
225
|
});
|
|
251
226
|
this.setMessages(newMessages);
|
|
252
227
|
this.callbacks.onToolBlockUpdated?.(params);
|
|
@@ -272,10 +247,11 @@ export class MessageManager {
|
|
|
272
247
|
}
|
|
273
248
|
}
|
|
274
249
|
/**
|
|
275
|
-
* Compress messages and update session, delete compressed messages, only keep compressed messages and
|
|
250
|
+
* Compress messages and update session, delete compressed messages, only keep compressed messages and last 3 messages
|
|
276
251
|
*/
|
|
277
|
-
compressMessagesAndUpdateSession(
|
|
278
|
-
|
|
252
|
+
compressMessagesAndUpdateSession(compressedContent, usage) {
|
|
253
|
+
// Get last 3 messages to preserve
|
|
254
|
+
const lastThreeMessages = this.messages.slice(-3);
|
|
279
255
|
// Create compressed message
|
|
280
256
|
const compressMessage = {
|
|
281
257
|
role: "assistant",
|
|
@@ -288,19 +264,20 @@ export class MessageManager {
|
|
|
288
264
|
],
|
|
289
265
|
...(usage && { usage }),
|
|
290
266
|
};
|
|
291
|
-
//
|
|
292
|
-
const
|
|
293
|
-
//
|
|
294
|
-
const
|
|
295
|
-
compressMessage,
|
|
296
|
-
...currentMessages.slice(actualIndex),
|
|
297
|
-
];
|
|
298
|
-
// Update sessionId
|
|
267
|
+
// Build new message array: keep the compressed message and last 3 messages
|
|
268
|
+
const newMessages = [compressMessage, ...lastThreeMessages];
|
|
269
|
+
// Update sessionId and parentSessionId
|
|
270
|
+
const oldSessionId = this.sessionId;
|
|
299
271
|
this.setSessionId(generateSessionId());
|
|
272
|
+
this.parentSessionId = oldSessionId;
|
|
273
|
+
// Trigger task list update if this is the main session to ensure continuity
|
|
274
|
+
if (this.sessionType === "main") {
|
|
275
|
+
this.callbacks.onSessionIdChange?.(this.sessionId);
|
|
276
|
+
}
|
|
300
277
|
// Set new message list
|
|
301
278
|
this.setMessages(newMessages);
|
|
302
|
-
// Trigger compression callback
|
|
303
|
-
this.callbacks.onCompressBlockAdded?.(
|
|
279
|
+
// Trigger compression callback
|
|
280
|
+
this.callbacks.onCompressBlockAdded?.(compressedContent);
|
|
304
281
|
}
|
|
305
282
|
addFileHistoryBlock(snapshots) {
|
|
306
283
|
if (snapshots.length === 0)
|
|
@@ -312,6 +289,7 @@ export class MessageManager {
|
|
|
312
289
|
snapshots,
|
|
313
290
|
});
|
|
314
291
|
this.setMessages([...this.messages]);
|
|
292
|
+
this.callbacks.onFileHistoryBlockAdded?.(snapshots);
|
|
315
293
|
}
|
|
316
294
|
}
|
|
317
295
|
// Bash command related message operations
|
|
@@ -460,31 +438,93 @@ export class MessageManager {
|
|
|
460
438
|
const newMessages = removeLastUserMessage(this.messages);
|
|
461
439
|
this.setMessages(newMessages);
|
|
462
440
|
}
|
|
441
|
+
async getFullMessageThread() {
|
|
442
|
+
const { loadFullMessageThread } = await import("../services/session.js");
|
|
443
|
+
return loadFullMessageThread(this.sessionId, this.workdir);
|
|
444
|
+
}
|
|
463
445
|
/**
|
|
464
446
|
* Truncate history to a specific index and revert file changes.
|
|
465
447
|
* @param index - The index of the user message to truncate to.
|
|
466
448
|
* @param reversionManager - Optional ReversionManager to handle file rollbacks.
|
|
467
449
|
*/
|
|
468
450
|
async truncateHistory(index, reversionManager) {
|
|
469
|
-
|
|
451
|
+
const { messages, sessionIds } = await this.getFullMessageThread();
|
|
452
|
+
if (index < 0 || index >= messages.length) {
|
|
470
453
|
throw new Error(`Invalid message index: ${index}`);
|
|
471
454
|
}
|
|
472
|
-
//
|
|
473
|
-
|
|
455
|
+
// Find which session the index belongs to
|
|
456
|
+
let targetSessionId = this.sessionId;
|
|
457
|
+
let targetIndexInSession = index;
|
|
458
|
+
// We need to be careful here because loadFullMessageThread might have removed "compress" blocks
|
|
459
|
+
// Let's re-calculate based on the actual messages returned.
|
|
460
|
+
// Actually, it's easier to just load sessions one by one again or keep track of counts.
|
|
461
|
+
// For simplicity, let's assume we want to truncate the WHOLE thread.
|
|
462
|
+
// If the index is in a previous session, we need to:
|
|
463
|
+
// 1. Load that session.
|
|
464
|
+
// 2. Truncate it.
|
|
465
|
+
// 3. Make it the current session.
|
|
466
|
+
// 4. Delete/Invalidate subsequent sessions.
|
|
467
|
+
// To correctly map 'index' to a session, we need to know the message count of each session
|
|
468
|
+
// as they appear in the concatenated 'messages' array.
|
|
469
|
+
let remainingIndex = index;
|
|
470
|
+
const { loadSessionFromJsonl } = await import("../services/session.js");
|
|
471
|
+
for (const sid of sessionIds) {
|
|
472
|
+
const sessionData = await loadSessionFromJsonl(sid, this.workdir);
|
|
473
|
+
if (!sessionData)
|
|
474
|
+
continue;
|
|
475
|
+
const sessionMessages = sessionData.messages;
|
|
476
|
+
// If this is not the first session in the thread, it might have a compress block at the start
|
|
477
|
+
// that was removed in getFullMessageThread.
|
|
478
|
+
const hasCompressBlock = sessionMessages[0]?.blocks.some((b) => b.type === "compress");
|
|
479
|
+
const effectiveMessages = hasCompressBlock && sid !== sessionIds[0]
|
|
480
|
+
? sessionMessages.slice(1)
|
|
481
|
+
: sessionMessages;
|
|
482
|
+
if (remainingIndex < effectiveMessages.length) {
|
|
483
|
+
targetSessionId = sid;
|
|
484
|
+
targetIndexInSession = hasCompressBlock
|
|
485
|
+
? remainingIndex + 1
|
|
486
|
+
: remainingIndex;
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
remainingIndex -= effectiveMessages.length;
|
|
490
|
+
}
|
|
491
|
+
// Load the target session to perform truncation
|
|
492
|
+
const targetSessionData = await loadSessionFromJsonl(targetSessionId, this.workdir);
|
|
493
|
+
if (!targetSessionData)
|
|
494
|
+
throw new Error(`Target session ${targetSessionId} not found`);
|
|
495
|
+
// Identify messages to be removed (from the whole thread)
|
|
496
|
+
const messagesToRemove = messages.slice(index);
|
|
474
497
|
const messageIdsToRemove = messagesToRemove
|
|
475
498
|
.map((m) => m.id)
|
|
476
499
|
.filter((id) => !!id);
|
|
477
500
|
// Revert file changes if manager is provided
|
|
478
501
|
if (reversionManager && messageIdsToRemove.length > 0) {
|
|
479
|
-
await reversionManager.revertTo(messageIdsToRemove,
|
|
502
|
+
await reversionManager.revertTo(messageIdsToRemove, messages);
|
|
480
503
|
}
|
|
481
|
-
// Truncate messages in
|
|
482
|
-
const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
504
|
+
// Truncate messages in the target session
|
|
505
|
+
const newMessagesInSession = targetSessionData.messages.slice(0, targetIndexInSession);
|
|
506
|
+
// Identify subagent tasks to stop
|
|
507
|
+
for (const message of messagesToRemove) {
|
|
508
|
+
for (const block of message.blocks) {
|
|
509
|
+
if (block.type === "subagent" && block.subagentId) {
|
|
510
|
+
this.callbacks.onSubagentTaskStopRequested?.(block.subagentId);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// Update target session file
|
|
515
|
+
this.sessionId = targetSessionId;
|
|
516
|
+
this.rootSessionId = targetSessionData.rootSessionId || targetSessionId;
|
|
517
|
+
this.parentSessionId = targetSessionData.parentSessionId;
|
|
518
|
+
this.transcriptPath = this.computeTranscriptPath();
|
|
519
|
+
await this.rewriteSessionFile(newMessagesInSession);
|
|
520
|
+
// Update in-memory messages to the truncated session messages
|
|
521
|
+
// We do NOT include ancestor messages here to avoid exceeding context limits.
|
|
522
|
+
// The 'compress' block at the start of the session (if any) already summarizes them.
|
|
523
|
+
this.setMessages(newMessagesInSession);
|
|
486
524
|
// Update saved message count
|
|
487
|
-
this.savedMessageCount =
|
|
525
|
+
this.savedMessageCount = newMessagesInSession.length;
|
|
526
|
+
// Notify session ID change if it changed
|
|
527
|
+
this.callbacks.onSessionIdChange?.(this.sessionId);
|
|
488
528
|
}
|
|
489
529
|
/**
|
|
490
530
|
* Rewrite the session file with the current messages.
|
|
@@ -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;AAqBhD,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,6BAA6B,CAAC,CAAiC;gBAE3D,OAAO,GAAE,wBAA6B;IAUlD;;OAEG;IACI,gCAAgC,CACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,IAAI;IAIP;;OAEG;IACH,2BAA2B,CAAC,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI;IAyB/D;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOzC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOxC;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ/C;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAYxD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKtD;;OAEG;IACI,eAAe,IAAI,MAAM,GAAG,SAAS;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,cAAc,GAAG,cAAc;IAI3E;;OAEG;IACH,8BAA8B,CAC5B,iBAAiB,CAAC,EAAE,cAAc,GACjC,cAAc;IAuBjB;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -230,31 +230,24 @@ export class PermissionManager {
|
|
|
230
230
|
if (targetPath) {
|
|
231
231
|
const { isInside, resolvedPath } = this.isInsideSafeZone(targetPath, workdir);
|
|
232
232
|
if (!isInside) {
|
|
233
|
-
this.logger?.
|
|
233
|
+
this.logger?.info("File operation outside the Safe Zone in acceptEdits mode, falling back to manual confirmation", {
|
|
234
234
|
toolName: context.toolName,
|
|
235
235
|
targetPath,
|
|
236
236
|
resolvedPath,
|
|
237
237
|
});
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
238
|
+
// Fall through to normal permission check flow to trigger confirmation prompt
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.logger?.debug("Permission automatically accepted for tool in acceptEdits mode", {
|
|
242
|
+
toolName: context.toolName,
|
|
243
|
+
});
|
|
244
|
+
return { behavior: "allow" };
|
|
242
245
|
}
|
|
243
246
|
}
|
|
244
|
-
this.logger?.debug("Permission automatically accepted for tool in acceptEdits mode", {
|
|
245
|
-
toolName: context.toolName,
|
|
246
|
-
});
|
|
247
|
-
return { behavior: "allow" };
|
|
248
247
|
}
|
|
249
248
|
}
|
|
250
249
|
// 1.3 If plan mode, allow Read-only tools and Edit/Write for plan file
|
|
251
250
|
if (context.permissionMode === "plan") {
|
|
252
|
-
if (context.toolName === BASH_TOOL_NAME) {
|
|
253
|
-
return {
|
|
254
|
-
behavior: "deny",
|
|
255
|
-
message: "Bash commands are not allowed in plan mode.",
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
251
|
const writeTools = [
|
|
259
252
|
EDIT_TOOL_NAME,
|
|
260
253
|
MULTI_EDIT_TOOL_NAME,
|
|
@@ -368,6 +361,23 @@ export class PermissionManager {
|
|
|
368
361
|
toolInput,
|
|
369
362
|
suggestedPrefix,
|
|
370
363
|
};
|
|
364
|
+
// Set hidePersistentOption for out-of-bounds file operations
|
|
365
|
+
const fileTools = [
|
|
366
|
+
EDIT_TOOL_NAME,
|
|
367
|
+
MULTI_EDIT_TOOL_NAME,
|
|
368
|
+
DELETE_FILE_TOOL_NAME,
|
|
369
|
+
WRITE_TOOL_NAME,
|
|
370
|
+
];
|
|
371
|
+
if (fileTools.includes(toolName)) {
|
|
372
|
+
const targetPath = (toolInput?.file_path || toolInput?.target_file);
|
|
373
|
+
const workdir = toolInput?.workdir;
|
|
374
|
+
if (targetPath) {
|
|
375
|
+
const { isInside } = this.isInsideSafeZone(targetPath, workdir);
|
|
376
|
+
if (!isInside) {
|
|
377
|
+
context.hidePersistentOption = true;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
371
381
|
// Set hidePersistentOption for dangerous or out-of-bounds bash commands
|
|
372
382
|
if (toolName === BASH_TOOL_NAME && toolInput?.command) {
|
|
373
383
|
const command = String(toolInput.command);
|
|
@@ -9,7 +9,7 @@ export declare class PlanManager {
|
|
|
9
9
|
/**
|
|
10
10
|
* Ensures the plan directory exists and generates a new plan file path with a random name
|
|
11
11
|
*/
|
|
12
|
-
getOrGeneratePlanFilePath(): Promise<{
|
|
12
|
+
getOrGeneratePlanFilePath(seed?: string): Promise<{
|
|
13
13
|
path: string;
|
|
14
14
|
name: string;
|
|
15
15
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planManager.d.ts","sourceRoot":"","sources":["../../src/managers/planManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,OAAO,CAAS;gBAEJ,MAAM,CAAC,EAAE,MAAM,YAAA;IAInC;;OAEG;IACU,yBAAyB,IAAI,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"planManager.d.ts","sourceRoot":"","sources":["../../src/managers/planManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,OAAO,CAAS;gBAEJ,MAAM,CAAC,EAAE,MAAM,YAAA;IAInC;;OAEG;IACU,yBAAyB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7D,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAgBF;;OAEG;IACI,UAAU,IAAI,MAAM;CAG5B"}
|