wave-agent-sdk 0.5.0 → 0.6.2

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.
Files changed (169) hide show
  1. package/dist/agent.d.ts +14 -11
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +64 -151
  4. package/dist/constants/subagents.d.ts +5 -0
  5. package/dist/constants/subagents.d.ts.map +1 -0
  6. package/dist/constants/subagents.js +4 -0
  7. package/dist/constants/tools.d.ts +4 -1
  8. package/dist/constants/tools.d.ts.map +1 -1
  9. package/dist/constants/tools.js +4 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/managers/aiManager.d.ts +2 -5
  14. package/dist/managers/aiManager.d.ts.map +1 -1
  15. package/dist/managers/aiManager.js +43 -48
  16. package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
  17. package/dist/managers/backgroundTaskManager.js +63 -53
  18. package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
  19. package/dist/managers/foregroundTaskManager.js +3 -2
  20. package/dist/managers/mcpManager.d.ts.map +1 -1
  21. package/dist/managers/messageManager.d.ts +13 -27
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +94 -89
  24. package/dist/managers/permissionManager.d.ts.map +1 -1
  25. package/dist/managers/permissionManager.js +25 -15
  26. package/dist/managers/planManager.d.ts +1 -1
  27. package/dist/managers/planManager.d.ts.map +1 -1
  28. package/dist/managers/planManager.js +2 -2
  29. package/dist/managers/reversionManager.d.ts.map +1 -1
  30. package/dist/managers/reversionManager.js +23 -2
  31. package/dist/managers/slashCommandManager.d.ts +3 -0
  32. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  33. package/dist/managers/slashCommandManager.js +8 -3
  34. package/dist/managers/subagentManager.d.ts +8 -14
  35. package/dist/managers/subagentManager.d.ts.map +1 -1
  36. package/dist/managers/subagentManager.js +46 -112
  37. package/dist/managers/toolManager.d.ts +11 -0
  38. package/dist/managers/toolManager.d.ts.map +1 -1
  39. package/dist/managers/toolManager.js +20 -2
  40. package/dist/{constants/prompts.d.ts → prompts/index.d.ts} +17 -15
  41. package/dist/prompts/index.d.ts.map +1 -0
  42. package/dist/prompts/index.js +309 -0
  43. package/dist/services/aiService.d.ts +0 -1
  44. package/dist/services/aiService.d.ts.map +1 -1
  45. package/dist/services/aiService.js +4 -140
  46. package/dist/services/memory.d.ts +0 -3
  47. package/dist/services/memory.d.ts.map +1 -1
  48. package/dist/services/memory.js +0 -59
  49. package/dist/services/session.d.ts +15 -1
  50. package/dist/services/session.d.ts.map +1 -1
  51. package/dist/services/session.js +57 -1
  52. package/dist/services/taskManager.d.ts +25 -0
  53. package/dist/services/taskManager.d.ts.map +1 -0
  54. package/dist/services/taskManager.js +164 -0
  55. package/dist/tools/askUserQuestion.d.ts.map +1 -1
  56. package/dist/tools/askUserQuestion.js +39 -25
  57. package/dist/tools/bashTool.d.ts.map +1 -1
  58. package/dist/tools/bashTool.js +13 -11
  59. package/dist/tools/editTool.d.ts.map +1 -1
  60. package/dist/tools/editTool.js +2 -1
  61. package/dist/tools/exitPlanMode.d.ts.map +1 -1
  62. package/dist/tools/exitPlanMode.js +26 -2
  63. package/dist/tools/globTool.d.ts.map +1 -1
  64. package/dist/tools/globTool.js +8 -2
  65. package/dist/tools/grepTool.d.ts.map +1 -1
  66. package/dist/tools/grepTool.js +17 -6
  67. package/dist/tools/lsTool.d.ts.map +1 -1
  68. package/dist/tools/lsTool.js +3 -1
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +16 -1
  71. package/dist/tools/taskManagementTools.d.ts +6 -0
  72. package/dist/tools/taskManagementTools.d.ts.map +1 -0
  73. package/dist/tools/taskManagementTools.js +461 -0
  74. package/dist/tools/taskOutputTool.d.ts.map +1 -1
  75. package/dist/tools/taskOutputTool.js +32 -8
  76. package/dist/tools/taskStopTool.d.ts.map +1 -1
  77. package/dist/tools/taskStopTool.js +7 -1
  78. package/dist/tools/taskTool.d.ts.map +1 -1
  79. package/dist/tools/taskTool.js +37 -2
  80. package/dist/tools/types.d.ts +11 -0
  81. package/dist/tools/types.d.ts.map +1 -1
  82. package/dist/tools/writeTool.d.ts.map +1 -1
  83. package/dist/tools/writeTool.js +9 -1
  84. package/dist/types/index.d.ts +1 -0
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/index.js +1 -0
  87. package/dist/types/messaging.d.ts +2 -18
  88. package/dist/types/messaging.d.ts.map +1 -1
  89. package/dist/types/processes.d.ts +16 -6
  90. package/dist/types/processes.d.ts.map +1 -1
  91. package/dist/types/tasks.d.ts +13 -0
  92. package/dist/types/tasks.d.ts.map +1 -0
  93. package/dist/types/tasks.js +1 -0
  94. package/dist/types/tools.d.ts +4 -1
  95. package/dist/types/tools.d.ts.map +1 -1
  96. package/dist/utils/builtinSubagents.d.ts.map +1 -1
  97. package/dist/utils/builtinSubagents.js +59 -44
  98. package/dist/utils/cacheControlUtils.d.ts.map +1 -1
  99. package/dist/utils/cacheControlUtils.js +18 -12
  100. package/dist/utils/constants.d.ts +0 -4
  101. package/dist/utils/constants.d.ts.map +1 -1
  102. package/dist/utils/constants.js +0 -4
  103. package/dist/utils/convertMessagesForAPI.js +2 -2
  104. package/dist/utils/editUtils.d.ts.map +1 -1
  105. package/dist/utils/editUtils.js +2 -2
  106. package/dist/utils/gitUtils.d.ts +7 -0
  107. package/dist/utils/gitUtils.d.ts.map +1 -0
  108. package/dist/utils/gitUtils.js +24 -0
  109. package/dist/utils/messageOperations.d.ts +3 -58
  110. package/dist/utils/messageOperations.d.ts.map +1 -1
  111. package/dist/utils/messageOperations.js +4 -146
  112. package/dist/utils/nameGenerator.d.ts +1 -1
  113. package/dist/utils/nameGenerator.d.ts.map +1 -1
  114. package/dist/utils/nameGenerator.js +19 -3
  115. package/package.json +1 -1
  116. package/src/agent.ts +86 -183
  117. package/src/constants/subagents.ts +4 -0
  118. package/src/constants/tools.ts +4 -1
  119. package/src/index.ts +1 -0
  120. package/src/managers/aiManager.ts +63 -70
  121. package/src/managers/backgroundTaskManager.ts +58 -54
  122. package/src/managers/foregroundTaskManager.ts +3 -2
  123. package/src/managers/mcpManager.ts +6 -3
  124. package/src/managers/messageManager.ts +126 -142
  125. package/src/managers/permissionManager.ts +32 -21
  126. package/src/managers/planManager.ts +2 -2
  127. package/src/managers/reversionManager.ts +26 -2
  128. package/src/managers/slashCommandManager.ts +12 -3
  129. package/src/managers/subagentManager.ts +60 -144
  130. package/src/managers/toolManager.ts +32 -2
  131. package/src/prompts/index.ts +366 -0
  132. package/src/services/aiService.ts +3 -145
  133. package/src/services/memory.ts +0 -72
  134. package/src/services/session.ts +73 -0
  135. package/src/services/taskManager.ts +195 -0
  136. package/src/tools/askUserQuestion.ts +51 -29
  137. package/src/tools/bashTool.ts +15 -17
  138. package/src/tools/editTool.ts +3 -1
  139. package/src/tools/exitPlanMode.ts +27 -3
  140. package/src/tools/globTool.ts +10 -2
  141. package/src/tools/grepTool.ts +17 -6
  142. package/src/tools/lsTool.ts +3 -1
  143. package/src/tools/readTool.ts +17 -1
  144. package/src/tools/taskManagementTools.ts +516 -0
  145. package/src/tools/taskOutputTool.ts +34 -12
  146. package/src/tools/taskStopTool.ts +7 -1
  147. package/src/tools/taskTool.ts +45 -1
  148. package/src/tools/types.ts +12 -0
  149. package/src/tools/writeTool.ts +9 -2
  150. package/src/types/index.ts +1 -0
  151. package/src/types/messaging.ts +1 -21
  152. package/src/types/processes.ts +18 -7
  153. package/src/types/tasks.ts +13 -0
  154. package/src/types/tools.ts +4 -1
  155. package/src/utils/builtinSubagents.ts +81 -45
  156. package/src/utils/cacheControlUtils.ts +26 -18
  157. package/src/utils/constants.ts +0 -5
  158. package/src/utils/convertMessagesForAPI.ts +2 -2
  159. package/src/utils/editUtils.ts +2 -6
  160. package/src/utils/gitUtils.ts +24 -0
  161. package/src/utils/messageOperations.ts +6 -229
  162. package/src/utils/nameGenerator.ts +20 -3
  163. package/dist/constants/prompts.d.ts.map +0 -1
  164. package/dist/constants/prompts.js +0 -118
  165. package/dist/tools/todoWriteTool.d.ts +0 -6
  166. package/dist/tools/todoWriteTool.d.ts.map +0 -1
  167. package/dist/tools/todoWriteTool.js +0 -220
  168. package/src/constants/prompts.ts +0 -155
  169. package/src/tools/todoWriteTool.ts +0 -257
@@ -201,25 +201,29 @@ export function transformMessagesForClaudeCache(messages, modelName) {
201
201
  }
202
202
  // Find the latest interval message index (20th, 40th, 60th, etc.)
203
203
  const intervalMessageIndex = findIntervalMessageIndex(messages);
204
- // Find last system message index
205
- let lastSystemIndex = -1;
206
- for (let i = messages.length - 1; i >= 0; i--) {
207
- if (messages[i].role === "system") {
208
- lastSystemIndex = i;
209
- break;
210
- }
211
- }
204
+ // Find first system message index
205
+ const firstSystemIndex = messages.findIndex((m) => m.role === "system");
212
206
  const result = messages.map((message, index) => {
213
207
  // Validate message structure
214
208
  if (!message || typeof message !== "object" || !message.role) {
215
209
  logger.warn("Invalid message structure at index", index, ":", message);
216
210
  return message; // Return as-is to avoid breaking the flow
217
211
  }
218
- // Last system message: always cached (hardcoded)
219
- if (message.role === "system" && index === lastSystemIndex) {
212
+ // First system message: always cached (hardcoded)
213
+ if (message.role === "system" && index === firstSystemIndex) {
214
+ const content = message.content || "";
215
+ // If content is already an array, check if it already has cache control
216
+ if (Array.isArray(content)) {
217
+ const hasCacheControl = content.some((part) => part.type === "text" &&
218
+ part.cache_control);
219
+ if (hasCacheControl) {
220
+ return message;
221
+ }
222
+ }
223
+ const transformedContent = addCacheControlToContent(content, true);
220
224
  return {
221
225
  ...message,
222
- content: addCacheControlToContent(message.content || "", true),
226
+ content: transformedContent,
223
227
  };
224
228
  }
225
229
  // Interval-based message caching: cache message at latest interval position (sliding window)
@@ -242,9 +246,11 @@ export function transformMessagesForClaudeCache(messages, modelName) {
242
246
  }
243
247
  else {
244
248
  // For other message types without tool calls, cache the content
249
+ const content = message.content || "";
250
+ const transformedContent = addCacheControlToContent(content, true);
245
251
  return {
246
252
  ...message,
247
- content: addCacheControlToContent(message.content || "", true),
253
+ content: transformedContent,
248
254
  };
249
255
  }
250
256
  }
@@ -23,8 +23,4 @@ export declare const USER_MEMORY_FILE: string;
23
23
  */
24
24
  export declare const DEFAULT_WAVE_MAX_INPUT_TOKENS = 96000;
25
25
  export declare const DEFAULT_WAVE_MAX_OUTPUT_TOKENS = 8192;
26
- /**
27
- * Default number of messages to keep uncompressed
28
- */
29
- export declare const DEFAULT_KEEP_LAST_MESSAGES_COUNT = 7;
30
26
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAmC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAA6C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAE3E;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AACnD,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAmC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAA6C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAA0C,CAAC;AAE3E;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,6BAA6B,QAAQ,CAAC;AACnD,eAAO,MAAM,8BAA8B,OAAO,CAAC"}
@@ -25,7 +25,3 @@ export const USER_MEMORY_FILE = path.join(DATA_DIRECTORY, "AGENTS.md");
25
25
  */
26
26
  export const DEFAULT_WAVE_MAX_INPUT_TOKENS = 96000; // Default token limit
27
27
  export const DEFAULT_WAVE_MAX_OUTPUT_TOKENS = 8192; // Default output token limit
28
- /**
29
- * Default number of messages to keep uncompressed
30
- */
31
- export const DEFAULT_KEEP_LAST_MESSAGES_COUNT = 7;
@@ -41,8 +41,8 @@ export function convertMessagesForAPI(messages) {
41
41
  const compressBlock = message.blocks.find((block) => block.type === "compress");
42
42
  if (compressBlock && compressBlock.type === "compress") {
43
43
  recentMessages.unshift({
44
- role: "system",
45
- content: `[Compressed Message Summary] ${compressBlock.content}`,
44
+ role: "assistant",
45
+ content: compressBlock.content,
46
46
  });
47
47
  }
48
48
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"editUtils.d.ts","sourceRoot":"","sources":["../../src/utils/editUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,MAAM,CAwER"}
1
+ {"version":3,"file":"editUtils.d.ts","sourceRoot":"","sources":["../../src/utils/editUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,MAAM,CAoER"}
@@ -60,8 +60,8 @@ export function analyzeEditMismatch(content, searchString) {
60
60
  reportLines.push(`${lineNum.toString().padStart(4)} | ${actualLine}`);
61
61
  }
62
62
  else {
63
- reportLines.push(`${lineNum.toString().padStart(4)} | - ${expectedLine} (expected)`);
64
- reportLines.push(`${lineNum.toString().padStart(4)} | + ${actualLine} (actual)`);
63
+ reportLines.push(`${lineNum.toString().padStart(4)} | - ${expectedLine}`);
64
+ reportLines.push(`${lineNum.toString().padStart(4)} | + ${actualLine}`);
65
65
  }
66
66
  }
67
67
  return reportLines.join("\n");
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Check if a directory is a git repository
3
+ * @param dirPath Directory path
4
+ * @returns "Yes" if it's a git repository, "No" otherwise
5
+ */
6
+ export declare function isGitRepository(dirPath: string): string;
7
+ //# sourceMappingURL=gitUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAevD"}
@@ -0,0 +1,24 @@
1
+ import * as path from "node:path";
2
+ import * as fsSync from "node:fs";
3
+ /**
4
+ * Check if a directory is a git repository
5
+ * @param dirPath Directory path
6
+ * @returns "Yes" if it's a git repository, "No" otherwise
7
+ */
8
+ export function isGitRepository(dirPath) {
9
+ try {
10
+ // Check if .git directory exists in current directory or any parent directory
11
+ let currentPath = path.resolve(dirPath);
12
+ while (currentPath !== path.dirname(currentPath)) {
13
+ const gitPath = path.join(currentPath, ".git");
14
+ if (fsSync.existsSync(gitPath)) {
15
+ return "Yes";
16
+ }
17
+ currentPath = path.dirname(currentPath);
18
+ }
19
+ return "No";
20
+ }
21
+ catch {
22
+ return "No";
23
+ }
24
+ }
@@ -1,6 +1,5 @@
1
1
  import type { Message, Usage } from "../types/index.js";
2
2
  import { MessageSource } from "../types/index.js";
3
- import type { SubagentConfiguration } from "./subagentParser.js";
4
3
  import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
5
4
  export interface UserMessageParams {
6
5
  content: string;
@@ -17,7 +16,7 @@ export interface AddUserMessageParams extends UserMessageParams {
17
16
  export interface UpdateToolBlockParams {
18
17
  messages: Message[];
19
18
  id: string;
20
- parameters: string;
19
+ parameters?: string;
21
20
  result?: string;
22
21
  success?: boolean;
23
22
  error?: string;
@@ -37,19 +36,13 @@ export interface UpdateToolBlockParams {
37
36
  }>;
38
37
  compactParams?: string;
39
38
  parametersChunk?: string;
39
+ isManuallyBackgrounded?: boolean;
40
40
  }
41
41
  export type AgentToolBlockUpdateParams = Omit<UpdateToolBlockParams, "messages">;
42
42
  export interface AddErrorBlockParams {
43
43
  messages: Message[];
44
44
  error: string;
45
45
  }
46
- export interface AddMemoryBlockParams {
47
- messages: Message[];
48
- content: string;
49
- isSuccess: boolean;
50
- memoryType?: "project" | "user";
51
- storagePath?: string;
52
- }
53
46
  export interface AddCommandOutputParams {
54
47
  messages: Message[];
55
48
  command: string;
@@ -64,11 +57,6 @@ export interface CompleteCommandParams {
64
57
  command: string;
65
58
  exitCode: number;
66
59
  }
67
- /**
68
- * Extract text content from user messages in the messages array
69
- * Excludes messages with source HOOK to prevent hook-generated content from entering user history
70
- */
71
- export declare const extractUserInputHistory: (messages: Message[]) => string[];
72
60
  /**
73
61
  * Convert image file path to base64 format
74
62
  * @param imagePath Image file path
@@ -77,54 +65,11 @@ export declare const extractUserInputHistory: (messages: Message[]) => string[];
77
65
  export declare const convertImageToBase64: (imagePath: string) => string;
78
66
  export declare const addUserMessageToMessages: ({ messages, content, images, customCommandContent, source, }: AddUserMessageParams) => Message[];
79
67
  export declare const addAssistantMessageToMessages: (messages: Message[], content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage, additionalFields?: Record<string, unknown>) => Message[];
80
- export declare const updateToolBlockInMessage: ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, }: UpdateToolBlockParams) => Message[];
68
+ export declare const updateToolBlockInMessage: ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, isManuallyBackgrounded, }: UpdateToolBlockParams) => Message[];
81
69
  export declare const addErrorBlockToMessage: ({ messages, error, }: AddErrorBlockParams) => Message[];
82
- export declare const addMemoryBlockToMessage: ({ messages, content, isSuccess, memoryType, storagePath, }: AddMemoryBlockParams) => Message[];
83
- /**
84
- * Count valid blocks from the end
85
- * Only text, image, and tool type blocks are counted
86
- * @param messages Message array
87
- * @param targetCount Number of valid blocks to count
88
- * @returns { messageIndex: number, blockCount: number } Message index and actual counted block count
89
- */
90
- export declare const countValidBlocksFromEnd: (messages: Message[], targetCount: number) => {
91
- messageIndex: number;
92
- blockCount: number;
93
- };
94
- /**
95
- * Get messages to be compressed and insertion position
96
- * @param messages Message array
97
- * @param keepLastCount Keep the last few valid blocks uncompressed
98
- * @returns { messagesToCompress: Message[], insertIndex: number }
99
- */
100
- export declare const getMessagesToCompress: (messages: Message[], keepLastCount?: number) => {
101
- messagesToCompress: Message[];
102
- insertIndex: number;
103
- };
104
70
  export declare const addCommandOutputMessage: ({ messages, command, }: AddCommandOutputParams) => Message[];
105
71
  export declare const updateCommandOutputInMessage: ({ messages, command, output, }: UpdateCommandOutputParams) => Message[];
106
72
  export declare const completeCommandInMessage: ({ messages, command, exitCode, }: CompleteCommandParams) => Message[];
107
- export interface AddSubagentBlockParams {
108
- messages: Message[];
109
- subagentId: string;
110
- subagentName: string;
111
- status: "active" | "completed" | "error" | "aborted";
112
- sessionId: string;
113
- configuration: SubagentConfiguration;
114
- runInBackground?: boolean;
115
- }
116
- export interface UpdateSubagentBlockParams {
117
- messages: Message[];
118
- subagentId: string;
119
- status: "active" | "completed" | "error" | "aborted";
120
- sessionId?: string;
121
- }
122
- export declare const addSubagentBlockToMessage: ({ messages, subagentId, subagentName, status, sessionId, configuration, runInBackground, }: AddSubagentBlockParams) => Message[];
123
- export declare const updateSubagentBlockInMessage: (messages: Message[], subagentId: string, updates: Partial<{
124
- status: "active" | "completed" | "error" | "aborted";
125
- sessionId: string;
126
- runInBackground: boolean;
127
- }>) => Message[];
128
73
  /**
129
74
  * Removes the last user message from the messages array
130
75
  * Used for hook error handling when the user prompt needs to be erased
@@ -1 +1 @@
1
- {"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageOperations.d.ts","sourceRoot":"","sources":["../../src/utils/messageOperations.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,6 @@
1
- import { MessageSource } from "../types/index.js";
2
- import { DEFAULT_KEEP_LAST_MESSAGES_COUNT } from "./constants.js";
3
1
  import { readFileSync } from "fs";
4
2
  import { extname } from "path";
5
3
  import { logger } from "./globalLogger.js";
6
- /**
7
- * Extract text content from user messages in the messages array
8
- * Excludes messages with source HOOK to prevent hook-generated content from entering user history
9
- */
10
- export const extractUserInputHistory = (messages) => {
11
- return messages
12
- .filter((message) => message.role === "user")
13
- .map((message) => {
14
- // Extract text block content, excluding HOOK-sourced blocks
15
- const textBlocks = message.blocks.filter((block) => block.type === "text" && block.source !== MessageSource.HOOK);
16
- return textBlocks
17
- .map((block) => block.content)
18
- .join(" ")
19
- .trim();
20
- })
21
- .filter((text) => text.length > 0); // Filter out empty text
22
- };
23
4
  /**
24
5
  * Convert image file path to base64 format
25
6
  * @param imagePath Image file path
@@ -116,7 +97,7 @@ export const addAssistantMessageToMessages = (messages, content, toolCalls, usag
116
97
  return [...messages, initialAssistantMessage];
117
98
  };
118
99
  // Update Tool Block of the last assistant message
119
- export const updateToolBlockInMessage = ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, }) => {
100
+ export const updateToolBlockInMessage = ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, isManuallyBackgrounded, }) => {
120
101
  const newMessages = [...messages];
121
102
  // Find the last assistant message
122
103
  for (let i = newMessages.length - 1; i >= 0; i--) {
@@ -141,6 +122,8 @@ export const updateToolBlockInMessage = ({ messages, id, parameters, result, suc
141
122
  toolBlock.compactParams = compactParams;
142
123
  if (parametersChunk !== undefined)
143
124
  toolBlock.parametersChunk = parametersChunk;
125
+ if (isManuallyBackgrounded !== undefined)
126
+ toolBlock.isManuallyBackgrounded = isManuallyBackgrounded;
144
127
  }
145
128
  }
146
129
  else {
@@ -159,6 +142,7 @@ export const updateToolBlockInMessage = ({ messages, id, parameters, result, suc
159
142
  stage: stage ?? "start",
160
143
  compactParams: compactParams,
161
144
  parametersChunk: parametersChunk,
145
+ isManuallyBackgrounded: isManuallyBackgrounded,
162
146
  });
163
147
  }
164
148
  break;
@@ -198,83 +182,6 @@ export const addErrorBlockToMessage = ({ messages, error, }) => {
198
182
  }
199
183
  return newMessages;
200
184
  };
201
- // Add Memory Block as new assistant message
202
- export const addMemoryBlockToMessage = ({ messages, content, isSuccess, memoryType, storagePath, }) => {
203
- const newMessages = [...messages];
204
- // Create new assistant message containing MemoryBlock
205
- const memoryMessage = {
206
- role: "assistant",
207
- blocks: [
208
- {
209
- type: "memory",
210
- content,
211
- isSuccess,
212
- memoryType,
213
- storagePath,
214
- },
215
- ],
216
- };
217
- // Add to end of message list
218
- newMessages.push(memoryMessage);
219
- return newMessages;
220
- };
221
- /**
222
- * Count valid blocks from the end
223
- * Only text, image, and tool type blocks are counted
224
- * @param messages Message array
225
- * @param targetCount Number of valid blocks to count
226
- * @returns { messageIndex: number, blockCount: number } Message index and actual counted block count
227
- */
228
- export const countValidBlocksFromEnd = (messages, targetCount) => {
229
- let validBlockCount = 0;
230
- // Iterate messages from end to beginning
231
- for (let i = messages.length - 1; i >= 0; i--) {
232
- const message = messages[i];
233
- // Iterate through all blocks of current message
234
- for (const block of message.blocks) {
235
- // Only count valid block types
236
- if (block.type === "text" ||
237
- block.type === "image" ||
238
- block.type === "tool") {
239
- validBlockCount++;
240
- // If target count reached, return current message index
241
- if (validBlockCount >= targetCount) {
242
- return { messageIndex: i, blockCount: validBlockCount };
243
- }
244
- }
245
- }
246
- }
247
- // If target count not reached, return index 0
248
- return { messageIndex: 0, blockCount: validBlockCount };
249
- };
250
- /**
251
- * Get messages to be compressed and insertion position
252
- * @param messages Message array
253
- * @param keepLastCount Keep the last few valid blocks uncompressed
254
- * @returns { messagesToCompress: Message[], insertIndex: number }
255
- */
256
- export const getMessagesToCompress = (messages, keepLastCount = DEFAULT_KEEP_LAST_MESSAGES_COUNT) => {
257
- // Calculate message position to keep from end to beginning
258
- const { messageIndex } = countValidBlocksFromEnd(messages, keepLastCount);
259
- // Find the last message containing compression block
260
- let lastCompressIndex = -1;
261
- for (let i = messages.length - 1; i >= 0; i--) {
262
- const hasCompressBlock = messages[i].blocks.some((block) => block.type === "compress");
263
- if (hasCompressBlock) {
264
- lastCompressIndex = i;
265
- break;
266
- }
267
- }
268
- // Determine compression start position
269
- // If compression block exists, start from compression block position (include compression block)
270
- // If no compression block, start from beginning
271
- const startIndex = lastCompressIndex >= 0 ? lastCompressIndex : 0;
272
- // Messages to compress are all messages from start position to before calculated position
273
- const messagesToCompress = messages.slice(startIndex, messageIndex);
274
- // Change insertion position to negative number, indicating position from end
275
- const insertIndex = messageIndex - messages.length;
276
- return { messagesToCompress, insertIndex };
277
- };
278
185
  // Add command output block to message list
279
186
  export const addCommandOutputMessage = ({ messages, command, }) => {
280
187
  const outputMessage = {
@@ -328,55 +235,6 @@ export const completeCommandInMessage = ({ messages, command, exitCode, }) => {
328
235
  }
329
236
  return newMessages;
330
237
  };
331
- export const addSubagentBlockToMessage = ({ messages, subagentId, subagentName, status, sessionId, configuration, runInBackground, }) => {
332
- const newMessages = [...messages];
333
- // Find the last assistant message or create one
334
- let lastAssistantMessage = newMessages[newMessages.length - 1];
335
- if (!lastAssistantMessage || lastAssistantMessage.role !== "assistant") {
336
- // Create new assistant message if the last message is not from assistant
337
- lastAssistantMessage = {
338
- id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
339
- role: "assistant",
340
- blocks: [],
341
- };
342
- newMessages.push(lastAssistantMessage);
343
- }
344
- // Add subagent block
345
- lastAssistantMessage.blocks.push({
346
- type: "subagent",
347
- subagentId,
348
- subagentName,
349
- status,
350
- sessionId,
351
- configuration,
352
- runInBackground,
353
- });
354
- return newMessages;
355
- };
356
- export const updateSubagentBlockInMessage = (messages, subagentId, updates) => {
357
- const newMessages = [...messages];
358
- // Find and update the subagent block
359
- for (let i = newMessages.length - 1; i >= 0; i--) {
360
- const message = newMessages[i];
361
- if (message.role === "assistant") {
362
- for (const block of message.blocks) {
363
- if (block.type === "subagent" && block.subagentId === subagentId) {
364
- if (updates.status !== undefined) {
365
- block.status = updates.status;
366
- }
367
- if (updates.sessionId !== undefined) {
368
- block.sessionId = updates.sessionId;
369
- }
370
- if (updates.runInBackground !== undefined) {
371
- block.runInBackground = updates.runInBackground;
372
- }
373
- return newMessages;
374
- }
375
- }
376
- }
377
- }
378
- return newMessages;
379
- };
380
238
  /**
381
239
  * Removes the last user message from the messages array
382
240
  * Used for hook error handling when the user prompt needs to be erased
@@ -4,5 +4,5 @@
4
4
  /**
5
5
  * Generates a random English name (adjective-noun)
6
6
  */
7
- export declare function generateRandomName(): string;
7
+ export declare function generateRandomName(seed?: string): string;
8
8
  //# sourceMappingURL=nameGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nameGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/nameGenerator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C"}
1
+ {"version":3,"file":"nameGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/nameGenerator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBxD"}
@@ -68,8 +68,24 @@ const nouns = [
68
68
  /**
69
69
  * Generates a random English name (adjective-noun)
70
70
  */
71
- export function generateRandomName() {
72
- const adj = adjectives[Math.floor(Math.random() * adjectives.length)];
73
- const noun = nouns[Math.floor(Math.random() * nouns.length)];
71
+ export function generateRandomName(seed) {
72
+ let adjIndex;
73
+ let nounIndex;
74
+ if (seed) {
75
+ // Simple hash function to derive indices from seed
76
+ let hash = 0;
77
+ for (let i = 0; i < seed.length; i++) {
78
+ hash = (hash << 5) - hash + seed.charCodeAt(i);
79
+ hash |= 0; // Convert to 32bit integer
80
+ }
81
+ adjIndex = Math.abs(hash) % adjectives.length;
82
+ nounIndex = Math.abs(hash >> 8) % nouns.length;
83
+ }
84
+ else {
85
+ adjIndex = Math.floor(Math.random() * adjectives.length);
86
+ nounIndex = Math.floor(Math.random() * nouns.length);
87
+ }
88
+ const adj = adjectives[adjIndex];
89
+ const noun = nouns[nounIndex];
74
90
  return `${adj}-${noun}`;
75
91
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave-agent-sdk",
3
- "version": "0.5.0",
3
+ "version": "0.6.2",
4
4
  "description": "SDK for building AI-powered development tools and agents",
5
5
  "keywords": [
6
6
  "ai",