wave-agent-sdk 0.0.6 → 0.0.7
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.js +7 -4
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +10 -9
- package/dist/managers/hookManager.d.ts +4 -12
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +19 -14
- package/dist/managers/messageManager.d.ts +3 -11
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +6 -20
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +5 -2
- package/dist/managers/subagentManager.js +1 -1
- package/dist/tools/todoWriteTool.d.ts.map +1 -1
- package/dist/tools/todoWriteTool.js +3 -10
- package/dist/types/messaging.d.ts +7 -7
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/messaging.js +5 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +1 -8
- package/dist/utils/hookMatcher.d.ts +1 -6
- package/dist/utils/hookMatcher.d.ts.map +1 -1
- package/dist/utils/messageOperations.d.ts +9 -21
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +21 -20
- package/package.json +1 -1
- package/src/agent.ts +3 -3
- package/src/managers/aiManager.ts +8 -9
- package/src/managers/hookManager.ts +23 -44
- package/src/managers/messageManager.ts +8 -38
- package/src/managers/slashCommandManager.ts +5 -6
- package/src/managers/subagentManager.ts +1 -1
- package/src/tools/todoWriteTool.ts +3 -11
- package/src/types/messaging.ts +7 -8
- package/src/utils/convertMessagesForAPI.ts +1 -9
- package/src/utils/hookMatcher.ts +1 -12
- package/src/utils/messageOperations.ts +37 -42
- package/src/types/index.ts.backup +0 -357
package/dist/agent.js
CHANGED
|
@@ -342,10 +342,13 @@ export class Agent {
|
|
|
342
342
|
// Add user message to history
|
|
343
343
|
this.addToInputHistory(content);
|
|
344
344
|
// Add user message first, will automatically sync to UI
|
|
345
|
-
this.messageManager.addUserMessage(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
345
|
+
this.messageManager.addUserMessage({
|
|
346
|
+
content,
|
|
347
|
+
images: images?.map((img) => ({
|
|
348
|
+
path: img.path,
|
|
349
|
+
mimeType: img.mimeType,
|
|
350
|
+
})),
|
|
351
|
+
});
|
|
349
352
|
// Execute UserPromptSubmit hooks after adding the user message
|
|
350
353
|
if (this.hookManager) {
|
|
351
354
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACb,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB;IAgBrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAYvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAqBf,8BAA8B;IAoErC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOxC,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACL,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACb,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB;IAgBrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAYvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAqBf,8BAA8B;IAoErC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOxC,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACL,OAAO,CAAC,IAAI,CAAC;IA0ShB;;;OAGG;YACW,gBAAgB;IAyD9B;;;OAGG;YACW,sBAAsB;IA2DpC;;OAEG;YACW,uBAAuB;CAsDtC"}
|
|
@@ -182,6 +182,7 @@ export class AIManager {
|
|
|
182
182
|
const toolCalls = [];
|
|
183
183
|
if (result.tool_calls) {
|
|
184
184
|
for (const toolCall of result.tool_calls) {
|
|
185
|
+
this.logger?.debug("ToolCall", toolCall);
|
|
185
186
|
if (toolCall.type === "function") {
|
|
186
187
|
toolCalls.push(toolCall);
|
|
187
188
|
}
|
|
@@ -238,8 +239,8 @@ export class AIManager {
|
|
|
238
239
|
const toolName = functionToolCall.function?.name || "";
|
|
239
240
|
const compactParams = this.generateCompactParams(toolName, toolArgs);
|
|
240
241
|
this.messageManager.updateToolBlock({
|
|
241
|
-
toolId,
|
|
242
|
-
|
|
242
|
+
id: toolId,
|
|
243
|
+
parameters: JSON.stringify(toolArgs, null, 2),
|
|
243
244
|
isRunning: true, // isRunning: true
|
|
244
245
|
name: toolName,
|
|
245
246
|
compactParams,
|
|
@@ -262,8 +263,8 @@ export class AIManager {
|
|
|
262
263
|
const toolResult = await this.toolManager.execute(functionToolCall.function?.name || "", toolArgs, context);
|
|
263
264
|
// Update message state - tool execution completed
|
|
264
265
|
this.messageManager.updateToolBlock({
|
|
265
|
-
toolId,
|
|
266
|
-
|
|
266
|
+
id: toolId,
|
|
267
|
+
parameters: JSON.stringify(toolArgs, null, 2),
|
|
267
268
|
result: toolResult.content ||
|
|
268
269
|
(toolResult.error ? `Error: ${toolResult.error}` : ""),
|
|
269
270
|
success: toolResult.success,
|
|
@@ -287,8 +288,8 @@ export class AIManager {
|
|
|
287
288
|
? toolError.message
|
|
288
289
|
: String(toolError);
|
|
289
290
|
this.messageManager.updateToolBlock({
|
|
290
|
-
toolId,
|
|
291
|
-
|
|
291
|
+
id: toolId,
|
|
292
|
+
parameters: JSON.stringify(toolArgs, null, 2),
|
|
292
293
|
result: `Tool execution failed: ${errorMessage}`,
|
|
293
294
|
success: false,
|
|
294
295
|
error: errorMessage,
|
|
@@ -425,7 +426,8 @@ export class AIManager {
|
|
|
425
426
|
// Process hook results to handle exit codes and determine if tool should be blocked
|
|
426
427
|
let shouldContinue = true;
|
|
427
428
|
if (results.length > 0) {
|
|
428
|
-
const processResult = this.hookManager.processHookResults("PreToolUse", results, this.messageManager, toolId
|
|
429
|
+
const processResult = this.hookManager.processHookResults("PreToolUse", results, this.messageManager, toolId, // Pass toolId for proper PreToolUse blocking error handling
|
|
430
|
+
JSON.stringify(toolInput || {}, null, 2));
|
|
429
431
|
shouldContinue = !processResult.shouldBlock;
|
|
430
432
|
}
|
|
431
433
|
// Log hook execution results for debugging
|
|
@@ -467,8 +469,7 @@ export class AIManager {
|
|
|
467
469
|
const results = await this.hookManager.executeHooks("PostToolUse", context);
|
|
468
470
|
// Process hook results to handle exit codes and update tool results
|
|
469
471
|
if (results.length > 0) {
|
|
470
|
-
|
|
471
|
-
this.hookManager.processHookResults("PostToolUse", results, this.messageManager, toolId, originalToolResult);
|
|
472
|
+
this.hookManager.processHookResults("PostToolUse", results, this.messageManager, toolId);
|
|
472
473
|
}
|
|
473
474
|
// Log hook execution results for debugging
|
|
474
475
|
if (results.length > 0) {
|
|
@@ -5,23 +5,15 @@
|
|
|
5
5
|
* validation, and hook execution across all supported events.
|
|
6
6
|
*/
|
|
7
7
|
import { type HookEvent, type HookConfiguration, type PartialHookConfiguration, type HookExecutionContext, type ExtendedHookExecutionContext, type HookExecutionResult, type ValidationResult } from "../types/hooks.js";
|
|
8
|
-
import {
|
|
8
|
+
import { HookMatcher } from "../utils/hookMatcher.js";
|
|
9
9
|
import type { Logger } from "../types/index.js";
|
|
10
10
|
import type { MessageManager } from "./messageManager.js";
|
|
11
|
-
export
|
|
12
|
-
loadConfiguration(userHooks?: PartialHookConfiguration, projectHooks?: PartialHookConfiguration): void;
|
|
13
|
-
loadConfigurationFromSettings(): void;
|
|
14
|
-
executeHooks(event: HookEvent, context: HookExecutionContext | ExtendedHookExecutionContext): Promise<HookExecutionResult[]>;
|
|
15
|
-
hasHooks(event: HookEvent, toolName?: string): boolean;
|
|
16
|
-
validateConfiguration(config: HookConfiguration): ValidationResult;
|
|
17
|
-
getConfiguration(): PartialHookConfiguration | undefined;
|
|
18
|
-
}
|
|
19
|
-
export declare class HookManager implements IHookManager {
|
|
11
|
+
export declare class HookManager {
|
|
20
12
|
private configuration;
|
|
21
13
|
private readonly matcher;
|
|
22
14
|
private readonly logger?;
|
|
23
15
|
private readonly workdir;
|
|
24
|
-
constructor(workdir: string, matcher?:
|
|
16
|
+
constructor(workdir: string, matcher?: HookMatcher, logger?: Logger);
|
|
25
17
|
/**
|
|
26
18
|
* Load and merge hook configurations from user and project settings
|
|
27
19
|
* Project settings take precedence over user settings
|
|
@@ -40,7 +32,7 @@ export declare class HookManager implements IHookManager {
|
|
|
40
32
|
* Process hook execution results and determine appropriate actions
|
|
41
33
|
* based on exit codes and hook event type
|
|
42
34
|
*/
|
|
43
|
-
processHookResults(event: HookEvent, results: HookExecutionResult[], messageManager?: MessageManager, toolId?: string,
|
|
35
|
+
processHookResults(event: HookEvent, results: HookExecutionResult[], messageManager?: MessageManager, toolId?: string, toolParameters?: string): {
|
|
44
36
|
shouldBlock: boolean;
|
|
45
37
|
errorMessage?: string;
|
|
46
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAItB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hookManager.d.ts","sourceRoot":"","sources":["../../src/managers/hookManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAItB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAG/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAA+B,EACxC,MAAM,CAAC,EAAE,MAAM;IAOjB;;;OAGG;IACH,iBAAiB,CACf,SAAS,CAAC,EAAE,wBAAwB,EACpC,YAAY,CAAC,EAAE,wBAAwB,GACtC,IAAI;IAyBP;;;OAGG;IACH,6BAA6B,IAAI,IAAI;IAqCrC;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,GAC3D,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAqHjC;;;OAGG;IACH,kBAAkB,CAChB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,cAAc,CAAC,EAAE,cAAc,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB;QACD,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAuCD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAWtD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IA8ClE;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAyCpC;;OAEG;IACH,gBAAgB,IAAI,wBAAwB,GAAG,SAAS;IAOxD;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmDhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,qBAAqB,IAAI;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KAC3C;CA2CF"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { HookConfigurationError, isValidHookEvent, isValidHookEventConfig, } from "../types/hooks.js";
|
|
8
8
|
import { HookMatcher } from "../utils/hookMatcher.js";
|
|
9
9
|
import { executeCommand, isCommandSafe, loadMergedHooksConfig, } from "../services/hook.js";
|
|
10
|
+
import { MessageSource } from "../types/index.js";
|
|
10
11
|
export class HookManager {
|
|
11
12
|
constructor(workdir, matcher = new HookMatcher(), logger) {
|
|
12
13
|
this.workdir = workdir;
|
|
@@ -142,7 +143,7 @@ export class HookManager {
|
|
|
142
143
|
* Process hook execution results and determine appropriate actions
|
|
143
144
|
* based on exit codes and hook event type
|
|
144
145
|
*/
|
|
145
|
-
processHookResults(event, results, messageManager, toolId,
|
|
146
|
+
processHookResults(event, results, messageManager, toolId, toolParameters) {
|
|
146
147
|
if (!messageManager || results.length === 0) {
|
|
147
148
|
return { shouldBlock: false };
|
|
148
149
|
}
|
|
@@ -151,7 +152,7 @@ export class HookManager {
|
|
|
151
152
|
for (const result of results) {
|
|
152
153
|
if (result.exitCode === 2) {
|
|
153
154
|
// Handle blocking error immediately and return
|
|
154
|
-
return this.handleBlockingError(event, result, messageManager, toolId,
|
|
155
|
+
return this.handleBlockingError(event, result, messageManager, toolId, toolParameters);
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
// Second pass: Process all non-blocking results
|
|
@@ -177,14 +178,17 @@ export class HookManager {
|
|
|
177
178
|
handleHookSuccess(event, result, messageManager) {
|
|
178
179
|
if (event === "UserPromptSubmit" && result.stdout?.trim()) {
|
|
179
180
|
// Inject stdout as user message context for UserPromptSubmit
|
|
180
|
-
messageManager.addUserMessage(
|
|
181
|
+
messageManager.addUserMessage({
|
|
182
|
+
content: result.stdout.trim(),
|
|
183
|
+
source: MessageSource.HOOK,
|
|
184
|
+
});
|
|
181
185
|
}
|
|
182
186
|
// For other hook types (PreToolUse, PostToolUse, Stop), ignore stdout
|
|
183
187
|
}
|
|
184
188
|
/**
|
|
185
189
|
* Handle blocking error (exit code 2) - behavior varies by hook type
|
|
186
190
|
*/
|
|
187
|
-
handleBlockingError(event, result, messageManager, toolId,
|
|
191
|
+
handleBlockingError(event, result, messageManager, toolId, toolParameters) {
|
|
188
192
|
const errorMessage = result.stderr?.trim() || "Hook execution failed";
|
|
189
193
|
switch (event) {
|
|
190
194
|
case "UserPromptSubmit":
|
|
@@ -199,7 +203,8 @@ export class HookManager {
|
|
|
199
203
|
// Block tool execution and show error to Wave Agent via tool block
|
|
200
204
|
if (toolId) {
|
|
201
205
|
messageManager.updateToolBlock({
|
|
202
|
-
toolId,
|
|
206
|
+
id: toolId,
|
|
207
|
+
parameters: toolParameters || "",
|
|
203
208
|
result: errorMessage,
|
|
204
209
|
success: false,
|
|
205
210
|
error: "Hook blocked tool execution",
|
|
@@ -207,18 +212,18 @@ export class HookManager {
|
|
|
207
212
|
}
|
|
208
213
|
return { shouldBlock: true };
|
|
209
214
|
case "PostToolUse":
|
|
210
|
-
// Show error to Wave Agent via
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
success: false,
|
|
216
|
-
});
|
|
217
|
-
}
|
|
215
|
+
// Show error to Wave Agent via user message and allow AI to continue
|
|
216
|
+
messageManager.addUserMessage({
|
|
217
|
+
content: errorMessage,
|
|
218
|
+
source: MessageSource.HOOK,
|
|
219
|
+
});
|
|
218
220
|
return { shouldBlock: false };
|
|
219
221
|
case "Stop":
|
|
220
222
|
// Show error to Wave Agent via user message and block stopping to continue conversation
|
|
221
|
-
messageManager.addUserMessage(
|
|
223
|
+
messageManager.addUserMessage({
|
|
224
|
+
content: errorMessage,
|
|
225
|
+
source: MessageSource.HOOK,
|
|
226
|
+
});
|
|
222
227
|
return { shouldBlock: true, errorMessage };
|
|
223
228
|
default:
|
|
224
229
|
return { shouldBlock: false };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
|
|
1
|
+
import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
|
|
2
2
|
import type { Logger, Message, Usage } from "../types/index.js";
|
|
3
3
|
import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
|
|
4
4
|
export interface MessageManagerCallbacks {
|
|
@@ -7,10 +7,7 @@ export interface MessageManagerCallbacks {
|
|
|
7
7
|
onLatestTotalTokensChange?: (latestTotalTokens: number) => void;
|
|
8
8
|
onUserInputHistoryChange?: (history: string[]) => void;
|
|
9
9
|
onUsagesChange?: (usages: Usage[]) => void;
|
|
10
|
-
onUserMessageAdded?: (
|
|
11
|
-
path: string;
|
|
12
|
-
mimeType: string;
|
|
13
|
-
}>) => void;
|
|
10
|
+
onUserMessageAdded?: (params: UserMessageParams) => void;
|
|
14
11
|
onAssistantMessageAdded?: (content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[]) => void;
|
|
15
12
|
onToolBlockUpdated?: (params: AgentToolBlockUpdateParams) => void;
|
|
16
13
|
onDiffBlockAdded?: (filePath: string, diffResult: string) => void;
|
|
@@ -18,7 +15,6 @@ export interface MessageManagerCallbacks {
|
|
|
18
15
|
onCompressBlockAdded?: (insertIndex: number, content: string) => void;
|
|
19
16
|
onCompressionStateChange?: (isCompressing: boolean) => void;
|
|
20
17
|
onMemoryBlockAdded?: (content: string, success: boolean, type: "project" | "user", storagePath: string) => void;
|
|
21
|
-
onCustomCommandAdded?: (commandName: string, content: string, originalInput?: string) => void;
|
|
22
18
|
onAddCommandOutputMessage?: (command: string) => void;
|
|
23
19
|
onUpdateCommandOutputMessage?: (command: string, output: string) => void;
|
|
24
20
|
onCompleteCommandMessage?: (command: string, exitCode: number) => void;
|
|
@@ -74,11 +70,7 @@ export declare class MessageManager {
|
|
|
74
70
|
initializeFromSession(sessionId: string, messages: Message[], latestTotalTokens: number): void;
|
|
75
71
|
addToInputHistory(input: string): void;
|
|
76
72
|
clearInputHistory(): void;
|
|
77
|
-
addUserMessage(
|
|
78
|
-
path: string;
|
|
79
|
-
mimeType: string;
|
|
80
|
-
}>): void;
|
|
81
|
-
addCustomCommandMessage(commandName: string, content: string, originalInput?: string): void;
|
|
73
|
+
addUserMessage(params: UserMessageParams): void;
|
|
82
74
|
addAssistantMessage(content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage): void;
|
|
83
75
|
updateToolBlock(params: AgentToolBlockUpdateParams): void;
|
|
84
76
|
addDiffBlock(filePath: string, diffResult: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AACA,OAAO,EAcL,iBAAiB,EAGjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAShE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,yBAAyB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAE3C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzD,uBAAuB,CAAC,EAAE,CACxB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,qCAAqC,EAAE,KAChD,IAAI,CAAC;IACV,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAClE,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,SAAS,GAAG,MAAM,EACxB,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IAEV,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,4BAA4B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvE,oBAAoB,CAAC,EAAE,CACrB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,KACE,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,CACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,KACjD,IAAI,CAAC;CACX;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,uBAAuB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IAEzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,OAAO,EAAE,qBAAqB;IAanC,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,OAAO,EAAE;IAIxB,oBAAoB,IAAI,MAAM;IAI9B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,iBAAiB,IAAI,MAAM;IAK3B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAK7C;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAezC;;OAEG;IACU,wBAAwB,CACnC,gBAAgB,CAAC,EAAE,MAAM,EACzB,mBAAmB,CAAC,EAAE,OAAO,GAC5B,OAAO,CAAC,IAAI,CAAC;IAkDT,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAOrD,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI;IAK5D;;OAEG;IACI,aAAa,IAAI,IAAI;IASrB,qBAAqB,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,MAAM,GACxB,IAAI;IAUA,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAatC,iBAAiB,IAAI,IAAI;IAKzB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAS/C,mBAAmB,CACxB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,qCAAqC,EAAE,EACnD,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI;IAWA,eAAe,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;IAkBzD,YAAY,CACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GACvE,IAAI;IAUA,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACI,gCAAgC,CACrC,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,GACxB,IAAI;IAkCA,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,SAAS,GAAG,MAAM,EACxB,WAAW,EAAE,MAAM,GAClB,IAAI;IAaA,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS9C,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUjE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAW/D,gBAAgB,CACrB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,YAAW,EACnD,gBAAgB,EAAE,OAAO,EAAE,YAAK,EAChC,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,GACA,IAAI;IAaA,mBAAmB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;QACrD,QAAQ,EAAE,OAAO,EAAE,CAAC;KACrB,CAAC,GACD,IAAI;IAoBP;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAUjC;;;OAGG;IACI,qBAAqB,IAAI,IAAI;CAIrC"}
|
|
@@ -135,28 +135,13 @@ export class MessageManager {
|
|
|
135
135
|
this.setUserInputHistory([]);
|
|
136
136
|
}
|
|
137
137
|
// Encapsulated message operation functions
|
|
138
|
-
addUserMessage(
|
|
138
|
+
addUserMessage(params) {
|
|
139
139
|
const newMessages = addUserMessageToMessages({
|
|
140
140
|
messages: this.messages,
|
|
141
|
-
|
|
142
|
-
images,
|
|
143
|
-
});
|
|
144
|
-
this.setMessages(newMessages);
|
|
145
|
-
this.callbacks.onUserMessageAdded?.(content, images);
|
|
146
|
-
}
|
|
147
|
-
addCustomCommandMessage(commandName, content, originalInput) {
|
|
148
|
-
const newMessages = addUserMessageToMessages({
|
|
149
|
-
messages: this.messages,
|
|
150
|
-
content: "", // Empty content, as we will use CustomCommandBlock
|
|
151
|
-
customCommandBlock: {
|
|
152
|
-
type: "custom_command",
|
|
153
|
-
commandName,
|
|
154
|
-
content,
|
|
155
|
-
originalInput,
|
|
156
|
-
},
|
|
141
|
+
...params,
|
|
157
142
|
});
|
|
158
143
|
this.setMessages(newMessages);
|
|
159
|
-
this.callbacks.
|
|
144
|
+
this.callbacks.onUserMessageAdded?.(params);
|
|
160
145
|
}
|
|
161
146
|
addAssistantMessage(content, toolCalls, usage) {
|
|
162
147
|
const newMessages = addAssistantMessageToMessages(this.messages, content, toolCalls, usage);
|
|
@@ -166,14 +151,15 @@ export class MessageManager {
|
|
|
166
151
|
updateToolBlock(params) {
|
|
167
152
|
const newMessages = updateToolBlockInMessage({
|
|
168
153
|
messages: this.messages,
|
|
169
|
-
id: params.
|
|
170
|
-
parameters: params.
|
|
154
|
+
id: params.id,
|
|
155
|
+
parameters: params.parameters,
|
|
171
156
|
result: params.result,
|
|
172
157
|
success: params.success,
|
|
173
158
|
error: params.error,
|
|
174
159
|
isRunning: params.isRunning,
|
|
175
160
|
name: params.name,
|
|
176
161
|
shortResult: params.shortResult,
|
|
162
|
+
images: params.images,
|
|
177
163
|
compactParams: params.compactParams,
|
|
178
164
|
});
|
|
179
165
|
this.setMessages(newMessages);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;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;
|
|
1
|
+
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;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;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
|
|
@@ -181,11 +181,14 @@ export class SlashCommandManager {
|
|
|
181
181
|
const finalContent = bashResults.length > 0
|
|
182
182
|
? replaceBashCommandsWithOutput(processedContent, bashResults)
|
|
183
183
|
: processedContent;
|
|
184
|
-
// Add custom command
|
|
184
|
+
// Add custom command message to show the command being executed
|
|
185
185
|
const originalInput = args
|
|
186
186
|
? `/${commandName} ${args}`
|
|
187
187
|
: `/${commandName}`;
|
|
188
|
-
this.messageManager.
|
|
188
|
+
this.messageManager.addUserMessage({
|
|
189
|
+
content: originalInput,
|
|
190
|
+
customCommandContent: finalContent,
|
|
191
|
+
});
|
|
189
192
|
// Execute the AI conversation with custom configuration
|
|
190
193
|
await this.aiManager.sendAIMessage({
|
|
191
194
|
model: config?.model,
|
|
@@ -141,7 +141,7 @@ export class SubagentManager {
|
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
143
|
// Add the user's prompt as a message
|
|
144
|
-
instance.messageManager.addUserMessage(prompt);
|
|
144
|
+
instance.messageManager.addUserMessage({ content: prompt });
|
|
145
145
|
// Create allowed tools list - always exclude Task tool to prevent subagent recursion
|
|
146
146
|
let allowedTools = instance.configuration.tools;
|
|
147
147
|
// Always filter out the Task tool to prevent subagents from creating sub-subagents
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todoWriteTool.d.ts","sourceRoot":"","sources":["../../src/tools/todoWriteTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAQzD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"todoWriteTool.d.ts","sourceRoot":"","sources":["../../src/tools/todoWriteTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAQzD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,UAoN3B,CAAC"}
|
|
@@ -173,16 +173,9 @@ When in doubt, use this tool. Being proactive with task management demonstrates
|
|
|
173
173
|
in_progress: "[>]",
|
|
174
174
|
completed: "[x]",
|
|
175
175
|
};
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
shortResult += `\n${symbols.in_progress} ${inProgress[0].content}`;
|
|
180
|
-
}
|
|
181
|
-
if (pending.length > 0) {
|
|
182
|
-
shortResult += `\n${symbols.pending} ${pending[0].content}`;
|
|
183
|
-
if (pending.length > 1) {
|
|
184
|
-
shortResult += ` +${pending.length - 1}`;
|
|
185
|
-
}
|
|
176
|
+
// Show all todos in the shortResult
|
|
177
|
+
for (const todo of todos) {
|
|
178
|
+
shortResult += `\n${symbols[todo.status]} ${todo.content}`;
|
|
186
179
|
}
|
|
187
180
|
}
|
|
188
181
|
return {
|
|
@@ -3,15 +3,21 @@
|
|
|
3
3
|
* Dependencies: Core (Usage)
|
|
4
4
|
*/
|
|
5
5
|
import type { Usage } from "./core.js";
|
|
6
|
+
export declare enum MessageSource {
|
|
7
|
+
USER = "user",
|
|
8
|
+
HOOK = "hook"
|
|
9
|
+
}
|
|
6
10
|
export interface Message {
|
|
7
11
|
role: "user" | "assistant";
|
|
8
12
|
blocks: MessageBlock[];
|
|
9
13
|
usage?: Usage;
|
|
10
14
|
}
|
|
11
|
-
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | DiffBlock | CommandOutputBlock | CompressBlock | MemoryBlock |
|
|
15
|
+
export type MessageBlock = TextBlock | ErrorBlock | ToolBlock | ImageBlock | DiffBlock | CommandOutputBlock | CompressBlock | MemoryBlock | SubagentBlock;
|
|
12
16
|
export interface TextBlock {
|
|
13
17
|
type: "text";
|
|
14
18
|
content: string;
|
|
19
|
+
customCommandContent?: string;
|
|
20
|
+
source?: MessageSource;
|
|
15
21
|
}
|
|
16
22
|
export interface ErrorBlock {
|
|
17
23
|
type: "error";
|
|
@@ -64,12 +70,6 @@ export interface MemoryBlock {
|
|
|
64
70
|
memoryType?: "project" | "user";
|
|
65
71
|
storagePath?: string;
|
|
66
72
|
}
|
|
67
|
-
export interface CustomCommandBlock {
|
|
68
|
-
type: "custom_command";
|
|
69
|
-
commandName: string;
|
|
70
|
-
content: string;
|
|
71
|
-
originalInput?: string;
|
|
72
|
-
}
|
|
73
73
|
export interface SubagentBlock {
|
|
74
74
|
type: "subagent";
|
|
75
75
|
subagentId: string;
|
|
@@ -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,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,WAAW,GACX,
|
|
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,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,WAAW,GACX,aAAa,CAAC;AAElB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC;QAEb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB"}
|
package/dist/types/messaging.js
CHANGED
|
@@ -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;AAIjD,OAAO,EAEL,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AAuB7B;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,GAClB,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"convertMessagesForAPI.d.ts","sourceRoot":"","sources":["../../src/utils/convertMessagesForAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD,OAAO,EAEL,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AAuB7B;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,GAClB,0BAA0B,EAAE,CA8L9B"}
|
|
@@ -139,14 +139,7 @@ export function convertMessagesForAPI(messages) {
|
|
|
139
139
|
if (block.type === "text" && block.content) {
|
|
140
140
|
contentParts.push({
|
|
141
141
|
type: "text",
|
|
142
|
-
text: block.content,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
// Handle custom command blocks - pass full content as text to AI
|
|
146
|
-
if (block.type === "custom_command" && block.content) {
|
|
147
|
-
contentParts.push({
|
|
148
|
-
type: "text",
|
|
149
|
-
text: block.content,
|
|
142
|
+
text: block.customCommandContent || block.content,
|
|
150
143
|
});
|
|
151
144
|
}
|
|
152
145
|
// If there is an image, add image content
|
|
@@ -4,12 +4,7 @@
|
|
|
4
4
|
* Provides pattern matching functionality for hook tool name matching.
|
|
5
5
|
* Supports exact matching, wildcard patterns, and pipe-separated alternatives.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
matches(pattern: string, toolName: string): boolean;
|
|
9
|
-
isValidPattern(pattern: string): boolean;
|
|
10
|
-
getPatternType(pattern: string): "exact" | "glob" | "regex" | "alternatives";
|
|
11
|
-
}
|
|
12
|
-
export declare class HookMatcher implements IHookMatcher {
|
|
7
|
+
export declare class HookMatcher {
|
|
13
8
|
/**
|
|
14
9
|
* Test if pattern matches tool name
|
|
15
10
|
* Supports multiple matching strategies:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookMatcher.d.ts","sourceRoot":"","sources":["../../src/utils/hookMatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,
|
|
1
|
+
{"version":3,"file":"hookMatcher.d.ts","sourceRoot":"","sources":["../../src/utils/hookMatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,qBAAa,WAAW;IACtB;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYnD;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAoBxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc;IA6B5E;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAI1D;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO;CAkCxD"}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import type { Message, Usage } from "../types/index.js";
|
|
1
|
+
import type { Message, Usage, MessageSource } from "../types/index.js";
|
|
2
2
|
import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
|
|
3
|
-
export interface
|
|
4
|
-
messages: Message[];
|
|
3
|
+
export interface UserMessageParams {
|
|
5
4
|
content: string;
|
|
6
5
|
images?: Array<{
|
|
7
6
|
path: string;
|
|
8
7
|
mimeType: string;
|
|
9
8
|
}>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
9
|
+
customCommandContent?: string;
|
|
10
|
+
source?: MessageSource;
|
|
11
|
+
}
|
|
12
|
+
export interface AddUserMessageParams extends UserMessageParams {
|
|
13
|
+
messages: Message[];
|
|
16
14
|
}
|
|
17
15
|
export interface UpdateToolBlockParams {
|
|
18
16
|
messages: Message[];
|
|
@@ -30,17 +28,7 @@ export interface UpdateToolBlockParams {
|
|
|
30
28
|
}>;
|
|
31
29
|
compactParams?: string;
|
|
32
30
|
}
|
|
33
|
-
export
|
|
34
|
-
toolId: string;
|
|
35
|
-
args?: string;
|
|
36
|
-
result?: string;
|
|
37
|
-
success?: boolean;
|
|
38
|
-
error?: string;
|
|
39
|
-
isRunning?: boolean;
|
|
40
|
-
name?: string;
|
|
41
|
-
shortResult?: string;
|
|
42
|
-
compactParams?: string;
|
|
43
|
-
}
|
|
31
|
+
export type AgentToolBlockUpdateParams = Omit<UpdateToolBlockParams, "messages">;
|
|
44
32
|
export interface AddDiffBlockParams {
|
|
45
33
|
messages: Message[];
|
|
46
34
|
path: string;
|
|
@@ -85,7 +73,7 @@ export declare const extractUserInputHistory: (messages: Message[]) => string[];
|
|
|
85
73
|
* @returns base64 format image data URL
|
|
86
74
|
*/
|
|
87
75
|
export declare const convertImageToBase64: (imagePath: string) => string;
|
|
88
|
-
export declare const addUserMessageToMessages: ({ messages, content, images,
|
|
76
|
+
export declare const addUserMessageToMessages: ({ messages, content, images, customCommandContent, source, }: AddUserMessageParams) => Message[];
|
|
89
77
|
export declare const addAssistantMessageToMessages: (messages: Message[], content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage) => Message[];
|
|
90
78
|
export declare const addDiffBlockToMessage: ({ messages, path, diffResult, }: AddDiffBlockParams) => Message[];
|
|
91
79
|
export declare const updateToolBlockInMessage: ({ messages, id, parameters, result, success, error, isRunning, name, shortResult, images, compactParams, }: UpdateToolBlockParams) => Message[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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"}
|