micro-models-agent 0.6.4 → 0.7.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 (472) hide show
  1. package/README.md +286 -436
  2. package/dist/main.js +11706 -0
  3. package/dist/skills/builtin/git.md +36 -0
  4. package/dist/skills/builtin/typescript.md +35 -0
  5. package/package.json +41 -47
  6. package/dist/agent/context.d.ts +0 -73
  7. package/dist/agent/context.d.ts.map +0 -1
  8. package/dist/agent/context.js +0 -262
  9. package/dist/agent/context.js.map +0 -1
  10. package/dist/agent/error-escalation.d.ts +0 -19
  11. package/dist/agent/error-escalation.d.ts.map +0 -1
  12. package/dist/agent/error-escalation.js +0 -168
  13. package/dist/agent/error-escalation.js.map +0 -1
  14. package/dist/agent/loop.d.ts +0 -46
  15. package/dist/agent/loop.d.ts.map +0 -1
  16. package/dist/agent/loop.js +0 -1043
  17. package/dist/agent/loop.js.map +0 -1
  18. package/dist/agent/memory.d.ts +0 -40
  19. package/dist/agent/memory.d.ts.map +0 -1
  20. package/dist/agent/memory.js +0 -231
  21. package/dist/agent/memory.js.map +0 -1
  22. package/dist/agent/modes/applier.d.ts +0 -43
  23. package/dist/agent/modes/applier.d.ts.map +0 -1
  24. package/dist/agent/modes/applier.js +0 -30
  25. package/dist/agent/modes/applier.js.map +0 -1
  26. package/dist/agent/modes/registry.d.ts +0 -35
  27. package/dist/agent/modes/registry.d.ts.map +0 -1
  28. package/dist/agent/modes/registry.js +0 -169
  29. package/dist/agent/modes/registry.js.map +0 -1
  30. package/dist/agent/modes/types.d.ts +0 -61
  31. package/dist/agent/modes/types.d.ts.map +0 -1
  32. package/dist/agent/modes/types.js +0 -13
  33. package/dist/agent/modes/types.js.map +0 -1
  34. package/dist/agent/react-loop.d.ts +0 -65
  35. package/dist/agent/react-loop.d.ts.map +0 -1
  36. package/dist/agent/react-loop.js +0 -101
  37. package/dist/agent/react-loop.js.map +0 -1
  38. package/dist/agent/system-prompt.d.ts +0 -26
  39. package/dist/agent/system-prompt.d.ts.map +0 -1
  40. package/dist/agent/system-prompt.js +0 -478
  41. package/dist/agent/system-prompt.js.map +0 -1
  42. package/dist/agent/tool-executor.d.ts +0 -36
  43. package/dist/agent/tool-executor.d.ts.map +0 -1
  44. package/dist/agent/tool-executor.js +0 -346
  45. package/dist/agent/tool-executor.js.map +0 -1
  46. package/dist/agent/user-profile.d.ts +0 -26
  47. package/dist/agent/user-profile.d.ts.map +0 -1
  48. package/dist/agent/user-profile.js +0 -169
  49. package/dist/agent/user-profile.js.map +0 -1
  50. package/dist/agent/write-enforcer.d.ts +0 -7
  51. package/dist/agent/write-enforcer.d.ts.map +0 -1
  52. package/dist/agent/write-enforcer.js +0 -8
  53. package/dist/agent/write-enforcer.js.map +0 -1
  54. package/dist/cli/config.d.ts +0 -13
  55. package/dist/cli/config.d.ts.map +0 -1
  56. package/dist/cli/config.js +0 -82
  57. package/dist/cli/config.js.map +0 -1
  58. package/dist/cli/model.d.ts +0 -13
  59. package/dist/cli/model.d.ts.map +0 -1
  60. package/dist/cli/model.js +0 -170
  61. package/dist/cli/model.js.map +0 -1
  62. package/dist/cli/provider.d.ts +0 -12
  63. package/dist/cli/provider.d.ts.map +0 -1
  64. package/dist/cli/provider.js +0 -90
  65. package/dist/cli/provider.js.map +0 -1
  66. package/dist/cli/update.d.ts +0 -12
  67. package/dist/cli/update.d.ts.map +0 -1
  68. package/dist/cli/update.js +0 -69
  69. package/dist/cli/update.js.map +0 -1
  70. package/dist/cli.d.ts +0 -3
  71. package/dist/cli.d.ts.map +0 -1
  72. package/dist/cli.js +0 -310
  73. package/dist/cli.js.map +0 -1
  74. package/dist/config/config.d.ts +0 -59
  75. package/dist/config/config.d.ts.map +0 -1
  76. package/dist/config/config.js +0 -232
  77. package/dist/config/config.js.map +0 -1
  78. package/dist/config/types.d.ts +0 -122
  79. package/dist/config/types.d.ts.map +0 -1
  80. package/dist/config/types.js +0 -13
  81. package/dist/config/types.js.map +0 -1
  82. package/dist/file-loader.d.ts +0 -20
  83. package/dist/file-loader.d.ts.map +0 -1
  84. package/dist/file-loader.js +0 -121
  85. package/dist/file-loader.js.map +0 -1
  86. package/dist/index.d.ts +0 -9
  87. package/dist/index.d.ts.map +0 -1
  88. package/dist/index.js +0 -11
  89. package/dist/index.js.map +0 -1
  90. package/dist/indexer/cache.d.ts +0 -34
  91. package/dist/indexer/cache.d.ts.map +0 -1
  92. package/dist/indexer/cache.js +0 -221
  93. package/dist/indexer/cache.js.map +0 -1
  94. package/dist/indexer/code-index.d.ts +0 -27
  95. package/dist/indexer/code-index.d.ts.map +0 -1
  96. package/dist/indexer/code-index.js +0 -219
  97. package/dist/indexer/code-index.js.map +0 -1
  98. package/dist/indexer/project-map.d.ts +0 -23
  99. package/dist/indexer/project-map.d.ts.map +0 -1
  100. package/dist/indexer/project-map.js +0 -264
  101. package/dist/indexer/project-map.js.map +0 -1
  102. package/dist/llm/lmstudio-native.d.ts +0 -10
  103. package/dist/llm/lmstudio-native.d.ts.map +0 -1
  104. package/dist/llm/lmstudio-native.js +0 -179
  105. package/dist/llm/lmstudio-native.js.map +0 -1
  106. package/dist/llm/openai-compat.d.ts +0 -11
  107. package/dist/llm/openai-compat.d.ts.map +0 -1
  108. package/dist/llm/openai-compat.js +0 -161
  109. package/dist/llm/openai-compat.js.map +0 -1
  110. package/dist/llm/provider.d.ts +0 -46
  111. package/dist/llm/provider.d.ts.map +0 -1
  112. package/dist/llm/provider.js +0 -13
  113. package/dist/llm/provider.js.map +0 -1
  114. package/dist/llm/token-counter.d.ts +0 -15
  115. package/dist/llm/token-counter.d.ts.map +0 -1
  116. package/dist/llm/token-counter.js +0 -51
  117. package/dist/llm/token-counter.js.map +0 -1
  118. package/dist/logger.d.ts +0 -24
  119. package/dist/logger.d.ts.map +0 -1
  120. package/dist/logger.js +0 -156
  121. package/dist/logger.js.map +0 -1
  122. package/dist/plugins/adapters/hooks-adapter.d.ts +0 -12
  123. package/dist/plugins/adapters/hooks-adapter.d.ts.map +0 -1
  124. package/dist/plugins/adapters/hooks-adapter.js +0 -23
  125. package/dist/plugins/adapters/hooks-adapter.js.map +0 -1
  126. package/dist/plugins/builtin/lint-on-write/index.d.ts +0 -12
  127. package/dist/plugins/builtin/lint-on-write/index.d.ts.map +0 -1
  128. package/dist/plugins/builtin/lint-on-write/index.js +0 -98
  129. package/dist/plugins/builtin/lint-on-write/index.js.map +0 -1
  130. package/dist/plugins/builtin/lint-on-write/index.ts +0 -97
  131. package/dist/plugins/builtin/lint-on-write/manifest.json +0 -13
  132. package/dist/plugins/builtin/notify/index.d.ts +0 -11
  133. package/dist/plugins/builtin/notify/index.d.ts.map +0 -1
  134. package/dist/plugins/builtin/notify/index.js +0 -102
  135. package/dist/plugins/builtin/notify/index.js.map +0 -1
  136. package/dist/plugins/builtin/notify/index.ts +0 -105
  137. package/dist/plugins/builtin/notify/manifest.json +0 -16
  138. package/dist/plugins/loader.d.ts +0 -18
  139. package/dist/plugins/loader.d.ts.map +0 -1
  140. package/dist/plugins/loader.js +0 -182
  141. package/dist/plugins/loader.js.map +0 -1
  142. package/dist/plugins/manager.d.ts +0 -55
  143. package/dist/plugins/manager.d.ts.map +0 -1
  144. package/dist/plugins/manager.js +0 -190
  145. package/dist/plugins/manager.js.map +0 -1
  146. package/dist/plugins/types.d.ts +0 -76
  147. package/dist/plugins/types.d.ts.map +0 -1
  148. package/dist/plugins/types.js +0 -8
  149. package/dist/plugins/types.js.map +0 -1
  150. package/dist/repl/commands.d.ts +0 -63
  151. package/dist/repl/commands.d.ts.map +0 -1
  152. package/dist/repl/commands.js +0 -1070
  153. package/dist/repl/commands.js.map +0 -1
  154. package/dist/repl/history.d.ts +0 -32
  155. package/dist/repl/history.d.ts.map +0 -1
  156. package/dist/repl/history.js +0 -40
  157. package/dist/repl/history.js.map +0 -1
  158. package/dist/repl/index.d.ts +0 -14
  159. package/dist/repl/index.d.ts.map +0 -1
  160. package/dist/repl/index.js +0 -235
  161. package/dist/repl/index.js.map +0 -1
  162. package/dist/session/store.d.ts +0 -46
  163. package/dist/session/store.d.ts.map +0 -1
  164. package/dist/session/store.js +0 -154
  165. package/dist/session/store.js.map +0 -1
  166. package/dist/setup-wizard.d.ts +0 -3
  167. package/dist/setup-wizard.d.ts.map +0 -1
  168. package/dist/setup-wizard.js +0 -410
  169. package/dist/setup-wizard.js.map +0 -1
  170. package/dist/skills/builtin/agent-test/SKILL.md +0 -68
  171. package/dist/skills/builtin/cli-expert/SKILL.md +0 -848
  172. package/dist/skills/builtin/code-review/SKILL.md +0 -424
  173. package/dist/skills/builtin/git-expert/SKILL.md +0 -522
  174. package/dist/skills/builtin/grill-me/SKILL.md +0 -46
  175. package/dist/skills/builtin/jest-testing-expert/SKILL.md +0 -957
  176. package/dist/skills/builtin/nodejs-expert/SKILL.md +0 -192
  177. package/dist/skills/builtin/systematic-debugging/SKILL.md +0 -296
  178. package/dist/skills/builtin/test-driven-development/SKILL.md +0 -371
  179. package/dist/skills/builtin/typescript-expert/SKILL.md +0 -429
  180. package/dist/skills/builtin/web-scraping/SKILL.md +0 -422
  181. package/dist/skills/loader.d.ts +0 -49
  182. package/dist/skills/loader.d.ts.map +0 -1
  183. package/dist/skills/loader.js +0 -401
  184. package/dist/skills/loader.js.map +0 -1
  185. package/dist/styling/engine.d.ts +0 -39
  186. package/dist/styling/engine.d.ts.map +0 -1
  187. package/dist/styling/engine.js +0 -122
  188. package/dist/styling/engine.js.map +0 -1
  189. package/dist/styling/index.d.ts +0 -15
  190. package/dist/styling/index.d.ts.map +0 -1
  191. package/dist/styling/index.js +0 -40
  192. package/dist/styling/index.js.map +0 -1
  193. package/dist/styling/loader.d.ts +0 -9
  194. package/dist/styling/loader.d.ts.map +0 -1
  195. package/dist/styling/loader.js +0 -169
  196. package/dist/styling/loader.js.map +0 -1
  197. package/dist/styling/types.d.ts +0 -64
  198. package/dist/styling/types.d.ts.map +0 -1
  199. package/dist/styling/types.js +0 -12
  200. package/dist/styling/types.js.map +0 -1
  201. package/dist/subagent/chat.d.ts +0 -19
  202. package/dist/subagent/chat.d.ts.map +0 -1
  203. package/dist/subagent/chat.js +0 -279
  204. package/dist/subagent/chat.js.map +0 -1
  205. package/dist/subagent/context.d.ts +0 -9
  206. package/dist/subagent/context.d.ts.map +0 -1
  207. package/dist/subagent/context.js +0 -75
  208. package/dist/subagent/context.js.map +0 -1
  209. package/dist/subagent/definition.d.ts +0 -7
  210. package/dist/subagent/definition.d.ts.map +0 -1
  211. package/dist/subagent/definition.js +0 -26
  212. package/dist/subagent/definition.js.map +0 -1
  213. package/dist/subagent/errors.d.ts +0 -24
  214. package/dist/subagent/errors.d.ts.map +0 -1
  215. package/dist/subagent/errors.js +0 -85
  216. package/dist/subagent/errors.js.map +0 -1
  217. package/dist/subagent/validation.d.ts +0 -17
  218. package/dist/subagent/validation.d.ts.map +0 -1
  219. package/dist/subagent/validation.js +0 -83
  220. package/dist/subagent/validation.js.map +0 -1
  221. package/dist/tools/adapters/bash-to-fs.d.ts +0 -20
  222. package/dist/tools/adapters/bash-to-fs.d.ts.map +0 -1
  223. package/dist/tools/adapters/bash-to-fs.js +0 -74
  224. package/dist/tools/adapters/bash-to-fs.js.map +0 -1
  225. package/dist/tools/adapters/content-sanitizer.d.ts +0 -13
  226. package/dist/tools/adapters/content-sanitizer.d.ts.map +0 -1
  227. package/dist/tools/adapters/content-sanitizer.js +0 -73
  228. package/dist/tools/adapters/content-sanitizer.js.map +0 -1
  229. package/dist/tools/adapters/grounding-fixer.d.ts +0 -15
  230. package/dist/tools/adapters/grounding-fixer.d.ts.map +0 -1
  231. package/dist/tools/adapters/grounding-fixer.js +0 -57
  232. package/dist/tools/adapters/grounding-fixer.js.map +0 -1
  233. package/dist/tools/adapters/index.d.ts +0 -6
  234. package/dist/tools/adapters/index.d.ts.map +0 -1
  235. package/dist/tools/adapters/index.js +0 -5
  236. package/dist/tools/adapters/index.js.map +0 -1
  237. package/dist/tools/adapters/pipeline.d.ts +0 -34
  238. package/dist/tools/adapters/pipeline.d.ts.map +0 -1
  239. package/dist/tools/adapters/pipeline.js +0 -58
  240. package/dist/tools/adapters/pipeline.js.map +0 -1
  241. package/dist/tools/adapters/types.d.ts +0 -46
  242. package/dist/tools/adapters/types.d.ts.map +0 -1
  243. package/dist/tools/adapters/types.js +0 -2
  244. package/dist/tools/adapters/types.js.map +0 -1
  245. package/dist/tools/approve.d.ts +0 -27
  246. package/dist/tools/approve.d.ts.map +0 -1
  247. package/dist/tools/approve.js +0 -45
  248. package/dist/tools/approve.js.map +0 -1
  249. package/dist/tools/bash.d.ts +0 -25
  250. package/dist/tools/bash.d.ts.map +0 -1
  251. package/dist/tools/bash.js +0 -292
  252. package/dist/tools/bash.js.map +0 -1
  253. package/dist/tools/fs/copy-file.d.ts +0 -13
  254. package/dist/tools/fs/copy-file.d.ts.map +0 -1
  255. package/dist/tools/fs/copy-file.js +0 -54
  256. package/dist/tools/fs/copy-file.js.map +0 -1
  257. package/dist/tools/fs/create-dir.d.ts +0 -13
  258. package/dist/tools/fs/create-dir.d.ts.map +0 -1
  259. package/dist/tools/fs/create-dir.js +0 -44
  260. package/dist/tools/fs/create-dir.js.map +0 -1
  261. package/dist/tools/fs/delete-file.d.ts +0 -13
  262. package/dist/tools/fs/delete-file.d.ts.map +0 -1
  263. package/dist/tools/fs/delete-file.js +0 -52
  264. package/dist/tools/fs/delete-file.js.map +0 -1
  265. package/dist/tools/fs/edit-file.d.ts +0 -15
  266. package/dist/tools/fs/edit-file.d.ts.map +0 -1
  267. package/dist/tools/fs/edit-file.js +0 -95
  268. package/dist/tools/fs/edit-file.js.map +0 -1
  269. package/dist/tools/fs/file-info.d.ts +0 -13
  270. package/dist/tools/fs/file-info.d.ts.map +0 -1
  271. package/dist/tools/fs/file-info.js +0 -50
  272. package/dist/tools/fs/file-info.js.map +0 -1
  273. package/dist/tools/fs/glob-search.d.ts +0 -13
  274. package/dist/tools/fs/glob-search.d.ts.map +0 -1
  275. package/dist/tools/fs/glob-search.js +0 -112
  276. package/dist/tools/fs/glob-search.js.map +0 -1
  277. package/dist/tools/fs/grep-search.d.ts +0 -14
  278. package/dist/tools/fs/grep-search.d.ts.map +0 -1
  279. package/dist/tools/fs/grep-search.js +0 -135
  280. package/dist/tools/fs/grep-search.js.map +0 -1
  281. package/dist/tools/fs/list-dir.d.ts +0 -13
  282. package/dist/tools/fs/list-dir.d.ts.map +0 -1
  283. package/dist/tools/fs/list-dir.js +0 -74
  284. package/dist/tools/fs/list-dir.js.map +0 -1
  285. package/dist/tools/fs/move-file.d.ts +0 -13
  286. package/dist/tools/fs/move-file.d.ts.map +0 -1
  287. package/dist/tools/fs/move-file.js +0 -54
  288. package/dist/tools/fs/move-file.js.map +0 -1
  289. package/dist/tools/fs/path-utils.d.ts +0 -51
  290. package/dist/tools/fs/path-utils.d.ts.map +0 -1
  291. package/dist/tools/fs/path-utils.js +0 -103
  292. package/dist/tools/fs/path-utils.js.map +0 -1
  293. package/dist/tools/fs/read-file.d.ts +0 -13
  294. package/dist/tools/fs/read-file.d.ts.map +0 -1
  295. package/dist/tools/fs/read-file.js +0 -64
  296. package/dist/tools/fs/read-file.js.map +0 -1
  297. package/dist/tools/fs/tree.d.ts +0 -13
  298. package/dist/tools/fs/tree.d.ts.map +0 -1
  299. package/dist/tools/fs/tree.js +0 -89
  300. package/dist/tools/fs/tree.js.map +0 -1
  301. package/dist/tools/fs/types.d.ts +0 -14
  302. package/dist/tools/fs/types.d.ts.map +0 -1
  303. package/dist/tools/fs/types.js +0 -11
  304. package/dist/tools/fs/types.js.map +0 -1
  305. package/dist/tools/fs/write-file.d.ts +0 -14
  306. package/dist/tools/fs/write-file.d.ts.map +0 -1
  307. package/dist/tools/fs/write-file.js +0 -83
  308. package/dist/tools/fs/write-file.js.map +0 -1
  309. package/dist/tools/hooks.d.ts +0 -44
  310. package/dist/tools/hooks.d.ts.map +0 -1
  311. package/dist/tools/hooks.js +0 -217
  312. package/dist/tools/hooks.js.map +0 -1
  313. package/dist/tools/id-gen.d.ts +0 -4
  314. package/dist/tools/id-gen.d.ts.map +0 -1
  315. package/dist/tools/id-gen.js +0 -12
  316. package/dist/tools/id-gen.js.map +0 -1
  317. package/dist/tools/mcp.d.ts +0 -36
  318. package/dist/tools/mcp.d.ts.map +0 -1
  319. package/dist/tools/mcp.js +0 -93
  320. package/dist/tools/mcp.js.map +0 -1
  321. package/dist/tools/native/approve.d.ts +0 -11
  322. package/dist/tools/native/approve.d.ts.map +0 -1
  323. package/dist/tools/native/approve.js +0 -39
  324. package/dist/tools/native/approve.js.map +0 -1
  325. package/dist/tools/native/plan.d.ts +0 -10
  326. package/dist/tools/native/plan.d.ts.map +0 -1
  327. package/dist/tools/native/plan.js +0 -115
  328. package/dist/tools/native/plan.js.map +0 -1
  329. package/dist/tools/native/project-map.d.ts +0 -15
  330. package/dist/tools/native/project-map.d.ts.map +0 -1
  331. package/dist/tools/native/project-map.js +0 -203
  332. package/dist/tools/native/project-map.js.map +0 -1
  333. package/dist/tools/native/question.d.ts +0 -11
  334. package/dist/tools/native/question.d.ts.map +0 -1
  335. package/dist/tools/native/question.js +0 -41
  336. package/dist/tools/native/question.js.map +0 -1
  337. package/dist/tools/native/scaffold.d.ts +0 -5
  338. package/dist/tools/native/scaffold.d.ts.map +0 -1
  339. package/dist/tools/native/scaffold.js +0 -246
  340. package/dist/tools/native/scaffold.js.map +0 -1
  341. package/dist/tools/native/theme.d.ts +0 -10
  342. package/dist/tools/native/theme.d.ts.map +0 -1
  343. package/dist/tools/native/theme.js +0 -101
  344. package/dist/tools/native/theme.js.map +0 -1
  345. package/dist/tools/native/todo.d.ts +0 -10
  346. package/dist/tools/native/todo.d.ts.map +0 -1
  347. package/dist/tools/native/todo.js +0 -58
  348. package/dist/tools/native/todo.js.map +0 -1
  349. package/dist/tools/native/user-profile.d.ts +0 -10
  350. package/dist/tools/native/user-profile.d.ts.map +0 -1
  351. package/dist/tools/native/user-profile.js +0 -58
  352. package/dist/tools/native/user-profile.js.map +0 -1
  353. package/dist/tools/parse-tool-call.d.ts +0 -11
  354. package/dist/tools/parse-tool-call.d.ts.map +0 -1
  355. package/dist/tools/parse-tool-call.js +0 -87
  356. package/dist/tools/parse-tool-call.js.map +0 -1
  357. package/dist/tools/plan.d.ts +0 -40
  358. package/dist/tools/plan.d.ts.map +0 -1
  359. package/dist/tools/plan.js +0 -143
  360. package/dist/tools/plan.js.map +0 -1
  361. package/dist/tools/question.d.ts +0 -33
  362. package/dist/tools/question.d.ts.map +0 -1
  363. package/dist/tools/question.js +0 -62
  364. package/dist/tools/question.js.map +0 -1
  365. package/dist/tools/registry.d.ts +0 -37
  366. package/dist/tools/registry.d.ts.map +0 -1
  367. package/dist/tools/registry.js +0 -97
  368. package/dist/tools/registry.js.map +0 -1
  369. package/dist/tools/sanitizer.d.ts +0 -30
  370. package/dist/tools/sanitizer.d.ts.map +0 -1
  371. package/dist/tools/sanitizer.js +0 -77
  372. package/dist/tools/sanitizer.js.map +0 -1
  373. package/dist/tools/subagent.d.ts +0 -39
  374. package/dist/tools/subagent.d.ts.map +0 -1
  375. package/dist/tools/subagent.js +0 -225
  376. package/dist/tools/subagent.js.map +0 -1
  377. package/dist/tools/syntax-check.d.ts +0 -32
  378. package/dist/tools/syntax-check.d.ts.map +0 -1
  379. package/dist/tools/syntax-check.js +0 -272
  380. package/dist/tools/syntax-check.js.map +0 -1
  381. package/dist/tools/todo.d.ts +0 -28
  382. package/dist/tools/todo.d.ts.map +0 -1
  383. package/dist/tools/todo.js +0 -125
  384. package/dist/tools/todo.js.map +0 -1
  385. package/dist/tools/types.d.ts +0 -51
  386. package/dist/tools/types.d.ts.map +0 -1
  387. package/dist/tools/types.js +0 -2
  388. package/dist/tools/types.js.map +0 -1
  389. package/dist/tools/web-browse.d.ts +0 -5
  390. package/dist/tools/web-browse.d.ts.map +0 -1
  391. package/dist/tools/web-browse.js +0 -757
  392. package/dist/tools/web-browse.js.map +0 -1
  393. package/dist/tools/web-fetch.d.ts +0 -19
  394. package/dist/tools/web-fetch.d.ts.map +0 -1
  395. package/dist/tools/web-fetch.js +0 -90
  396. package/dist/tools/web-fetch.js.map +0 -1
  397. package/dist/tools/web-search.d.ts +0 -19
  398. package/dist/tools/web-search.d.ts.map +0 -1
  399. package/dist/tools/web-search.js +0 -97
  400. package/dist/tools/web-search.js.map +0 -1
  401. package/dist/ui/components/status-bar.d.ts +0 -11
  402. package/dist/ui/components/status-bar.d.ts.map +0 -1
  403. package/dist/ui/components/status-bar.js +0 -20
  404. package/dist/ui/components/status-bar.js.map +0 -1
  405. package/dist/ui/index.d.ts +0 -8
  406. package/dist/ui/index.d.ts.map +0 -1
  407. package/dist/ui/index.js +0 -9
  408. package/dist/ui/index.js.map +0 -1
  409. package/dist/ui/ink/components/App.d.ts +0 -98
  410. package/dist/ui/ink/components/App.d.ts.map +0 -1
  411. package/dist/ui/ink/components/App.js +0 -212
  412. package/dist/ui/ink/components/App.js.map +0 -1
  413. package/dist/ui/ink/components/Conversation.d.ts +0 -20
  414. package/dist/ui/ink/components/Conversation.d.ts.map +0 -1
  415. package/dist/ui/ink/components/Conversation.js +0 -15
  416. package/dist/ui/ink/components/Conversation.js.map +0 -1
  417. package/dist/ui/ink/components/MessageBlock.d.ts +0 -27
  418. package/dist/ui/ink/components/MessageBlock.d.ts.map +0 -1
  419. package/dist/ui/ink/components/MessageBlock.js +0 -41
  420. package/dist/ui/ink/components/MessageBlock.js.map +0 -1
  421. package/dist/ui/ink/components/PromptInput.d.ts +0 -25
  422. package/dist/ui/ink/components/PromptInput.d.ts.map +0 -1
  423. package/dist/ui/ink/components/PromptInput.js +0 -167
  424. package/dist/ui/ink/components/PromptInput.js.map +0 -1
  425. package/dist/ui/ink/components/SelectInput.d.ts +0 -9
  426. package/dist/ui/ink/components/SelectInput.d.ts.map +0 -1
  427. package/dist/ui/ink/components/SelectInput.js +0 -30
  428. package/dist/ui/ink/components/SelectInput.js.map +0 -1
  429. package/dist/ui/ink/components/StatusBar.d.ts +0 -14
  430. package/dist/ui/ink/components/StatusBar.d.ts.map +0 -1
  431. package/dist/ui/ink/components/StatusBar.js +0 -20
  432. package/dist/ui/ink/components/StatusBar.js.map +0 -1
  433. package/dist/ui/ink/components/StreamBlock.d.ts +0 -8
  434. package/dist/ui/ink/components/StreamBlock.d.ts.map +0 -1
  435. package/dist/ui/ink/components/StreamBlock.js +0 -15
  436. package/dist/ui/ink/components/StreamBlock.js.map +0 -1
  437. package/dist/ui/ink/components/Tags.d.ts +0 -26
  438. package/dist/ui/ink/components/Tags.d.ts.map +0 -1
  439. package/dist/ui/ink/components/Tags.js +0 -37
  440. package/dist/ui/ink/components/Tags.js.map +0 -1
  441. package/dist/ui/ink/components/ToolCallBlock.d.ts +0 -31
  442. package/dist/ui/ink/components/ToolCallBlock.d.ts.map +0 -1
  443. package/dist/ui/ink/components/ToolCallBlock.js +0 -17
  444. package/dist/ui/ink/components/ToolCallBlock.js.map +0 -1
  445. package/dist/ui/ink/renderer.d.ts +0 -69
  446. package/dist/ui/ink/renderer.d.ts.map +0 -1
  447. package/dist/ui/ink/renderer.js +0 -142
  448. package/dist/ui/ink/renderer.js.map +0 -1
  449. package/dist/ui/ink/theme.d.ts +0 -28
  450. package/dist/ui/ink/theme.d.ts.map +0 -1
  451. package/dist/ui/ink/theme.js +0 -45
  452. package/dist/ui/ink/theme.js.map +0 -1
  453. package/dist/ui/md-formatter.d.ts +0 -16
  454. package/dist/ui/md-formatter.d.ts.map +0 -1
  455. package/dist/ui/md-formatter.js +0 -448
  456. package/dist/ui/md-formatter.js.map +0 -1
  457. package/dist/ui/readline-renderer.d.ts +0 -45
  458. package/dist/ui/readline-renderer.d.ts.map +0 -1
  459. package/dist/ui/readline-renderer.js +0 -181
  460. package/dist/ui/readline-renderer.js.map +0 -1
  461. package/dist/ui/renderer.d.ts +0 -66
  462. package/dist/ui/renderer.d.ts.map +0 -1
  463. package/dist/ui/renderer.js +0 -16
  464. package/dist/ui/renderer.js.map +0 -1
  465. package/dist/ui/subagent-renderer.d.ts +0 -58
  466. package/dist/ui/subagent-renderer.d.ts.map +0 -1
  467. package/dist/ui/subagent-renderer.js +0 -100
  468. package/dist/ui/subagent-renderer.js.map +0 -1
  469. package/dist/updater.d.ts +0 -15
  470. package/dist/updater.d.ts.map +0 -1
  471. package/dist/updater.js +0 -166
  472. package/dist/updater.js.map +0 -1
package/README.md CHANGED
@@ -1,436 +1,286 @@
1
- # MMA — Micro Models Agent
2
-
3
- LLM-агент, который работает на маленьких моделях (Qwen3.5-9B, 32K-64K контекст). Пишет код, редактирует файлы, ищет баги, выполняет bash-команды, читает документацию — и всё это на моделях, которые запускаются на обычном ноутбуке без GPU.
4
-
5
- **Чем MMA отличается от больших агентов (OpenCode, Claude Code, Cursor):**
6
-
7
- - **Лёгкий**: не требует GPT-4 или Claude Sonnet. Работает на Qwen3.5-9B, DeepSeek-Coder и других opensource-моделях. Всё локально.
8
- - **ReAct-цикл**: модель сама планирует и вызывает инструменты через `<tool_call>` — читает/пишет/редактирует файлы, ищет по проекту, выполняет bash.
9
- - **Навыки (Skills)**: подгружаемые markdown-инструкции для специализированных задач (Docker, CSS, auth, и т.д.).
10
- - **Индексация кода**: AST-индекс символов + карта проекта (project map) для навигации по любой кодовой базе.
11
- - **Память**: долговременная память агента — запоминает факты между сессиями.
12
- - **Веб-поиск**: может искать информацию в интернете.
13
- - **Браузер**: интерактивный headless-браузер (Playwright) — навигация, клики, ввод текста, скриншоты, извлечение данных со страниц.
14
- - **Плагины**: мощная система плагинов на lifecycle events. [PLUGINS.md](./PLUGINS.md)
15
- - **Планирование**: создаёт и утверждает планы через PLAN.md перед выполнением.
16
- - **Сессии**: сохранение, восстановление, список сессий.
17
- - **MCP интеграция**: поддержка Model Context Protocol для внешних инструментов.
18
- - **Вопросы пользователю**: может уточнять детали задачи, запрашивать одобрение.
19
- - **Синтаксис @file**: загрузка файлов/директорий прямо в промпт.
20
- - **Стилизация**: сменные темы оформления.
21
- - **Мастер первого запуска**: интерактивная настройка провайдера и модели.
22
- - **12 файловых инструментов**: read, write, edit, list, create, delete, copy, move, info, glob, grep, tree.
23
- - **Браузерный инструмент**: `web_browse` — navigate, click, type, extract, screenshot, scroll, wait, get_links, evaluate, close.
24
- - **Простая установка**: `npm install -g micro-models-agent` и готово.
25
-
26
- Поддерживает OpenAI-совместимые API: LM Studio, Ollama, vLLM, Together AI и другие.
27
-
28
- ## Установка
29
-
30
- ### Глобально через npm (рекомендуется)
31
-
32
- ```bash
33
- npm install -g micro-models-agent
34
-
35
- # Проверка:
36
- mma --version
37
- ```
38
-
39
- ### Из исходников
40
-
41
- ```bash
42
- git clone <repo>
43
- cd mma
44
- npm install
45
- npm run build
46
- npm link
47
- ```
48
-
49
- ## Удаление
50
-
51
- ```bash
52
- npm uninstall -g micro-models-agent # удалить пакет
53
- rm -rf ~/.mma # удалить конфиг, кэш, логи, сессии
54
- ```
55
-
56
- > `~/.mma/` можно не удалять — данные останутся на случай повторной установки.
57
-
58
- ## Быстрый старт
59
-
60
- ### Интерактивный режим (REPL) — самый простой способ
61
-
62
- ```bash
63
- # Установите
64
- npm install -g micro-models-agent
65
-
66
- # И просто запустите
67
- mma
68
- ```
69
-
70
- > **Совет:** перед первым запуском запустите LM Studio → вкладка Local Server → Start Server → загрузите модель (например, [Qwen 3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B-Instruct-GGUF)). Мастер сам найдёт её и настроит.
71
-
72
- **При первом запуске** появится мастер настройки:
73
- 1. Выберите провайдера (LM Studio, Ollama или Remote API)
74
- 2. Мастер найдёт доступные модели и протестирует соединение
75
- 3. Готово — вы в REPL, можно писать запросы
76
-
77
- **При повторных запусках** REPL открывается сразу.
78
-
79
- В REPL работаете как в чате: пишете задачу, агент думает и выполняет. Доступны служебные команды:
80
-
81
- | Команда | Описание |
82
- |---------|----------|
83
- | `/help` | Справка |
84
- | `/read <file>` | Показать файл |
85
- | `/write <file>` | Записать файл |
86
- | `/bash <cmd>` | Выполнить команду |
87
- | `/clear` | Очистить контекст |
88
- | `/exit` | Выход |
89
-
90
- ### One-shot (быстрый запрос)
91
-
92
- ```bash
93
- mma "Создай React-компонент для формы входа"
94
- ```
95
-
96
- Можно передать провайдера и модель флагами:
97
-
98
- ```bash
99
- mma --provider ollama --model qwen3.5-9b "Напиши Dockerfile"
100
- ```
101
-
102
- ### С пайпом (stdin)
103
-
104
- ```bash
105
- cat package.json | mma "Опиши зависимости"
106
- ```
107
-
108
- ## Настройка провайдеров и моделей
109
-
110
- По умолчанию конфиг настроен на LM Studio (`localhost:1234`). Если нужно добавить другой сервер:
111
-
112
- ```bash
113
- # Добавить провайдера
114
- mma provider add ollama http://localhost:11434/v1
115
-
116
- # Переключиться на него
117
- mma provider use ollama
118
-
119
- # Добавить модель к активному провайдеру
120
- mma model add qwen3.5-9b qwen3.5-9b-instruct 32768
121
-
122
- # Выбрать модель (model add не активирует автоматически)
123
- mma model use qwen3.5-9b
124
- ```
125
-
126
- ### Все команды управления
127
-
128
- ```bash
129
- # Провайдеры
130
- mma provider list # Список провайдеров
131
- mma provider use ollama # Переключиться на провайдера
132
- mma provider add <имя> <url> # Добавить провайдера
133
- mma provider remove <имя> # Удалить провайдера
134
-
135
- # Модели
136
- mma model list # Список моделей активного провайдера
137
- mma model use <имя> # Переключиться на модель
138
- mma model current # Показать активную модель
139
- mma model add <имя> <id> <ctx> # Добавить модель
140
- mma model remove <имя> # Удалить модель
141
- mma model params [имя] # Параметры модели
142
- mma model set <имя> k=v # Изменить параметр (temperature=0.5)
143
-
144
- # Конфиг
145
- mma config show # Показать весь конфиг
146
- mma config reset # Сбросить настройки
147
- mma config thinking [on/off] # Включить/выключить скрытие размышлений модели
148
-
149
- # Обновления
150
- mma update # Проверить наличие обновлений
151
- mma update check # Проверить версию
152
- mma update install # Скачать и установить обновление
153
- ```
154
-
155
- ### Параметры моделей
156
-
157
- По умолчанию:
158
- - `temperature`: 0.7
159
- - `max_tokens`: 4096
160
- - `top_p`: 0.9
161
-
162
- Изменить:
163
-
164
- ```bash
165
- mma model set qwen3.5-9b temperature=0.3 max_tokens=8192
166
- mma model set qwen3.5-9b seed=42 # для воспроизводимости
167
- mma model set qwen3.5-9b seed=null # сбросить seed
168
- ```
169
-
170
- ## Конфигурация
171
-
172
- Конфиг хранится в `~/.mma/config.json`.
173
-
174
- ```json
175
- {
176
- "providers": {
177
- "lmstudio": {
178
- "type": "openai-compat",
179
- "url": "http://localhost:1234/v1",
180
- "apiKey": null,
181
- "models": {
182
- "qwen3.5-9b": {
183
- "model": "qwen3.5-9b-instruct",
184
- "contextWindow": 32768,
185
- "params": {
186
- "temperature": 0.7,
187
- "max_tokens": 4096
188
- }
189
- }
190
- }
191
- }
192
- },
193
- "active": {
194
- "provider": "lmstudio",
195
- "model": "qwen3.5-9b"
196
- },
197
- "agent": {
198
- "maxSteps": 50,
199
- "autoCompact": true,
200
- "compactThreshold": 0.85,
201
- "toolTimeout": 120,
202
- "maxOutputLength": 2000
203
- }
204
- }
205
- ```
206
-
207
- Можно также создать `.mmrc` в корне проекта — он смержится поверх глобального конфига.
208
-
209
- ### Переменные окружения
210
-
211
- | Переменная | Описание |
212
- |-----------|----------|
213
- | `MMA_PROVIDER` | Провайдер по умолчанию |
214
- | `MMA_MODEL` | Модель по умолчанию |
215
- | `MMA_STDIN=1` | Принудительное чтение stdin |
216
-
217
- ## Режимы запуска
218
-
219
- ### One-shot
220
-
221
- ```bash
222
- mma "Объясни этот код: function fib(n) { return n < 2 ? n : fib(n-1) + fib(n-2); }"
223
- ```
224
-
225
- ### Stdin (пайп)
226
-
227
- ```bash
228
- cat main.ts | mma "Найди потенциальные баги"
229
- curl -s https://api.example.com/data | mma "Проанализируй JSON"
230
- ```
231
-
232
- ### REPL
233
-
234
- ```bash
235
- mma
236
- ```
237
-
238
- В REPL доступны команды:
239
-
240
- | Команда | Описание |
241
- |---------|----------|
242
- | `/read <file>` | Показать файл с нумерацией строк |
243
- | `/write <file>` | Записать файл (до EOF) |
244
- | `/edit <file> <n>` | Заменить строку N в файле |
245
- | `/find <pattern>` | Поиск файлов по glob |
246
- | `/search <pattern>` | Поиск содержимого |
247
- | `/bash <cmd>` | Выполнить shell-команду |
248
- | `/git <args>` | Git-операции |
249
- | `/memory` | Показать память |
250
- | `/memory add <type> <text>` | Добавить в память |
251
- | `/memory search <query>` | Поиск в памяти |
252
- | `/skill` | Список навыков |
253
- | `/sessions` | Список сессий |
254
- | `/resume <id>` | Восстановить сессию |
255
- | `/save [name]` | Сохранить сессию |
256
- | `/clear` | Очистить контекст |
257
- | `/help` | Справка |
258
- | `/exit` | Выход |
259
-
260
- ## Синтаксис `@file`
261
-
262
- Загружает файлы в контекст агента:
263
-
264
- ```bash
265
- mma "@src/index.ts -- объясни эту функцию"
266
-
267
- # Несколько файлов
268
- mma "@src/auth/login.ts @src/auth/jwt.ts -- сравни"
269
-
270
- # Диапазон строк
271
- mma "@src/index.ts:10-30 -- что здесь происходит?"
272
-
273
- # Вся директория
274
- mma "@src/auth/ -- покажи структуру модуля"
275
- ```
276
-
277
- ## Навыки (Skills)
278
-
279
- Навыки — это Markdown-файлы с инструкциями для модели. Загружаются из:
280
- - `~/.mma/skills/<name>/SKILL.md`
281
- - `.agents/skills/<name>/SKILL.md`
282
- - `.claude/skills/<name>/SKILL.md`
283
-
284
- ```bash
285
- # Использовать навык
286
- mma "@docker -- помоги контейнеризовать приложение"
287
- ```
288
-
289
- ## Агент: как это работает
290
-
291
- 1. Вы даёте задачу (prompt)
292
- 2. Модель генерирует план и вызывает инструменты через `<tool_call>`
293
- 3. Агент выполняет инструменты и возвращает результат модели
294
- 4. Модель анализирует результат и решает, что делать дальше
295
- 5. Цикл продолжается до завершения задачи (макс. 50 шагов)
296
-
297
- ### Инструменты агента
298
-
299
- | Инструмент | Описание |
300
- |-----------|----------|
301
- | `read_file` | Чтение файла с нумерацией строк |
302
- | `write_file` | Атомарная запись/создание файла |
303
- | `edit_file` | Find & replace (точное совпадение) |
304
- | `list_dir` | Список директории |
305
- | `create_dir` | Рекурсивное создание директории |
306
- | `delete_file` | Удаление файла/директории |
307
- | `copy_file` | Копирование |
308
- | `move_file` | Перемещение/переименование |
309
- | `file_info` | Метаданные файла |
310
- | `glob_search` | Поиск по паттерну |
311
- | `grep_search` | Поиск по содержимому (regex) |
312
- | `tree` | Дерево директорий |
313
- | `bash` | Выполнение команд (npm, git, docker) |
314
-
315
- ## Архитектура
316
-
317
- ### Плагины
318
-
319
- Система плагинов на жизненных циклах (lifecycle events). Плагины реализуют интерфейс `AgentPlugin` и подписываются на события (`tool:before`, `tool:after`, `agent:done` и др.). Управляются через `PluginManager` с event bus.
320
-
321
- Плагины — это директории с `manifest.json` + точкой входа (.ts/.js). Они могут лежать в трёх местах (сканируются в порядке приоритета):
322
-
323
- | Источник | Путь | Описание |
324
- |----------|------|----------|
325
- | builtin | `dist/plugins/builtin/` | Встроенные плагины, поставляются с MMA |
326
- | project | `.mma/plugins/<name>/` | Проектные плагины (в репозитории) |
327
- | user | `~/.mma/plugins/<name>/` | Личные плагины пользователя |
328
-
329
- **Встроенные плагины:**
330
-
331
- | Плагин | Описание |
332
- |--------|----------|
333
- | `notify` | OS desktop-уведомления (Windows/macOS/Linux) |
334
- | `lint-on-write` | Авто-запуск линтера после write_file/edit_file |
335
-
336
- **CLI-команды:**
337
-
338
- ```bash
339
- mma plugin list # Список всех обнаруженных плагинов
340
- mma plugin create <name> # Создать новый плагин в .mma/plugins/
341
- ```
342
-
343
- **REPL-команда:** `/plugins` — показать плагины, их источник и статус.
344
-
345
- **Конфигурация:**
346
-
347
- Плагины активируются автоматически: все builtin, плюс указанные в `config.agent.plugins`:
348
-
349
- ```json
350
- {
351
- "agent": {
352
- "plugins": ["my-plugin"]
353
- }
354
- }
355
- ```
356
-
357
- Также плагины можно привязать к режиму через `ModeConfig.plugins` (режим `pro` включает `hooks-adapter`).
358
-
359
- Подробнее: [PLUGINS.md](./PLUGINS.md) — документация по созданию и устройству плагинов.
360
-
361
- ### Субагенты
362
-
363
- Повторно используемый ReAct-цикл (`src/agent/react-loop.ts`) для запуска дочерних агентов внутри сессии. Используется субагентом (`src/agent/subagent.ts`) для параллельного выполнения подзадач. Основной цикл (`loop.ts`) имеет собственный встроенный ReAct-цикл.
364
-
365
- ### Режимы (Modes)
366
-
367
- Три встроенных режима через `ModeRegistry` (`src/agent/modes/`):
368
-
369
- | Режим | Описание |
370
- |-------|----------|
371
- | `fast` | Без навыков, урезанный системный промпт |
372
- | `base` | Полный набор инструментов и навыков |
373
- | `pro` | Расширенный цикл с верификацией |
374
-
375
- Пользовательские режимы задаются через `AppConfig.modes`.
376
-
377
- ### ToolHandler и ToolExecutor
378
-
379
- Все 20 инструментов (12 FS + bash + 2 web + 6 native) реализуют интерфейс `ToolHandler` из `src/tools/types.ts`. `ToolExecutor` в `src/agent/tool-executor.ts` — чистый диспетчер с конвейером: pre-hooks → execute → post-hooks → truncate.
380
-
381
- ### Карта исходников
382
-
383
- | Компонент | Путь | Назначение |
384
- |-----------|------|------------|
385
- | Точка входа | `src/index.ts` → `src/cli.ts` | Commander CLI |
386
- | Цикл агента | `src/agent/loop.ts` | ReAct-цикл, ядро |
387
- | Исполнитель инструментов | `src/agent/tool-executor.ts` | Диспетчер с конвейером |
388
- | Субагент | `src/agent/subagent.ts` | Дочерний агент |
389
- | ReAct-loop | `src/agent/react-loop.ts` | Переиспользуемый ReAct-цикл |
390
- | Плагины | `src/plugins/` | Менеджер плагинов с шиной событий |
391
- | LLM провайдер | `src/llm/openai-compat.ts` | REST-клиент |
392
- | Системный промпт | `src/agent/system-prompt.ts` | Сборка системного промпта |
393
-
394
- ## Индексация проекта
395
-
396
- Агент автоматически строит карту проекта и индекс кода:
397
-
398
- ```bash
399
- # Вручную перестроить
400
- /build index rebuild
401
- /build project-map
402
- ```
403
-
404
- ## Работа с сессиями
405
-
406
- ```bash
407
- # Автосохранение при выходе
408
- /save my-session-name
409
-
410
- # Список сессий
411
- /sessions
412
-
413
- # Восстановить
414
- /resume my-session-name
415
- ```
416
-
417
- ## Разработка
418
-
419
- ```bash
420
- npm run build # Компиляция TypeScript
421
- npm run dev # Watch-режим
422
- npm test # Тесты
423
- npm run test:all # Все тесты
424
- npm run test:watch # vitest watch
425
- ```
426
-
427
- ### Публикация новой версии
428
-
429
- ```bash
430
- npm version patch # или minor, major
431
- npm publish
432
- ```
433
-
434
- ## Лицензия
435
-
436
- MIT
1
+ # MMA — Micro Models Agent v2
2
+
3
+ [![npm version](https://img.shields.io/npm/v/micro-models-agent)](https://www.npmjs.com/package/micro-models-agent)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
+
6
+ **MMA** — modular AI coding agent harness designed for **small local language models** (9B params, 32K–64K context). Runs on your laptop, no cloud API needed.
7
+
8
+ ```bash
9
+ npm install -g micro-models-agent
10
+ mma "refactor the auth module to use JWT"
11
+ ```
12
+
13
+ Built for and tested with [Qwen3.5-9B](https://qwen.readthedocs.io/) via LM Studio / Ollama / llama.cpp.
14
+
15
+ ---
16
+
17
+ ## Why MMA?
18
+
19
+ Most AI coding agents (Devin, Cursor, Copilot) depend on massive cloud models or expensive APIs. MMA is built differently:
20
+
21
+ - **Designed for 9B models** — optimized for Qwen3.5-9B running locally on consumer hardware
22
+ - **No cloud dependency** — works fully offline with any OpenAI-compatible backend
23
+ - **Survives small context windows** — sophisticated sliding-window compaction keeps 32K models productive
24
+ - **Catches hallucinations** — 3-stage validation pipeline catches the confabulations small models are prone to
25
+ - **Agent-Level MoE** — hierarchical task decomposition so small models handle complex multi-step work
26
+
27
+ ---
28
+
29
+ ## Features
30
+
31
+ - **6-state agent loop** (INIT → THINK → ACT → OBSERVE → OUTPUT → ERROR) — clean, predictable, debuggable
32
+ - **Context budget management** — dynamic per-model budget, sliding-window compaction with fact/decision/error extraction
33
+ - **Hallucination detection** — factual (file paths), consistency (decision reversals), confidence (short/repetitive responses)
34
+ - **Execution guarantees** — auto-planning via LLM (no keyword heuristics), stuck detection, off-track warnings, plan auto-advance
35
+ - **Agent-Level MoE** — Router + Expert sub-agents with filtered tools, isolated context, file scope, and topological parallel execution
36
+ - **20+ tools** — filesystem, shell, web search/fetch, browser (Playwright), planning, interaction, subagent, MCP, pipelines
37
+ - **13 modules** — skills, plugins, MCP client, pipelines, project indexer, persistent memory, context, sessions, browser, execution, hallucination detection, updater, user profile
38
+ - **MCP client** — connect to any MCP server (stdio or SSE)
39
+ - **YAML pipelines** — DAG-based workflow engine with parallel waves, dependencies, and retries
40
+ - **Multi-session management** — persistent JSONL sessions with REPL commands
41
+ - **Project map** — automatic file walker + export extraction + disk cache
42
+ - **i18n** — all user-facing strings via `t()`, English and Russian included
43
+ - **8K–120K context** — adapts to any model's context window
44
+ - **No TUI** — minimal CLI + REPL with markdown-to-ANSI formatting
45
+ - **llama.cpp / Jinja proven** — battle-tested against Jinja template edge cases (system-first, streaming fallback, explicit `stream: false`)
46
+
47
+ ---
48
+
49
+ ## Installation
50
+
51
+ ### Prerequisites
52
+
53
+ - **Runtime:** [Bun](https://bun.sh) (recommended) or Node.js ≥ 20
54
+ - **LLM backend:** Any OpenAI-compatible server (LM Studio, Ollama, vLLM, llama.cpp, Together AI)
55
+
56
+ ### From npm
57
+
58
+ ```bash
59
+ npm install -g micro-models-agent
60
+ ```
61
+
62
+ ### From source
63
+
64
+ ```bash
65
+ git clone https://github.com/your-org/micro-models-agent
66
+ cd micro-models-agent
67
+ bun install
68
+ bun run build
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Quick Start
74
+
75
+ ### 1. Start your LLM backend
76
+
77
+ Point MMA to any OpenAI-compatible endpoint. Example with LM Studio:
78
+
79
+ ```bash
80
+ # LM Studio listens on http://localhost:1234 by default
81
+ ```
82
+
83
+ ### 2. Run the setup wizard
84
+
85
+ ```bash
86
+ bun run mma init
87
+ ```
88
+
89
+ Scans local ports, finds your model, tests the connection, and writes config.
90
+
91
+ ### 3. Use the agent
92
+
93
+ ```bash
94
+ # One-shot mode
95
+ bun run mma "create a REST API with Express and add tests"
96
+
97
+ # Interactive REPL
98
+ bun run dev
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Usage
104
+
105
+ ### CLI
106
+
107
+ ```bash
108
+ bun run mma "<prompt>"
109
+
110
+ # Subcommands
111
+ bun run mma init # Interactive setup wizard
112
+ bun run mma config set model qwen3.5-9b
113
+ bun run mma config show
114
+ bun run mma model list # List available models
115
+ bun run mma model use qwen3.5-9b # Switch model
116
+ bun run mma provider list # List configured providers
117
+ bun run mma session list # List sessions
118
+ bun run mma session show <id> # Show session details
119
+ bun run mma session delete <id> # Delete a session
120
+ ```
121
+
122
+ ### REPL
123
+
124
+ ```bash
125
+ bun run dev
126
+ ```
127
+
128
+ | Command | Aliases | Description |
129
+ |---------|---------|-------------|
130
+ | `/help` | | Show help |
131
+ | `/sessions` | `/ls` | List all sessions (* = active) |
132
+ | `/new <name>` | `/create` | Create a new session |
133
+ | `/resume <id\|name>` | `/switch`, `/use` | Switch to a session |
134
+ | `/rename <name>` | | Rename current session |
135
+ | `/delete <id>` | `/rm` | Delete a session |
136
+ | `/config set <key> <value>` | | Set a config value |
137
+ | `/exit` | | Exit REPL |
138
+
139
+ ### Development
140
+
141
+ ```bash
142
+ bun run mma "fix the login page" # Run agent
143
+ bun run dev # Watch mode (auto-restart on changes)
144
+ bun run build # TypeScript build
145
+ bun test # Run tests
146
+ tsc --noEmit # Type-check
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Configuration
152
+
153
+ 3-layer config: `defaults.ts` → `~/.mma/config.json` (global) → `.mmrc` (project) + env vars.
154
+
155
+ Key options (see `src/config/defaults.ts` for full list):
156
+
157
+ | Option | Default | Description |
158
+ |--------|---------|-------------|
159
+ | `model` | `qwen3.5-9b` | Model name sent to backend |
160
+ | `provider.baseUrl` | `http://localhost:1234/v1` | OpenAI-compatible API URL |
161
+ | `contextWindow` | `32768` | Model's context window in tokens |
162
+ | `autoPlan` | `true` | Auto-create plans for multi-step tasks |
163
+ | `maxToolIterations` | `25` | Max tool calls per agent run |
164
+ | `stuckThreshold` | `8` | Iterations without progress before stuck detection |
165
+ | `moe.enabled` | `false` | Enable Agent-Level MoE |
166
+ | `locale` | `en` | UI locale (`en` / `ru`) |
167
+ | `logLevel` | `info` | Log level |
168
+
169
+ ### Agent-Level MoE
170
+
171
+ ```json
172
+ {
173
+ "moe": { "enabled": true },
174
+ "orchestrator": {
175
+ "model": "qwen3-70b-414k",
176
+ "provider": { "baseUrl": "http://localhost:1234/v1" }
177
+ },
178
+ "experts": {
179
+ "code": { "model": "qwen3.5-9b", "tool_tags": ["file", "code", "shell"], "max_attempts": 3 },
180
+ "research": { "model": "qwen3.5-9b", "tool_tags": ["research"], "max_attempts": 3 },
181
+ "browser": { "model": "qwen3.5-9b", "tool_tags": ["browser", "vision"], "max_attempts": 3 }
182
+ }
183
+ }
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Architecture
189
+
190
+ ```
191
+ CLI (main.ts → commands.ts / repl.ts / setup.ts)
192
+ → Core (agent.ts state machine → prompt-builder.ts)
193
+ → LLM Layer (provider.ts → openai-compat.ts → response.ts → token-counter.ts)
194
+ → Tools (registry.ts → executor.ts → 20+ tools)
195
+ → Modules (skills, plugins, mcp, pipelines, indexer, memory, context, session,
196
+ hallucination, execution, updater, user-profile, browser)
197
+ ```
198
+
199
+ ### Project Structure
200
+
201
+ ```
202
+ src/
203
+ ├── core/ # Agent loop, prompt builder, types
204
+ ├── llm/ # Provider abstraction, OpenAI-compat, streaming, token counting
205
+ ├── tools/ # 20+ tools with registry, executor, scope guards
206
+ ├── modules/ # 13 modules (skills, plugins, mcp, pipelines, indexer, memory, context, session, hallucination, execution, updater, user-profile, browser)
207
+ ├── cli/ # Entry point, commands, REPL, setup wizard
208
+ ├── config/ # 3-layer config: defaults → global → project
209
+ ├── i18n/ # en.json + ru.json + t() function
210
+ ├── ui/ # Markdown→ANSI formatter
211
+ └── logger/ # Structured logger with levels + child loggers
212
+ ```
213
+
214
+ ---
215
+
216
+ ## Tool Reference
217
+
218
+ | Tool | Description |
219
+ |------|-------------|
220
+ | `read_file` | Read file with offset/limit |
221
+ | `write_file` | Create/overwrite with directory creation |
222
+ | `edit_file` | Find-replace in existing files |
223
+ | `glob` | Glob pattern matching |
224
+ | `grep` | Regex content search via ripgrep |
225
+ | `list_dir` | List directory contents |
226
+ | `create_dir` | Create directory (recursive) |
227
+ | `delete_file` | Delete file or empty directory |
228
+ | `move_file` | Move/rename file or directory |
229
+ | `file_info` | File/directory metadata |
230
+ | `bash` | Shell command execution |
231
+ | `subagent` | Isolated sub-agent with scope |
232
+ | `web_search` | Web search |
233
+ | `web_fetch` | Web page fetch (15K chars, 15s timeout) |
234
+ | `web_browse` | Playwright browser (click, type, scroll, screenshot) |
235
+ | `plan` | Create/update/cancel plans |
236
+ | `todo` | Track todo items |
237
+ | `question` | Ask user for input |
238
+ | `approve` | Request user approval |
239
+ | `load_skill` | Load a skill at runtime |
240
+ | `pipeline_run` | Execute a YAML pipeline |
241
+ | `mcp_call` | Call an MCP server tool |
242
+ | `search_history` | Search session history |
243
+ | `project_map` | Query project index (summary, refresh, find) |
244
+
245
+ ---
246
+
247
+ ## Testing
248
+
249
+ ```bash
250
+ bun test # Unit + component tests
251
+ bun test tests/agent.test.ts # Single file
252
+ bun run test:integration # Integration tests (requires LLM backend)
253
+ tsc --noEmit # Type-check
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Design Principles
259
+
260
+ 1. **No file >300 lines** — split when approaching limit
261
+ 2. **Small files, single responsibility** — each file does one thing
262
+ 3. **KISS state machine** — no god objects, no if-else nesting in agent loop
263
+ 4. **Plugin error isolation** — one plugin crash never stops others
264
+ 5. **Path safety** — all filesystem tools check `targetPath.startsWith(baseDir)`
265
+ 6. **TDD** — write test first, then implement, then commit
266
+ 7. **No hardcoded user-facing strings** — all text through `t()` i18n function
267
+ 8. **No keyword matching** — LLM decides when to plan, not heuristics
268
+ 9. **No TUI** — minimal CLI + REPL with markdown→ANSI
269
+
270
+ ---
271
+
272
+ ## License
273
+
274
+ MIT
275
+
276
+ ---
277
+
278
+ ## Acknowledgments
279
+
280
+ - [Qwen3.5-9B](https://qwen.readthedocs.io/) — the primary target model
281
+ - [LM Studio](https://lmstudio.ai/) — recommended local inference server
282
+ - [llama.cpp](https://github.com/ggerganov/llama.cpp) — the inference engine
283
+
284
+ ---
285
+
286
+ **Made for local models. Runs everywhere.**