@sylix/coworker 1.1.4 → 1.2.0

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 (186) hide show
  1. package/dist/cli/index.d.ts +7 -0
  2. package/dist/cli/index.d.ts.map +1 -0
  3. package/dist/cli/index.js +183 -0
  4. package/dist/cli/index.js.map +1 -0
  5. package/dist/config/SettingsManager.d.ts +25 -0
  6. package/dist/config/SettingsManager.d.ts.map +1 -0
  7. package/dist/config/SettingsManager.js +96 -0
  8. package/dist/config/SettingsManager.js.map +1 -0
  9. package/dist/core/CoWorkerAgent.d.ts +52 -0
  10. package/dist/core/CoWorkerAgent.d.ts.map +1 -0
  11. package/dist/core/CoWorkerAgent.js +308 -0
  12. package/dist/core/CoWorkerAgent.js.map +1 -0
  13. package/dist/mcp/MCPClientManager.d.ts +30 -0
  14. package/dist/mcp/MCPClientManager.d.ts.map +1 -0
  15. package/dist/mcp/MCPClientManager.js +100 -0
  16. package/dist/mcp/MCPClientManager.js.map +1 -0
  17. package/dist/permissions/PermissionInterceptor.d.ts +21 -0
  18. package/dist/permissions/PermissionInterceptor.d.ts.map +1 -0
  19. package/dist/permissions/PermissionInterceptor.js +104 -0
  20. package/dist/permissions/PermissionInterceptor.js.map +1 -0
  21. package/dist/session/SessionManager.d.ts +38 -0
  22. package/dist/session/SessionManager.d.ts.map +1 -0
  23. package/dist/session/SessionManager.js +129 -0
  24. package/dist/session/SessionManager.js.map +1 -0
  25. package/dist/skills/HookAndSkillManager.d.ts +37 -0
  26. package/dist/skills/HookAndSkillManager.d.ts.map +1 -0
  27. package/dist/skills/HookAndSkillManager.js +141 -0
  28. package/dist/skills/HookAndSkillManager.js.map +1 -0
  29. package/dist/task/TaskEngine.d.ts +29 -0
  30. package/dist/task/TaskEngine.d.ts.map +1 -0
  31. package/dist/task/TaskEngine.js +117 -0
  32. package/dist/task/TaskEngine.js.map +1 -0
  33. package/dist/tools/CronManager.d.ts +22 -0
  34. package/dist/tools/CronManager.d.ts.map +1 -0
  35. package/dist/tools/CronManager.js +44 -0
  36. package/dist/tools/CronManager.js.map +1 -0
  37. package/dist/tools/NativeTools.d.ts +33 -0
  38. package/dist/tools/NativeTools.d.ts.map +1 -0
  39. package/dist/tools/NativeTools.js +175 -0
  40. package/dist/tools/NativeTools.js.map +1 -0
  41. package/dist/tools/Schemas.d.ts +365 -0
  42. package/dist/tools/Schemas.d.ts.map +1 -0
  43. package/dist/tools/Schemas.js +177 -0
  44. package/dist/tools/Schemas.js.map +1 -0
  45. package/dist/ui/InkUI.d.ts +2 -0
  46. package/dist/ui/InkUI.d.ts.map +1 -0
  47. package/dist/ui/InkUI.js +11 -0
  48. package/dist/ui/InkUI.js.map +1 -0
  49. package/package.json +18 -8
  50. package/dist/agents/runner.d.ts +0 -19
  51. package/dist/agents/runner.d.ts.map +0 -1
  52. package/dist/agents/runner.js +0 -170
  53. package/dist/agents/runner.js.map +0 -1
  54. package/dist/api/sylix.d.ts +0 -53
  55. package/dist/api/sylix.d.ts.map +0 -1
  56. package/dist/api/sylix.js +0 -237
  57. package/dist/api/sylix.js.map +0 -1
  58. package/dist/cli.d.ts +0 -3
  59. package/dist/cli.d.ts.map +0 -1
  60. package/dist/cli.js +0 -369
  61. package/dist/cli.js.map +0 -1
  62. package/dist/commands/ask.d.ts +0 -2
  63. package/dist/commands/ask.d.ts.map +0 -1
  64. package/dist/commands/ask.js +0 -55
  65. package/dist/commands/ask.js.map +0 -1
  66. package/dist/commands/chat.d.ts +0 -8
  67. package/dist/commands/chat.d.ts.map +0 -1
  68. package/dist/commands/chat.js +0 -479
  69. package/dist/commands/chat.js.map +0 -1
  70. package/dist/commands/commit.d.ts +0 -2
  71. package/dist/commands/commit.d.ts.map +0 -1
  72. package/dist/commands/commit.js +0 -163
  73. package/dist/commands/commit.js.map +0 -1
  74. package/dist/commands/config.d.ts +0 -3
  75. package/dist/commands/config.d.ts.map +0 -1
  76. package/dist/commands/config.js +0 -101
  77. package/dist/commands/config.js.map +0 -1
  78. package/dist/commands/edit.d.ts +0 -2
  79. package/dist/commands/edit.d.ts.map +0 -1
  80. package/dist/commands/edit.js +0 -112
  81. package/dist/commands/edit.js.map +0 -1
  82. package/dist/commands/explain.d.ts +0 -2
  83. package/dist/commands/explain.d.ts.map +0 -1
  84. package/dist/commands/explain.js +0 -99
  85. package/dist/commands/explain.js.map +0 -1
  86. package/dist/commands/login.d.ts +0 -2
  87. package/dist/commands/login.d.ts.map +0 -1
  88. package/dist/commands/login.js +0 -151
  89. package/dist/commands/login.js.map +0 -1
  90. package/dist/commands/review.d.ts +0 -2
  91. package/dist/commands/review.d.ts.map +0 -1
  92. package/dist/commands/review.js +0 -137
  93. package/dist/commands/review.js.map +0 -1
  94. package/dist/commands/run.d.ts +0 -2
  95. package/dist/commands/run.d.ts.map +0 -1
  96. package/dist/commands/run.js +0 -136
  97. package/dist/commands/run.js.map +0 -1
  98. package/dist/config/settings.d.ts +0 -33
  99. package/dist/config/settings.d.ts.map +0 -1
  100. package/dist/config/settings.js +0 -72
  101. package/dist/config/settings.js.map +0 -1
  102. package/dist/context/reader.d.ts +0 -24
  103. package/dist/context/reader.d.ts.map +0 -1
  104. package/dist/context/reader.js +0 -209
  105. package/dist/context/reader.js.map +0 -1
  106. package/dist/hooks/engine.d.ts +0 -9
  107. package/dist/hooks/engine.d.ts.map +0 -1
  108. package/dist/hooks/engine.js +0 -85
  109. package/dist/hooks/engine.js.map +0 -1
  110. package/dist/mcp/client.d.ts +0 -15
  111. package/dist/mcp/client.d.ts.map +0 -1
  112. package/dist/mcp/client.js +0 -211
  113. package/dist/mcp/client.js.map +0 -1
  114. package/dist/mcp/transport.d.ts +0 -46
  115. package/dist/mcp/transport.d.ts.map +0 -1
  116. package/dist/mcp/transport.js +0 -196
  117. package/dist/mcp/transport.js.map +0 -1
  118. package/dist/memory/loader.d.ts +0 -41
  119. package/dist/memory/loader.d.ts.map +0 -1
  120. package/dist/memory/loader.js +0 -249
  121. package/dist/memory/loader.js.map +0 -1
  122. package/dist/permissions/manager.d.ts +0 -7
  123. package/dist/permissions/manager.d.ts.map +0 -1
  124. package/dist/permissions/manager.js +0 -125
  125. package/dist/permissions/manager.js.map +0 -1
  126. package/dist/scripts/postinstall.d.ts +0 -7
  127. package/dist/scripts/postinstall.d.ts.map +0 -1
  128. package/dist/scripts/postinstall.js +0 -23
  129. package/dist/scripts/postinstall.js.map +0 -1
  130. package/dist/session/memory.d.ts +0 -6
  131. package/dist/session/memory.d.ts.map +0 -1
  132. package/dist/session/memory.js +0 -81
  133. package/dist/session/memory.js.map +0 -1
  134. package/dist/session/store.d.ts +0 -19
  135. package/dist/session/store.d.ts.map +0 -1
  136. package/dist/session/store.js +0 -94
  137. package/dist/session/store.js.map +0 -1
  138. package/dist/tools/bash.d.ts +0 -2
  139. package/dist/tools/bash.d.ts.map +0 -1
  140. package/dist/tools/bash.js +0 -40
  141. package/dist/tools/bash.js.map +0 -1
  142. package/dist/tools/chrome.d.ts +0 -10
  143. package/dist/tools/chrome.d.ts.map +0 -1
  144. package/dist/tools/chrome.js +0 -228
  145. package/dist/tools/chrome.js.map +0 -1
  146. package/dist/tools/edit.d.ts +0 -2
  147. package/dist/tools/edit.d.ts.map +0 -1
  148. package/dist/tools/edit.js +0 -67
  149. package/dist/tools/edit.js.map +0 -1
  150. package/dist/tools/glob.d.ts +0 -10
  151. package/dist/tools/glob.d.ts.map +0 -1
  152. package/dist/tools/glob.js +0 -245
  153. package/dist/tools/glob.js.map +0 -1
  154. package/dist/tools/grep.d.ts +0 -10
  155. package/dist/tools/grep.d.ts.map +0 -1
  156. package/dist/tools/grep.js +0 -252
  157. package/dist/tools/grep.js.map +0 -1
  158. package/dist/tools/ls.d.ts +0 -2
  159. package/dist/tools/ls.d.ts.map +0 -1
  160. package/dist/tools/ls.js +0 -75
  161. package/dist/tools/ls.js.map +0 -1
  162. package/dist/tools/read.d.ts +0 -2
  163. package/dist/tools/read.d.ts.map +0 -1
  164. package/dist/tools/read.js +0 -72
  165. package/dist/tools/read.js.map +0 -1
  166. package/dist/tools/registry.d.ts +0 -3
  167. package/dist/tools/registry.d.ts.map +0 -1
  168. package/dist/tools/registry.js +0 -281
  169. package/dist/tools/registry.js.map +0 -1
  170. package/dist/tools/schema.json +0 -508
  171. package/dist/tools/task.d.ts +0 -11
  172. package/dist/tools/task.d.ts.map +0 -1
  173. package/dist/tools/task.js +0 -118
  174. package/dist/tools/task.js.map +0 -1
  175. package/dist/tools/web.d.ts +0 -3
  176. package/dist/tools/web.d.ts.map +0 -1
  177. package/dist/tools/web.js +0 -113
  178. package/dist/tools/web.js.map +0 -1
  179. package/dist/tools/write.d.ts +0 -18
  180. package/dist/tools/write.d.ts.map +0 -1
  181. package/dist/tools/write.js +0 -122
  182. package/dist/tools/write.js.map +0 -1
  183. package/dist/utils/output.d.ts +0 -62
  184. package/dist/utils/output.d.ts.map +0 -1
  185. package/dist/utils/output.js +0 -487
  186. package/dist/utils/output.js.map +0 -1
@@ -1,209 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getFileTree = getFileTree;
37
- exports.getFileInfo = getFileInfo;
38
- exports.readDirectory = readDirectory;
39
- exports.getContextString = getContextString;
40
- exports.readFileContext = readFileContext;
41
- const fs = __importStar(require("fs-extra"));
42
- const path = __importStar(require("path"));
43
- const output_1 = require("../utils/output");
44
- const IGNORE_DIRS = [
45
- 'node_modules',
46
- '.git',
47
- 'dist',
48
- 'build',
49
- '.next',
50
- 'out',
51
- 'coverage',
52
- '.nyc_output',
53
- '__pycache__',
54
- '.venv',
55
- 'venv',
56
- '.env'
57
- ];
58
- const IGNORE_FILES = [
59
- '.DS_Store',
60
- 'Thumbs.db',
61
- '*.log',
62
- '*.lock',
63
- 'package-lock.json',
64
- 'yarn.lock',
65
- 'pnpm-lock.yaml'
66
- ];
67
- const MAX_FILE_LINES = 100;
68
- const PREVIEW_LINES = 50;
69
- async function getFileTree(dir, maxDepth = 3) {
70
- const lines = [];
71
- async function walk(currentPath, depth, prefix) {
72
- if (depth > maxDepth)
73
- return;
74
- const entries = await fs.readdir(currentPath, { withFileTypes: true });
75
- const dirs = entries.filter(e => e.isDirectory() && !IGNORE_DIRS.includes(e.name)).sort((a, b) => a.name.localeCompare(b.name));
76
- const files = entries.filter(e => e.isFile() && !shouldIgnoreFile(e.name)).sort((a, b) => a.name.localeCompare(b.name));
77
- for (const file of files) {
78
- lines.push(`${prefix}${file.name}`);
79
- }
80
- for (let i = 0; i < dirs.length; i++) {
81
- const dir = dirs[i];
82
- const isLast = i === dirs.length - 1;
83
- lines.push(`${prefix}${dir.name}/`);
84
- const newPrefix = prefix + (isLast ? ' ' : '│ ');
85
- await walk(path.join(currentPath, dir.name), depth + 1, newPrefix);
86
- }
87
- }
88
- lines.push(`${path.basename(dir)}/`);
89
- await walk(dir, 0, '');
90
- return lines.join('\n');
91
- }
92
- function shouldIgnoreFile(filename) {
93
- for (const pattern of IGNORE_FILES) {
94
- if (pattern.startsWith('*.')) {
95
- const ext = pattern.slice(1);
96
- if (filename.endsWith(ext))
97
- return true;
98
- }
99
- else if (filename === pattern) {
100
- return true;
101
- }
102
- }
103
- return false;
104
- }
105
- async function getFileInfo(filePath) {
106
- const stat = await fs.stat(filePath);
107
- const content = await fs.readFile(filePath, 'utf-8');
108
- const lines = content.split('\n');
109
- const lineCount = lines.length;
110
- const isLarge = lineCount > MAX_FILE_LINES;
111
- return {
112
- path: filePath,
113
- relativePath: filePath,
114
- content: isLarge ? undefined : content,
115
- preview: isLarge ? lines.slice(0, PREVIEW_LINES).join('\n') : undefined,
116
- lineCount,
117
- isLarge
118
- };
119
- }
120
- async function readDirectory(dir, options = {}) {
121
- const { includeContent = false, maxFiles = 20, extensions } = options;
122
- const result = {
123
- name: path.basename(dir),
124
- path: dir,
125
- files: [],
126
- subdirectories: []
127
- };
128
- let fileCount = 0;
129
- async function walk(currentPath, target) {
130
- if (fileCount >= maxFiles)
131
- return;
132
- const entries = await fs.readdir(currentPath, { withFileTypes: true });
133
- for (const entry of entries) {
134
- if (fileCount >= maxFiles)
135
- break;
136
- const fullPath = path.join(currentPath, entry.name);
137
- if (entry.isDirectory()) {
138
- if (IGNORE_DIRS.includes(entry.name))
139
- continue;
140
- const subDir = {
141
- name: entry.name,
142
- path: fullPath,
143
- files: [],
144
- subdirectories: []
145
- };
146
- await walk(fullPath, subDir);
147
- target.subdirectories.push(subDir);
148
- }
149
- else if (entry.isFile()) {
150
- if (shouldIgnoreFile(entry.name))
151
- continue;
152
- // Check extension filter
153
- if (extensions && extensions.length > 0) {
154
- const ext = path.extname(entry.name);
155
- if (!extensions.includes(ext))
156
- continue;
157
- }
158
- try {
159
- const fileInfo = await getFileInfo(fullPath);
160
- fileInfo.relativePath = path.relative(dir, fullPath);
161
- target.files.push(fileInfo);
162
- fileCount++;
163
- }
164
- catch (error) {
165
- // Skip files that can't be read
166
- }
167
- }
168
- }
169
- }
170
- await walk(dir, result);
171
- return result;
172
- }
173
- async function getContextString(dir, prompt) {
174
- const fileTree = await getFileTree(dir);
175
- const dirInfo = await readDirectory(dir, { includeContent: true });
176
- let context = `# Current Directory Structure\n\n\`\`\`\n${fileTree}\n\`\`\`\n\n`;
177
- // Add relevant file contents
178
- const relevantFiles = dirInfo.files.slice(0, 10);
179
- if (relevantFiles.length > 0) {
180
- context += `# Relevant Files\n\n`;
181
- for (const file of relevantFiles) {
182
- const ext = path.extname(file.path).slice(1);
183
- context += `## ${file.relativePath}\n\n`;
184
- if (file.isLarge) {
185
- context += `(Large file - ${file.lineCount} lines, showing first ${PREVIEW_LINES} lines)\n\n`;
186
- context += `\`\`\`${ext}\n${file.preview}\n// ... ${file.lineCount - PREVIEW_LINES} more lines\n\`\`\`\n\n`;
187
- }
188
- else {
189
- context += `\`\`\`${ext}\n${file.content}\n\`\`\`\n\n`;
190
- }
191
- }
192
- }
193
- context += `# User Request\n\n${prompt}`;
194
- return context;
195
- }
196
- async function readFileContext(filePath) {
197
- const content = await fs.readFile(filePath, 'utf-8');
198
- const lines = content.split('\n');
199
- const lineCount = lines.length;
200
- const ext = path.extname(filePath).slice(1);
201
- if (lineCount <= MAX_FILE_LINES) {
202
- return content;
203
- }
204
- else {
205
- (0, output_1.printWarning)(`File is large (${lineCount} lines). Reading first ${PREVIEW_LINES} lines.`);
206
- return lines.slice(0, PREVIEW_LINES).join('\n');
207
- }
208
- }
209
- //# sourceMappingURL=reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/context/reader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,kCA4BC;AAcD,kCAeC;AAED,sCAgEC;AAED,4CA+BC;AAED,0CAaC;AA3ND,6CAA+B;AAC/B,2CAA6B;AAC7B,4CAA+C;AAE/C,MAAM,WAAW,GAAG;IAClB,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,UAAU;IACV,aAAa;IACb,aAAa;IACb,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,WAAW;IACX,WAAW;IACX,OAAO;IACP,QAAQ;IACR,mBAAmB;IACnB,WAAW;IACX,gBAAgB;CACjB,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,aAAa,GAAG,EAAE,CAAC;AAkBlB,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,WAAmB,CAAC;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,UAAU,IAAI,CAAC,WAAmB,EAAE,KAAa,EAAE,MAAc;QACpE,IAAI,KAAK,GAAG,QAAQ;YAAE,OAAO;QAE7B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChI,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAExH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAEpC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1C,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACtC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,SAAS;QACT,OAAO;KACR,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,UAII,EAAE;IAEN,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEtE,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACxB,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,UAAU,IAAI,CAAC,WAAmB,EAAE,MAAqB;QAC5D,IAAI,SAAS,IAAI,QAAQ;YAAE,OAAO;QAElC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,SAAS,IAAI,QAAQ;gBAAE,MAAM;YAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAE/C,MAAM,MAAM,GAAkB;oBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,EAAE;oBACT,cAAc,EAAE,EAAE;iBACnB,CAAC;gBAEF,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAE3C,yBAAyB;gBACzB,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,SAAS;gBAC1C,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC7C,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACrD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC5B,SAAS,EAAE,CAAC;gBACd,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gCAAgC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,IAAI,OAAO,GAAG,4CAA4C,QAAQ,cAAc,CAAC;IAEjF,6BAA6B;IAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,sBAAsB,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,IAAI,MAAM,IAAI,CAAC,YAAY,MAAM,CAAC;YAEzC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,IAAI,iBAAiB,IAAI,CAAC,SAAS,yBAAyB,aAAa,aAAa,CAAC;gBAC9F,OAAO,IAAI,SAAS,GAAG,KAAK,IAAI,CAAC,OAAO,YAAY,IAAI,CAAC,SAAS,GAAG,aAAa,yBAAyB,CAAC;YAC9G,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,SAAS,GAAG,KAAK,IAAI,CAAC,OAAO,cAAc,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,qBAAqB,MAAM,EAAE,CAAC;IAEzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,SAAS,IAAI,cAAc,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,IAAA,qBAAY,EAAC,kBAAkB,SAAS,0BAA0B,aAAa,SAAS,CAAC,CAAC;QAC1F,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -1,9 +0,0 @@
1
- export type HookEvent = 'PreToolUse' | 'PostToolUse' | 'Start' | 'Stop';
2
- interface HookContext {
3
- toolName?: string;
4
- toolArgs?: any;
5
- result?: string;
6
- }
7
- export declare function runHooks(event: HookEvent, context: HookContext): Promise<'continue' | 'block'>;
8
- export {};
9
- //# sourceMappingURL=engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/hooks/engine.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqCD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CA+C/B"}
@@ -1,85 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runHooks = runHooks;
4
- const child_process_1 = require("child_process");
5
- const settings_1 = require("../config/settings");
6
- // Check if a matcher matches the tool invocation
7
- function matchesPattern(matcher, toolName, toolArgs) {
8
- // Simple matchers: just tool name
9
- if (matcher === toolName)
10
- return true;
11
- if (matcher === '*')
12
- return true;
13
- // Pattern matchers: Bash(rm *), Edit(*.ts)
14
- const parenMatch = matcher.match(/^(\w+)\((.+)\)$/);
15
- if (parenMatch) {
16
- const [, matcherTool, matcherPattern] = parenMatch;
17
- if (matcherTool !== toolName)
18
- return false;
19
- // For Bash, check command string
20
- if (toolName === 'Bash' && toolArgs?.command) {
21
- return globMatch(toolArgs.command, matcherPattern);
22
- }
23
- // For Edit/Write, check file path
24
- if ((toolName === 'Edit' || toolName === 'Write') && toolArgs?.file_path) {
25
- return globMatch(toolArgs.file_path, matcherPattern);
26
- }
27
- return false;
28
- }
29
- return false;
30
- }
31
- // Simple glob matching (supports * and **)
32
- function globMatch(text, pattern) {
33
- const regex = pattern
34
- .replace(/[.+^${}()|[\]\\]/g, '\\$&') // escape special chars
35
- .replace(/\*\*/g, '.*') // ** matches everything
36
- .replace(/\*/g, '[^/]*'); // * matches non-separator
37
- return new RegExp(`^${regex}$`).test(text);
38
- }
39
- async function runHooks(event, context) {
40
- const settings = (0, settings_1.loadSettings)();
41
- if (!settings.hooks)
42
- return 'continue';
43
- const rules = settings.hooks[event] || [];
44
- for (const rule of rules) {
45
- // Check if matcher applies
46
- if (context.toolName) {
47
- if (!matchesPattern(rule.matcher, context.toolName, context.toolArgs)) {
48
- continue;
49
- }
50
- }
51
- // Execute hook actions
52
- for (const action of rule.hooks) {
53
- if (action.type === 'block') {
54
- if (process.env.COWORKER_DEBUG) {
55
- console.log(`[Hook] Blocked ${context.toolName} by rule: ${rule.matcher}`);
56
- }
57
- return 'block';
58
- }
59
- if (action.type === 'command' && action.command) {
60
- try {
61
- const output = (0, child_process_1.execSync)(action.command, {
62
- timeout: 10000,
63
- encoding: 'utf8',
64
- env: {
65
- ...process.env,
66
- COWORKER_TOOL: context.toolName || '',
67
- COWORKER_ARGS: JSON.stringify(context.toolArgs || {}),
68
- COWORKER_RESULT: context.result || ''
69
- }
70
- });
71
- if (process.env.COWORKER_DEBUG) {
72
- console.log(`[Hook] ${event} command output:`, output.trim());
73
- }
74
- }
75
- catch (err) {
76
- if (process.env.COWORKER_DEBUG) {
77
- console.log(`[Hook] ${event} command failed:`, err.message);
78
- }
79
- }
80
- }
81
- }
82
- }
83
- return 'continue';
84
- }
85
- //# sourceMappingURL=engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/hooks/engine.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { MCPServerConfig } from '../config/settings';
2
- export interface MCPTool {
3
- name: string;
4
- description: string;
5
- inputSchema: any;
6
- serverName: string;
7
- }
8
- export declare function addServer(name: string, config: MCPServerConfig): Promise<string>;
9
- export declare function removeServer(name: string): Promise<string>;
10
- export declare function listServers(): string;
11
- export declare function getAllMCPTools(): MCPTool[];
12
- export declare function getMCPToolDefinitions(): any[];
13
- export declare function executeMCPTool(fullToolName: string, args: any): Promise<string>;
14
- export declare function autoConnectFromSettings(): Promise<void>;
15
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASnE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DtF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE;AAED,wBAAgB,WAAW,IAAI,MAAM,CAWpC;AAID,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAM1C;AAED,wBAAgB,qBAAqB,IAAI,GAAG,EAAE,CAe7C;AAID,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAID,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7D"}
@@ -1,211 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addServer = addServer;
4
- exports.removeServer = removeServer;
5
- exports.listServers = listServers;
6
- exports.getAllMCPTools = getAllMCPTools;
7
- exports.getMCPToolDefinitions = getMCPToolDefinitions;
8
- exports.executeMCPTool = executeMCPTool;
9
- exports.autoConnectFromSettings = autoConnectFromSettings;
10
- const transport_1 = require("./transport");
11
- const settings_1 = require("../config/settings");
12
- const servers = new Map();
13
- // ─── Server Management ───
14
- async function addServer(name, config) {
15
- if (servers.has(name)) {
16
- return `Server "${name}" already connected. Remove it first with removeServer.`;
17
- }
18
- let transport;
19
- if (config.url) {
20
- // HTTP/SSE transport
21
- transport = new transport_1.HttpTransport(config.url);
22
- }
23
- else if (config.command) {
24
- // Stdio transport
25
- transport = new transport_1.StdioTransport(config.command, config.args || [], config.config);
26
- }
27
- else {
28
- return `Error: Server config must specify either "url" or "command".`;
29
- }
30
- try {
31
- await transport.connect();
32
- const server = {
33
- name,
34
- config,
35
- transport,
36
- tools: [],
37
- messageId: 0
38
- };
39
- // Initialize the MCP session
40
- const initResponse = await sendRequest(server, 'initialize', {
41
- protocolVersion: '2024-11-05',
42
- capabilities: { tools: {} },
43
- clientInfo: { name: 'CoWorker', version: '1.1.1' }
44
- });
45
- if (initResponse?.error) {
46
- transport.close();
47
- return `Error initializing MCP server "${name}": ${initResponse.error.message}`;
48
- }
49
- // Send initialized notification
50
- await sendNotification(server, 'notifications/initialized', {});
51
- // Discover tools
52
- const toolsResponse = await sendRequest(server, 'tools/list', {});
53
- if (toolsResponse?.result?.tools) {
54
- server.tools = toolsResponse.result.tools.map((t) => ({
55
- name: t.name,
56
- description: t.description || '',
57
- inputSchema: t.inputSchema || {},
58
- serverName: name
59
- }));
60
- }
61
- servers.set(name, server);
62
- const toolNames = server.tools.map(t => t.name).join(', ');
63
- return `Connected to MCP server "${name}" — ${server.tools.length} tools available: ${toolNames || '(none)'}`;
64
- }
65
- catch (err) {
66
- transport.close();
67
- return `Error connecting to MCP server "${name}": ${err.message}`;
68
- }
69
- }
70
- async function removeServer(name) {
71
- const server = servers.get(name);
72
- if (!server) {
73
- return `Server "${name}" not found.`;
74
- }
75
- server.transport.close();
76
- servers.delete(name);
77
- return `Disconnected from MCP server "${name}".`;
78
- }
79
- function listServers() {
80
- if (servers.size === 0) {
81
- return 'No MCP servers connected.';
82
- }
83
- const lines = ['Connected MCP Servers:'];
84
- for (const [name, server] of servers) {
85
- const toolCount = server.tools.length;
86
- const status = server.transport.isConnected ? '✓' : '✗';
87
- lines.push(` ${status} ${name} — ${toolCount} tools`);
88
- }
89
- return lines.join('\n');
90
- }
91
- // ─── Tool Discovery ───
92
- function getAllMCPTools() {
93
- const tools = [];
94
- for (const server of servers.values()) {
95
- tools.push(...server.tools);
96
- }
97
- return tools;
98
- }
99
- function getMCPToolDefinitions() {
100
- const tools = [];
101
- for (const server of servers.values()) {
102
- for (const tool of server.tools) {
103
- tools.push({
104
- type: 'function',
105
- function: {
106
- name: `mcp_${server.name}_${tool.name}`,
107
- description: `[MCP: ${server.name}] ${tool.description}`,
108
- parameters: tool.inputSchema
109
- }
110
- });
111
- }
112
- }
113
- return tools;
114
- }
115
- // ─── Tool Execution ───
116
- async function executeMCPTool(fullToolName, args) {
117
- // Parse mcp_<serverName>_<toolName>
118
- const match = fullToolName.match(/^mcp_([^_]+)_(.+)$/);
119
- if (!match) {
120
- return `Error: Invalid MCP tool name format: ${fullToolName}`;
121
- }
122
- const [, serverName, toolName] = match;
123
- const server = servers.get(serverName);
124
- if (!server) {
125
- return `Error: MCP server "${serverName}" not connected.`;
126
- }
127
- try {
128
- if (process.env.COWORKER_DEBUG) {
129
- console.log(`[MCP] Calling ${serverName}/${toolName} with:`, JSON.stringify(args).substring(0, 200));
130
- }
131
- const response = await sendRequest(server, 'tools/call', {
132
- name: toolName,
133
- arguments: args
134
- });
135
- if (response?.error) {
136
- return `MCP Error: ${response.error.message}`;
137
- }
138
- // MCP tool results can be text or structured content
139
- const result = response?.result;
140
- if (!result)
141
- return 'No result from MCP tool.';
142
- if (result.content) {
143
- // MCP content array format
144
- return result.content
145
- .map((c) => {
146
- if (c.type === 'text')
147
- return c.text;
148
- if (c.type === 'image')
149
- return `[Image: ${c.mimeType}]`;
150
- return JSON.stringify(c);
151
- })
152
- .join('\n');
153
- }
154
- return JSON.stringify(result, null, 2);
155
- }
156
- catch (err) {
157
- return `MCP tool execution error: ${err.message}`;
158
- }
159
- }
160
- // ─── Auto-connect from Settings ───
161
- async function autoConnectFromSettings() {
162
- const settings = (0, settings_1.loadSettings)();
163
- if (!settings.mcpServers)
164
- return;
165
- for (const [name, config] of Object.entries(settings.mcpServers)) {
166
- if (!servers.has(name)) {
167
- const result = await addServer(name, config);
168
- if (process.env.COWORKER_DEBUG) {
169
- console.log(`[MCP] ${result}`);
170
- }
171
- }
172
- }
173
- }
174
- // ─── Internal Helpers ───
175
- function sendRequest(server, method, params) {
176
- return new Promise((resolve, reject) => {
177
- const id = ++server.messageId;
178
- const message = {
179
- jsonrpc: '2.0',
180
- id,
181
- method,
182
- params: params || {}
183
- };
184
- const timeout = setTimeout(() => {
185
- server.transport.removeAllListeners('message');
186
- reject(new Error(`MCP request "${method}" timed out after 30s`));
187
- }, 30000);
188
- const handler = (response) => {
189
- if (response.id === id) {
190
- clearTimeout(timeout);
191
- server.transport.removeListener('message', handler);
192
- resolve(response);
193
- }
194
- };
195
- server.transport.on('message', handler);
196
- server.transport.send(message).catch((err) => {
197
- clearTimeout(timeout);
198
- server.transport.removeListener('message', handler);
199
- reject(err);
200
- });
201
- });
202
- }
203
- function sendNotification(server, method, params) {
204
- const message = {
205
- jsonrpc: '2.0',
206
- method,
207
- params: params || {}
208
- };
209
- return server.transport.send(message);
210
- }
211
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- export interface MCPMessage {
3
- jsonrpc: '2.0';
4
- id?: number | string;
5
- method?: string;
6
- params?: any;
7
- result?: any;
8
- error?: {
9
- code: number;
10
- message: string;
11
- data?: any;
12
- };
13
- }
14
- export declare abstract class MCPTransport extends EventEmitter {
15
- abstract connect(): Promise<void>;
16
- abstract send(message: MCPMessage): Promise<void>;
17
- abstract close(): void;
18
- abstract get isConnected(): boolean;
19
- }
20
- export declare class StdioTransport extends MCPTransport {
21
- private command;
22
- private args;
23
- private env?;
24
- private process;
25
- private buffer;
26
- private _connected;
27
- constructor(command: string, args?: string[], env?: Record<string, string> | undefined);
28
- get isConnected(): boolean;
29
- connect(): Promise<void>;
30
- send(message: MCPMessage): Promise<void>;
31
- close(): void;
32
- private processBuffer;
33
- }
34
- export declare class HttpTransport extends MCPTransport {
35
- private url;
36
- private headers;
37
- private _connected;
38
- private eventSource;
39
- constructor(url: string, headers?: Record<string, string>);
40
- get isConnected(): boolean;
41
- connect(): Promise<void>;
42
- send(message: MCPMessage): Promise<void>;
43
- close(): void;
44
- private httpRequest;
45
- }
46
- //# sourceMappingURL=transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAUtC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CACvD;AAED,8BAAsB,YAAa,SAAQ,YAAY;IACrD,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,IAAI,IAAI;IACtB,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC;CACrC;AAKD,qBAAa,cAAe,SAAQ,YAAY;IAM5C,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG,CAAC;IAPd,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAkB;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAA;IAKtC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCxB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9C,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,aAAa;CAqCtB;AAKD,qBAAa,aAAc,SAAQ,YAAY;IAK3C,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,WAAW,CAAa;gBAGtB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAK9C,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9C,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,WAAW;CAgCpB"}