wave-agent-sdk 0.13.2 → 0.13.4
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 +7 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +37 -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.map +1 -1
- package/dist/managers/aiManager.js +65 -33
- package/dist/managers/backgroundTaskManager.d.ts +1 -0
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +49 -0
- package/dist/managers/forkedAgentManager.d.ts +49 -0
- package/dist/managers/forkedAgentManager.d.ts.map +1 -0
- package/dist/managers/forkedAgentManager.js +111 -0
- package/dist/managers/messageManager.d.ts +8 -1
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +14 -1
- package/dist/managers/notificationQueue.d.ts +8 -0
- package/dist/managers/notificationQueue.d.ts.map +1 -0
- package/dist/managers/notificationQueue.js +17 -0
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +2 -0
- package/dist/managers/subagentManager.d.ts +0 -10
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +60 -20
- package/dist/services/autoMemoryService.d.ts +1 -1
- package/dist/services/autoMemoryService.d.ts.map +1 -1
- package/dist/services/autoMemoryService.js +7 -9
- package/dist/services/interactionService.d.ts.map +1 -1
- package/dist/services/interactionService.js +12 -0
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +0 -9
- package/dist/types/agent.d.ts +1 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/messaging.d.ts +9 -1
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +6 -0
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +8 -0
- package/dist/utils/messageOperations.d.ts +9 -0
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +17 -0
- package/dist/utils/notificationXml.d.ts +4 -0
- package/dist/utils/notificationXml.d.ts.map +1 -0
- package/dist/utils/notificationXml.js +40 -0
- package/dist/utils/pathEncoder.d.ts +0 -1
- package/dist/utils/pathEncoder.d.ts.map +1 -1
- package/dist/utils/pathEncoder.js +1 -5
- package/package.json +1 -1
- package/src/agent.ts +44 -0
- package/src/index.ts +1 -0
- package/src/managers/aiManager.ts +76 -41
- package/src/managers/backgroundTaskManager.ts +72 -1
- package/src/managers/forkedAgentManager.ts +193 -0
- package/src/managers/messageManager.ts +25 -0
- package/src/managers/notificationQueue.ts +19 -0
- package/src/managers/permissionManager.ts +2 -0
- package/src/managers/subagentManager.ts +86 -42
- package/src/services/autoMemoryService.ts +11 -18
- package/src/services/interactionService.ts +18 -0
- package/src/tools/bashTool.ts +0 -9
- package/src/types/agent.ts +1 -0
- package/src/types/messaging.ts +11 -1
- package/src/utils/containerSetup.ts +8 -0
- package/src/utils/convertMessagesForAPI.ts +9 -0
- package/src/utils/messageOperations.ts +42 -1
- package/src/utils/notificationXml.ts +52 -0
- package/src/utils/pathEncoder.ts +1 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, updateUserMessageInMessages, addBangMessage, updateBangInMessage, completeBangInMessage, removeLastUserMessage, addToolBlockToMessageInMessages, generateMessageId, } from "../utils/messageOperations.js";
|
|
1
|
+
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, updateUserMessageInMessages, addBangMessage, updateBangInMessage, completeBangInMessage, removeLastUserMessage, addToolBlockToMessageInMessages, addNotificationMessageToMessages, generateMessageId, } from "../utils/messageOperations.js";
|
|
2
2
|
import { join, isAbsolute, relative } from "path";
|
|
3
3
|
import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
|
|
4
4
|
import { pathEncoder } from "../utils/pathEncoder.js";
|
|
@@ -398,6 +398,19 @@ export class MessageManager {
|
|
|
398
398
|
this.setMessages(updatedMessages);
|
|
399
399
|
this.callbacks.onCompleteBangMessage?.(command, exitCode);
|
|
400
400
|
}
|
|
401
|
+
addNotificationMessage(params) {
|
|
402
|
+
const newMessages = addNotificationMessageToMessages({
|
|
403
|
+
messages: this.messages,
|
|
404
|
+
...params,
|
|
405
|
+
});
|
|
406
|
+
this.setMessages(newMessages);
|
|
407
|
+
this.callbacks.onNotificationMessageAdded?.({
|
|
408
|
+
taskId: params.taskId,
|
|
409
|
+
taskType: params.taskType,
|
|
410
|
+
status: params.status,
|
|
411
|
+
summary: params.summary,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
401
414
|
/**
|
|
402
415
|
* Rebuild usage array from messages containing usage metadata
|
|
403
416
|
* Called during session restoration to reconstruct usage tracking
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notificationQueue.d.ts","sourceRoot":"","sources":["../../src/managers/notificationQueue.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAgB;IAC7B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAErC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKnC,UAAU,IAAI,MAAM,EAAE;IAMtB,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class NotificationQueue {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.queue = [];
|
|
4
|
+
}
|
|
5
|
+
enqueue(notification) {
|
|
6
|
+
this.queue.push(notification);
|
|
7
|
+
this.onNotificationsEnqueued?.();
|
|
8
|
+
}
|
|
9
|
+
dequeueAll() {
|
|
10
|
+
const items = [...this.queue];
|
|
11
|
+
this.queue = [];
|
|
12
|
+
return items;
|
|
13
|
+
}
|
|
14
|
+
hasPending() {
|
|
15
|
+
return this.queue.length > 0;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -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;AAkBhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
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;AAkBhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAiElD,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,wBAAwB,CAAC,EAAE,cAAc,CAAC;IAC1C,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,gEAAgE;IAChE,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAiB1B,OAAO,CAAC,SAAS;IAhBnB,OAAO,CAAC,wBAAwB,CAAC,CAAiB;IAClD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,2BAA2B,CAAgB;IACnD,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,gCAAgC,CAAC,CAAiC;IAC1E,OAAO,CAAC,OAAO,CAAC,CAAS;gBAGf,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,wBAA6B;IAmBxC;;OAEG;IACI,mCAAmC,CACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,IAAI;IAIP;;OAEG;IACH,8BAA8B,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI;IAcrE;;OAEG;IACI,2BAA2B,IAAI,cAAc,GAAG,SAAS;IAIhE;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACI,uBAAuB,IAAI,MAAM,EAAE;IAI1C;;OAEG;IACI,sBAAsB,IAAI,MAAM,EAAE;IAIzC;;OAEG;IACI,wBAAwB,IAAI,MAAM,EAAE;IAI3C;;OAEG;IACI,8BAA8B,IAAI,MAAM,EAAE;IAIjD;;OAEG;IACI,sBAAsB,IAAI,MAAM,EAAE;IAIzC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIzC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxC;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAIlC;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IASxD;;OAEG;IACI,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAW5D;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAItD;;OAEG;IACI,eAAe,IAAI,MAAM,GAAG,SAAS;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,cAAc,GAAG,cAAc;IAI3E;;OAEG;IACH,8BAA8B,CAC5B,iBAAiB,CAAC,EAAE,cAAc,GACjC,cAAc;IAejB;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAqP9B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO3C;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAc9C;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,qBAAqB;IAoFxB;;OAEG;IACH,OAAO,CAAC,WAAW;IA0EnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoHvB;;;;;;;OAOG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAgGjE;;;OAGG;IACU,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA4C5D"}
|
|
@@ -25,6 +25,7 @@ const SAFE_COMMANDS = [
|
|
|
25
25
|
"wc",
|
|
26
26
|
"sleep",
|
|
27
27
|
"find",
|
|
28
|
+
"sort",
|
|
28
29
|
];
|
|
29
30
|
const DEFAULT_ALLOWED_RULES = [
|
|
30
31
|
"Bash(git status*)",
|
|
@@ -670,6 +671,7 @@ export class PermissionManager {
|
|
|
670
671
|
cmd === "tail" ||
|
|
671
672
|
cmd === "wc" ||
|
|
672
673
|
cmd === "sleep" ||
|
|
674
|
+
cmd === "sort" ||
|
|
673
675
|
(cmd === "find" && !isDangerousFind(part))) {
|
|
674
676
|
return true;
|
|
675
677
|
}
|
|
@@ -89,16 +89,6 @@ export declare class SubagentManager {
|
|
|
89
89
|
stream?: boolean;
|
|
90
90
|
permissionModeOverride?: PermissionMode;
|
|
91
91
|
}, runInBackground?: boolean, onUpdate?: () => void): Promise<SubagentInstance>;
|
|
92
|
-
/**
|
|
93
|
-
* Create a new subagent instance initialized with a copy of the current message history.
|
|
94
|
-
* This is used for background tasks like auto-memory extraction.
|
|
95
|
-
*/
|
|
96
|
-
forkAgent(subagentType: string, messages: Message[], parameters: {
|
|
97
|
-
description: string;
|
|
98
|
-
allowedTools?: string[];
|
|
99
|
-
model?: string;
|
|
100
|
-
permissionModeOverride?: PermissionMode;
|
|
101
|
-
}, onUpdate?: () => void): Promise<SubagentInstance>;
|
|
102
92
|
/**
|
|
103
93
|
* Execute agent using subagent instance
|
|
104
94
|
*
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ import { MessageManager } from "./messageManager.js";
|
|
|
7
7
|
import { ToolManager } from "./toolManager.js";
|
|
8
8
|
import { AGENT_TOOL_NAME } from "../constants/tools.js";
|
|
9
9
|
import { addConsolidatedAbortListener, createAbortPromise, } from "../utils/abortUtils.js";
|
|
10
|
+
import { BackgroundTaskManager } from "./backgroundTaskManager.js";
|
|
11
|
+
import { NotificationQueue } from "./notificationQueue.js";
|
|
10
12
|
import { logger } from "../utils/globalLogger.js";
|
|
11
13
|
export class SubagentManager {
|
|
12
14
|
constructor(container, options) {
|
|
@@ -100,6 +102,19 @@ export class SubagentManager {
|
|
|
100
102
|
const subagentId = randomUUID();
|
|
101
103
|
// Create a child container for the subagent to isolate its managers
|
|
102
104
|
const subagentContainer = this.container.createChild();
|
|
105
|
+
// Register a modified AgentOptions without onLoadingChange to prevent subagent loading
|
|
106
|
+
// from affecting the parent agent's loading state
|
|
107
|
+
const parentOptions = this.container.get("AgentOptions");
|
|
108
|
+
if (parentOptions) {
|
|
109
|
+
const subagentOptions = {
|
|
110
|
+
...parentOptions,
|
|
111
|
+
callbacks: {
|
|
112
|
+
...parentOptions.callbacks,
|
|
113
|
+
onLoadingChange: undefined,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
subagentContainer.register("AgentOptions", subagentOptions);
|
|
117
|
+
}
|
|
103
118
|
// Create isolated PermissionManager for the subagent
|
|
104
119
|
const { PermissionManager } = await import("./permissionManager.js");
|
|
105
120
|
const parentPermissionManager = this.container.get("PermissionManager");
|
|
@@ -154,6 +169,14 @@ export class SubagentManager {
|
|
|
154
169
|
},
|
|
155
170
|
});
|
|
156
171
|
subagentContainer.register("AIManager", aiManager);
|
|
172
|
+
// Create isolated NotificationQueue for the subagent/forked agent
|
|
173
|
+
const subagentNotificationQueue = new NotificationQueue();
|
|
174
|
+
subagentContainer.register("NotificationQueue", subagentNotificationQueue);
|
|
175
|
+
// Create isolated BackgroundTaskManager for the subagent/forked agent
|
|
176
|
+
const subagentBackgroundTaskManager = new BackgroundTaskManager(subagentContainer, {
|
|
177
|
+
workdir: this.workdir,
|
|
178
|
+
});
|
|
179
|
+
subagentContainer.register("BackgroundTaskManager", subagentBackgroundTaskManager);
|
|
157
180
|
const instance = {
|
|
158
181
|
subagentId,
|
|
159
182
|
configuration,
|
|
@@ -172,24 +195,6 @@ export class SubagentManager {
|
|
|
172
195
|
this.instances.set(subagentId, instance);
|
|
173
196
|
return instance;
|
|
174
197
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Create a new subagent instance initialized with a copy of the current message history.
|
|
177
|
-
* This is used for background tasks like auto-memory extraction.
|
|
178
|
-
*/
|
|
179
|
-
async forkAgent(subagentType, messages, parameters, onUpdate) {
|
|
180
|
-
const configuration = await this.findSubagent(subagentType);
|
|
181
|
-
if (!configuration) {
|
|
182
|
-
throw new Error(`Subagent type ${subagentType} not found`);
|
|
183
|
-
}
|
|
184
|
-
const instance = await this.createInstance(configuration, {
|
|
185
|
-
...parameters,
|
|
186
|
-
subagent_type: subagentType,
|
|
187
|
-
prompt: "", // Forked agents start with history
|
|
188
|
-
}, false, onUpdate);
|
|
189
|
-
// Initialize the message manager with provided messages
|
|
190
|
-
instance.messageManager.setMessages(messages);
|
|
191
|
-
return instance;
|
|
192
|
-
}
|
|
193
198
|
/**
|
|
194
199
|
* Execute agent using subagent instance
|
|
195
200
|
*
|
|
@@ -243,6 +248,14 @@ export class SubagentManager {
|
|
|
243
248
|
task.endTime = Date.now();
|
|
244
249
|
task.runtime = task.endTime - startTime;
|
|
245
250
|
}
|
|
251
|
+
// Enqueue completion notification
|
|
252
|
+
const notificationQueue = this.container.has("NotificationQueue")
|
|
253
|
+
? this.container.get("NotificationQueue")
|
|
254
|
+
: undefined;
|
|
255
|
+
if (notificationQueue) {
|
|
256
|
+
const summary = `Agent task "${instance.description}" completed`;
|
|
257
|
+
notificationQueue.enqueue(`<task-notification>\n<task-id>${taskId}</task-id>\n<task-type>agent</task-type>\n<status>completed</status>\n<summary>${summary}</summary>\n</task-notification>`);
|
|
258
|
+
}
|
|
246
259
|
}
|
|
247
260
|
catch (error) {
|
|
248
261
|
const task = backgroundTaskManager?.getTask(taskId);
|
|
@@ -253,6 +266,15 @@ export class SubagentManager {
|
|
|
253
266
|
task.endTime = Date.now();
|
|
254
267
|
task.runtime = task.endTime - startTime;
|
|
255
268
|
}
|
|
269
|
+
// Enqueue error notification
|
|
270
|
+
const notificationQueue = this.container.has("NotificationQueue")
|
|
271
|
+
? this.container.get("NotificationQueue")
|
|
272
|
+
: undefined;
|
|
273
|
+
if (notificationQueue) {
|
|
274
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
275
|
+
const summary = `Agent task "${instance.description}" failed: ${errorMsg}`;
|
|
276
|
+
notificationQueue.enqueue(`<task-notification>\n<task-id>${taskId}</task-id>\n<task-type>agent</task-type>\n<status>failed</status>\n<summary>${summary}</summary>\n</task-notification>`);
|
|
277
|
+
}
|
|
256
278
|
}
|
|
257
279
|
})();
|
|
258
280
|
return taskId;
|
|
@@ -368,6 +390,14 @@ export class SubagentManager {
|
|
|
368
390
|
task.runtime = task.endTime - task.startTime;
|
|
369
391
|
}
|
|
370
392
|
}
|
|
393
|
+
// Enqueue completion notification
|
|
394
|
+
const notificationQueue = this.container.has("NotificationQueue")
|
|
395
|
+
? this.container.get("NotificationQueue")
|
|
396
|
+
: undefined;
|
|
397
|
+
if (notificationQueue) {
|
|
398
|
+
const summary = `Agent task "${instance.description}" completed`;
|
|
399
|
+
notificationQueue.enqueue(`<task-notification>\n<task-id>${instance.backgroundTaskId}</task-id>\n<task-type>agent</task-type>\n<status>completed</status>\n<summary>${summary}</summary>\n</task-notification>`);
|
|
400
|
+
}
|
|
371
401
|
}
|
|
372
402
|
return response || "Agent completed with no text response";
|
|
373
403
|
}
|
|
@@ -389,6 +419,15 @@ export class SubagentManager {
|
|
|
389
419
|
task.runtime = task.endTime - task.startTime;
|
|
390
420
|
}
|
|
391
421
|
}
|
|
422
|
+
// Enqueue error notification
|
|
423
|
+
const notificationQueue = this.container.has("NotificationQueue")
|
|
424
|
+
? this.container.get("NotificationQueue")
|
|
425
|
+
: undefined;
|
|
426
|
+
if (notificationQueue) {
|
|
427
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
428
|
+
const summary = `Agent task "${instance.description}" failed: ${errorMsg}`;
|
|
429
|
+
notificationQueue.enqueue(`<task-notification>\n<task-id>${instance.backgroundTaskId}</task-id>\n<task-type>agent</task-type>\n<status>failed</status>\n<summary>${summary}</summary>\n</task-notification>`);
|
|
430
|
+
}
|
|
392
431
|
}
|
|
393
432
|
throw error;
|
|
394
433
|
}
|
|
@@ -492,8 +531,9 @@ export class SubagentManager {
|
|
|
492
531
|
instance.onUpdate?.();
|
|
493
532
|
// Log tool execution to file
|
|
494
533
|
if (instance.logStream) {
|
|
495
|
-
const
|
|
496
|
-
|
|
534
|
+
const displayParams = params.compactParams ||
|
|
535
|
+
(params.parameters || "{}").substring(0, 100);
|
|
536
|
+
instance.logStream.write(`[${new Date().toISOString()}] ${params.name}${displayParams ? ` ${displayParams}` : ""}\n`);
|
|
497
537
|
}
|
|
498
538
|
}
|
|
499
539
|
}
|
|
@@ -9,7 +9,7 @@ export declare class AutoMemoryService {
|
|
|
9
9
|
private turnsSinceLastExtraction;
|
|
10
10
|
constructor(container: Container);
|
|
11
11
|
private get messageManager();
|
|
12
|
-
private get
|
|
12
|
+
private get forkedAgentManager();
|
|
13
13
|
private get memoryService();
|
|
14
14
|
private get configurationService();
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoMemoryService.d.ts","sourceRoot":"","sources":["../../src/services/autoMemoryService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAUlD;;;GAGG;AACH,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,wBAAwB,CAAa;gBAEzB,SAAS,EAAE,SAAS;IAExC,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"autoMemoryService.d.ts","sourceRoot":"","sources":["../../src/services/autoMemoryService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAUlD;;;GAGG;AACH,qBAAa,iBAAiB;IAIhB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,wBAAwB,CAAa;gBAEzB,SAAS,EAAE,SAAS;IAExC,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,oBAAoB,GAE/B;IAED;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE/C;;OAEG;YACW,aAAa;CA0D5B"}
|
|
@@ -16,8 +16,8 @@ export class AutoMemoryService {
|
|
|
16
16
|
get messageManager() {
|
|
17
17
|
return this.container.get("MessageManager");
|
|
18
18
|
}
|
|
19
|
-
get
|
|
20
|
-
return this.container.get("
|
|
19
|
+
get forkedAgentManager() {
|
|
20
|
+
return this.container.get("ForkedAgentManager");
|
|
21
21
|
}
|
|
22
22
|
get memoryService() {
|
|
23
23
|
return this.container.get("MemoryService");
|
|
@@ -114,8 +114,9 @@ export class AutoMemoryService {
|
|
|
114
114
|
newMessageCount = messages.length - 1 - lastIndex;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const prompt = buildAutoMemoryExtractionPrompt(newMessageCount, existingMemoriesManifest);
|
|
118
|
+
// Execute the forked agent in background (fire-and-forget, decoupled from BackgroundTaskManager)
|
|
119
|
+
await this.forkedAgentManager.forkAndExecute("general-purpose", messages, {
|
|
119
120
|
description: "Auto-memory extraction background agent",
|
|
120
121
|
allowedTools: [
|
|
121
122
|
"Read",
|
|
@@ -125,11 +126,8 @@ export class AutoMemoryService {
|
|
|
125
126
|
`Edit(${memoryDir}/**/*)`,
|
|
126
127
|
],
|
|
127
128
|
model: "fastModel", // Use fast model for background tasks to reduce latency and cost
|
|
128
|
-
permissionModeOverride: "
|
|
129
|
-
});
|
|
130
|
-
const prompt = buildAutoMemoryExtractionPrompt(newMessageCount, existingMemoriesManifest);
|
|
131
|
-
// Execute in background so it doesn't block the main conversation flow
|
|
132
|
-
await this.subagentManager.executeAgent(instance, `${prompt}\n\nThe memory directory for this project is: ${memoryDir}`, undefined, true);
|
|
129
|
+
permissionModeOverride: "dontAsk", // Auto-deny out-of-scope writes without prompting user
|
|
130
|
+
}, `${prompt}\n\nThe memory directory for this project is: ${memoryDir}`);
|
|
133
131
|
logger.debug("Auto-memory extraction started in background.");
|
|
134
132
|
}
|
|
135
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionService.d.ts","sourceRoot":"","sources":["../../src/services/interactionService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactionService.d.ts","sourceRoot":"","sources":["../../src/services/interactionService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,qBAAa,kBAAkB;WACT,WAAW,CAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC;WA2GI,cAAc,CAChC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;CAiDjB"}
|
|
@@ -18,6 +18,18 @@ export class InteractionService {
|
|
|
18
18
|
// If command doesn't exist, continue as normal message processing
|
|
19
19
|
// Don't add to history, let normal message processing logic below handle it
|
|
20
20
|
}
|
|
21
|
+
// Inject pending notifications from background tasks
|
|
22
|
+
const notificationQueue = context.aiManager["container"].has("NotificationQueue")
|
|
23
|
+
? context.aiManager["container"].get("NotificationQueue")
|
|
24
|
+
: undefined;
|
|
25
|
+
if (notificationQueue && notificationQueue.hasPending()) {
|
|
26
|
+
const notifications = notificationQueue.dequeueAll();
|
|
27
|
+
for (const notification of notifications) {
|
|
28
|
+
messageManager.addUserMessage({
|
|
29
|
+
content: notification,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
21
33
|
// Handle normal AI message
|
|
22
34
|
// Add user message first, will automatically sync to UI
|
|
23
35
|
messageManager.addUserMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAwCtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAwCtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA0atB,CAAC"}
|
package/dist/tools/bashTool.js
CHANGED
|
@@ -101,16 +101,7 @@ Usage notes:
|
|
|
101
101
|
- If the commands depend on each other and must run sequentially, use a single ${BASH_TOOL_NAME} call with '&&' to chain them together (e.g., \`git add . && git commit -m "message" && git push\`). For instance, if one operation must complete before another starts (like mkdir before cp, ${WRITE_TOOL_NAME} before ${BASH_TOOL_NAME} for git operations, or git add before git commit), run these operations sequentially instead.
|
|
102
102
|
- Use ';' only when you need to run commands sequentially but don't care if earlier commands fail
|
|
103
103
|
- DO NOT use newlines to separate commands (newlines are ok in quoted strings)
|
|
104
|
-
- Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of \`cd\`. You may use \`cd\` if the User explicitly requests it.
|
|
105
|
-
<good-example>
|
|
106
|
-
pytest /foo/bar/tests
|
|
107
|
-
</good-example>
|
|
108
|
-
<bad-example>
|
|
109
|
-
cd /foo/bar && pytest tests
|
|
110
|
-
</bad-example>
|
|
111
|
-
|
|
112
104
|
- Reserve bash tools exclusively for actual system commands and terminal operations that require shell execution. NEVER use bash echo or other command-line tools to communicate thoughts, explanations, or instructions to the user. Output all communication directly in your response text instead.
|
|
113
|
-
- When making multiple bash tool calls, you MUST send a single message with multiple tools calls to run the calls in parallel. For example, if you need to run "git status" and "git diff", send a single message with two tool calls in parallel.
|
|
114
105
|
|
|
115
106
|
# Git operations
|
|
116
107
|
Git Safety Protocol:
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -75,5 +75,6 @@ export interface AgentCallbacks extends MessageManagerCallbacks, BackgroundTaskM
|
|
|
75
75
|
onBackgroundCurrentTask?: () => void;
|
|
76
76
|
onModelChange?: (model: string) => void;
|
|
77
77
|
onConfiguredModelsChange?: (models: string[]) => void;
|
|
78
|
+
onLoadingChange?: (loading: boolean) => void;
|
|
78
79
|
}
|
|
79
80
|
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export interface Message {
|
|
|
15
15
|
additionalFields?: Record<string, unknown>;
|
|
16
16
|
isMeta?: boolean;
|
|
17
17
|
}
|
|
18
|
-
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | BangBlock | CompressBlock | ReasoningBlock | FileHistoryBlock;
|
|
18
|
+
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | BangBlock | CompressBlock | ReasoningBlock | FileHistoryBlock | TaskNotificationBlock;
|
|
19
19
|
export interface TextBlock {
|
|
20
20
|
type: "text";
|
|
21
21
|
content: string;
|
|
@@ -78,4 +78,12 @@ export interface FileHistoryBlock {
|
|
|
78
78
|
type: "file_history";
|
|
79
79
|
snapshots: import("./reversion.js").FileSnapshot[];
|
|
80
80
|
}
|
|
81
|
+
export interface TaskNotificationBlock {
|
|
82
|
+
type: "task_notification";
|
|
83
|
+
taskId: string;
|
|
84
|
+
taskType: "shell" | "agent";
|
|
85
|
+
status: "completed" | "failed" | "killed";
|
|
86
|
+
summary: string;
|
|
87
|
+
outputFile?: string;
|
|
88
|
+
}
|
|
81
89
|
//# sourceMappingURL=messaging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/types/messaging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,aAAa,GACb,cAAc,GACd,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../src/types/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"containerSetup.d.ts","sourceRoot":"","sources":["../../src/utils/containerSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAuB3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAM3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACL,IAAI,EACJ,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAGhB,uBAAuB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACvC,sBAAsB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,wBAAwB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,0BAA0B,GACvC,SAAS,CAoQX"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Container } from "./container.js";
|
|
2
2
|
import { ForegroundTaskManager } from "../managers/foregroundTaskManager.js";
|
|
3
3
|
import { BackgroundTaskManager } from "../managers/backgroundTaskManager.js";
|
|
4
|
+
import { NotificationQueue } from "../managers/notificationQueue.js";
|
|
4
5
|
import { TaskManager } from "../services/taskManager.js";
|
|
5
6
|
import { MessageManager } from "../managers/messageManager.js";
|
|
6
7
|
import { AIManager } from "../managers/aiManager.js";
|
|
@@ -18,6 +19,7 @@ import { CronManager } from "../managers/cronManager.js";
|
|
|
18
19
|
import { MemoryRuleManager } from "../managers/MemoryRuleManager.js";
|
|
19
20
|
import { ReversionManager } from "../managers/reversionManager.js";
|
|
20
21
|
import { SubagentManager } from "../managers/subagentManager.js";
|
|
22
|
+
import { ForkedAgentManager } from "../managers/forkedAgentManager.js";
|
|
21
23
|
import { LiveConfigManager } from "../managers/liveConfigManager.js";
|
|
22
24
|
import { ReversionService } from "../services/reversionService.js";
|
|
23
25
|
import { MemoryService } from "../services/memory.js";
|
|
@@ -30,6 +32,8 @@ export function setupAgentContainer(setupOptions) {
|
|
|
30
32
|
const callbacks = options.callbacks || {};
|
|
31
33
|
const container = new Container();
|
|
32
34
|
container.register("AgentOptions", options);
|
|
35
|
+
const notificationQueue = new NotificationQueue();
|
|
36
|
+
container.register("NotificationQueue", notificationQueue);
|
|
33
37
|
const foregroundTaskManager = new ForegroundTaskManager(container);
|
|
34
38
|
container.register("ForegroundTaskManager", foregroundTaskManager);
|
|
35
39
|
container.register("ConfigurationService", configurationService);
|
|
@@ -197,6 +201,8 @@ export function setupAgentContainer(setupOptions) {
|
|
|
197
201
|
stream,
|
|
198
202
|
});
|
|
199
203
|
container.register("SubagentManager", subagentManager);
|
|
204
|
+
const forkedAgentManager = new ForkedAgentManager(container);
|
|
205
|
+
container.register("ForkedAgentManager", forkedAgentManager);
|
|
200
206
|
const aiManager = new AIManager(container, {
|
|
201
207
|
callbacks: {
|
|
202
208
|
...callbacks,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessagesForAPI.d.ts","sourceRoot":"","sources":["../../src/utils/convertMessagesForAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"convertMessagesForAPI.d.ts","sourceRoot":"","sources":["../../src/utils/convertMessagesForAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,OAAO,EAEL,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AA0B7B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,GAClB,0BAA0B,EAAE,CAuO9B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { convertImageToBase64 } from "./messageOperations.js";
|
|
2
|
+
import { taskNotificationToXml } from "./notificationXml.js";
|
|
2
3
|
import { stripAnsiColors } from "./stringUtils.js";
|
|
3
4
|
import { logger } from "./globalLogger.js";
|
|
4
5
|
/**
|
|
@@ -190,6 +191,13 @@ export function convertMessagesForAPI(messages) {
|
|
|
190
191
|
text: `<local-command-stdout>\n${stripAnsiColors(block.result)}\n</local-command-stdout>`,
|
|
191
192
|
});
|
|
192
193
|
}
|
|
194
|
+
// If there is a task notification block, convert it back to XML
|
|
195
|
+
if (block.type === "task_notification") {
|
|
196
|
+
contentParts.push({
|
|
197
|
+
type: "text",
|
|
198
|
+
text: taskNotificationToXml(block),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
193
201
|
});
|
|
194
202
|
// Only add user message if there is meaningful content
|
|
195
203
|
if (contentParts.length > 0) {
|
|
@@ -110,4 +110,13 @@ export declare function formatToolTokenSummary(toolCount: number, tokens: number
|
|
|
110
110
|
* Returns the first available content block.
|
|
111
111
|
*/
|
|
112
112
|
export declare function getMessageContent(message: Message): string;
|
|
113
|
+
export interface AddNotificationMessageParams {
|
|
114
|
+
messages: Message[];
|
|
115
|
+
taskId: string;
|
|
116
|
+
taskType: "shell" | "agent";
|
|
117
|
+
status: "completed" | "failed" | "killed";
|
|
118
|
+
summary: string;
|
|
119
|
+
outputFile?: string;
|
|
120
|
+
}
|
|
121
|
+
export declare const addNotificationMessageToMessages: ({ messages, taskId, taskType, status, summary, outputFile, }: AddNotificationMessageParams) => Message[];
|
|
113
122
|
//# sourceMappingURL=messageOperations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,7 @@ export const addUserMessageToMessages = ({ messages, content, customCommandConte
|
|
|
50
50
|
const textBlock = {
|
|
51
51
|
type: "text",
|
|
52
52
|
content,
|
|
53
|
+
stage: "end",
|
|
53
54
|
...(customCommandContent && { customCommandContent }),
|
|
54
55
|
...(source && { source }),
|
|
55
56
|
};
|
|
@@ -428,3 +429,19 @@ export function getMessageContent(message) {
|
|
|
428
429
|
}
|
|
429
430
|
return "";
|
|
430
431
|
}
|
|
432
|
+
export const addNotificationMessageToMessages = ({ messages, taskId, taskType, status, summary, outputFile, }) => {
|
|
433
|
+
const block = {
|
|
434
|
+
type: "task_notification",
|
|
435
|
+
taskId,
|
|
436
|
+
taskType,
|
|
437
|
+
status,
|
|
438
|
+
summary,
|
|
439
|
+
...(outputFile !== undefined && { outputFile }),
|
|
440
|
+
};
|
|
441
|
+
const notificationMessage = {
|
|
442
|
+
id: generateMessageId(),
|
|
443
|
+
role: "user",
|
|
444
|
+
blocks: [block],
|
|
445
|
+
};
|
|
446
|
+
return [...messages, notificationMessage];
|
|
447
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TaskNotificationBlock } from "../types/messaging.js";
|
|
2
|
+
export declare function taskNotificationToXml(block: TaskNotificationBlock): string;
|
|
3
|
+
export declare function parseTaskNotificationXml(xml: string): TaskNotificationBlock | null;
|
|
4
|
+
//# sourceMappingURL=notificationXml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notificationXml.d.ts","sourceRoot":"","sources":["../../src/utils/notificationXml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAW1E;AAQD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,qBAAqB,GAAG,IAAI,CA4B9B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function taskNotificationToXml(block) {
|
|
2
|
+
let xml = `<task-notification>\n`;
|
|
3
|
+
xml += `<task-id>${block.taskId}</task-id>\n`;
|
|
4
|
+
xml += `<task-type>${block.taskType}</task-type>\n`;
|
|
5
|
+
if (block.outputFile) {
|
|
6
|
+
xml += `<output-file>${block.outputFile}</output-file>\n`;
|
|
7
|
+
}
|
|
8
|
+
xml += `<status>${block.status}</status>\n`;
|
|
9
|
+
xml += `<summary>${block.summary}</summary>\n`;
|
|
10
|
+
xml += `</task-notification>`;
|
|
11
|
+
return xml;
|
|
12
|
+
}
|
|
13
|
+
function extractTag(xml, tag) {
|
|
14
|
+
const regex = new RegExp(`<${tag}>(.*?)</${tag}>`, "s");
|
|
15
|
+
const match = xml.match(regex);
|
|
16
|
+
return match ? match[1] : null;
|
|
17
|
+
}
|
|
18
|
+
export function parseTaskNotificationXml(xml) {
|
|
19
|
+
try {
|
|
20
|
+
const taskId = extractTag(xml, "task-id");
|
|
21
|
+
const taskType = extractTag(xml, "task-type");
|
|
22
|
+
const status = extractTag(xml, "status");
|
|
23
|
+
const summary = extractTag(xml, "summary");
|
|
24
|
+
if (!taskId || !taskType || !status || !summary) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const outputFile = extractTag(xml, "output-file") || undefined;
|
|
28
|
+
return {
|
|
29
|
+
type: "task_notification",
|
|
30
|
+
taskId,
|
|
31
|
+
taskType,
|
|
32
|
+
status,
|
|
33
|
+
summary,
|
|
34
|
+
...(outputFile && { outputFile }),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|