@sunilp-org/jam-cli 0.1.0 → 0.1.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 (103) hide show
  1. package/README.md +304 -52
  2. package/dist/commands/ask.d.ts +4 -0
  3. package/dist/commands/ask.d.ts.map +1 -1
  4. package/dist/commands/ask.js +202 -10
  5. package/dist/commands/ask.js.map +1 -1
  6. package/dist/commands/commit.d.ts +12 -0
  7. package/dist/commands/commit.d.ts.map +1 -0
  8. package/dist/commands/commit.js +135 -0
  9. package/dist/commands/commit.js.map +1 -0
  10. package/dist/commands/context.d.ts +12 -0
  11. package/dist/commands/context.d.ts.map +1 -0
  12. package/dist/commands/context.js +52 -0
  13. package/dist/commands/context.js.map +1 -0
  14. package/dist/commands/review.d.ts +25 -0
  15. package/dist/commands/review.d.ts.map +1 -0
  16. package/dist/commands/review.js +117 -0
  17. package/dist/commands/review.js.map +1 -0
  18. package/dist/commands/run.d.ts +1 -0
  19. package/dist/commands/run.d.ts.map +1 -1
  20. package/dist/commands/run.js +199 -197
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/config/loader.d.ts.map +1 -1
  23. package/dist/config/loader.js +3 -0
  24. package/dist/config/loader.js.map +1 -1
  25. package/dist/index.js +63 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/providers/base.d.ts +26 -0
  28. package/dist/providers/base.d.ts.map +1 -1
  29. package/dist/providers/factory.d.ts.map +1 -1
  30. package/dist/providers/factory.js +17 -1
  31. package/dist/providers/factory.js.map +1 -1
  32. package/dist/providers/groq.d.ts +16 -0
  33. package/dist/providers/groq.d.ts.map +1 -0
  34. package/dist/providers/groq.js +23 -0
  35. package/dist/providers/groq.js.map +1 -0
  36. package/dist/providers/ollama.d.ts +6 -1
  37. package/dist/providers/ollama.d.ts.map +1 -1
  38. package/dist/providers/ollama.js +77 -4
  39. package/dist/providers/ollama.js.map +1 -1
  40. package/dist/providers/openai.d.ts +18 -0
  41. package/dist/providers/openai.d.ts.map +1 -0
  42. package/dist/providers/openai.js +229 -0
  43. package/dist/providers/openai.js.map +1 -0
  44. package/dist/tools/all-tools.d.ts +18 -0
  45. package/dist/tools/all-tools.d.ts.map +1 -0
  46. package/dist/tools/all-tools.js +95 -0
  47. package/dist/tools/all-tools.js.map +1 -0
  48. package/dist/tools/apply_patch.js +1 -1
  49. package/dist/tools/apply_patch.js.map +1 -1
  50. package/dist/tools/context-tools.d.ts +14 -0
  51. package/dist/tools/context-tools.d.ts.map +1 -0
  52. package/dist/tools/context-tools.js +63 -0
  53. package/dist/tools/context-tools.js.map +1 -0
  54. package/dist/tools/git_diff.js +1 -1
  55. package/dist/tools/git_diff.js.map +1 -1
  56. package/dist/tools/git_status.js +1 -1
  57. package/dist/tools/git_status.js.map +1 -1
  58. package/dist/tools/registry.d.ts.map +1 -1
  59. package/dist/tools/registry.js +2 -0
  60. package/dist/tools/registry.js.map +1 -1
  61. package/dist/tools/run_command.d.ts +8 -3
  62. package/dist/tools/run_command.d.ts.map +1 -1
  63. package/dist/tools/run_command.js +90 -3
  64. package/dist/tools/run_command.js.map +1 -1
  65. package/dist/ui/chat.d.ts.map +1 -1
  66. package/dist/ui/chat.js +173 -1
  67. package/dist/ui/chat.js.map +1 -1
  68. package/dist/ui/logo.d.ts.map +1 -1
  69. package/dist/ui/logo.js +5 -1
  70. package/dist/ui/logo.js.map +1 -1
  71. package/dist/utils/agent.d.ts +130 -0
  72. package/dist/utils/agent.d.ts.map +1 -0
  73. package/dist/utils/agent.js +449 -0
  74. package/dist/utils/agent.js.map +1 -0
  75. package/dist/utils/cache.d.ts +30 -0
  76. package/dist/utils/cache.d.ts.map +1 -0
  77. package/dist/utils/cache.js +62 -0
  78. package/dist/utils/cache.js.map +1 -0
  79. package/dist/utils/context.d.ts +38 -0
  80. package/dist/utils/context.d.ts.map +1 -0
  81. package/dist/utils/context.js +383 -0
  82. package/dist/utils/context.js.map +1 -0
  83. package/dist/utils/critic.d.ts +31 -0
  84. package/dist/utils/critic.d.ts.map +1 -0
  85. package/dist/utils/critic.js +126 -0
  86. package/dist/utils/critic.js.map +1 -0
  87. package/dist/utils/index-builder.d.ts +53 -0
  88. package/dist/utils/index-builder.d.ts.map +1 -0
  89. package/dist/utils/index-builder.js +241 -0
  90. package/dist/utils/index-builder.js.map +1 -0
  91. package/dist/utils/memory.d.ts +104 -0
  92. package/dist/utils/memory.d.ts.map +1 -0
  93. package/dist/utils/memory.js +215 -0
  94. package/dist/utils/memory.js.map +1 -0
  95. package/dist/utils/past-sessions.d.ts +31 -0
  96. package/dist/utils/past-sessions.d.ts.map +1 -0
  97. package/dist/utils/past-sessions.js +126 -0
  98. package/dist/utils/past-sessions.js.map +1 -0
  99. package/dist/utils/tokens.d.ts +53 -0
  100. package/dist/utils/tokens.d.ts.map +1 -0
  101. package/dist/utils/tokens.js +138 -0
  102. package/dist/utils/tokens.js.map +1 -0
  103. package/package.json +4 -2
@@ -0,0 +1,229 @@
1
+ import { JamError } from '../utils/errors.js';
2
+ const DEFAULT_BASE_URL = 'https://api.openai.com';
3
+ const DEFAULT_MODEL = 'gpt-4o-mini';
4
+ function toOpenAIMessages(messages) {
5
+ return messages.map((m) => ({ role: m.role, content: m.content }));
6
+ }
7
+ function getApiKey(profileApiKey) {
8
+ return profileApiKey ?? process.env['OPENAI_API_KEY'];
9
+ }
10
+ export class OpenAIAdapter {
11
+ info = {
12
+ name: 'openai',
13
+ supportsStreaming: true,
14
+ };
15
+ baseUrl;
16
+ model;
17
+ apiKey;
18
+ constructor(options = {}) {
19
+ this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
20
+ this.model = options.model ?? DEFAULT_MODEL;
21
+ this.apiKey = getApiKey(options.apiKey);
22
+ }
23
+ authHeaders() {
24
+ if (!this.apiKey) {
25
+ throw new JamError('No OpenAI API key found. Set OPENAI_API_KEY environment variable or configure apiKey in your profile.', 'PROVIDER_AUTH_FAILED', { retryable: false });
26
+ }
27
+ return {
28
+ 'Content-Type': 'application/json',
29
+ Authorization: `Bearer ${this.apiKey}`,
30
+ };
31
+ }
32
+ async listModels() {
33
+ const headers = this.authHeaders();
34
+ let response;
35
+ try {
36
+ response = await fetch(`${this.baseUrl}/v1/models`, {
37
+ headers,
38
+ signal: AbortSignal.timeout(10_000),
39
+ });
40
+ }
41
+ catch (err) {
42
+ throw new JamError(`Cannot reach OpenAI at ${this.baseUrl}. Check your network connection.`, 'PROVIDER_UNAVAILABLE', { retryable: false, cause: err });
43
+ }
44
+ if (response.status === 401) {
45
+ throw new JamError('OpenAI API key is invalid or expired. Set a valid OPENAI_API_KEY.', 'PROVIDER_AUTH_FAILED', { retryable: false, statusCode: response.status });
46
+ }
47
+ if (!response.ok) {
48
+ throw new JamError(`OpenAI returned HTTP ${response.status} from /v1/models.`, 'PROVIDER_UNAVAILABLE', { retryable: false, statusCode: response.status });
49
+ }
50
+ const data = (await response.json());
51
+ return (data.data ?? []).map((m) => m.id).sort();
52
+ }
53
+ async validateCredentials() {
54
+ // A lightweight check: list models (requires a valid API key)
55
+ await this.listModels();
56
+ }
57
+ async *streamCompletion(request) {
58
+ const messages = [];
59
+ if (request.systemPrompt) {
60
+ messages.push({ role: 'system', content: request.systemPrompt });
61
+ }
62
+ messages.push(...toOpenAIMessages(request.messages));
63
+ const body = {
64
+ model: request.model ?? this.model,
65
+ messages,
66
+ stream: true,
67
+ stream_options: { include_usage: true },
68
+ ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),
69
+ ...(request.maxTokens !== undefined ? { max_tokens: request.maxTokens } : {}),
70
+ };
71
+ const headers = this.authHeaders();
72
+ let response;
73
+ try {
74
+ response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
75
+ method: 'POST',
76
+ headers,
77
+ body: JSON.stringify(body),
78
+ signal: AbortSignal.timeout(120_000),
79
+ });
80
+ }
81
+ catch (err) {
82
+ throw new JamError(`Failed to connect to OpenAI at ${this.baseUrl}`, 'PROVIDER_UNAVAILABLE', { retryable: true, cause: err });
83
+ }
84
+ if (response.status === 401) {
85
+ throw new JamError('OpenAI API key is invalid or expired. Set a valid OPENAI_API_KEY.', 'PROVIDER_AUTH_FAILED', { retryable: false, statusCode: response.status });
86
+ }
87
+ if (response.status === 404) {
88
+ throw new JamError(`Model not found: ${request.model ?? this.model}. Check available models with: jam models list`, 'PROVIDER_MODEL_NOT_FOUND', { retryable: false, statusCode: response.status });
89
+ }
90
+ if (response.status === 429) {
91
+ throw new JamError('OpenAI rate limit reached. Try again shortly.', 'PROVIDER_RATE_LIMITED', { retryable: true, statusCode: response.status });
92
+ }
93
+ if (!response.ok) {
94
+ const errorText = await response.text().catch(() => '');
95
+ throw new JamError(`OpenAI error ${response.status}: ${errorText}`, 'PROVIDER_STREAM_ERROR', { retryable: false, statusCode: response.status });
96
+ }
97
+ if (!response.body) {
98
+ throw new JamError('OpenAI returned empty response body', 'PROVIDER_STREAM_ERROR', {
99
+ retryable: true,
100
+ });
101
+ }
102
+ const decoder = new TextDecoder();
103
+ let buffer = '';
104
+ for await (const rawChunk of response.body) {
105
+ buffer += decoder.decode(rawChunk, { stream: true });
106
+ const lines = buffer.split('\n');
107
+ buffer = lines.pop() ?? '';
108
+ for (const line of lines) {
109
+ const trimmed = line.trim();
110
+ if (!trimmed || trimmed === 'data: [DONE]')
111
+ continue;
112
+ if (!trimmed.startsWith('data: '))
113
+ continue;
114
+ let parsed;
115
+ try {
116
+ parsed = JSON.parse(trimmed.slice(6));
117
+ }
118
+ catch {
119
+ continue;
120
+ }
121
+ const choice = parsed.choices?.[0];
122
+ if (choice) {
123
+ const delta = choice.delta.content ?? '';
124
+ const done = choice.finish_reason !== null;
125
+ if (done) {
126
+ const usage = parsed.usage;
127
+ yield {
128
+ delta: '',
129
+ done: true,
130
+ usage: usage
131
+ ? {
132
+ promptTokens: usage.prompt_tokens,
133
+ completionTokens: usage.completion_tokens,
134
+ totalTokens: usage.total_tokens,
135
+ }
136
+ : undefined,
137
+ };
138
+ }
139
+ else if (delta) {
140
+ yield { delta, done: false };
141
+ }
142
+ }
143
+ else if (parsed.usage) {
144
+ // usage-only chunk (stream_options.include_usage)
145
+ yield {
146
+ delta: '',
147
+ done: true,
148
+ usage: {
149
+ promptTokens: parsed.usage.prompt_tokens,
150
+ completionTokens: parsed.usage.completion_tokens,
151
+ totalTokens: parsed.usage.total_tokens,
152
+ },
153
+ };
154
+ }
155
+ }
156
+ }
157
+ }
158
+ async chatWithTools(messages, tools, options = {}) {
159
+ const openAIMessages = [];
160
+ if (options.systemPrompt) {
161
+ openAIMessages.push({ role: 'system', content: options.systemPrompt });
162
+ }
163
+ openAIMessages.push(...toOpenAIMessages(messages));
164
+ const body = {
165
+ model: options.model ?? this.model,
166
+ messages: openAIMessages,
167
+ tools: tools.map((t) => ({
168
+ type: 'function',
169
+ function: { name: t.name, description: t.description, parameters: t.parameters },
170
+ })),
171
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
172
+ ...(options.maxTokens !== undefined ? { max_tokens: options.maxTokens } : {}),
173
+ };
174
+ const headers = this.authHeaders();
175
+ let response;
176
+ try {
177
+ response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
178
+ method: 'POST',
179
+ headers,
180
+ body: JSON.stringify(body),
181
+ signal: AbortSignal.timeout(120_000),
182
+ });
183
+ }
184
+ catch (err) {
185
+ throw new JamError(`Failed to connect to OpenAI at ${this.baseUrl}`, 'PROVIDER_UNAVAILABLE', { retryable: true, cause: err });
186
+ }
187
+ if (response.status === 401) {
188
+ throw new JamError('OpenAI API key is invalid or expired. Set a valid OPENAI_API_KEY.', 'PROVIDER_AUTH_FAILED', { retryable: false, statusCode: response.status });
189
+ }
190
+ if (!response.ok) {
191
+ const errorText = await response.text().catch(() => '');
192
+ throw new JamError(`OpenAI error ${response.status}: ${errorText}`, 'PROVIDER_STREAM_ERROR', { retryable: false, statusCode: response.status });
193
+ }
194
+ const data = (await response.json());
195
+ const msg = data.choices[0]?.message;
196
+ if (!msg) {
197
+ throw new JamError('OpenAI returned no choices.', 'PROVIDER_STREAM_ERROR', {
198
+ retryable: false,
199
+ });
200
+ }
201
+ const toolCalls = msg.tool_calls?.map((tc) => {
202
+ let parsedArgs;
203
+ try {
204
+ parsedArgs = JSON.parse(tc.function.arguments);
205
+ }
206
+ catch {
207
+ throw new JamError(`Failed to parse tool call arguments from OpenAI response for tool "${tc.function.name}"`, 'PROVIDER_STREAM_ERROR', { retryable: false });
208
+ }
209
+ return {
210
+ id: tc.id,
211
+ name: tc.function.name,
212
+ arguments: parsedArgs,
213
+ };
214
+ });
215
+ const usage = data.usage;
216
+ return {
217
+ content: msg.content ?? null,
218
+ toolCalls: toolCalls?.length ? toolCalls : undefined,
219
+ usage: usage
220
+ ? {
221
+ promptTokens: usage.prompt_tokens,
222
+ completionTokens: usage.completion_tokens,
223
+ totalTokens: usage.total_tokens,
224
+ }
225
+ : undefined,
226
+ };
227
+ }
228
+ }
229
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Full tool set for `jam run` — read-only tools plus write tools.
3
+ *
4
+ * Uses the shared READ_ONLY_TOOL_SCHEMAS from context-tools.ts and adds
5
+ * write tools (git_status, git_diff, write_file, apply_patch).
6
+ */
7
+ import type { ToolDefinition } from '../providers/base.js';
8
+ /** All tool schemas for the run command (read + write). */
9
+ export declare const ALL_TOOL_SCHEMAS: ToolDefinition[];
10
+ /** Set of read-only tool names (no confirmation needed). */
11
+ export declare const READONLY_TOOL_NAMES: Set<string>;
12
+ /**
13
+ * Execute any tool (read or write).
14
+ * For read-only tools, delegates to executeReadOnlyTool.
15
+ * For write tools, uses the full registry.
16
+ */
17
+ export declare function executeTool(name: string, args: Record<string, unknown>, workspaceRoot: string): Promise<string>;
18
+ //# sourceMappingURL=all-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-tools.d.ts","sourceRoot":"","sources":["../../src/tools/all-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkE3D,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAG5C,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,aAAmD,CAAC;AAEpF;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Full tool set for `jam run` — read-only tools plus write tools.
3
+ *
4
+ * Uses the shared READ_ONLY_TOOL_SCHEMAS from context-tools.ts and adds
5
+ * write tools (git_status, git_diff, write_file, apply_patch).
6
+ */
7
+ import { READ_ONLY_TOOL_SCHEMAS, executeReadOnlyTool } from './context-tools.js';
8
+ import { JamError } from '../utils/errors.js';
9
+ // ── Write-capable tool schemas ────────────────────────────────────────────────
10
+ const WRITE_TOOL_SCHEMAS = [
11
+ {
12
+ name: 'git_status',
13
+ description: 'Get current git status. Use this to see which files have been modified, staged, or are untracked.',
14
+ parameters: { type: 'object', properties: {}, required: [] },
15
+ },
16
+ {
17
+ name: 'git_diff',
18
+ description: 'Get git diff for the current changes. Use staged=true to see staged changes.',
19
+ parameters: {
20
+ type: 'object',
21
+ properties: {
22
+ staged: { type: 'boolean', description: 'Show staged changes instead of unstaged' },
23
+ path: { type: 'string', description: 'Limit diff to a specific file path' },
24
+ },
25
+ required: [],
26
+ },
27
+ },
28
+ {
29
+ name: 'write_file',
30
+ description: 'Write content to a file. Use mode="append" to add to the end of a file. Default is "overwrite". Explain what you are changing and why before calling this tool.',
31
+ parameters: {
32
+ type: 'object',
33
+ properties: {
34
+ path: { type: 'string', description: 'File path relative to workspace root' },
35
+ content: { type: 'string', description: 'The full content to write to the file' },
36
+ mode: { type: 'string', description: '"overwrite" (default) or "append"' },
37
+ },
38
+ required: ['path', 'content'],
39
+ },
40
+ },
41
+ {
42
+ name: 'apply_patch',
43
+ description: 'Apply a unified diff patch to modify files. Use this for precise, targeted edits to existing files.',
44
+ parameters: {
45
+ type: 'object',
46
+ properties: {
47
+ patch: { type: 'string', description: 'Unified diff content (the patch to apply)' },
48
+ },
49
+ required: ['patch'],
50
+ },
51
+ },
52
+ {
53
+ name: 'run_command',
54
+ description: 'Execute a shell command and return its stdout and stderr. ' +
55
+ 'Use for running tests, builds, linters, or other safe commands. ' +
56
+ 'Dangerous commands (rm -rf, sudo, etc.) are blocked.',
57
+ parameters: {
58
+ type: 'object',
59
+ properties: {
60
+ command: { type: 'string', description: 'The executable to run (e.g. "npm", "git", "python")' },
61
+ args: { type: 'string', description: 'Space-separated arguments (e.g. "test --run")' },
62
+ timeout: { type: 'number', description: 'Timeout in seconds. Default is 30.' },
63
+ },
64
+ required: ['command'],
65
+ },
66
+ },
67
+ ];
68
+ /** All tool schemas for the run command (read + write). */
69
+ export const ALL_TOOL_SCHEMAS = [
70
+ ...READ_ONLY_TOOL_SCHEMAS,
71
+ ...WRITE_TOOL_SCHEMAS,
72
+ ];
73
+ /** Set of read-only tool names (no confirmation needed). */
74
+ export const READONLY_TOOL_NAMES = new Set(READ_ONLY_TOOL_SCHEMAS.map(t => t.name));
75
+ /**
76
+ * Execute any tool (read or write).
77
+ * For read-only tools, delegates to executeReadOnlyTool.
78
+ * For write tools, uses the full registry.
79
+ */
80
+ export async function executeTool(name, args, workspaceRoot) {
81
+ // Read-only tools share the same executor
82
+ if (READONLY_TOOL_NAMES.has(name)) {
83
+ return executeReadOnlyTool(name, args, workspaceRoot);
84
+ }
85
+ // Write tools use the full registry
86
+ const { createDefaultRegistry } = await import('./registry.js');
87
+ const registry = createDefaultRegistry();
88
+ const tool = registry.get(name);
89
+ if (!tool) {
90
+ throw new JamError(`Unknown tool: ${name}`, 'TOOL_NOT_FOUND');
91
+ }
92
+ const result = await tool.execute(args, { workspaceRoot, cwd: process.cwd() });
93
+ return result.error ? `Error: ${result.error}` : result.output;
94
+ }
95
+ //# sourceMappingURL=all-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-tools.js","sourceRoot":"","sources":["../../src/tools/all-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,iFAAiF;AAEjF,MAAM,kBAAkB,GAAqB;IAC3C;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,mGAAmG;QAChH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;KAC7D;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,8EAA8E;QAC3F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yCAAyC,EAAE;gBACnF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;aAC5E;YACD,QAAQ,EAAE,EAAE;SACb;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,iKAAiK;QAC9K,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;gBAC7E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAC9B;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qGAAqG;QAClH,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;aACpF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,4DAA4D;YAC5D,kEAAkE;YAClE,sDAAsD;QACxD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;gBAC/F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBACtF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;aAC/E;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,GAAG,sBAAsB;IACzB,GAAG,kBAAkB;CACtB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,IAA6B,EAC7B,aAAqB;IAErB,0CAA0C;IAC1C,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACxD,CAAC;IAED,oCAAoC;IACpC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjE,CAAC"}
@@ -48,7 +48,7 @@ export const applyPatchTool = {
48
48
  // Apply the patch
49
49
  let stdout;
50
50
  try {
51
- stdout = await runCommand('git', ['apply', tempFile], ctx.workspaceRoot);
51
+ ({ stdout } = await runCommand('git', ['apply', tempFile], ctx.workspaceRoot));
52
52
  }
53
53
  catch (err) {
54
54
  const detail = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"apply_patch.js","sourceRoot":"","sources":["../../src/tools/apply_patch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply_patch.js","sourceRoot":"","sources":["../../src/tools/apply_patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Read-only tools shared between `jam ask` and `jam chat`.
3
+ *
4
+ * `READ_ONLY_TOOL_SCHEMAS` is the provider-facing schema (sent to the LLM).
5
+ * `executeReadOnlyTool` dispatches to the in-process tool registry.
6
+ */
7
+ import type { ToolDefinition as ProviderToolDefinition } from '../providers/base.js';
8
+ export declare const READ_ONLY_TOOL_SCHEMAS: ProviderToolDefinition[];
9
+ /**
10
+ * Execute a read-only tool by name and return its text output.
11
+ * Throws for unknown tools or execution errors.
12
+ */
13
+ export declare function executeReadOnlyTool(name: string, args: Record<string, unknown>, workspaceRoot: string): Promise<string>;
14
+ //# sourceMappingURL=context-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tools.d.ts","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKrF,eAAO,MAAM,sBAAsB,EAAE,sBAAsB,EAsC1D,CAAC;AAIF;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CASjB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Read-only tools shared between `jam ask` and `jam chat`.
3
+ *
4
+ * `READ_ONLY_TOOL_SCHEMAS` is the provider-facing schema (sent to the LLM).
5
+ * `executeReadOnlyTool` dispatches to the in-process tool registry.
6
+ */
7
+ import { JamError } from '../utils/errors.js';
8
+ // ── Provider-facing schemas ───────────────────────────────────────────────────
9
+ export const READ_ONLY_TOOL_SCHEMAS = [
10
+ {
11
+ name: 'read_file',
12
+ description: 'Read the contents of a source file. Use this to examine code after finding relevant files via search_text or list_dir.',
13
+ parameters: {
14
+ type: 'object',
15
+ properties: {
16
+ path: { type: 'string', description: 'File path relative to workspace root, e.g. "src/providers/ollama.ts"' },
17
+ start_line: { type: 'number', description: 'First line to read (1-based). Omit to read from the beginning.' },
18
+ end_line: { type: 'number', description: 'Last line to read (inclusive). Omit to read to the end.' },
19
+ },
20
+ required: ['path'],
21
+ },
22
+ },
23
+ {
24
+ name: 'list_dir',
25
+ description: 'List files and sub-directories at a path. Use this to explore the project structure and find relevant source files.',
26
+ parameters: {
27
+ type: 'object',
28
+ properties: {
29
+ path: { type: 'string', description: 'Directory path relative to workspace root. Use "src/commands" or "src/providers" etc. Defaults to "."' },
30
+ },
31
+ required: [],
32
+ },
33
+ },
34
+ {
35
+ name: 'search_text',
36
+ description: 'Search for a text pattern across source files. IMPORTANT: Search for specific code identifiers like function names, class names, import paths, or variable names — NOT vague English words. The query parameter must be a non-empty string.',
37
+ parameters: {
38
+ type: 'object',
39
+ properties: {
40
+ query: { type: 'string', description: 'A specific code identifier to search for, e.g. "streamCompletion", "createProvider", "fetch(". Must be non-empty.' },
41
+ glob: { type: 'string', description: 'File glob pattern, e.g. "*.ts" for TypeScript files. Recommended: always set this for TypeScript projects.' },
42
+ max_results: { type: 'number', description: 'Maximum number of results. Default: 20.' },
43
+ },
44
+ required: ['query'],
45
+ },
46
+ },
47
+ ];
48
+ // ── Executor ──────────────────────────────────────────────────────────────────
49
+ /**
50
+ * Execute a read-only tool by name and return its text output.
51
+ * Throws for unknown tools or execution errors.
52
+ */
53
+ export async function executeReadOnlyTool(name, args, workspaceRoot) {
54
+ const { createDefaultRegistry } = await import('./registry.js');
55
+ const registry = createDefaultRegistry();
56
+ const tool = registry.get(name);
57
+ if (!tool) {
58
+ throw new JamError(`Unknown tool: ${name}`, 'TOOL_NOT_FOUND');
59
+ }
60
+ const result = await tool.execute(args, { workspaceRoot, cwd: process.cwd() });
61
+ return result.error ? `Error: ${result.error}` : result.output;
62
+ }
63
+ //# sourceMappingURL=context-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tools.js","sourceRoot":"","sources":["../../src/tools/context-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,iFAAiF;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,wHAAwH;QACrI,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sEAAsE,EAAE;gBAC7G,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;gBAC7G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;aACrG;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,qHAAqH;QAClI,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uGAAuG,EAAE;aAC/I;YACD,QAAQ,EAAE,EAAE;SACb;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,6OAA6O;QAC1P,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mHAAmH,EAAE;gBAC3J,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4GAA4G,EAAE;gBACnJ,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;aACxF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;CACF,CAAC;AAEF,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,IAA6B,EAC7B,aAAqB;IAErB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjE,CAAC"}
@@ -31,7 +31,7 @@ export const gitDiffTool = {
31
31
  }
32
32
  let stdout;
33
33
  try {
34
- stdout = await runCommand('git', gitArgs, ctx.workspaceRoot);
34
+ ({ stdout } = await runCommand('git', gitArgs, ctx.workspaceRoot));
35
35
  }
36
36
  catch (err) {
37
37
  throw new JamError('git diff failed. Is this a git repository?', 'TOOL_EXEC_ERROR', { cause: err });
@@ -1 +1 @@
1
- {"version":3,"file":"git_diff.js","sourceRoot":"","sources":["../../src/tools/git_diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,oFAAoF;IACjG,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,2DAA2D;gBACxE,QAAQ,EAAE,IAAI;aACf;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;gBACpD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,QAAQ,EAAE,EAAE;KACb;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,GAAgB;QAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAChB,4CAA4C,EAC5C,iBAAiB,EACjB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM;YACpD,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;aAC3B;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"git_diff.js","sourceRoot":"","sources":["../../src/tools/git_diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,oFAAoF;IACjG,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,2DAA2D;gBACxE,QAAQ,EAAE,IAAI;aACf;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;gBACpD,QAAQ,EAAE,IAAI;aACf;SACF;QACD,QAAQ,EAAE,EAAE;KACb;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,GAAgB;QAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAChB,4CAA4C,EAC5C,iBAAiB,EACjB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM;YACpD,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;aAC3B;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -12,7 +12,7 @@ export const gitStatusTool = {
12
12
  async execute(_args, ctx) {
13
13
  let stdout;
14
14
  try {
15
- stdout = await runCommand('git', ['status', '--short'], ctx.workspaceRoot);
15
+ ({ stdout } = await runCommand('git', ['status', '--short'], ctx.workspaceRoot));
16
16
  }
17
17
  catch (err) {
18
18
  throw new JamError('git status failed. Is this a git repository?', 'TOOL_EXEC_ERROR', { cause: err });
@@ -1 +1 @@
1
- {"version":3,"file":"git_status.js","sourceRoot":"","sources":["../../src/tools/git_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,6CAA6C;IAC1D,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B,EAAE,GAAgB;QAC5D,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAChB,8CAA8C,EAC9C,iBAAiB,EACjB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,MAAM;SACpE,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"git_status.js","sourceRoot":"","sources":["../../src/tools/git_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,6CAA6C;IAC1D,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B,EAAE,GAAgB;QAC5D,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAChB,8CAA8C,EAC9C,iBAAiB,EACjB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7B,OAAO;YACL,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,MAAM;SACpE,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS1E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,cAAc,EAAE;IAIlB,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,UAAU,CAAC;YAuCR,gBAAgB;CAmB/B;AAED,wBAAgB,qBAAqB,IAAI,YAAY,CAUpD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU1E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,cAAc,EAAE;IAIlB,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,UAAU,CAAC;YAuCR,gBAAgB;CAmB/B;AAED,wBAAgB,qBAAqB,IAAI,YAAY,CAWpD"}
@@ -8,6 +8,7 @@ import { gitDiffTool } from './git_diff.js';
8
8
  import { gitStatusTool } from './git_status.js';
9
9
  import { applyPatchTool } from './apply_patch.js';
10
10
  import { writeFileTool } from './write_file.js';
11
+ import { runCommandTool } from './run_command.js';
11
12
  export class ToolRegistry {
12
13
  tools = new Map();
13
14
  register(tool) {
@@ -71,6 +72,7 @@ export function createDefaultRegistry() {
71
72
  registry.register(gitStatusTool);
72
73
  registry.register(applyPatchTool);
73
74
  registry.register(writeFileTool);
75
+ registry.register(runCommandTool);
74
76
  return registry;
75
77
  }
76
78
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
+ import type { ToolDefinition } from './types.js';
1
2
  /**
2
- * Spawns a child process and returns stdout as a string.
3
- * Rejects with an Error containing stderr if the process exits with a non-zero code.
3
+ * Spawns a child process and returns { stdout, stderr } as strings.
4
+ * Rejects with an Error if the process exits with a non-zero code or times out.
4
5
  */
5
- export declare function runCommand(command: string, args: string[], cwd: string, timeoutMs?: number): Promise<string>;
6
+ export declare function runCommand(command: string, args: string[], cwd: string, timeoutMs?: number): Promise<{
7
+ stdout: string;
8
+ stderr: string;
9
+ }>;
10
+ export declare const runCommandTool: ToolDefinition;
6
11
  //# sourceMappingURL=run_command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run_command.d.ts","sourceRoot":"","sources":["../../src/tools/run_command.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,SAAS,SAAS,GACjB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
1
+ {"version":3,"file":"run_command.d.ts","sourceRoot":"","sources":["../../src/tools/run_command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAgB1E;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,SAAS,SAAS,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC7C;AAOD,eAAO,MAAM,cAAc,EAAE,cAiF5B,CAAC"}