automatey 0.1.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 (165) hide show
  1. package/.env.defaults +100 -0
  2. package/.env.secret.example +42 -0
  3. package/LICENSE +21 -0
  4. package/README.md +258 -0
  5. package/dist/adapters/index.d.ts +3 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +3 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/judge-client.d.ts +59 -0
  10. package/dist/adapters/judge-client.d.ts.map +1 -0
  11. package/dist/adapters/judge-client.js +123 -0
  12. package/dist/adapters/judge-client.js.map +1 -0
  13. package/dist/adapters/llm-client.d.ts +54 -0
  14. package/dist/adapters/llm-client.d.ts.map +1 -0
  15. package/dist/adapters/llm-client.js +327 -0
  16. package/dist/adapters/llm-client.js.map +1 -0
  17. package/dist/commands/checkpoint-command.d.ts +3 -0
  18. package/dist/commands/checkpoint-command.d.ts.map +1 -0
  19. package/dist/commands/checkpoint-command.js +105 -0
  20. package/dist/commands/checkpoint-command.js.map +1 -0
  21. package/dist/commands/clear-command.d.ts +3 -0
  22. package/dist/commands/clear-command.d.ts.map +1 -0
  23. package/dist/commands/clear-command.js +11 -0
  24. package/dist/commands/clear-command.js.map +1 -0
  25. package/dist/commands/compact-command.d.ts +3 -0
  26. package/dist/commands/compact-command.d.ts.map +1 -0
  27. package/dist/commands/compact-command.js +20 -0
  28. package/dist/commands/compact-command.js.map +1 -0
  29. package/dist/commands/config-command.d.ts +3 -0
  30. package/dist/commands/config-command.d.ts.map +1 -0
  31. package/dist/commands/config-command.js +28 -0
  32. package/dist/commands/config-command.js.map +1 -0
  33. package/dist/commands/cost-command.d.ts +3 -0
  34. package/dist/commands/cost-command.d.ts.map +1 -0
  35. package/dist/commands/cost-command.js +42 -0
  36. package/dist/commands/cost-command.js.map +1 -0
  37. package/dist/commands/eval-command.d.ts +16 -0
  38. package/dist/commands/eval-command.d.ts.map +1 -0
  39. package/dist/commands/eval-command.js +132 -0
  40. package/dist/commands/eval-command.js.map +1 -0
  41. package/dist/commands/help-command.d.ts +3 -0
  42. package/dist/commands/help-command.d.ts.map +1 -0
  43. package/dist/commands/help-command.js +37 -0
  44. package/dist/commands/help-command.js.map +1 -0
  45. package/dist/commands/index.d.ts +8 -0
  46. package/dist/commands/index.d.ts.map +1 -0
  47. package/dist/commands/index.js +42 -0
  48. package/dist/commands/index.js.map +1 -0
  49. package/dist/commands/load-command.d.ts +3 -0
  50. package/dist/commands/load-command.d.ts.map +1 -0
  51. package/dist/commands/load-command.js +42 -0
  52. package/dist/commands/load-command.js.map +1 -0
  53. package/dist/commands/model-command.d.ts +3 -0
  54. package/dist/commands/model-command.d.ts.map +1 -0
  55. package/dist/commands/model-command.js +42 -0
  56. package/dist/commands/model-command.js.map +1 -0
  57. package/dist/commands/save-command.d.ts +3 -0
  58. package/dist/commands/save-command.d.ts.map +1 -0
  59. package/dist/commands/save-command.js +17 -0
  60. package/dist/commands/save-command.js.map +1 -0
  61. package/dist/commands/servers-command.d.ts +3 -0
  62. package/dist/commands/servers-command.d.ts.map +1 -0
  63. package/dist/commands/servers-command.js +99 -0
  64. package/dist/commands/servers-command.js.map +1 -0
  65. package/dist/commands/think-command.d.ts +3 -0
  66. package/dist/commands/think-command.d.ts.map +1 -0
  67. package/dist/commands/think-command.js +37 -0
  68. package/dist/commands/think-command.js.map +1 -0
  69. package/dist/core/chat-engine.d.ts +54 -0
  70. package/dist/core/chat-engine.d.ts.map +1 -0
  71. package/dist/core/chat-engine.js +528 -0
  72. package/dist/core/chat-engine.js.map +1 -0
  73. package/dist/core/checkpoint-manager.d.ts +50 -0
  74. package/dist/core/checkpoint-manager.d.ts.map +1 -0
  75. package/dist/core/checkpoint-manager.js +173 -0
  76. package/dist/core/checkpoint-manager.js.map +1 -0
  77. package/dist/core/command-parser.d.ts +6 -0
  78. package/dist/core/command-parser.d.ts.map +1 -0
  79. package/dist/core/command-parser.js +14 -0
  80. package/dist/core/command-parser.js.map +1 -0
  81. package/dist/core/compact.d.ts +23 -0
  82. package/dist/core/compact.d.ts.map +1 -0
  83. package/dist/core/compact.js +56 -0
  84. package/dist/core/compact.js.map +1 -0
  85. package/dist/core/config-manager.d.ts +13 -0
  86. package/dist/core/config-manager.d.ts.map +1 -0
  87. package/dist/core/config-manager.js +86 -0
  88. package/dist/core/config-manager.js.map +1 -0
  89. package/dist/core/context-manager.d.ts +17 -0
  90. package/dist/core/context-manager.d.ts.map +1 -0
  91. package/dist/core/context-manager.js +51 -0
  92. package/dist/core/context-manager.js.map +1 -0
  93. package/dist/core/eval-runner.d.ts +110 -0
  94. package/dist/core/eval-runner.d.ts.map +1 -0
  95. package/dist/core/eval-runner.js +177 -0
  96. package/dist/core/eval-runner.js.map +1 -0
  97. package/dist/core/index.d.ts +12 -0
  98. package/dist/core/index.d.ts.map +1 -0
  99. package/dist/core/index.js +11 -0
  100. package/dist/core/index.js.map +1 -0
  101. package/dist/core/interfaces.d.ts +179 -0
  102. package/dist/core/interfaces.d.ts.map +1 -0
  103. package/dist/core/interfaces.js +6 -0
  104. package/dist/core/interfaces.js.map +1 -0
  105. package/dist/core/mcp-client-manager.d.ts +32 -0
  106. package/dist/core/mcp-client-manager.d.ts.map +1 -0
  107. package/dist/core/mcp-client-manager.js +118 -0
  108. package/dist/core/mcp-client-manager.js.map +1 -0
  109. package/dist/core/mcp-config-manager.d.ts +40 -0
  110. package/dist/core/mcp-config-manager.d.ts.map +1 -0
  111. package/dist/core/mcp-config-manager.js +120 -0
  112. package/dist/core/mcp-config-manager.js.map +1 -0
  113. package/dist/core/session-manager.d.ts +16 -0
  114. package/dist/core/session-manager.d.ts.map +1 -0
  115. package/dist/core/session-manager.js +87 -0
  116. package/dist/core/session-manager.js.map +1 -0
  117. package/dist/core/skills-manager.d.ts +49 -0
  118. package/dist/core/skills-manager.d.ts.map +1 -0
  119. package/dist/core/skills-manager.js +175 -0
  120. package/dist/core/skills-manager.js.map +1 -0
  121. package/dist/core/sub-agent.d.ts +23 -0
  122. package/dist/core/sub-agent.d.ts.map +1 -0
  123. package/dist/core/sub-agent.js +98 -0
  124. package/dist/core/sub-agent.js.map +1 -0
  125. package/dist/index.d.ts +11 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +230 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/tui/index.d.ts +2 -0
  130. package/dist/tui/index.d.ts.map +1 -0
  131. package/dist/tui/index.js +3 -0
  132. package/dist/tui/index.js.map +1 -0
  133. package/dist/tui/renderer.d.ts +32 -0
  134. package/dist/tui/renderer.d.ts.map +1 -0
  135. package/dist/tui/renderer.js +225 -0
  136. package/dist/tui/renderer.js.map +1 -0
  137. package/dist/utils/index.d.ts +5 -0
  138. package/dist/utils/index.d.ts.map +1 -0
  139. package/dist/utils/index.js +6 -0
  140. package/dist/utils/index.js.map +1 -0
  141. package/dist/utils/logger.d.ts +19 -0
  142. package/dist/utils/logger.d.ts.map +1 -0
  143. package/dist/utils/logger.js +37 -0
  144. package/dist/utils/logger.js.map +1 -0
  145. package/dist/utils/logo.d.ts +24 -0
  146. package/dist/utils/logo.d.ts.map +1 -0
  147. package/dist/utils/logo.js +119 -0
  148. package/dist/utils/logo.js.map +1 -0
  149. package/dist/utils/message-formatter.d.ts +19 -0
  150. package/dist/utils/message-formatter.d.ts.map +1 -0
  151. package/dist/utils/message-formatter.js +79 -0
  152. package/dist/utils/message-formatter.js.map +1 -0
  153. package/dist/utils/syntax-highlighter.d.ts +6 -0
  154. package/dist/utils/syntax-highlighter.d.ts.map +1 -0
  155. package/dist/utils/syntax-highlighter.js +34 -0
  156. package/dist/utils/syntax-highlighter.js.map +1 -0
  157. package/mcp/coder/dist/server.d.ts +15 -0
  158. package/mcp/coder/dist/server.d.ts.map +1 -0
  159. package/mcp/coder/dist/server.js +421 -0
  160. package/mcp/coder/dist/server.js.map +1 -0
  161. package/mcp/planner/dist/server.d.ts +23 -0
  162. package/mcp/planner/dist/server.d.ts.map +1 -0
  163. package/mcp/planner/dist/server.js +373 -0
  164. package/mcp/planner/dist/server.js.map +1 -0
  165. package/package.json +95 -0
@@ -0,0 +1,34 @@
1
+ import { Marked } from 'marked';
2
+ import { markedTerminal } from 'marked-terminal';
3
+ const terminalMarked = new Marked();
4
+ terminalMarked.use(markedTerminal({ reflowText: false }));
5
+ function fixInline(text) {
6
+ text = text.replace(/\*\*(.+?)\*\*/g, '\x1b[1m$1\x1b[22m');
7
+ text = text.replace(/__(.+?)__/g, '\x1b[1m$1\x1b[22m');
8
+ text = text.replace(/\*([^*\n]+?)\*/g, '\x1b[3m$1\x1b[23m');
9
+ text = text.replace(/(^|[^\p{L}\p{N}])_([^_\n]+?)_(?=$|[^\p{L}\p{N}])/gu, '$1\x1b[3m$2\x1b[23m');
10
+ text = text.replace(/`([^`\n]+)`/g, '\x1b[36m$1\x1b[0m');
11
+ return text;
12
+ }
13
+ export class SyntaxHighlighter {
14
+ static stripAnsi(text) {
15
+ return text.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, '');
16
+ }
17
+ static formatMarkdown(text) {
18
+ try {
19
+ const rendered = terminalMarked.parse(text);
20
+ if (typeof rendered !== 'string')
21
+ return fixInline(text);
22
+ return fixInline(rendered.replace(/\n+$/, ''));
23
+ }
24
+ catch {
25
+ return fixInline(text);
26
+ }
27
+ }
28
+ static truncate(text, maxLength) {
29
+ if (text.length <= maxLength)
30
+ return text;
31
+ return text.slice(0, maxLength - 3) + '…';
32
+ }
33
+ }
34
+ //# sourceMappingURL=syntax-highlighter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-highlighter.js","sourceRoot":"","sources":["../../src/utils/syntax-highlighter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,cAAc,GAAG,IAAI,MAAM,EAAE,CAAC;AACpC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAE1D,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACvD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oDAAoD,EAAE,qBAAqB,CAAC,CAAC;IACjG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAC,SAAS,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,SAAiB;QAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Coder MCP Server — stdio MCP server providing file and shell tools.
4
+ *
5
+ * Tools exposed:
6
+ * read_file(path, start_line?, end_line?) — Read file contents (optionally sliced)
7
+ * write_file(path, content, create_dirs?) — Write / overwrite a file
8
+ * edit_file(path, old_str, new_str) — Replace exact string in a file
9
+ * execute_command(command, cwd?, timeout_ms?) — Run a shell command
10
+ * search_text(pattern, path?, include?, is_regex?)— Grep-style text search
11
+ * list_dir(path) — List directory contents
12
+ * glob_files(pattern, root?, max_results?) — Find files matching a glob pattern
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,421 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Coder MCP Server — stdio MCP server providing file and shell tools.
4
+ *
5
+ * Tools exposed:
6
+ * read_file(path, start_line?, end_line?) — Read file contents (optionally sliced)
7
+ * write_file(path, content, create_dirs?) — Write / overwrite a file
8
+ * edit_file(path, old_str, new_str) — Replace exact string in a file
9
+ * execute_command(command, cwd?, timeout_ms?) — Run a shell command
10
+ * search_text(pattern, path?, include?, is_regex?)— Grep-style text search
11
+ * list_dir(path) — List directory contents
12
+ * glob_files(pattern, root?, max_results?) — Find files matching a glob pattern
13
+ */
14
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
15
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
16
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
17
+ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync, } from 'fs';
18
+ import path from 'path';
19
+ import { execSync } from 'child_process';
20
+ // ── Sandbox ───────────────────────────────────────────────────────────────
21
+ /** Default sandbox directory — set via CODER_SANDBOX_DIR env var. */
22
+ const SANDBOX_DIR = process.env['CODER_SANDBOX_DIR'] ?? null;
23
+ if (SANDBOX_DIR) {
24
+ process.stderr.write(`[coder] sandbox: ${SANDBOX_DIR}\n`);
25
+ }
26
+ // ── Helpers ────────────────────────────────────────────────────────────────
27
+ function resolvePath(p) {
28
+ return path.resolve(p);
29
+ }
30
+ function readLines(content, startLine, endLine) {
31
+ if (startLine == null && endLine == null)
32
+ return content;
33
+ const lines = content.split('\n');
34
+ const s = (startLine ?? 1) - 1; // 1-based → 0-based
35
+ const e = endLine ?? lines.length;
36
+ return lines.slice(Math.max(0, s), e).join('\n');
37
+ }
38
+ // ── Tool definitions ───────────────────────────────────────────────────────
39
+ const TOOLS = [
40
+ {
41
+ name: 'read_file',
42
+ description: 'Read the contents of a file. Optionally specify a 1-based line range. ' +
43
+ 'Returns the file text (or the requested slice) prefixed with line numbers.',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ path: { type: 'string', description: 'Absolute or relative path to the file' },
48
+ start_line: { type: 'number', description: '1-based first line to return (inclusive)' },
49
+ end_line: { type: 'number', description: '1-based last line to return (inclusive)' },
50
+ },
51
+ required: ['path'],
52
+ },
53
+ },
54
+ {
55
+ name: 'write_file',
56
+ description: 'Write content to a file, creating or overwriting it. ' +
57
+ 'Set create_dirs=true to create missing parent directories.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ path: { type: 'string', description: 'File path to write' },
62
+ content: { type: 'string', description: 'Text content to write' },
63
+ create_dirs: {
64
+ type: 'boolean',
65
+ description: 'Create parent directories if they do not exist (default: true)',
66
+ },
67
+ },
68
+ required: ['path', 'content'],
69
+ },
70
+ },
71
+ {
72
+ name: 'edit_file',
73
+ description: 'Replace an exact string occurrence in a file with new text. ' +
74
+ 'The old_str must appear exactly once. Include surrounding context lines for uniqueness.',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ path: { type: 'string', description: 'File path to edit' },
79
+ old_str: { type: 'string', description: 'Exact string to replace (must be unique in the file)' },
80
+ new_str: { type: 'string', description: 'Replacement string' },
81
+ },
82
+ required: ['path', 'old_str', 'new_str'],
83
+ },
84
+ },
85
+ {
86
+ name: 'execute_command',
87
+ description: 'Execute a shell command and return its stdout + stderr. ' +
88
+ 'Keep commands idempotent where possible. Default timeout is 30 seconds. ' +
89
+ 'Default working directory is the sandbox directory (CODER_SANDBOX_DIR) if set.',
90
+ inputSchema: {
91
+ type: 'object',
92
+ properties: {
93
+ command: { type: 'string', description: 'Shell command to execute' },
94
+ cwd: { type: 'string', description: 'Working directory (default: sandbox dir, or process cwd)' },
95
+ timeout_ms: {
96
+ type: 'number',
97
+ description: 'Timeout in milliseconds (default: 30000, max: 300000)',
98
+ },
99
+ },
100
+ required: ['command'],
101
+ },
102
+ },
103
+ {
104
+ name: 'search_text',
105
+ description: 'Search for a text pattern in files. Uses grep-style matching. ' +
106
+ 'Returns matching lines with file:linenum prefix.',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ pattern: { type: 'string', description: 'Search pattern' },
111
+ path: {
112
+ type: 'string',
113
+ description: 'File or directory to search (default: current directory)',
114
+ },
115
+ include: {
116
+ type: 'string',
117
+ description: 'Glob pattern to filter files, e.g. "*.ts" or "src/**"',
118
+ },
119
+ is_regex: {
120
+ type: 'boolean',
121
+ description: 'Treat pattern as a regex (default: false — plain text search)',
122
+ },
123
+ case_sensitive: {
124
+ type: 'boolean',
125
+ description: 'Case-sensitive search (default: false)',
126
+ },
127
+ max_results: {
128
+ type: 'number',
129
+ description: 'Maximum matches to return (default: 100)',
130
+ },
131
+ },
132
+ required: ['pattern'],
133
+ },
134
+ },
135
+ {
136
+ name: 'list_dir',
137
+ description: 'List the contents of a directory. Returns names with a trailing "/" for sub-directories.',
138
+ inputSchema: {
139
+ type: 'object',
140
+ properties: {
141
+ path: { type: 'string', description: 'Directory path to list' },
142
+ },
143
+ required: ['path'],
144
+ },
145
+ },
146
+ {
147
+ name: 'glob_files',
148
+ description: 'Find files matching a glob pattern. Supports * (any chars in segment), ** (any path depth). ' +
149
+ 'Examples: "**/*.ts", "src/**/*.tsx", "*.json". ' +
150
+ 'Searches the sandbox directory by default if root is not specified.',
151
+ inputSchema: {
152
+ type: 'object',
153
+ properties: {
154
+ pattern: {
155
+ type: 'string',
156
+ description: 'Glob pattern, e.g. "**/*.ts", "src/**/*.json", "*.md"',
157
+ },
158
+ root: {
159
+ type: 'string',
160
+ description: 'Root directory to search from (default: sandbox dir or cwd)',
161
+ },
162
+ max_results: {
163
+ type: 'number',
164
+ description: 'Maximum number of file paths to return (default: 200)',
165
+ },
166
+ },
167
+ required: ['pattern'],
168
+ },
169
+ },
170
+ ];
171
+ // ── Tool implementations ───────────────────────────────────────────────────
172
+ function toolReadFile(args) {
173
+ const filePath = resolvePath(String(args['path']));
174
+ if (!existsSync(filePath)) {
175
+ throw new Error(`File not found: ${filePath}`);
176
+ }
177
+ const stat = statSync(filePath);
178
+ if (!stat.isFile()) {
179
+ throw new Error(`Not a file: ${filePath}`);
180
+ }
181
+ const content = readFileSync(filePath, 'utf8');
182
+ const startLine = args['start_line'] != null ? Number(args['start_line']) : undefined;
183
+ const endLine = args['end_line'] != null ? Number(args['end_line']) : undefined;
184
+ const slice = readLines(content, startLine, endLine);
185
+ // Prefix each line with its number for easy reference
186
+ const offset = (startLine ?? 1) - 1;
187
+ const numbered = slice
188
+ .split('\n')
189
+ .map((line, i) => `${String(offset + i + 1).padStart(4)}: ${line}`)
190
+ .join('\n');
191
+ return numbered;
192
+ }
193
+ function toolWriteFile(args) {
194
+ const filePath = resolvePath(String(args['path']));
195
+ const content = String(args['content']);
196
+ const createDirs = args['create_dirs'] !== false; // default true
197
+ if (createDirs) {
198
+ const dir = path.dirname(filePath);
199
+ if (!existsSync(dir))
200
+ mkdirSync(dir, { recursive: true });
201
+ }
202
+ writeFileSync(filePath, content, 'utf8');
203
+ const lines = content.split('\n').length;
204
+ return `Written ${lines} line(s) to ${filePath}`;
205
+ }
206
+ function toolEditFile(args) {
207
+ const filePath = resolvePath(String(args['path']));
208
+ if (!existsSync(filePath)) {
209
+ throw new Error(`File not found: ${filePath}`);
210
+ }
211
+ const oldStr = String(args['old_str']);
212
+ const newStr = String(args['new_str']);
213
+ const content = readFileSync(filePath, 'utf8');
214
+ const count = content.split(oldStr).length - 1;
215
+ if (count === 0) {
216
+ throw new Error(`old_str not found in ${filePath}. Make sure it matches exactly.`);
217
+ }
218
+ if (count > 1) {
219
+ throw new Error(`old_str matches ${count} locations in ${filePath}. Add more context to make it unique.`);
220
+ }
221
+ const updated = content.replace(oldStr, newStr);
222
+ writeFileSync(filePath, updated, 'utf8');
223
+ return `Edited ${filePath} — replaced 1 occurrence`;
224
+ }
225
+ function toolExecuteCommand(args) {
226
+ const command = String(args['command']);
227
+ const cwd = args['cwd']
228
+ ? resolvePath(String(args['cwd']))
229
+ : SANDBOX_DIR
230
+ ? resolvePath(SANDBOX_DIR)
231
+ : process.cwd();
232
+ const rawTimeout = args['timeout_ms'] != null ? Number(args['timeout_ms']) : 30_000;
233
+ const timeoutMs = Math.min(rawTimeout, 300_000); // cap at 5 minutes
234
+ try {
235
+ const output = execSync(command, {
236
+ cwd,
237
+ timeout: timeoutMs,
238
+ encoding: 'utf8',
239
+ stdio: ['pipe', 'pipe', 'pipe'],
240
+ maxBuffer: 10 * 1024 * 1024, // 10 MB
241
+ });
242
+ return output || '(no output)';
243
+ }
244
+ catch (err) {
245
+ // execSync throws on non-zero exit — include stdout + stderr
246
+ if (err && typeof err === 'object' && 'stdout' in err && 'stderr' in err) {
247
+ const e = err;
248
+ const parts = [];
249
+ if (e.stdout)
250
+ parts.push(`stdout:\n${e.stdout}`);
251
+ if (e.stderr)
252
+ parts.push(`stderr:\n${e.stderr}`);
253
+ parts.push(`exit code: ${e.status ?? 1}`);
254
+ return parts.join('\n');
255
+ }
256
+ throw err;
257
+ }
258
+ }
259
+ function toolSearchText(args) {
260
+ const pattern = String(args['pattern']);
261
+ const searchPath = args['path'] ? resolvePath(String(args['path'])) : process.cwd();
262
+ const include = args['include'] ? String(args['include']) : undefined;
263
+ const isRegex = args['is_regex'] === true;
264
+ const caseSensitive = args['case_sensitive'] === true;
265
+ const maxResults = args['max_results'] != null ? Number(args['max_results']) : 100;
266
+ // Build grep command (grep is universally available; use -r for dirs)
267
+ const parts = ['grep', '-n']; // -n = line numbers
268
+ if (!caseSensitive)
269
+ parts.push('-i');
270
+ if (!isRegex)
271
+ parts.push('-F'); // -F = fixed string (no regex)
272
+ const stat = statSync(searchPath);
273
+ if (stat.isDirectory()) {
274
+ parts.push('-r');
275
+ if (include) {
276
+ parts.push(`--include="${include}"`);
277
+ }
278
+ }
279
+ // Quote the pattern to prevent shell injection
280
+ const safePattern = pattern.replace(/'/g, `'\\''`);
281
+ parts.push(`'${safePattern}'`);
282
+ parts.push(`'${searchPath.replace(/'/g, `'\\''`)}'`);
283
+ const command = parts.join(' ');
284
+ try {
285
+ const output = execSync(command, {
286
+ encoding: 'utf8',
287
+ timeout: 15_000,
288
+ maxBuffer: 5 * 1024 * 1024,
289
+ stdio: ['pipe', 'pipe', 'pipe'],
290
+ });
291
+ const lines = output.trim().split('\n').filter(Boolean);
292
+ const limited = lines.slice(0, maxResults);
293
+ const suffix = lines.length > maxResults ? `\n…${lines.length - maxResults} more matches` : '';
294
+ return limited.join('\n') + suffix || '(no matches)';
295
+ }
296
+ catch (err) {
297
+ // Exit code 1 = no matches (not an error)
298
+ if (err && typeof err === 'object' && 'status' in err && err.status === 1) {
299
+ return '(no matches)';
300
+ }
301
+ throw err;
302
+ }
303
+ }
304
+ function toolGlobFiles(args) {
305
+ const pattern = String(args['pattern']);
306
+ const root = args['root'] != null
307
+ ? resolvePath(String(args['root']))
308
+ : SANDBOX_DIR
309
+ ? resolvePath(SANDBOX_DIR)
310
+ : process.cwd();
311
+ const maxResults = args['max_results'] != null ? Number(args['max_results']) : 200;
312
+ if (!existsSync(root)) {
313
+ return `(directory not found: ${root})`;
314
+ }
315
+ const hasDoubleGlob = pattern.includes('**');
316
+ // Last path segment = file name pattern
317
+ const namePart = pattern.split('/').pop() ?? '*';
318
+ // Sub-path prefix before the first ** (or root of pattern)
319
+ const prefixRaw = hasDoubleGlob
320
+ ? pattern.replace(/\*\*.*/s, '').replace(/\/[^/]*$/, '')
321
+ : namePart === pattern
322
+ ? '' // no slash — search in root, depth=1
323
+ : pattern.slice(0, pattern.lastIndexOf('/'));
324
+ const searchRoot = prefixRaw ? path.join(root, prefixRaw) : root;
325
+ if (!existsSync(searchRoot)) {
326
+ return `(directory not found: ${searchRoot})`;
327
+ }
328
+ // Build find command
329
+ const safeRoot = searchRoot.replace(/'/g, `'\''`);
330
+ const depth = hasDoubleGlob ? '' : '-maxdepth 1';
331
+ const nameFlag = namePart === '*' || namePart === '**' || namePart === ''
332
+ ? ''
333
+ : `-name '${namePart.replace(/'/g, `'\''`)}'`;
334
+ const command = `find '${safeRoot}' ${depth} -type f ${nameFlag} 2>/dev/null`
335
+ .replace(/\s+/g, ' ')
336
+ .trim();
337
+ try {
338
+ const output = execSync(command, {
339
+ encoding: 'utf8',
340
+ timeout: 15_000,
341
+ maxBuffer: 5 * 1024 * 1024,
342
+ });
343
+ const files = output
344
+ .trim()
345
+ .split('\n')
346
+ .filter(Boolean)
347
+ .map(f => path.relative(root, f))
348
+ .sort()
349
+ .slice(0, maxResults);
350
+ const suffix = files.length === maxResults ? `\n…(limited to ${maxResults} results)` : '';
351
+ return files.join('\n') + suffix || '(no files found)';
352
+ }
353
+ catch (err) {
354
+ if (err && typeof err === 'object' && 'status' in err)
355
+ return '(no files found)';
356
+ throw err;
357
+ }
358
+ }
359
+ function toolListDir(args) {
360
+ const dirPath = resolvePath(String(args['path']));
361
+ if (!existsSync(dirPath)) {
362
+ throw new Error(`Directory not found: ${dirPath}`);
363
+ }
364
+ const stat = statSync(dirPath);
365
+ if (!stat.isDirectory()) {
366
+ throw new Error(`Not a directory: ${dirPath}`);
367
+ }
368
+ const entries = readdirSync(dirPath, { withFileTypes: true });
369
+ const lines = entries.map(e => (e.isDirectory() ? `${e.name}/` : e.name));
370
+ lines.sort();
371
+ return lines.join('\n') || '(empty directory)';
372
+ }
373
+ // ── Server ─────────────────────────────────────────────────────────────────
374
+ const server = new Server({ name: 'coder', version: '1.0.0' }, { capabilities: { tools: {} } });
375
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
376
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
377
+ const { name, arguments: args = {} } = req.params;
378
+ try {
379
+ let result;
380
+ switch (name) {
381
+ case 'read_file':
382
+ result = toolReadFile(args);
383
+ break;
384
+ case 'write_file':
385
+ result = toolWriteFile(args);
386
+ break;
387
+ case 'edit_file':
388
+ result = toolEditFile(args);
389
+ break;
390
+ case 'execute_command':
391
+ result = toolExecuteCommand(args);
392
+ break;
393
+ case 'search_text':
394
+ result = toolSearchText(args);
395
+ break;
396
+ case 'list_dir':
397
+ result = toolListDir(args);
398
+ break;
399
+ case 'glob_files':
400
+ result = toolGlobFiles(args);
401
+ break;
402
+ default:
403
+ throw new Error(`Unknown tool: ${name}`);
404
+ }
405
+ return { content: [{ type: 'text', text: result }] };
406
+ }
407
+ catch (err) {
408
+ const msg = err instanceof Error ? err.message : String(err);
409
+ return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
410
+ }
411
+ });
412
+ // ── Start ──────────────────────────────────────────────────────────────────
413
+ async function main() {
414
+ const transport = new StdioServerTransport();
415
+ await server.connect(transport);
416
+ }
417
+ main().catch(err => {
418
+ process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
419
+ process.exit(1);
420
+ });
421
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Planner MCP Server — stdio MCP server providing todo and planning tools.
4
+ *
5
+ * Tools exposed:
6
+ * Plans:
7
+ * plan_create(title, description?) — Create a new plan
8
+ * plan_list() — List all plans
9
+ * plan_get(plan_id) — Get plan details with steps
10
+ * plan_add_step(plan_id, step) — Add a step to a plan
11
+ * plan_complete_step(plan_id, index) — Mark a step as complete
12
+ * plan_delete(plan_id) — Delete a plan
13
+ *
14
+ * Todos:
15
+ * todo_add(text, priority?) — Add todo (priority: high|medium|low)
16
+ * todo_list(filter?) — List todos (filter: all|open|done)
17
+ * todo_complete(id) — Mark todo as complete
18
+ * todo_delete(id) — Delete a todo
19
+ *
20
+ * Storage: JSON files in ~/.automatey/planner/
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}