wave-agent-sdk 0.0.6 → 0.0.8
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 +32 -20
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +209 -24
- package/dist/constants/events.d.ts +28 -0
- package/dist/constants/events.d.ts.map +1 -0
- package/dist/constants/events.js +27 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/managers/aiManager.d.ts +34 -1
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +248 -132
- package/dist/managers/backgroundBashManager.d.ts.map +1 -1
- package/dist/managers/backgroundBashManager.js +7 -6
- package/dist/managers/hookManager.d.ts +13 -16
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +81 -44
- package/dist/managers/liveConfigManager.d.ts +58 -0
- package/dist/managers/liveConfigManager.d.ts.map +1 -0
- package/dist/managers/liveConfigManager.js +160 -0
- package/dist/managers/messageManager.d.ts +41 -24
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +168 -49
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +9 -3
- package/dist/managers/subagentManager.d.ts +51 -0
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +190 -19
- package/dist/services/aiService.d.ts +13 -5
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +350 -74
- package/dist/services/configurationWatcher.d.ts +120 -0
- package/dist/services/configurationWatcher.d.ts.map +1 -0
- package/dist/services/configurationWatcher.js +439 -0
- package/dist/services/fileWatcher.d.ts +69 -0
- package/dist/services/fileWatcher.d.ts.map +1 -0
- package/dist/services/fileWatcher.js +213 -0
- package/dist/services/hook.d.ts +91 -9
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +393 -43
- package/dist/services/jsonlHandler.d.ts +62 -0
- package/dist/services/jsonlHandler.d.ts.map +1 -0
- package/dist/services/jsonlHandler.js +257 -0
- package/dist/services/memory.d.ts +9 -0
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +81 -12
- package/dist/services/memoryStore.d.ts +81 -0
- package/dist/services/memoryStore.d.ts.map +1 -0
- package/dist/services/memoryStore.js +200 -0
- package/dist/services/session.d.ts +64 -49
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +310 -132
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +5 -4
- package/dist/tools/deleteFileTool.d.ts.map +1 -1
- package/dist/tools/deleteFileTool.js +2 -1
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +3 -2
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +4 -3
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +2 -1
- package/dist/tools/todoWriteTool.d.ts.map +1 -1
- package/dist/tools/todoWriteTool.js +3 -10
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +5 -6
- package/dist/types/commands.d.ts +4 -0
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/core.d.ts +35 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/environment.d.ts +42 -0
- package/dist/types/environment.d.ts.map +1 -0
- package/dist/types/environment.js +21 -0
- package/dist/types/hooks.d.ts +8 -2
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +8 -2
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/memoryStore.d.ts +82 -0
- package/dist/types/memoryStore.d.ts.map +1 -0
- package/dist/types/memoryStore.js +7 -0
- package/dist/types/messaging.d.ts +21 -9
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/messaging.js +5 -1
- package/dist/types/session.d.ts +20 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +7 -0
- package/dist/utils/bashHistory.d.ts.map +1 -1
- package/dist/utils/bashHistory.js +27 -26
- package/dist/utils/cacheControlUtils.d.ts +121 -0
- package/dist/utils/cacheControlUtils.d.ts.map +1 -0
- package/dist/utils/cacheControlUtils.js +367 -0
- package/dist/utils/commandPathResolver.d.ts +52 -0
- package/dist/utils/commandPathResolver.d.ts.map +1 -0
- package/dist/utils/commandPathResolver.js +145 -0
- package/dist/utils/configPaths.d.ts +85 -0
- package/dist/utils/configPaths.d.ts.map +1 -0
- package/dist/utils/configPaths.js +121 -0
- package/dist/utils/configResolver.d.ts +37 -10
- package/dist/utils/configResolver.d.ts.map +1 -1
- package/dist/utils/configResolver.js +127 -23
- package/dist/utils/constants.d.ts +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +8 -13
- package/dist/utils/customCommands.d.ts.map +1 -1
- package/dist/utils/customCommands.js +66 -21
- package/dist/utils/fileUtils.d.ts +15 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +61 -0
- package/dist/utils/globalLogger.d.ts +102 -0
- package/dist/utils/globalLogger.d.ts.map +1 -0
- package/dist/utils/globalLogger.js +136 -0
- package/dist/utils/hookMatcher.d.ts +1 -6
- package/dist/utils/hookMatcher.d.ts.map +1 -1
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +25 -3
- package/dist/utils/messageOperations.d.ts +27 -27
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +46 -36
- package/dist/utils/pathEncoder.d.ts +104 -0
- package/dist/utils/pathEncoder.d.ts.map +1 -0
- package/dist/utils/pathEncoder.js +272 -0
- package/dist/utils/subagentParser.d.ts.map +1 -1
- package/dist/utils/subagentParser.js +2 -1
- package/dist/utils/tokenCalculation.d.ts +26 -0
- package/dist/utils/tokenCalculation.d.ts.map +1 -0
- package/dist/utils/tokenCalculation.js +36 -0
- package/package.json +6 -3
- package/src/agent.ts +301 -37
- package/src/constants/events.ts +38 -0
- package/src/index.ts +2 -0
- package/src/managers/aiManager.ts +325 -173
- package/src/managers/backgroundBashManager.ts +7 -6
- package/src/managers/hookManager.ts +106 -84
- package/src/managers/liveConfigManager.ts +248 -0
- package/src/managers/messageManager.ts +237 -100
- package/src/managers/slashCommandManager.ts +9 -7
- package/src/managers/subagentManager.ts +284 -22
- package/src/services/aiService.ts +474 -83
- package/src/services/configurationWatcher.ts +622 -0
- package/src/services/fileWatcher.ts +301 -0
- package/src/services/hook.ts +538 -47
- package/src/services/jsonlHandler.ts +319 -0
- package/src/services/memory.ts +92 -12
- package/src/services/memoryStore.ts +279 -0
- package/src/services/session.ts +381 -157
- package/src/tools/bashTool.ts +5 -4
- package/src/tools/deleteFileTool.ts +2 -1
- package/src/tools/editTool.ts +3 -2
- package/src/tools/multiEditTool.ts +4 -3
- package/src/tools/readTool.ts +2 -1
- package/src/tools/todoWriteTool.ts +3 -11
- package/src/tools/writeTool.ts +7 -6
- package/src/types/commands.ts +6 -0
- package/src/types/core.ts +44 -0
- package/src/types/environment.ts +60 -0
- package/src/types/hooks.ts +21 -8
- package/src/types/index.ts +2 -0
- package/src/types/memoryStore.ts +94 -0
- package/src/types/messaging.ts +21 -10
- package/src/types/session.ts +25 -0
- package/src/utils/bashHistory.ts +27 -27
- package/src/utils/cacheControlUtils.ts +540 -0
- package/src/utils/commandPathResolver.ts +189 -0
- package/src/utils/configPaths.ts +163 -0
- package/src/utils/configResolver.ts +182 -22
- package/src/utils/constants.ts +1 -1
- package/src/utils/convertMessagesForAPI.ts +8 -14
- package/src/utils/customCommands.ts +90 -22
- package/src/utils/fileUtils.ts +65 -0
- package/src/utils/globalLogger.ts +145 -0
- package/src/utils/hookMatcher.ts +1 -12
- package/src/utils/mcpUtils.ts +34 -3
- package/src/utils/messageOperations.ts +77 -60
- package/src/utils/pathEncoder.ts +379 -0
- package/src/utils/subagentParser.ts +2 -1
- package/src/utils/tokenCalculation.ts +43 -0
- package/src/types/index.ts.backup +0 -357
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { Message, Usage } from "../types/index.js";
|
|
2
|
+
import { MessageSource } from "../types/index.js";
|
|
3
|
+
import type { SubagentConfiguration } from "./subagentParser.js";
|
|
2
4
|
import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
|
|
3
|
-
export interface
|
|
4
|
-
messages: Message[];
|
|
5
|
+
export interface UserMessageParams {
|
|
5
6
|
content: string;
|
|
6
7
|
images?: Array<{
|
|
7
8
|
path: string;
|
|
8
9
|
mimeType: string;
|
|
9
10
|
}>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
11
|
+
customCommandContent?: string;
|
|
12
|
+
source?: MessageSource;
|
|
13
|
+
}
|
|
14
|
+
export interface AddUserMessageParams extends UserMessageParams {
|
|
15
|
+
messages: Message[];
|
|
16
16
|
}
|
|
17
17
|
export interface UpdateToolBlockParams {
|
|
18
18
|
messages: Message[];
|
|
@@ -21,7 +21,14 @@ export interface UpdateToolBlockParams {
|
|
|
21
21
|
result?: string;
|
|
22
22
|
success?: boolean;
|
|
23
23
|
error?: string;
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Tool execution stage:
|
|
26
|
+
* - 'start': Tool call initiated during AI streaming
|
|
27
|
+
* - 'streaming': Tool parameters being received incrementally
|
|
28
|
+
* - 'running': Tool execution in progress
|
|
29
|
+
* - 'end': Tool execution completed with final result
|
|
30
|
+
*/
|
|
31
|
+
stage: "start" | "streaming" | "running" | "end";
|
|
25
32
|
name?: string;
|
|
26
33
|
shortResult?: string;
|
|
27
34
|
images?: Array<{
|
|
@@ -29,18 +36,9 @@ export interface UpdateToolBlockParams {
|
|
|
29
36
|
mediaType?: string;
|
|
30
37
|
}>;
|
|
31
38
|
compactParams?: string;
|
|
39
|
+
parametersChunk?: string;
|
|
32
40
|
}
|
|
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
|
-
}
|
|
41
|
+
export type AgentToolBlockUpdateParams = Omit<UpdateToolBlockParams, "messages">;
|
|
44
42
|
export interface AddDiffBlockParams {
|
|
45
43
|
messages: Message[];
|
|
46
44
|
path: string;
|
|
@@ -77,6 +75,7 @@ export interface CompleteCommandParams {
|
|
|
77
75
|
}
|
|
78
76
|
/**
|
|
79
77
|
* Extract text content from user messages in the messages array
|
|
78
|
+
* Excludes messages with source HOOK to prevent hook-generated content from entering user history
|
|
80
79
|
*/
|
|
81
80
|
export declare const extractUserInputHistory: (messages: Message[]) => string[];
|
|
82
81
|
/**
|
|
@@ -85,10 +84,10 @@ export declare const extractUserInputHistory: (messages: Message[]) => string[];
|
|
|
85
84
|
* @returns base64 format image data URL
|
|
86
85
|
*/
|
|
87
86
|
export declare const convertImageToBase64: (imagePath: string) => string;
|
|
88
|
-
export declare const addUserMessageToMessages: ({ messages, content, images,
|
|
89
|
-
export declare const addAssistantMessageToMessages: (messages: Message[], content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage) => Message[];
|
|
87
|
+
export declare const addUserMessageToMessages: ({ messages, content, images, customCommandContent, source, }: AddUserMessageParams) => Message[];
|
|
88
|
+
export declare const addAssistantMessageToMessages: (messages: Message[], content?: string, toolCalls?: ChatCompletionMessageFunctionToolCall[], usage?: Usage, metadata?: Record<string, unknown>) => Message[];
|
|
90
89
|
export declare const addDiffBlockToMessage: ({ messages, path, diffResult, }: AddDiffBlockParams) => Message[];
|
|
91
|
-
export declare const updateToolBlockInMessage: ({ messages, id, parameters, result, success, error,
|
|
90
|
+
export declare const updateToolBlockInMessage: ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, }: UpdateToolBlockParams) => Message[];
|
|
92
91
|
export declare const addErrorBlockToMessage: ({ messages, error, }: AddErrorBlockParams) => Message[];
|
|
93
92
|
export declare const addMemoryBlockToMessage: ({ messages, content, isSuccess, memoryType, storagePath, }: AddMemoryBlockParams) => Message[];
|
|
94
93
|
/**
|
|
@@ -120,18 +119,19 @@ export interface AddSubagentBlockParams {
|
|
|
120
119
|
subagentId: string;
|
|
121
120
|
subagentName: string;
|
|
122
121
|
status: "active" | "completed" | "error" | "aborted";
|
|
123
|
-
|
|
122
|
+
sessionId: string;
|
|
123
|
+
configuration: SubagentConfiguration;
|
|
124
124
|
}
|
|
125
125
|
export interface UpdateSubagentBlockParams {
|
|
126
126
|
messages: Message[];
|
|
127
127
|
subagentId: string;
|
|
128
128
|
status: "active" | "completed" | "error" | "aborted";
|
|
129
|
-
|
|
129
|
+
sessionId?: string;
|
|
130
130
|
}
|
|
131
|
-
export declare const addSubagentBlockToMessage: ({ messages, subagentId, subagentName, status,
|
|
131
|
+
export declare const addSubagentBlockToMessage: ({ messages, subagentId, subagentName, status, sessionId, configuration, }: AddSubagentBlockParams) => Message[];
|
|
132
132
|
export declare const updateSubagentBlockInMessage: (messages: Message[], subagentId: string, updates: Partial<{
|
|
133
133
|
status: "active" | "completed" | "error" | "aborted";
|
|
134
|
-
|
|
134
|
+
sessionId: string;
|
|
135
135
|
}>) => Message[];
|
|
136
136
|
/**
|
|
137
137
|
* Removes the last user message from the messages array
|
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAI5E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAGD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,qBAAqB,EACrB,UAAU,CACX,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,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,sBAAsB;IACrC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,OAAO,EAAE,KAAG,MAAM,EAcnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,MAmCxD,CAAC;AAGF,eAAO,MAAM,wBAAwB,GAAI,8DAMtC,oBAAoB,KAAG,OAAO,EA0BhC,CAAC;AAGF,eAAO,MAAM,6BAA6B,GACxC,UAAU,OAAO,EAAE,EACnB,UAAU,MAAM,EAChB,YAAY,qCAAqC,EAAE,EACnD,QAAQ,KAAK,EACb,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACjC,OAAO,EA8BT,CAAC;AAGF,eAAO,MAAM,qBAAqB,GAAI,iCAInC,kBAAkB,KAAG,OAAO,EAe9B,CAAC;AAGF,eAAO,MAAM,wBAAwB,GAAI,yHAatC,qBAAqB,KAAG,OAAO,EA8CjC,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,sBAGpC,mBAAmB,KAAG,OAAO,EA+B/B,CAAC;AAGF,eAAO,MAAM,uBAAuB,GAAI,4DAMrC,oBAAoB,KAAG,OAAO,EAoBhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,OAAO,EAAE,EACnB,aAAa,MAAM,KAClB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CA2B5C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,OAAO,EAAE,EACnB,gBAAe,MAAU,KACxB;IAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CA4BtD,CAAC;AAGF,eAAO,MAAM,uBAAuB,GAAI,wBAGrC,sBAAsB,KAAG,OAAO,EAelC,CAAC;AAGF,eAAO,MAAM,4BAA4B,GAAI,gCAI1C,yBAAyB,KAAG,OAAO,EAmBrC,CAAC;AAGF,eAAO,MAAM,wBAAwB,GAAI,kCAItC,qBAAqB,KAAG,OAAO,EAoBjC,CAAC;AAGF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,yBAAyB,GAAI,2EAOvC,sBAAsB,KAAG,OAAO,EA0BlC,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,OAAO,EAAE,EACnB,YAAY,MAAM,EAClB,SAAS,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,KACD,OAAO,EAsBT,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,OAAO,EAAE,KAAG,OAAO,EAalE,CAAC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { MessageSource } from "../types/index.js";
|
|
1
2
|
import { readFileSync } from "fs";
|
|
2
3
|
import { extname } from "path";
|
|
4
|
+
import { logger } from "./globalLogger.js";
|
|
3
5
|
/**
|
|
4
6
|
* Extract text content from user messages in the messages array
|
|
7
|
+
* Excludes messages with source HOOK to prevent hook-generated content from entering user history
|
|
5
8
|
*/
|
|
6
9
|
export const extractUserInputHistory = (messages) => {
|
|
7
10
|
return messages
|
|
8
11
|
.filter((message) => message.role === "user")
|
|
9
12
|
.map((message) => {
|
|
10
|
-
// Extract
|
|
11
|
-
const textBlocks = message.blocks.filter((block) => block.type === "text");
|
|
13
|
+
// Extract text block content, excluding HOOK-sourced blocks
|
|
14
|
+
const textBlocks = message.blocks.filter((block) => block.type === "text" && block.source !== MessageSource.HOOK);
|
|
12
15
|
return textBlocks
|
|
13
16
|
.map((block) => block.content)
|
|
14
17
|
.join(" ")
|
|
@@ -50,22 +53,23 @@ export const convertImageToBase64 = (imagePath) => {
|
|
|
50
53
|
const base64String = imageBuffer.toString("base64");
|
|
51
54
|
return `data:${mimeType};base64,${base64String}`;
|
|
52
55
|
}
|
|
53
|
-
catch {
|
|
54
|
-
|
|
56
|
+
catch (error) {
|
|
57
|
+
logger.error(`Failed to convert image to base64: ${imagePath}`, error);
|
|
55
58
|
// Return an error placeholder or throw error
|
|
56
59
|
return `data:image/png;base64,`; // Empty base64, avoid program crash
|
|
57
60
|
}
|
|
58
61
|
};
|
|
59
62
|
// Add user message
|
|
60
|
-
export const addUserMessageToMessages = ({ messages, content, images,
|
|
63
|
+
export const addUserMessageToMessages = ({ messages, content, images, customCommandContent, source, }) => {
|
|
61
64
|
const blocks = [];
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
65
|
+
// Create text block with optional customCommandContent and source
|
|
66
|
+
const textBlock = {
|
|
67
|
+
type: "text",
|
|
68
|
+
content,
|
|
69
|
+
...(customCommandContent && { customCommandContent }),
|
|
70
|
+
...(source && { source }),
|
|
71
|
+
};
|
|
72
|
+
blocks.push(textBlock);
|
|
69
73
|
// If there are images, add image block
|
|
70
74
|
if (images && images.length > 0) {
|
|
71
75
|
const imageUrls = images.map((img) => img.path);
|
|
@@ -81,7 +85,7 @@ export const addUserMessageToMessages = ({ messages, content, images, customComm
|
|
|
81
85
|
return [...messages, userMessage];
|
|
82
86
|
};
|
|
83
87
|
// Add assistant message (support one-time addition of answer and tool calls)
|
|
84
|
-
export const addAssistantMessageToMessages = (messages, content, toolCalls, usage) => {
|
|
88
|
+
export const addAssistantMessageToMessages = (messages, content, toolCalls, usage, metadata) => {
|
|
85
89
|
const blocks = [];
|
|
86
90
|
// If there's answer content, add text block
|
|
87
91
|
if (content) {
|
|
@@ -96,7 +100,7 @@ export const addAssistantMessageToMessages = (messages, content, toolCalls, usag
|
|
|
96
100
|
result: "",
|
|
97
101
|
id: toolCall.id || "",
|
|
98
102
|
name: toolCall.function?.name || "",
|
|
99
|
-
|
|
103
|
+
stage: "start",
|
|
100
104
|
});
|
|
101
105
|
});
|
|
102
106
|
}
|
|
@@ -104,6 +108,7 @@ export const addAssistantMessageToMessages = (messages, content, toolCalls, usag
|
|
|
104
108
|
role: "assistant",
|
|
105
109
|
blocks,
|
|
106
110
|
usage, // Include usage data if provided
|
|
111
|
+
...(metadata ? { metadata: { ...metadata } } : {}),
|
|
107
112
|
};
|
|
108
113
|
return [...messages, initialAssistantMessage];
|
|
109
114
|
};
|
|
@@ -125,7 +130,7 @@ export const addDiffBlockToMessage = ({ messages, path, diffResult, }) => {
|
|
|
125
130
|
return newMessages;
|
|
126
131
|
};
|
|
127
132
|
// Update Tool Block of the last assistant message
|
|
128
|
-
export const updateToolBlockInMessage = ({ messages, id, parameters, result, success, error,
|
|
133
|
+
export const updateToolBlockInMessage = ({ messages, id, parameters, result, success, error, stage, name, shortResult, images, compactParams, parametersChunk, }) => {
|
|
129
134
|
const newMessages = [...messages];
|
|
130
135
|
// Find the last assistant message
|
|
131
136
|
for (let i = newMessages.length - 1; i >= 0; i--) {
|
|
@@ -144,26 +149,30 @@ export const updateToolBlockInMessage = ({ messages, id, parameters, result, suc
|
|
|
144
149
|
toolBlock.success = success;
|
|
145
150
|
if (error !== undefined)
|
|
146
151
|
toolBlock.error = error;
|
|
147
|
-
if (
|
|
148
|
-
toolBlock.
|
|
152
|
+
if (stage !== undefined)
|
|
153
|
+
toolBlock.stage = stage;
|
|
149
154
|
if (compactParams !== undefined)
|
|
150
155
|
toolBlock.compactParams = compactParams;
|
|
156
|
+
if (parametersChunk !== undefined)
|
|
157
|
+
toolBlock.parametersChunk = parametersChunk;
|
|
151
158
|
}
|
|
152
159
|
}
|
|
153
|
-
else
|
|
160
|
+
else {
|
|
154
161
|
// If existing block not found, create new one
|
|
162
|
+
// This handles cases where we're streaming tool parameters before execution
|
|
155
163
|
newMessages[i].blocks.push({
|
|
156
164
|
type: "tool",
|
|
157
165
|
parameters: parameters,
|
|
158
|
-
result: result,
|
|
166
|
+
result: result || "",
|
|
159
167
|
shortResult: shortResult,
|
|
160
168
|
images: images, // Add image data
|
|
161
169
|
id: id,
|
|
162
170
|
name: name || "unknown",
|
|
163
171
|
success: success,
|
|
164
172
|
error: error,
|
|
165
|
-
|
|
173
|
+
stage: stage ?? "start",
|
|
166
174
|
compactParams: compactParams,
|
|
175
|
+
parametersChunk: parametersChunk,
|
|
167
176
|
});
|
|
168
177
|
}
|
|
169
178
|
break;
|
|
@@ -174,23 +183,23 @@ export const updateToolBlockInMessage = ({ messages, id, parameters, result, suc
|
|
|
174
183
|
// Add Error Block to the last assistant message
|
|
175
184
|
export const addErrorBlockToMessage = ({ messages, error, }) => {
|
|
176
185
|
const newMessages = [...messages];
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
186
|
+
// Check if the last message is an assistant message
|
|
187
|
+
const lastMessage = newMessages[newMessages.length - 1];
|
|
188
|
+
if (lastMessage && lastMessage.role === "assistant") {
|
|
189
|
+
// Create a new message object with the error block added
|
|
190
|
+
newMessages[newMessages.length - 1] = {
|
|
191
|
+
...lastMessage,
|
|
192
|
+
blocks: [
|
|
193
|
+
...lastMessage.blocks,
|
|
183
194
|
{
|
|
184
195
|
type: "error",
|
|
185
196
|
content: error,
|
|
186
197
|
},
|
|
187
|
-
]
|
|
188
|
-
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
198
|
+
],
|
|
199
|
+
};
|
|
191
200
|
}
|
|
192
|
-
|
|
193
|
-
|
|
201
|
+
else {
|
|
202
|
+
// If the last message is not an assistant message, create a new assistant message
|
|
194
203
|
newMessages.push({
|
|
195
204
|
role: "assistant",
|
|
196
205
|
blocks: [
|
|
@@ -333,7 +342,7 @@ export const completeCommandInMessage = ({ messages, command, exitCode, }) => {
|
|
|
333
342
|
}
|
|
334
343
|
return newMessages;
|
|
335
344
|
};
|
|
336
|
-
export const addSubagentBlockToMessage = ({ messages, subagentId, subagentName, status,
|
|
345
|
+
export const addSubagentBlockToMessage = ({ messages, subagentId, subagentName, status, sessionId, configuration, }) => {
|
|
337
346
|
const newMessages = [...messages];
|
|
338
347
|
// Find the last assistant message or create one
|
|
339
348
|
let lastAssistantMessage = newMessages[newMessages.length - 1];
|
|
@@ -351,7 +360,8 @@ export const addSubagentBlockToMessage = ({ messages, subagentId, subagentName,
|
|
|
351
360
|
subagentId,
|
|
352
361
|
subagentName,
|
|
353
362
|
status,
|
|
354
|
-
|
|
363
|
+
sessionId,
|
|
364
|
+
configuration,
|
|
355
365
|
});
|
|
356
366
|
return newMessages;
|
|
357
367
|
};
|
|
@@ -366,8 +376,8 @@ export const updateSubagentBlockInMessage = (messages, subagentId, updates) => {
|
|
|
366
376
|
if (updates.status !== undefined) {
|
|
367
377
|
block.status = updates.status;
|
|
368
378
|
}
|
|
369
|
-
if (updates.
|
|
370
|
-
block.
|
|
379
|
+
if (updates.sessionId !== undefined) {
|
|
380
|
+
block.sessionId = updates.sessionId;
|
|
371
381
|
}
|
|
372
382
|
return newMessages;
|
|
373
383
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path encoding utility for converting working directory paths to filesystem-safe names
|
|
3
|
+
* Handles cross-platform directory name encoding for project-based session organization
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Project directory information
|
|
7
|
+
*/
|
|
8
|
+
export interface ProjectDirectory {
|
|
9
|
+
readonly originalPath: string;
|
|
10
|
+
readonly encodedName: string;
|
|
11
|
+
readonly encodedPath: string;
|
|
12
|
+
readonly pathHash?: string;
|
|
13
|
+
readonly isSymbolicLink: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Path encoding configuration options
|
|
17
|
+
*/
|
|
18
|
+
export interface PathEncodingOptions {
|
|
19
|
+
maxLength?: number;
|
|
20
|
+
pathSeparatorReplacement?: string;
|
|
21
|
+
spaceReplacement?: string;
|
|
22
|
+
invalidCharReplacement?: string;
|
|
23
|
+
preserveCase?: boolean;
|
|
24
|
+
hashLength?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Platform-specific filesystem constraints
|
|
28
|
+
*/
|
|
29
|
+
export interface FilesystemConstraints {
|
|
30
|
+
readonly maxDirectoryNameLength: number;
|
|
31
|
+
readonly maxPathLength: number;
|
|
32
|
+
readonly invalidCharacters: string[];
|
|
33
|
+
readonly reservedNames: string[];
|
|
34
|
+
readonly caseSensitive: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Path validation result
|
|
38
|
+
*/
|
|
39
|
+
export interface PathValidationResult {
|
|
40
|
+
readonly isValid: boolean;
|
|
41
|
+
readonly errors: string[];
|
|
42
|
+
readonly warnings: string[];
|
|
43
|
+
readonly suggestedFix?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* PathEncoder class for converting working directory paths to filesystem-safe names
|
|
47
|
+
*/
|
|
48
|
+
export declare class PathEncoder {
|
|
49
|
+
private readonly options;
|
|
50
|
+
private readonly constraints;
|
|
51
|
+
constructor(options?: PathEncodingOptions);
|
|
52
|
+
/**
|
|
53
|
+
* Encode a working directory path to a filesystem-safe directory name
|
|
54
|
+
*/
|
|
55
|
+
encode(originalPath: string): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Synchronously encode a path to a filesystem-safe directory name
|
|
58
|
+
* Note: Does not resolve symbolic links - use encode() for full path resolution
|
|
59
|
+
*/
|
|
60
|
+
encodeSync(pathToEncode: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Decode an encoded directory name back to original path (limited functionality)
|
|
63
|
+
* Note: This is best-effort as encoding is lossy
|
|
64
|
+
*/
|
|
65
|
+
decode(encodedName: string): Promise<string | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Synchronously decode an encoded directory name back to original path (limited functionality)
|
|
68
|
+
* Note: This is best-effort as encoding is lossy
|
|
69
|
+
*/
|
|
70
|
+
decodeSync(encodedName: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Resolve symbolic links and normalize path before encoding
|
|
73
|
+
*/
|
|
74
|
+
resolvePath(path: string): Promise<string>;
|
|
75
|
+
/**
|
|
76
|
+
* Create project directory entity from original path
|
|
77
|
+
*/
|
|
78
|
+
createProjectDirectory(originalPath: string, baseSessionDir: string): Promise<ProjectDirectory>;
|
|
79
|
+
/**
|
|
80
|
+
* Validate that an encoded name is filesystem-safe
|
|
81
|
+
*/
|
|
82
|
+
validateEncodedName(encodedName: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Handle encoding collisions by generating unique names
|
|
85
|
+
*/
|
|
86
|
+
resolveCollision(baseName: string, existingNames: Set<string>): string;
|
|
87
|
+
/**
|
|
88
|
+
* Get platform-specific filesystem constraints
|
|
89
|
+
*/
|
|
90
|
+
private getFilesystemConstraints;
|
|
91
|
+
/**
|
|
92
|
+
* Generate hash for collision resolution
|
|
93
|
+
*/
|
|
94
|
+
private generateHash;
|
|
95
|
+
/**
|
|
96
|
+
* Expand tilde (~) to home directory
|
|
97
|
+
*/
|
|
98
|
+
private expandTilde;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Default PathEncoder instance
|
|
102
|
+
*/
|
|
103
|
+
export declare const pathEncoder: PathEncoder;
|
|
104
|
+
//# sourceMappingURL=pathEncoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;gBAExC,OAAO,GAAE,mBAAwB;IAY7C;;OAEG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnD;;;OAGG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAyCxC;;;OAGG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIzD;;;OAGG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgC9C;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBhD;;OAEG;IACG,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,gBAAgB,CAAC;IA0C5B;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IA+BjD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM;IAqBtE;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsDhC;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAMpB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|