wave-agent-sdk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +32 -0
  2. package/dist/agent.d.ts +96 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +286 -0
  5. package/dist/hooks/executor.d.ts +56 -0
  6. package/dist/hooks/executor.d.ts.map +1 -0
  7. package/dist/hooks/executor.js +312 -0
  8. package/dist/hooks/index.d.ts +17 -0
  9. package/dist/hooks/index.d.ts.map +1 -0
  10. package/dist/hooks/index.js +14 -0
  11. package/dist/hooks/manager.d.ts +90 -0
  12. package/dist/hooks/manager.d.ts.map +1 -0
  13. package/dist/hooks/manager.js +395 -0
  14. package/dist/hooks/matcher.d.ts +49 -0
  15. package/dist/hooks/matcher.d.ts.map +1 -0
  16. package/dist/hooks/matcher.js +147 -0
  17. package/dist/hooks/settings.d.ts +46 -0
  18. package/dist/hooks/settings.d.ts.map +1 -0
  19. package/dist/hooks/settings.js +100 -0
  20. package/dist/hooks/types.d.ts +80 -0
  21. package/dist/hooks/types.d.ts.map +1 -0
  22. package/dist/hooks/types.js +59 -0
  23. package/dist/index.d.ts +16 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +20 -0
  26. package/dist/managers/aiManager.d.ts +61 -0
  27. package/dist/managers/aiManager.d.ts.map +1 -0
  28. package/dist/managers/aiManager.js +415 -0
  29. package/dist/managers/backgroundBashManager.d.ts +27 -0
  30. package/dist/managers/backgroundBashManager.d.ts.map +1 -0
  31. package/dist/managers/backgroundBashManager.js +166 -0
  32. package/dist/managers/bashManager.d.ts +20 -0
  33. package/dist/managers/bashManager.d.ts.map +1 -0
  34. package/dist/managers/bashManager.js +66 -0
  35. package/dist/managers/mcpManager.d.ts +63 -0
  36. package/dist/managers/mcpManager.d.ts.map +1 -0
  37. package/dist/managers/mcpManager.js +378 -0
  38. package/dist/managers/messageManager.d.ts +85 -0
  39. package/dist/managers/messageManager.d.ts.map +1 -0
  40. package/dist/managers/messageManager.js +265 -0
  41. package/dist/managers/skillManager.d.ts +59 -0
  42. package/dist/managers/skillManager.d.ts.map +1 -0
  43. package/dist/managers/skillManager.js +317 -0
  44. package/dist/managers/slashCommandManager.d.ts +77 -0
  45. package/dist/managers/slashCommandManager.d.ts.map +1 -0
  46. package/dist/managers/slashCommandManager.js +208 -0
  47. package/dist/managers/toolManager.d.ts +23 -0
  48. package/dist/managers/toolManager.d.ts.map +1 -0
  49. package/dist/managers/toolManager.js +79 -0
  50. package/dist/services/aiService.d.ts +28 -0
  51. package/dist/services/aiService.d.ts.map +1 -0
  52. package/dist/services/aiService.js +180 -0
  53. package/dist/services/memory.d.ts +8 -0
  54. package/dist/services/memory.d.ts.map +1 -0
  55. package/dist/services/memory.js +128 -0
  56. package/dist/services/session.d.ts +54 -0
  57. package/dist/services/session.d.ts.map +1 -0
  58. package/dist/services/session.js +196 -0
  59. package/dist/tools/bashTool.d.ts +14 -0
  60. package/dist/tools/bashTool.d.ts.map +1 -0
  61. package/dist/tools/bashTool.js +351 -0
  62. package/dist/tools/deleteFileTool.d.ts +6 -0
  63. package/dist/tools/deleteFileTool.d.ts.map +1 -0
  64. package/dist/tools/deleteFileTool.js +67 -0
  65. package/dist/tools/editTool.d.ts +6 -0
  66. package/dist/tools/editTool.d.ts.map +1 -0
  67. package/dist/tools/editTool.js +168 -0
  68. package/dist/tools/globTool.d.ts +6 -0
  69. package/dist/tools/globTool.d.ts.map +1 -0
  70. package/dist/tools/globTool.js +113 -0
  71. package/dist/tools/grepTool.d.ts +6 -0
  72. package/dist/tools/grepTool.d.ts.map +1 -0
  73. package/dist/tools/grepTool.js +268 -0
  74. package/dist/tools/lsTool.d.ts +6 -0
  75. package/dist/tools/lsTool.d.ts.map +1 -0
  76. package/dist/tools/lsTool.js +160 -0
  77. package/dist/tools/multiEditTool.d.ts +6 -0
  78. package/dist/tools/multiEditTool.d.ts.map +1 -0
  79. package/dist/tools/multiEditTool.js +222 -0
  80. package/dist/tools/readTool.d.ts +6 -0
  81. package/dist/tools/readTool.d.ts.map +1 -0
  82. package/dist/tools/readTool.js +136 -0
  83. package/dist/tools/types.d.ts +35 -0
  84. package/dist/tools/types.d.ts.map +1 -0
  85. package/dist/tools/types.js +4 -0
  86. package/dist/tools/writeTool.d.ts +6 -0
  87. package/dist/tools/writeTool.d.ts.map +1 -0
  88. package/dist/tools/writeTool.js +138 -0
  89. package/dist/types.d.ts +212 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +13 -0
  92. package/dist/utils/bashHistory.d.ts +46 -0
  93. package/dist/utils/bashHistory.d.ts.map +1 -0
  94. package/dist/utils/bashHistory.js +236 -0
  95. package/dist/utils/commandArgumentParser.d.ts +34 -0
  96. package/dist/utils/commandArgumentParser.d.ts.map +1 -0
  97. package/dist/utils/commandArgumentParser.js +123 -0
  98. package/dist/utils/constants.d.ts +27 -0
  99. package/dist/utils/constants.d.ts.map +1 -0
  100. package/dist/utils/constants.js +28 -0
  101. package/dist/utils/convertMessagesForAPI.d.ts +9 -0
  102. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -0
  103. package/dist/utils/convertMessagesForAPI.js +189 -0
  104. package/dist/utils/customCommands.d.ts +14 -0
  105. package/dist/utils/customCommands.d.ts.map +1 -0
  106. package/dist/utils/customCommands.js +71 -0
  107. package/dist/utils/fileFilter.d.ts +26 -0
  108. package/dist/utils/fileFilter.d.ts.map +1 -0
  109. package/dist/utils/fileFilter.js +177 -0
  110. package/dist/utils/markdownParser.d.ts +27 -0
  111. package/dist/utils/markdownParser.d.ts.map +1 -0
  112. package/dist/utils/markdownParser.js +109 -0
  113. package/dist/utils/mcpUtils.d.ts +24 -0
  114. package/dist/utils/mcpUtils.d.ts.map +1 -0
  115. package/dist/utils/mcpUtils.js +51 -0
  116. package/dist/utils/messageOperations.d.ts +118 -0
  117. package/dist/utils/messageOperations.d.ts.map +1 -0
  118. package/dist/utils/messageOperations.js +334 -0
  119. package/dist/utils/path.d.ts +25 -0
  120. package/dist/utils/path.d.ts.map +1 -0
  121. package/dist/utils/path.js +109 -0
  122. package/dist/utils/skillParser.d.ts +18 -0
  123. package/dist/utils/skillParser.d.ts.map +1 -0
  124. package/dist/utils/skillParser.js +147 -0
  125. package/dist/utils/stringUtils.d.ts +13 -0
  126. package/dist/utils/stringUtils.d.ts.map +1 -0
  127. package/dist/utils/stringUtils.js +44 -0
  128. package/package.json +51 -0
  129. package/src/agent.ts +405 -0
  130. package/src/hooks/executor.ts +440 -0
  131. package/src/hooks/index.ts +52 -0
  132. package/src/hooks/manager.ts +618 -0
  133. package/src/hooks/matcher.ts +187 -0
  134. package/src/hooks/settings.ts +129 -0
  135. package/src/hooks/types.ts +169 -0
  136. package/src/index.ts +24 -0
  137. package/src/managers/aiManager.ts +573 -0
  138. package/src/managers/backgroundBashManager.ts +203 -0
  139. package/src/managers/bashManager.ts +97 -0
  140. package/src/managers/mcpManager.ts +493 -0
  141. package/src/managers/messageManager.ts +415 -0
  142. package/src/managers/skillManager.ts +404 -0
  143. package/src/managers/slashCommandManager.ts +293 -0
  144. package/src/managers/toolManager.ts +106 -0
  145. package/src/services/aiService.ts +252 -0
  146. package/src/services/memory.ts +149 -0
  147. package/src/services/session.ts +265 -0
  148. package/src/tools/bashTool.ts +402 -0
  149. package/src/tools/deleteFileTool.ts +81 -0
  150. package/src/tools/editTool.ts +192 -0
  151. package/src/tools/globTool.ts +135 -0
  152. package/src/tools/grepTool.ts +326 -0
  153. package/src/tools/lsTool.ts +187 -0
  154. package/src/tools/multiEditTool.ts +268 -0
  155. package/src/tools/readTool.ts +165 -0
  156. package/src/tools/types.ts +47 -0
  157. package/src/tools/writeTool.ts +163 -0
  158. package/src/types.ts +260 -0
  159. package/src/utils/bashHistory.ts +303 -0
  160. package/src/utils/commandArgumentParser.ts +153 -0
  161. package/src/utils/constants.ts +37 -0
  162. package/src/utils/convertMessagesForAPI.ts +236 -0
  163. package/src/utils/customCommands.ts +85 -0
  164. package/src/utils/fileFilter.ts +202 -0
  165. package/src/utils/markdownParser.ts +156 -0
  166. package/src/utils/mcpUtils.ts +81 -0
  167. package/src/utils/messageOperations.ts +506 -0
  168. package/src/utils/path.ts +118 -0
  169. package/src/utils/skillParser.ts +188 -0
  170. package/src/utils/stringUtils.ts +50 -0
@@ -0,0 +1,156 @@
1
+ import { readFileSync } from "fs";
2
+ import type { CustomSlashCommandConfig } from "../types.js";
3
+
4
+ interface ParsedMarkdownFile {
5
+ content: string;
6
+ config?: CustomSlashCommandConfig;
7
+ }
8
+
9
+ /**
10
+ * Parse YAML frontmatter from markdown content
11
+ */
12
+ function parseFrontmatter(content: string): {
13
+ frontmatter?: Record<string, unknown>;
14
+ content: string;
15
+ } {
16
+ const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/;
17
+ const match = content.match(frontmatterRegex);
18
+
19
+ if (!match) {
20
+ return { content };
21
+ }
22
+
23
+ const [, frontmatterStr, bodyContent] = match;
24
+
25
+ try {
26
+ // Simple YAML parser for our use case (only supports key: value pairs)
27
+ const frontmatter: Record<string, unknown> = {};
28
+ const lines = frontmatterStr.split("\n");
29
+
30
+ for (const line of lines) {
31
+ const trimmedLine = line.trim();
32
+ if (!trimmedLine || trimmedLine.startsWith("#")) continue;
33
+
34
+ const colonIndex = trimmedLine.indexOf(":");
35
+ if (colonIndex === -1) continue;
36
+
37
+ const key = trimmedLine.slice(0, colonIndex).trim();
38
+ const value = trimmedLine.slice(colonIndex + 1).trim();
39
+
40
+ // Handle array values for allowed-tools
41
+ if (key === "allowed-tools" && value) {
42
+ // Simple array parsing: "tool1, tool2, tool3" or "[tool1, tool2]"
43
+ let arrayValue = value;
44
+ if (arrayValue.startsWith("[") && arrayValue.endsWith("]")) {
45
+ arrayValue = arrayValue.slice(1, -1);
46
+ }
47
+ frontmatter[key] = arrayValue
48
+ .split(",")
49
+ .map((s) => s.trim())
50
+ .filter(Boolean);
51
+ } else if (value) {
52
+ frontmatter[key] = value;
53
+ }
54
+ }
55
+
56
+ return { frontmatter, content: bodyContent };
57
+ } catch {
58
+ // If parsing fails, just return the content without frontmatter
59
+ return { content };
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Parse markdown file and extract config and content
65
+ */
66
+ export function parseMarkdownFile(filePath: string): ParsedMarkdownFile {
67
+ try {
68
+ const fileContent = readFileSync(filePath, "utf-8");
69
+ const { frontmatter, content } = parseFrontmatter(fileContent);
70
+
71
+ let config: CustomSlashCommandConfig | undefined;
72
+
73
+ if (frontmatter) {
74
+ config = {};
75
+
76
+ if (
77
+ frontmatter["allowed-tools"] &&
78
+ Array.isArray(frontmatter["allowed-tools"])
79
+ ) {
80
+ config.allowedTools = frontmatter["allowed-tools"] as string[];
81
+ }
82
+
83
+ if (frontmatter.model && typeof frontmatter.model === "string") {
84
+ config.model = frontmatter.model;
85
+ }
86
+
87
+ if (
88
+ frontmatter.description &&
89
+ typeof frontmatter.description === "string"
90
+ ) {
91
+ config.description = frontmatter.description;
92
+ }
93
+ }
94
+
95
+ return {
96
+ content: content.trim(),
97
+ config,
98
+ };
99
+ } catch (error) {
100
+ throw new Error(
101
+ `Failed to parse markdown file ${filePath}: ${error instanceof Error ? error.message : String(error)}`,
102
+ );
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Parse and execute bash commands in markdown content
108
+ */
109
+ export interface BashCommandResult {
110
+ command: string;
111
+ output: string;
112
+ exitCode: number;
113
+ }
114
+
115
+ export function parseBashCommands(content: string): {
116
+ commands: string[];
117
+ processedContent: string;
118
+ } {
119
+ const bashCommandRegex = /!`([^`]+)`/g;
120
+ const commands: string[] = [];
121
+ let match;
122
+
123
+ // Extract all bash commands
124
+ while ((match = bashCommandRegex.exec(content)) !== null) {
125
+ commands.push(match[1]);
126
+ }
127
+
128
+ // For now, return the content as-is. The actual command execution
129
+ // will be handled by the slash command manager
130
+ return {
131
+ commands,
132
+ processedContent: content,
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Replace bash command placeholders with their outputs
138
+ */
139
+ export function replaceBashCommandsWithOutput(
140
+ content: string,
141
+ results: BashCommandResult[],
142
+ ): string {
143
+ const bashCommandRegex = /!`([^`]+)`/g;
144
+ let processedContent = content;
145
+ let commandIndex = 0;
146
+
147
+ processedContent = processedContent.replace(bashCommandRegex, (match) => {
148
+ if (commandIndex < results.length) {
149
+ const result = results[commandIndex++];
150
+ return `\`\`\`\n$ ${result.command}\n${result.output}\n\`\`\``;
151
+ }
152
+ return match;
153
+ });
154
+
155
+ return processedContent;
156
+ }
@@ -0,0 +1,81 @@
1
+ import { ChatCompletionFunctionTool } from "openai/resources.js";
2
+ import type { ToolPlugin, ToolResult, ToolContext } from "../tools/types.js";
3
+ import type { McpTool, McpServerStatus } from "../types.js";
4
+
5
+ /**
6
+ * Convert MCP tool to OpenAI function tool format
7
+ */
8
+ export function mcpToolToOpenAITool(
9
+ mcpTool: McpTool,
10
+ serverName: string,
11
+ ): ChatCompletionFunctionTool {
12
+ // Remove $schema field if it exists, as OpenAI API doesn't accept it
13
+ const cleanInputSchema = { ...mcpTool.inputSchema };
14
+ delete cleanInputSchema.$schema;
15
+
16
+ return {
17
+ type: "function",
18
+ function: {
19
+ name: mcpTool.name,
20
+ description: `${mcpTool.description || `Tool from MCP server ${serverName}`} (MCP: ${serverName})`,
21
+ parameters: cleanInputSchema,
22
+ },
23
+ };
24
+ }
25
+
26
+ /**
27
+ * Create a tool plugin wrapper for an MCP tool
28
+ */
29
+ export function createMcpToolPlugin(
30
+ mcpTool: McpTool,
31
+ serverName: string,
32
+ executeTool: (
33
+ name: string,
34
+ args: Record<string, unknown>,
35
+ ) => Promise<{
36
+ success: boolean;
37
+ content: string;
38
+ serverName?: string;
39
+ images?: Array<{ data: string; mediaType?: string }>;
40
+ }>,
41
+ ): ToolPlugin {
42
+ return {
43
+ name: mcpTool.name,
44
+ config: mcpToolToOpenAITool(mcpTool, serverName),
45
+ async execute(
46
+ args: Record<string, unknown>,
47
+ context?: ToolContext,
48
+ ): Promise<ToolResult> {
49
+ try {
50
+ // Context is available for future use when MCP tools need execution context
51
+ if (context) {
52
+ // Future: Could pass working directory or other context to MCP tools
53
+ }
54
+ const result = await executeTool(mcpTool.name, args);
55
+ return {
56
+ success: true,
57
+ content: result.content || `Executed ${mcpTool.name}`,
58
+ };
59
+ } catch (error) {
60
+ return {
61
+ success: false,
62
+ content: "",
63
+ error: error instanceof Error ? error.message : String(error),
64
+ };
65
+ }
66
+ },
67
+ };
68
+ }
69
+
70
+ /**
71
+ * Find which server a tool belongs to
72
+ */
73
+ export function findToolServer(
74
+ toolName: string,
75
+ servers: McpServerStatus[],
76
+ ): McpServerStatus | undefined {
77
+ return servers.find(
78
+ (s) =>
79
+ s.status === "connected" && s.tools?.some((t) => t.name === toolName),
80
+ );
81
+ }