micro-models-agent 0.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 (242) hide show
  1. package/README.md +311 -0
  2. package/dist/agent/context.d.ts +18 -0
  3. package/dist/agent/context.d.ts.map +1 -0
  4. package/dist/agent/context.js +155 -0
  5. package/dist/agent/context.js.map +1 -0
  6. package/dist/agent/loop.d.ts +15 -0
  7. package/dist/agent/loop.d.ts.map +1 -0
  8. package/dist/agent/loop.js +575 -0
  9. package/dist/agent/loop.js.map +1 -0
  10. package/dist/agent/memory.d.ts +23 -0
  11. package/dist/agent/memory.d.ts.map +1 -0
  12. package/dist/agent/memory.js +244 -0
  13. package/dist/agent/memory.js.map +1 -0
  14. package/dist/agent/system-prompt.d.ts +3 -0
  15. package/dist/agent/system-prompt.d.ts.map +1 -0
  16. package/dist/agent/system-prompt.js +185 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/blog-api/types/index.d.ts +2 -0
  19. package/dist/blog-api/types/index.d.ts.map +1 -0
  20. package/dist/blog-api/types/index.js +2 -0
  21. package/dist/blog-api/types/index.js.map +1 -0
  22. package/dist/cli/config.d.ts +3 -0
  23. package/dist/cli/config.d.ts.map +1 -0
  24. package/dist/cli/config.js +25 -0
  25. package/dist/cli/config.js.map +1 -0
  26. package/dist/cli/model.d.ts +3 -0
  27. package/dist/cli/model.d.ts.map +1 -0
  28. package/dist/cli/model.js +144 -0
  29. package/dist/cli/model.js.map +1 -0
  30. package/dist/cli/provider.d.ts +3 -0
  31. package/dist/cli/provider.d.ts.map +1 -0
  32. package/dist/cli/provider.js +78 -0
  33. package/dist/cli/provider.js.map +1 -0
  34. package/dist/cli.d.ts +3 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +88 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/config/config.d.ts +5 -0
  39. package/dist/config/config.d.ts.map +1 -0
  40. package/dist/config/config.js +84 -0
  41. package/dist/config/config.js.map +1 -0
  42. package/dist/config/types.d.ts +38 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +2 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/file-loader.d.ts +12 -0
  47. package/dist/file-loader.d.ts.map +1 -0
  48. package/dist/file-loader.js +115 -0
  49. package/dist/file-loader.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +5 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/indexer/cache.d.ts +27 -0
  55. package/dist/indexer/cache.d.ts.map +1 -0
  56. package/dist/indexer/cache.js +95 -0
  57. package/dist/indexer/cache.js.map +1 -0
  58. package/dist/indexer/code-index.d.ts +27 -0
  59. package/dist/indexer/code-index.d.ts.map +1 -0
  60. package/dist/indexer/code-index.js +197 -0
  61. package/dist/indexer/code-index.js.map +1 -0
  62. package/dist/indexer/project-map.d.ts +14 -0
  63. package/dist/indexer/project-map.d.ts.map +1 -0
  64. package/dist/indexer/project-map.js +157 -0
  65. package/dist/indexer/project-map.js.map +1 -0
  66. package/dist/llm/openai-compat.d.ts +11 -0
  67. package/dist/llm/openai-compat.d.ts.map +1 -0
  68. package/dist/llm/openai-compat.js +81 -0
  69. package/dist/llm/openai-compat.js.map +1 -0
  70. package/dist/llm/provider.d.ts +27 -0
  71. package/dist/llm/provider.d.ts.map +1 -0
  72. package/dist/llm/provider.js +2 -0
  73. package/dist/llm/provider.js.map +1 -0
  74. package/dist/llm/token-counter.d.ts +2 -0
  75. package/dist/llm/token-counter.d.ts.map +1 -0
  76. package/dist/llm/token-counter.js +24 -0
  77. package/dist/llm/token-counter.js.map +1 -0
  78. package/dist/repl/commands.d.ts +37 -0
  79. package/dist/repl/commands.d.ts.map +1 -0
  80. package/dist/repl/commands.js +433 -0
  81. package/dist/repl/commands.js.map +1 -0
  82. package/dist/repl/history.d.ts +19 -0
  83. package/dist/repl/history.d.ts.map +1 -0
  84. package/dist/repl/history.js +29 -0
  85. package/dist/repl/history.js.map +1 -0
  86. package/dist/repl/index.d.ts +5 -0
  87. package/dist/repl/index.d.ts.map +1 -0
  88. package/dist/repl/index.js +86 -0
  89. package/dist/repl/index.js.map +1 -0
  90. package/dist/repl.d.ts +5 -0
  91. package/dist/repl.d.ts.map +1 -0
  92. package/dist/repl.js +472 -0
  93. package/dist/repl.js.map +1 -0
  94. package/dist/session/store.d.ts +34 -0
  95. package/dist/session/store.d.ts.map +1 -0
  96. package/dist/session/store.js +115 -0
  97. package/dist/session/store.js.map +1 -0
  98. package/dist/skills/loader.d.ts +13 -0
  99. package/dist/skills/loader.d.ts.map +1 -0
  100. package/dist/skills/loader.js +122 -0
  101. package/dist/skills/loader.js.map +1 -0
  102. package/dist/styling/engine.d.ts +37 -0
  103. package/dist/styling/engine.d.ts.map +1 -0
  104. package/dist/styling/engine.js +136 -0
  105. package/dist/styling/engine.js.map +1 -0
  106. package/dist/styling/index.d.ts +7 -0
  107. package/dist/styling/index.d.ts.map +1 -0
  108. package/dist/styling/index.js +15 -0
  109. package/dist/styling/index.js.map +1 -0
  110. package/dist/styling/loader.d.ts +4 -0
  111. package/dist/styling/loader.d.ts.map +1 -0
  112. package/dist/styling/loader.js +78 -0
  113. package/dist/styling/loader.js.map +1 -0
  114. package/dist/styling/types.d.ts +46 -0
  115. package/dist/styling/types.d.ts.map +1 -0
  116. package/dist/styling/types.js +2 -0
  117. package/dist/styling/types.js.map +1 -0
  118. package/dist/tools/approve.d.ts +13 -0
  119. package/dist/tools/approve.d.ts.map +1 -0
  120. package/dist/tools/approve.js +32 -0
  121. package/dist/tools/approve.js.map +1 -0
  122. package/dist/tools/bash.d.ts +8 -0
  123. package/dist/tools/bash.d.ts.map +1 -0
  124. package/dist/tools/bash.js +186 -0
  125. package/dist/tools/bash.js.map +1 -0
  126. package/dist/tools/fs/copy-file.d.ts +5 -0
  127. package/dist/tools/fs/copy-file.d.ts.map +1 -0
  128. package/dist/tools/fs/copy-file.js +41 -0
  129. package/dist/tools/fs/copy-file.js.map +1 -0
  130. package/dist/tools/fs/create-dir.d.ts +5 -0
  131. package/dist/tools/fs/create-dir.d.ts.map +1 -0
  132. package/dist/tools/fs/create-dir.js +31 -0
  133. package/dist/tools/fs/create-dir.js.map +1 -0
  134. package/dist/tools/fs/delete-file.d.ts +5 -0
  135. package/dist/tools/fs/delete-file.d.ts.map +1 -0
  136. package/dist/tools/fs/delete-file.js +39 -0
  137. package/dist/tools/fs/delete-file.js.map +1 -0
  138. package/dist/tools/fs/edit-file.d.ts +5 -0
  139. package/dist/tools/fs/edit-file.d.ts.map +1 -0
  140. package/dist/tools/fs/edit-file.js +80 -0
  141. package/dist/tools/fs/edit-file.js.map +1 -0
  142. package/dist/tools/fs/file-info.d.ts +5 -0
  143. package/dist/tools/fs/file-info.d.ts.map +1 -0
  144. package/dist/tools/fs/file-info.js +37 -0
  145. package/dist/tools/fs/file-info.js.map +1 -0
  146. package/dist/tools/fs/glob-search.d.ts +5 -0
  147. package/dist/tools/fs/glob-search.d.ts.map +1 -0
  148. package/dist/tools/fs/glob-search.js +98 -0
  149. package/dist/tools/fs/glob-search.js.map +1 -0
  150. package/dist/tools/fs/grep-search.d.ts +5 -0
  151. package/dist/tools/fs/grep-search.d.ts.map +1 -0
  152. package/dist/tools/fs/grep-search.js +120 -0
  153. package/dist/tools/fs/grep-search.js.map +1 -0
  154. package/dist/tools/fs/list-dir.d.ts +5 -0
  155. package/dist/tools/fs/list-dir.d.ts.map +1 -0
  156. package/dist/tools/fs/list-dir.js +61 -0
  157. package/dist/tools/fs/list-dir.js.map +1 -0
  158. package/dist/tools/fs/move-file.d.ts +5 -0
  159. package/dist/tools/fs/move-file.d.ts.map +1 -0
  160. package/dist/tools/fs/move-file.js +41 -0
  161. package/dist/tools/fs/move-file.js.map +1 -0
  162. package/dist/tools/fs/path-utils.d.ts +30 -0
  163. package/dist/tools/fs/path-utils.d.ts.map +1 -0
  164. package/dist/tools/fs/path-utils.js +81 -0
  165. package/dist/tools/fs/path-utils.js.map +1 -0
  166. package/dist/tools/fs/read-file.d.ts +5 -0
  167. package/dist/tools/fs/read-file.d.ts.map +1 -0
  168. package/dist/tools/fs/read-file.js +51 -0
  169. package/dist/tools/fs/read-file.js.map +1 -0
  170. package/dist/tools/fs/tree.d.ts +5 -0
  171. package/dist/tools/fs/tree.d.ts.map +1 -0
  172. package/dist/tools/fs/tree.js +75 -0
  173. package/dist/tools/fs/tree.js.map +1 -0
  174. package/dist/tools/fs/types.d.ts +7 -0
  175. package/dist/tools/fs/types.d.ts.map +1 -0
  176. package/dist/tools/fs/types.js +9 -0
  177. package/dist/tools/fs/types.js.map +1 -0
  178. package/dist/tools/fs/write-file.d.ts +5 -0
  179. package/dist/tools/fs/write-file.d.ts.map +1 -0
  180. package/dist/tools/fs/write-file.js +58 -0
  181. package/dist/tools/fs/write-file.js.map +1 -0
  182. package/dist/tools/hooks.d.ts +15 -0
  183. package/dist/tools/hooks.d.ts.map +1 -0
  184. package/dist/tools/hooks.js +109 -0
  185. package/dist/tools/hooks.js.map +1 -0
  186. package/dist/tools/mcp.d.ts +22 -0
  187. package/dist/tools/mcp.d.ts.map +1 -0
  188. package/dist/tools/mcp.js +90 -0
  189. package/dist/tools/mcp.js.map +1 -0
  190. package/dist/tools/plan.d.ts +20 -0
  191. package/dist/tools/plan.d.ts.map +1 -0
  192. package/dist/tools/plan.js +86 -0
  193. package/dist/tools/plan.js.map +1 -0
  194. package/dist/tools/question.d.ts +17 -0
  195. package/dist/tools/question.d.ts.map +1 -0
  196. package/dist/tools/question.js +55 -0
  197. package/dist/tools/question.js.map +1 -0
  198. package/dist/tools/registry.d.ts +25 -0
  199. package/dist/tools/registry.d.ts.map +1 -0
  200. package/dist/tools/registry.js +81 -0
  201. package/dist/tools/registry.js.map +1 -0
  202. package/dist/tools/sanitizer.d.ts +7 -0
  203. package/dist/tools/sanitizer.d.ts.map +1 -0
  204. package/dist/tools/sanitizer.js +50 -0
  205. package/dist/tools/sanitizer.js.map +1 -0
  206. package/dist/tools/syntax-check.d.ts +16 -0
  207. package/dist/tools/syntax-check.d.ts.map +1 -0
  208. package/dist/tools/syntax-check.js +265 -0
  209. package/dist/tools/syntax-check.js.map +1 -0
  210. package/dist/tools/todo.d.ts +19 -0
  211. package/dist/tools/todo.d.ts.map +1 -0
  212. package/dist/tools/todo.js +102 -0
  213. package/dist/tools/todo.js.map +1 -0
  214. package/dist/ui/components/diff-view.d.ts +8 -0
  215. package/dist/ui/components/diff-view.d.ts.map +1 -0
  216. package/dist/ui/components/diff-view.js +25 -0
  217. package/dist/ui/components/diff-view.js.map +1 -0
  218. package/dist/ui/components/status-bar.d.ts +3 -0
  219. package/dist/ui/components/status-bar.d.ts.map +1 -0
  220. package/dist/ui/components/status-bar.js +14 -0
  221. package/dist/ui/components/status-bar.js.map +1 -0
  222. package/dist/ui/double-press.d.ts +9 -0
  223. package/dist/ui/double-press.d.ts.map +1 -0
  224. package/dist/ui/double-press.js +18 -0
  225. package/dist/ui/double-press.js.map +1 -0
  226. package/dist/ui/index.d.ts +4 -0
  227. package/dist/ui/index.d.ts.map +1 -0
  228. package/dist/ui/index.js +7 -0
  229. package/dist/ui/index.js.map +1 -0
  230. package/dist/ui/opentui-renderer.d.ts +53 -0
  231. package/dist/ui/opentui-renderer.d.ts.map +1 -0
  232. package/dist/ui/opentui-renderer.js +463 -0
  233. package/dist/ui/opentui-renderer.js.map +1 -0
  234. package/dist/ui/readline-renderer.d.ts +30 -0
  235. package/dist/ui/readline-renderer.d.ts.map +1 -0
  236. package/dist/ui/readline-renderer.js +97 -0
  237. package/dist/ui/readline-renderer.js.map +1 -0
  238. package/dist/ui/renderer.d.ts +35 -0
  239. package/dist/ui/renderer.d.ts.map +1 -0
  240. package/dist/ui/renderer.js +2 -0
  241. package/dist/ui/renderer.js.map +1 -0
  242. package/package.json +41 -0
@@ -0,0 +1,575 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { jsonrepair } from 'jsonrepair';
4
+ import { parseFileRefs } from '../file-loader.js';
5
+ import { ContextManager } from './context.js';
6
+ import { autoLearnFromError } from './memory.js';
7
+ import { loadSkill, loadSkillsFromRefs } from '../skills/loader.js';
8
+ import { runPreToolUseHooks, runPostToolUseHooks } from '../tools/hooks.js';
9
+ import { isMCPCommand, parseMCPCommand, callMCPTool } from '../tools/mcp.js';
10
+ import { createPlan, updatePlanStep, showPlan, clearPlan, parsePlanCommand } from '../tools/plan.js';
11
+ import { addTodo, doneTodo, removeTodo, listTodos, parseTodoCommand } from '../tools/todo.js';
12
+ import { parseQuestionCommand } from '../tools/question.js';
13
+ import { parseApproveCommand } from '../tools/approve.js';
14
+ import { checkFileSyntax } from '../tools/syntax-check.js';
15
+ import { buildSystemPrompt } from './system-prompt.js';
16
+ function extractAllToolCalls(response) {
17
+ const results = [];
18
+ let text = response;
19
+ while (true) {
20
+ const tcStart = text.indexOf('<tool_call>');
21
+ if (tcStart === -1)
22
+ break;
23
+ const tcEnd = text.indexOf('</tool_call>', tcStart);
24
+ let block;
25
+ if (tcEnd !== -1) {
26
+ block = text.slice(tcStart + '<tool_call>'.length, tcEnd);
27
+ text = text.slice(tcEnd + '</tool_call>'.length);
28
+ }
29
+ else {
30
+ block = text.slice(tcStart + '<tool_call>'.length);
31
+ text = '';
32
+ }
33
+ // Strip markdown code fences
34
+ block = block.replace(/```(?:json)?\s*/g, '').replace(/```\s*/g, '');
35
+ // Find JSON object
36
+ const jsonStart = block.indexOf('{');
37
+ if (jsonStart === -1)
38
+ continue;
39
+ let depth = 0;
40
+ let inStr = false;
41
+ let esc = false;
42
+ for (let i = jsonStart; i < block.length; i++) {
43
+ const ch = block[i];
44
+ if (esc) {
45
+ esc = false;
46
+ continue;
47
+ }
48
+ if (ch === '\\' && inStr) {
49
+ esc = true;
50
+ continue;
51
+ }
52
+ if (ch === '"') {
53
+ inStr = !inStr;
54
+ continue;
55
+ }
56
+ if (inStr)
57
+ continue;
58
+ if (ch === '{')
59
+ depth++;
60
+ if (ch === '}')
61
+ depth--;
62
+ if (depth === 0) {
63
+ results.push(block.slice(jsonStart, i + 1));
64
+ break;
65
+ }
66
+ }
67
+ // If no closing brace, take everything
68
+ if (depth > 0 && jsonStart < block.length) {
69
+ results.push(block.slice(jsonStart));
70
+ }
71
+ }
72
+ return results;
73
+ }
74
+ function extractToolCallFallback(response) {
75
+ const patterns = [
76
+ /"name"\s*:\s*"bash"\s*,\s*"arguments"\s*:\s*\{\s*"cmd"\s*:\s*"((?:[^"\\]|\\.)*)"/,
77
+ /"cmd"\s*:\s*"((?:[^"\\]|\\.)*)"/,
78
+ /name['"]\s*:\s*['"]bash['"]\s*,.*?cmd['"]\s*:\s*['"]((?:[^'\\]|\\.)*)['"]/,
79
+ ];
80
+ for (const re of patterns) {
81
+ const m = response.match(re);
82
+ if (m) {
83
+ let cmd = m[1];
84
+ cmd = cmd.replace(/\\n/g, '\n').replace(/\\t/g, '\t').replace(/\\"/g, '"').replace(/\\\\/g, '\\');
85
+ return { name: 'bash', cmd };
86
+ }
87
+ }
88
+ return null;
89
+ }
90
+ function validateToolCall(parsed) {
91
+ if (!parsed || typeof parsed !== 'object') {
92
+ return { valid: false, error: 'Not an object' };
93
+ }
94
+ const VALID_TOOLS = new Set(['bash', 'read_file', 'write_file', 'edit_file', 'list_dir', 'create_dir', 'delete_file', 'copy_file', 'move_file', 'file_info', 'glob_search', 'grep_search', 'tree']);
95
+ if (!parsed.name || !VALID_TOOLS.has(parsed.name)) {
96
+ return { valid: false, error: `Unknown tool: ${parsed.name}` };
97
+ }
98
+ if (!parsed.arguments || typeof parsed.arguments !== 'object') {
99
+ return { valid: false, error: 'Missing arguments' };
100
+ }
101
+ if (parsed.name === 'bash') {
102
+ const cmd = String(parsed.arguments.cmd ?? '').trim();
103
+ if (!cmd) {
104
+ return { valid: false, error: 'Empty command' };
105
+ }
106
+ return { valid: true, name: parsed.name, cmd };
107
+ }
108
+ const REQUIRED_ARGS = {
109
+ read_file: ['path'],
110
+ write_file: ['path', 'content'],
111
+ edit_file: ['path', 'old_string', 'new_string'],
112
+ list_dir: [],
113
+ create_dir: ['path'],
114
+ delete_file: ['path'],
115
+ copy_file: ['source', 'destination'],
116
+ move_file: ['source', 'destination'],
117
+ file_info: ['path'],
118
+ glob_search: ['pattern'],
119
+ grep_search: ['pattern'],
120
+ tree: [],
121
+ };
122
+ const required = REQUIRED_ARGS[parsed.name] ?? [];
123
+ const missing = required.filter(k => {
124
+ const v = parsed.arguments[k];
125
+ return v === undefined || v === null || v === '';
126
+ });
127
+ if (missing.length > 0) {
128
+ return { valid: false, error: `Missing required argument(s): ${missing.join(', ')}. Tool "${parsed.name}" requires: ${required.join(', ')}` };
129
+ }
130
+ return { valid: true, name: parsed.name };
131
+ }
132
+ async function doChat(provider, messages, renderer, signal, retries = 1) {
133
+ for (let attempt = 0; attempt <= retries; attempt++) {
134
+ const startTime = performance.now();
135
+ const fullText = [];
136
+ let started = false;
137
+ if (signal?.aborted)
138
+ return { response: '', genTimeMs: 0 };
139
+ renderer.writeSpinner();
140
+ try {
141
+ let buf = '';
142
+ for await (const chunk of provider.chat(messages, { temperature: 0.7, max_tokens: 8192, signal })) {
143
+ if (!chunk.content)
144
+ continue;
145
+ fullText.push(chunk.content);
146
+ if (!started) {
147
+ renderer.clearSpinner();
148
+ started = true;
149
+ }
150
+ buf += chunk.content;
151
+ while (buf.length > 0) {
152
+ const tcStart = buf.indexOf('<tool_call>');
153
+ const tcEnd = buf.indexOf('</tool_call>');
154
+ if (tcStart === -1 && tcEnd === -1) {
155
+ renderer.writeMarkdownChunk(buf);
156
+ buf = '';
157
+ break;
158
+ }
159
+ if (tcStart !== -1 && (tcEnd === -1 || tcStart < tcEnd)) {
160
+ if (tcStart > 0) {
161
+ renderer.writeMarkdownChunk(buf.slice(0, tcStart));
162
+ }
163
+ buf = buf.slice(tcStart);
164
+ const closeIdx = buf.indexOf('</tool_call>');
165
+ if (closeIdx !== -1) {
166
+ buf = buf.slice(closeIdx + '</tool_call>'.length);
167
+ }
168
+ break;
169
+ }
170
+ if (tcEnd !== -1 && (tcStart === -1 || tcEnd < tcStart)) {
171
+ renderer.writeMarkdownChunk(buf.slice(0, tcEnd));
172
+ buf = buf.slice(tcEnd + '</tool_call>'.length);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (e) {
178
+ if (e.name === 'AbortError') {
179
+ return { response: '', genTimeMs: 0 };
180
+ }
181
+ renderer.writeError(`\n[LLM] ${e.message}`);
182
+ renderer.writeWarning('[LLM] Check that your server is running (LM Studio on localhost:1234 or Ollama)');
183
+ return { response: '', genTimeMs: 0 };
184
+ }
185
+ const genTimeMs = performance.now() - startTime;
186
+ const response = fullText.join('');
187
+ renderer.commitMarkdown();
188
+ if (response.trim()) {
189
+ return { response, genTimeMs };
190
+ }
191
+ if (attempt < retries) {
192
+ renderer.writeDim(`[retry ${attempt + 1}/${retries}]`);
193
+ }
194
+ }
195
+ return { response: '', genTimeMs: 0 };
196
+ }
197
+ export async function runAgentLoop(provider, registry, prompt, contextManager, previousMessages, renderer, providerName, options) {
198
+ const { prompt: enrichedPrompt, files } = await parseFileRefs(prompt);
199
+ const quiet = options?.quiet ?? false;
200
+ const loadedSkills = loadSkillsFromRefs(prompt, process.cwd());
201
+ const loadedSkillNames = new Set(loadedSkills.map(s => s.name));
202
+ if (loadedSkills.length > 0) {
203
+ renderer?.writeInfo(` Loaded ${loadedSkills.length} skill(s): ${loadedSkills.map(s => s.name).join(', ')}`);
204
+ }
205
+ if (files.length > 0) {
206
+ const totalTokens = files.reduce((sum, f) => sum + f.tokens, 0);
207
+ const totalLines = files.reduce((sum, f) => sum + f.content.split('\n').length, 0);
208
+ renderer?.writeInfo(` Loaded ${files.length} files (${totalLines} lines, ~${totalTokens} tokens)`);
209
+ renderer?.writeNewline();
210
+ }
211
+ const systemPrompt = buildSystemPrompt(loadedSkills.length > 0 ? loadedSkills : undefined);
212
+ const messages = [
213
+ { role: 'system', content: systemPrompt },
214
+ ...(previousMessages || []),
215
+ { role: 'user', content: enrichedPrompt },
216
+ ];
217
+ const ctx = contextManager ?? new ContextManager(provider.contextWindow);
218
+ let consecutiveEmpty = 0;
219
+ let pendingSyntaxError = '';
220
+ let aborted = false;
221
+ // Reset abort signal for this run
222
+ if (renderer?.abortSignal === undefined) {
223
+ // Renderer doesn't support abort — fine
224
+ }
225
+ renderer?.updateStatus({
226
+ provider: providerName,
227
+ model: provider.model,
228
+ contextWindow: provider.contextWindow,
229
+ step: 0,
230
+ maxSteps: 25,
231
+ });
232
+ for (let step = 0; step < 25; step++) {
233
+ if (renderer?.abortSignal?.aborted) {
234
+ aborted = true;
235
+ break;
236
+ }
237
+ let skillsAutoLoaded = false;
238
+ await ctx.updateTokens(messages);
239
+ const skillNames = loadedSkills.map(s => s.name).join(', ');
240
+ const usageText = ctx.formatUsage() + (skillNames ? ` │ skills: ${skillNames}` : '');
241
+ renderer?.updateContextUsage(usageText);
242
+ renderer?.updateStatus({
243
+ provider: providerName,
244
+ model: provider.model,
245
+ tokens: ctx.totalTokens,
246
+ contextWindow: provider.contextWindow,
247
+ step: step + 1,
248
+ maxSteps: 25,
249
+ });
250
+ if (ctx.needsCompact && messages.length > 6) {
251
+ const before = messages.length;
252
+ messages.splice(0, messages.length, ...ctx.compact(messages));
253
+ if (!quiet) {
254
+ renderer?.writeBracketTag('compact', `${before} → ${messages.length} messages`);
255
+ }
256
+ await ctx.updateTokens(messages);
257
+ }
258
+ const { response } = await doChat(provider, messages, renderer, renderer?.abortSignal);
259
+ // Auto-load skills if model suggested them in response
260
+ const suggestedSkillRefs = response.matchAll(/@(\w[\w-]*)/g);
261
+ const newSkillNames = [];
262
+ for (const match of suggestedSkillRefs) {
263
+ const name = match[1];
264
+ if (['email', 'api', 'id', 'json', 'url', 'http', 'https', 'localhost'].includes(name))
265
+ continue;
266
+ if (!loadedSkillNames.has(name)) {
267
+ const skill = loadSkill(name, process.cwd());
268
+ if (skill) {
269
+ newSkillNames.push(name);
270
+ loadedSkills.push(skill);
271
+ loadedSkillNames.add(name);
272
+ }
273
+ }
274
+ }
275
+ if (newSkillNames.length > 0) {
276
+ skillsAutoLoaded = true;
277
+ renderer?.writeInfo(` Auto-loaded ${newSkillNames.length} skill(s): ${newSkillNames.join(', ')}`);
278
+ messages[0] = { role: 'system', content: buildSystemPrompt(loadedSkills) };
279
+ messages.push({ role: 'user', content: `[System: Skills loaded: ${newSkillNames.join(', ')}. They are in your context now. IMPORTANT: Use filesystem tools (write_file, create_dir, edit_file, read_file, etc.) for all file operations — NOT bash. Skills show bash examples for reference only. Create a plan and start working NOW — do NOT wait for user confirmation.]` });
280
+ // Force model to continue working after skills are loaded
281
+ continue;
282
+ }
283
+ if (!response.trim()) {
284
+ consecutiveEmpty++;
285
+ const lastMsg = messages[messages.length - 1];
286
+ if (lastMsg?.role === 'tool' && consecutiveEmpty <= 3) {
287
+ const retryPrompt = consecutiveEmpty === 1
288
+ ? 'The tool result is above. Your turn now. Either: (1) call the next tool using <tool_call>{"name":"...","arguments":{...}}</tool_call>, or (2) write a text reply to the user summarizing progress. Do NOT output nothing.'
289
+ : 'You returned an empty response again. You MUST write something now. Example of what to write: "File created. Now I will create the next file..." or call another tool. Silence is not allowed.';
290
+ messages.push({ role: 'user', content: retryPrompt });
291
+ if (!quiet) {
292
+ renderer?.writeDim(` [empty response #${consecutiveEmpty}, retrying]`);
293
+ }
294
+ continue;
295
+ }
296
+ renderer?.writeError(consecutiveEmpty > 3
297
+ ? `[model returned empty response ${consecutiveEmpty} times in a row — stopping]`
298
+ : '[model returned empty response]');
299
+ return { messages };
300
+ }
301
+ consecutiveEmpty = 0;
302
+ messages.push({ role: 'assistant', content: response });
303
+ const allJsonRaw = extractAllToolCalls(response);
304
+ const validCalls = [];
305
+ for (const jsonRaw of allJsonRaw) {
306
+ let p = null;
307
+ try {
308
+ p = JSON.parse(jsonrepair(jsonRaw));
309
+ }
310
+ catch {
311
+ try {
312
+ p = JSON.parse(jsonRaw);
313
+ }
314
+ catch { /* continue */ }
315
+ }
316
+ if (p) {
317
+ const v = validateToolCall(p);
318
+ if (v.valid) {
319
+ validCalls.push({ parsed: p, cmd: v.cmd });
320
+ }
321
+ }
322
+ }
323
+ if (validCalls.length === 0) {
324
+ const fallback = extractToolCallFallback(response);
325
+ if (fallback) {
326
+ validCalls.push({ parsed: { name: 'bash', arguments: { cmd: fallback.cmd } }, cmd: fallback.cmd });
327
+ if (!quiet) {
328
+ renderer?.writeBracketTag('fallback', 'regex extracted command');
329
+ }
330
+ }
331
+ }
332
+ if (validCalls.length === 0) {
333
+ if (!skillsAutoLoaded) {
334
+ return { messages };
335
+ }
336
+ continue;
337
+ }
338
+ for (const call of validCalls) {
339
+ const { parsed, cmd } = call;
340
+ const isBash = parsed.name === 'bash';
341
+ const preview = isBash
342
+ ? (cmd.length > 200 ? cmd.slice(0, 200) + '...' : cmd)
343
+ : JSON.stringify(parsed.arguments);
344
+ const toolId = `call-${Date.now()}-${step}-${Math.random().toString(36).slice(2, 6)}`;
345
+ if (!quiet) {
346
+ renderer?.writeToolHeader(parsed.name);
347
+ renderer?.writeToolPreview(parsed.name, preview);
348
+ }
349
+ const hookCmd = isBash ? cmd : `${parsed.name} ${JSON.stringify(parsed.arguments)}`;
350
+ const preHook = runPreToolUseHooks(process.cwd(), parsed.name, hookCmd);
351
+ if (!preHook.continue) {
352
+ if (!quiet) {
353
+ renderer?.writeBracketTag('hook blocked', preHook.message || '');
354
+ }
355
+ messages.push({ role: 'tool', content: `Hook blocked: ${preHook.message || ''}`, tool_call_id: toolId });
356
+ continue;
357
+ }
358
+ if (pendingSyntaxError && !isBash) {
359
+ const isWriteOp = parsed.name === 'write_file' || parsed.name === 'edit_file';
360
+ if (isWriteOp && String(parsed.arguments.path ?? '') !== pendingSyntaxError) {
361
+ const blocked = `BLOCKED: You have a syntax error in ${pendingSyntaxError}. Fix it first before writing new files.`;
362
+ if (!quiet) {
363
+ renderer?.writeError(` [blocked: fix syntax error in ${pendingSyntaxError} first]`);
364
+ }
365
+ messages.push({ role: 'tool', content: blocked, tool_call_id: toolId });
366
+ continue;
367
+ }
368
+ }
369
+ let toolOutput = '';
370
+ let toolExitCode = 0;
371
+ const toolStart = performance.now();
372
+ // Bash-specific prefix commands (plan/todo/question/approve/mcp)
373
+ if (isBash && cmd.startsWith('plan ')) {
374
+ const planArgs = cmd.slice(5).trim();
375
+ const { action, params } = parsePlanCommand(planArgs);
376
+ if (!quiet) {
377
+ renderer?.writeBracketTag('plan', action);
378
+ }
379
+ switch (action) {
380
+ case 'create':
381
+ toolOutput = createPlan(params[0] || 'Untitled Plan', params.slice(1));
382
+ break;
383
+ case 'done':
384
+ toolOutput = updatePlanStep(parseInt(params[0]) || 0, 'done');
385
+ break;
386
+ case 'progress':
387
+ toolOutput = updatePlanStep(parseInt(params[0]) || 0, 'in_progress');
388
+ break;
389
+ case 'show':
390
+ toolOutput = showPlan();
391
+ break;
392
+ case 'clear':
393
+ toolOutput = clearPlan();
394
+ break;
395
+ default:
396
+ toolOutput = 'Unknown plan action. Use: create, done, progress, show, clear';
397
+ toolExitCode = 1;
398
+ }
399
+ }
400
+ else if (isBash && cmd.startsWith('todo ')) {
401
+ const todoArgs = cmd.slice(5).trim();
402
+ const { action, params } = parseTodoCommand(todoArgs);
403
+ if (!quiet) {
404
+ renderer?.writeBracketTag('todo', action);
405
+ }
406
+ switch (action) {
407
+ case 'add':
408
+ toolOutput = addTodo(params);
409
+ break;
410
+ case 'done':
411
+ toolOutput = doneTodo(params);
412
+ break;
413
+ case 'remove':
414
+ case 'rm':
415
+ toolOutput = removeTodo(params);
416
+ break;
417
+ case 'list':
418
+ case 'ls':
419
+ toolOutput = listTodos();
420
+ break;
421
+ default:
422
+ toolOutput = 'Unknown todo action. Use: add, done, remove, list';
423
+ toolExitCode = 1;
424
+ }
425
+ }
426
+ else if (isBash && cmd.startsWith('question ')) {
427
+ const qArgs = cmd.slice(9).trim();
428
+ const { question, choices } = parseQuestionCommand(qArgs);
429
+ if (!quiet) {
430
+ renderer?.writeBracketTag('question', question);
431
+ }
432
+ messages.push({
433
+ role: 'tool',
434
+ content: `Question asked: ${question}`,
435
+ tool_call_id: toolId,
436
+ });
437
+ return {
438
+ messages,
439
+ questionPending: { question, choices: choices.length > 0 ? choices : undefined },
440
+ };
441
+ }
442
+ else if (isBash && cmd.startsWith('approve ')) {
443
+ const approveArgs = cmd.slice(8).trim();
444
+ const action = parseApproveCommand(approveArgs);
445
+ if (!quiet) {
446
+ renderer?.writeBracketTag('approve', action);
447
+ }
448
+ messages.push({
449
+ role: 'tool',
450
+ content: `Approval requested: ${action}`,
451
+ tool_call_id: toolId,
452
+ });
453
+ return {
454
+ messages,
455
+ questionPending: { question: `Approve: ${action}?`, choices: ['Yes', 'No'] },
456
+ };
457
+ }
458
+ else if (isBash && isMCPCommand(cmd)) {
459
+ const mcpCmd = parseMCPCommand(cmd);
460
+ if (mcpCmd) {
461
+ if (!quiet) {
462
+ renderer?.writeBracketTag('mcp', `${mcpCmd.server}/${mcpCmd.tool}`);
463
+ }
464
+ toolOutput = callMCPTool(process.cwd(), mcpCmd.server, mcpCmd.tool, mcpCmd.args);
465
+ }
466
+ else {
467
+ toolOutput = 'Invalid MCP command. Format: mcp <server> <tool> [args_json]';
468
+ toolExitCode = 1;
469
+ }
470
+ }
471
+ else if (!isBash) {
472
+ const result = await registry.execute({ id: toolId, name: parsed.name, arguments: parsed.arguments });
473
+ toolOutput = result.stdout || result.stderr || '(no output)';
474
+ toolExitCode = result.exitCode;
475
+ }
476
+ else {
477
+ const result = await registry.execute({ id: toolId, name: 'bash', arguments: { cmd, timeout: parsed.arguments?.timeout ?? 120 } });
478
+ toolOutput = result.stdout || result.stderr || '(no output)';
479
+ toolExitCode = result.exitCode;
480
+ }
481
+ const toolTime = ((performance.now() - toolStart) / 1000).toFixed(1);
482
+ if (toolExitCode !== 0) {
483
+ const errText = toolOutput;
484
+ if (!quiet) {
485
+ for (const line of errText.split('\n').slice(0, 5)) {
486
+ renderer?.writeError(` ${line}`);
487
+ }
488
+ }
489
+ autoLearnFromError(hookCmd, toolExitCode !== 0 ? toolOutput : '', '');
490
+ }
491
+ runPostToolUseHooks(process.cwd(), parsed.name, hookCmd, toolOutput, toolExitCode);
492
+ // Syntax check after file write operations
493
+ let hasSyntaxError = false;
494
+ if (toolExitCode === 0) {
495
+ const isWriteOp = isBash
496
+ ? (cmd.match(/Set-Content|Add-Content/))
497
+ : (parsed.name === 'write_file' || parsed.name === 'edit_file');
498
+ if (isWriteOp) {
499
+ const rawPath = isBash
500
+ ? cmd.match(/-Path\s+['"]?([^'"]+\.(?:ts|tsx|js|jsx|json))['"]?/i)?.[1]?.replace(/\\/g, '/')
501
+ : String(parsed.arguments.path ?? '');
502
+ if (rawPath && /\.(ts|tsx|js|jsx|json)$/.test(rawPath)) {
503
+ const { isAbsolute, relative } = await import('node:path');
504
+ const filePath = isAbsolute(rawPath) ? relative(process.cwd(), rawPath).replace(/\\/g, '/') : rawPath;
505
+ const syntaxResult = checkFileSyntax(filePath, process.cwd());
506
+ if (syntaxResult !== 'OK') {
507
+ const errorLines = syntaxResult.split('\n').filter(l => l.trim());
508
+ const shown = errorLines.slice(0, 3);
509
+ const extra = errorLines.length > 3 ? ` (+${errorLines.length - 3} more)` : '';
510
+ if (!quiet) {
511
+ renderer?.writeBracketTag('syntax', `${shown.join('; ')}${extra}`);
512
+ }
513
+ const fullPath = join(process.cwd(), filePath);
514
+ let contextLines = '';
515
+ try {
516
+ const fileContent = readFileSync(fullPath, 'utf-8').split('\n');
517
+ for (const errLine of shown) {
518
+ const lineMatch = errLine.match(/\((\d+),\d+\)/);
519
+ if (lineMatch) {
520
+ const lineNum = parseInt(lineMatch[1]);
521
+ if (lineNum > 0 && lineNum <= fileContent.length) {
522
+ const start = Math.max(0, lineNum - 2);
523
+ const end = Math.min(fileContent.length, lineNum + 1);
524
+ contextLines += `\n--- Line ${lineNum} ---\n`;
525
+ for (let i = start; i < end; i++) {
526
+ const marker = i === lineNum - 1 ? ' >> ' : ' ';
527
+ contextLines += `${marker}${i + 1}: ${fileContent[i]}\n`;
528
+ }
529
+ }
530
+ }
531
+ }
532
+ }
533
+ catch { /* ignore read errors */ }
534
+ toolOutput = `SYNTAX ERROR in ${filePath}:\n${syntaxResult}${contextLines}\n\nDo NOT rewrite the entire file. Use edit_file to fix the specific broken line:\n{"name":"edit_file","arguments":{"path":"${filePath}","old_string":"broken code here","new_string":"fixed code here"}}`;
535
+ hasSyntaxError = true;
536
+ pendingSyntaxError = filePath;
537
+ }
538
+ else {
539
+ if (pendingSyntaxError === filePath) {
540
+ pendingSyntaxError = '';
541
+ }
542
+ }
543
+ }
544
+ }
545
+ }
546
+ if (isBash && cmd.startsWith('plan ') && toolExitCode === 0) {
547
+ const planOutput = showPlan();
548
+ if (planOutput && !planOutput.startsWith('No active plan')) {
549
+ renderer?.writeNewline();
550
+ renderer?.writeLine(planOutput);
551
+ }
552
+ }
553
+ if (isBash && cmd.startsWith('todo ') && toolExitCode === 0) {
554
+ const todoOutput = listTodos();
555
+ if (todoOutput) {
556
+ renderer?.writeNewline();
557
+ renderer?.writeLine(todoOutput);
558
+ }
559
+ }
560
+ messages.push({
561
+ role: 'tool',
562
+ content: toolOutput.slice(0, 4000),
563
+ tool_call_id: toolId,
564
+ });
565
+ if (hasSyntaxError) {
566
+ break;
567
+ }
568
+ }
569
+ }
570
+ if (aborted) {
571
+ renderer?.writeWarning('Agent stopped (double ESC)');
572
+ }
573
+ return { messages };
574
+ }
575
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface MemoryEntry {
2
+ type: string;
3
+ date: string;
4
+ title: string;
5
+ content: string;
6
+ }
7
+ export declare function ensureMemoryDir(): void;
8
+ export declare function getMemoryPath(type: string): string;
9
+ export declare function loadMemory(type: string): string;
10
+ export declare function saveMemory(type: string, title: string, content: string): void;
11
+ export declare function searchMemory(query: string): {
12
+ type: string;
13
+ match: string;
14
+ }[];
15
+ export declare function loadAllMemory(): string;
16
+ export declare function removeMemoryEntry(type: string, lineNum: number): boolean;
17
+ export declare function exportMemory(): string | null;
18
+ export declare function autoLearnFromError(command: string, stderr: string, stdout: string): void;
19
+ export declare function autoLearnFromEdit(filePath: string, content: string): void;
20
+ export declare function getMemoryTokenEstimate(): number;
21
+ export declare function trimMemoryToBudget(): boolean;
22
+ export declare function loadAllMemoryDetailed(): string;
23
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agent/memory.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY7E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAuB7E;AAED,wBAAgB,aAAa,IAAI,MAAM,CAkBtC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA+BxE;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAqB5C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAwBxF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAyBzE;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAU/C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAuB5C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAqB9C"}