micro-models-agent 0.3.0 → 0.4.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 (321) hide show
  1. package/README.md +436 -436
  2. package/dist/agent/loop.d.ts +5 -5
  3. package/dist/agent/loop.d.ts.map +1 -1
  4. package/dist/agent/loop.js +421 -246
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/system-prompt.d.ts +3 -3
  7. package/dist/agent/system-prompt.d.ts.map +1 -1
  8. package/dist/agent/system-prompt.js +383 -278
  9. package/dist/agent/system-prompt.js.map +1 -1
  10. package/dist/cli/config.d.ts +1 -1
  11. package/dist/cli/config.d.ts.map +1 -1
  12. package/dist/cli/config.js +53 -28
  13. package/dist/cli/config.js.map +1 -1
  14. package/dist/config/config.d.ts +2 -1
  15. package/dist/config/config.d.ts.map +1 -1
  16. package/dist/config/config.js +75 -54
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/config/types.d.ts +3 -1
  19. package/dist/config/types.d.ts.map +1 -1
  20. package/dist/plugins/builtin/lint-on-write/index.ts +96 -96
  21. package/dist/plugins/builtin/notify/index.js +6 -6
  22. package/dist/plugins/builtin/notify/index.ts +104 -104
  23. package/dist/setup-wizard.d.ts +1 -1
  24. package/dist/setup-wizard.d.ts.map +1 -1
  25. package/dist/setup-wizard.js +137 -105
  26. package/dist/setup-wizard.js.map +1 -1
  27. package/dist/skills/builtin/agent-test/SKILL.md +68 -68
  28. package/dist/skills/builtin/grill-me/SKILL.md +46 -46
  29. package/dist/skills/builtin/web-scraping/SKILL.md +422 -422
  30. package/dist/tools/native/project-map.d.ts +2 -2
  31. package/dist/tools/native/project-map.d.ts.map +1 -1
  32. package/dist/tools/native/project-map.js +85 -57
  33. package/dist/tools/native/project-map.js.map +1 -1
  34. package/dist/tools/native/scaffold.js +113 -113
  35. package/dist/tools/web-browse.js +7 -7
  36. package/dist/ui/ink/components/App.d.ts +0 -1
  37. package/dist/ui/ink/components/App.d.ts.map +1 -1
  38. package/dist/ui/ink/components/App.js +2 -8
  39. package/dist/ui/ink/components/App.js.map +1 -1
  40. package/dist/ui/ink/components/Conversation.d.ts +1 -2
  41. package/dist/ui/ink/components/Conversation.d.ts.map +1 -1
  42. package/dist/ui/ink/components/Conversation.js +8 -2
  43. package/dist/ui/ink/components/Conversation.js.map +1 -1
  44. package/dist/ui/ink/components/MessageBlock.d.ts +13 -1
  45. package/dist/ui/ink/components/MessageBlock.d.ts.map +1 -1
  46. package/dist/ui/ink/components/MessageBlock.js +15 -27
  47. package/dist/ui/ink/components/MessageBlock.js.map +1 -1
  48. package/dist/ui/ink/components/PromptInput.d.ts +11 -0
  49. package/dist/ui/ink/components/PromptInput.d.ts.map +1 -1
  50. package/dist/ui/ink/components/PromptInput.js +18 -141
  51. package/dist/ui/ink/components/PromptInput.js.map +1 -1
  52. package/dist/ui/ink/components/SelectInput.d.ts.map +1 -1
  53. package/dist/ui/ink/components/SelectInput.js +3 -2
  54. package/dist/ui/ink/components/SelectInput.js.map +1 -1
  55. package/dist/ui/ink/components/StatusBar.d.ts.map +1 -1
  56. package/dist/ui/ink/components/StatusBar.js +14 -6
  57. package/dist/ui/ink/components/StatusBar.js.map +1 -1
  58. package/dist/ui/ink/components/StreamBlock.d.ts.map +1 -1
  59. package/dist/ui/ink/components/StreamBlock.js +3 -3
  60. package/dist/ui/ink/components/StreamBlock.js.map +1 -1
  61. package/dist/ui/ink/components/Tags.d.ts +8 -11
  62. package/dist/ui/ink/components/Tags.d.ts.map +1 -1
  63. package/dist/ui/ink/components/Tags.js +4 -16
  64. package/dist/ui/ink/components/Tags.js.map +1 -1
  65. package/dist/ui/ink/components/ToolCallBlock.d.ts +12 -0
  66. package/dist/ui/ink/components/ToolCallBlock.d.ts.map +1 -1
  67. package/dist/ui/ink/components/ToolCallBlock.js +8 -24
  68. package/dist/ui/ink/components/ToolCallBlock.js.map +1 -1
  69. package/dist/ui/ink/renderer.d.ts +0 -1
  70. package/dist/ui/ink/renderer.d.ts.map +1 -1
  71. package/dist/ui/ink/renderer.js +1 -4
  72. package/dist/ui/ink/renderer.js.map +1 -1
  73. package/package.json +47 -47
  74. package/dist/async-map.d.ts +0 -6
  75. package/dist/async-map.d.ts.map +0 -1
  76. package/dist/async-map.js +0 -16
  77. package/dist/async-map.js.map +0 -1
  78. package/dist/blog-api/types/index.d.ts +0 -2
  79. package/dist/blog-api/types/index.d.ts.map +0 -1
  80. package/dist/blog-api/types/index.js +0 -2
  81. package/dist/blog-api/types/index.js.map +0 -1
  82. package/dist/examples.d.ts +0 -22
  83. package/dist/examples.d.ts.map +0 -1
  84. package/dist/examples.js +0 -45
  85. package/dist/examples.js.map +0 -1
  86. package/dist/fibonacci.d.ts +0 -19
  87. package/dist/fibonacci.d.ts.map +0 -1
  88. package/dist/fibonacci.js +0 -61
  89. package/dist/fibonacci.js.map +0 -1
  90. package/dist/parfymerie-landing/src/App.d.ts +0 -4
  91. package/dist/parfymerie-landing/src/App.d.ts.map +0 -1
  92. package/dist/parfymerie-landing/src/App.js +0 -12
  93. package/dist/parfymerie-landing/src/App.js.map +0 -1
  94. package/dist/parfymerie-landing/src/main.d.ts +0 -2
  95. package/dist/parfymerie-landing/src/main.d.ts.map +0 -1
  96. package/dist/parfymerie-landing/src/main.js +0 -7
  97. package/dist/parfymerie-landing/src/main.js.map +0 -1
  98. package/dist/parfymerie-landing/vite.config.d.ts +0 -3
  99. package/dist/parfymerie-landing/vite.config.d.ts.map +0 -1
  100. package/dist/parfymerie-landing/vite.config.js +0 -7
  101. package/dist/parfymerie-landing/vite.config.js.map +0 -1
  102. package/dist/repl.d.ts +0 -5
  103. package/dist/repl.d.ts.map +0 -1
  104. package/dist/repl.js +0 -472
  105. package/dist/repl.js.map +0 -1
  106. package/dist/sort.d.ts +0 -8
  107. package/dist/sort.d.ts.map +0 -1
  108. package/dist/sort.js +0 -36
  109. package/dist/sort.js.map +0 -1
  110. package/dist/stack.d.ts +0 -9
  111. package/dist/stack.d.ts.map +0 -1
  112. package/dist/stack.js +0 -22
  113. package/dist/stack.js.map +0 -1
  114. package/dist/test-run.d.ts +0 -2
  115. package/dist/test-run.d.ts.map +0 -1
  116. package/dist/test-run.js +0 -13
  117. package/dist/test-run.js.map +0 -1
  118. package/dist/ui/components/diff-view.d.ts +0 -8
  119. package/dist/ui/components/diff-view.d.ts.map +0 -1
  120. package/dist/ui/components/diff-view.js +0 -25
  121. package/dist/ui/components/diff-view.js.map +0 -1
  122. package/dist/ui/double-press.d.ts +0 -9
  123. package/dist/ui/double-press.d.ts.map +0 -1
  124. package/dist/ui/double-press.js +0 -18
  125. package/dist/ui/double-press.js.map +0 -1
  126. package/dist/ui/ink/components/ActivityLog.d.ts +0 -12
  127. package/dist/ui/ink/components/ActivityLog.d.ts.map +0 -1
  128. package/dist/ui/ink/components/ActivityLog.js +0 -11
  129. package/dist/ui/ink/components/ActivityLog.js.map +0 -1
  130. package/dist/ui/ink/components/AgentStatus.d.ts +0 -13
  131. package/dist/ui/ink/components/AgentStatus.d.ts.map +0 -1
  132. package/dist/ui/ink/components/AgentStatus.js +0 -20
  133. package/dist/ui/ink/components/AgentStatus.js.map +0 -1
  134. package/dist/ui/ink/components/BottomBar.d.ts +0 -12
  135. package/dist/ui/ink/components/BottomBar.d.ts.map +0 -1
  136. package/dist/ui/ink/components/BottomBar.js +0 -22
  137. package/dist/ui/ink/components/BottomBar.js.map +0 -1
  138. package/dist/ui/ink/components/CheckboxInput.d.ts +0 -21
  139. package/dist/ui/ink/components/CheckboxInput.d.ts.map +0 -1
  140. package/dist/ui/ink/components/CheckboxInput.js +0 -36
  141. package/dist/ui/ink/components/CheckboxInput.js.map +0 -1
  142. package/dist/ui/ink/components/InputBox.d.ts +0 -25
  143. package/dist/ui/ink/components/InputBox.d.ts.map +0 -1
  144. package/dist/ui/ink/components/InputBox.js +0 -91
  145. package/dist/ui/ink/components/InputBox.js.map +0 -1
  146. package/dist/ui/ink/components/ModeSelector.d.ts +0 -8
  147. package/dist/ui/ink/components/ModeSelector.d.ts.map +0 -1
  148. package/dist/ui/ink/components/ModeSelector.js +0 -13
  149. package/dist/ui/ink/components/ModeSelector.js.map +0 -1
  150. package/dist/ui/ink/components/QuestionBox.d.ts +0 -14
  151. package/dist/ui/ink/components/QuestionBox.d.ts.map +0 -1
  152. package/dist/ui/ink/components/QuestionBox.js +0 -35
  153. package/dist/ui/ink/components/QuestionBox.js.map +0 -1
  154. package/dist/ui/ink/components/RadioInput.d.ts +0 -17
  155. package/dist/ui/ink/components/RadioInput.d.ts.map +0 -1
  156. package/dist/ui/ink/components/RadioInput.js +0 -30
  157. package/dist/ui/ink/components/RadioInput.js.map +0 -1
  158. package/dist/ui/ink/components/SliderInput.d.ts +0 -20
  159. package/dist/ui/ink/components/SliderInput.d.ts.map +0 -1
  160. package/dist/ui/ink/components/SliderInput.js +0 -40
  161. package/dist/ui/ink/components/SliderInput.js.map +0 -1
  162. package/dist/ui/ink/components/StartupScreen.d.ts +0 -19
  163. package/dist/ui/ink/components/StartupScreen.d.ts.map +0 -1
  164. package/dist/ui/ink/components/StartupScreen.js +0 -9
  165. package/dist/ui/ink/components/StartupScreen.js.map +0 -1
  166. package/dist/ui/ink/components/WelcomeScreen.d.ts +0 -10
  167. package/dist/ui/ink/components/WelcomeScreen.d.ts.map +0 -1
  168. package/dist/ui/ink/components/WelcomeScreen.js +0 -8
  169. package/dist/ui/ink/components/WelcomeScreen.js.map +0 -1
  170. package/dist/ui/ink/components/Window.d.ts +0 -30
  171. package/dist/ui/ink/components/Window.d.ts.map +0 -1
  172. package/dist/ui/ink/components/Window.js +0 -9
  173. package/dist/ui/ink/components/Window.js.map +0 -1
  174. package/dist/ui/ink/components/ui/_core.d.ts +0 -113
  175. package/dist/ui/ink/components/ui/_core.d.ts.map +0 -1
  176. package/dist/ui/ink/components/ui/_core.js +0 -83
  177. package/dist/ui/ink/components/ui/_core.js.map +0 -1
  178. package/dist/ui/ink/components/ui/autocomplete/Autocomplete.d.ts +0 -23
  179. package/dist/ui/ink/components/ui/autocomplete/Autocomplete.d.ts.map +0 -1
  180. package/dist/ui/ink/components/ui/autocomplete/Autocomplete.js +0 -56
  181. package/dist/ui/ink/components/ui/autocomplete/Autocomplete.js.map +0 -1
  182. package/dist/ui/ink/components/ui/autocomplete/index.d.ts +0 -3
  183. package/dist/ui/ink/components/ui/autocomplete/index.d.ts.map +0 -1
  184. package/dist/ui/ink/components/ui/autocomplete/index.js +0 -2
  185. package/dist/ui/ink/components/ui/autocomplete/index.js.map +0 -1
  186. package/dist/ui/ink/components/ui/badge/Badge.d.ts +0 -13
  187. package/dist/ui/ink/components/ui/badge/Badge.d.ts.map +0 -1
  188. package/dist/ui/ink/components/ui/badge/Badge.js +0 -17
  189. package/dist/ui/ink/components/ui/badge/Badge.js.map +0 -1
  190. package/dist/ui/ink/components/ui/badge/index.d.ts +0 -3
  191. package/dist/ui/ink/components/ui/badge/index.d.ts.map +0 -1
  192. package/dist/ui/ink/components/ui/badge/index.js +0 -2
  193. package/dist/ui/ink/components/ui/badge/index.js.map +0 -1
  194. package/dist/ui/ink/components/ui/divider/Divider.d.ts +0 -12
  195. package/dist/ui/ink/components/ui/divider/Divider.d.ts.map +0 -1
  196. package/dist/ui/ink/components/ui/divider/Divider.js +0 -27
  197. package/dist/ui/ink/components/ui/divider/Divider.js.map +0 -1
  198. package/dist/ui/ink/components/ui/divider/index.d.ts +0 -3
  199. package/dist/ui/ink/components/ui/divider/index.d.ts.map +0 -1
  200. package/dist/ui/ink/components/ui/divider/index.js +0 -2
  201. package/dist/ui/ink/components/ui/divider/index.js.map +0 -1
  202. package/dist/ui/ink/components/ui/header/Header.d.ts +0 -13
  203. package/dist/ui/ink/components/ui/header/Header.d.ts.map +0 -1
  204. package/dist/ui/ink/components/ui/header/Header.js +0 -33
  205. package/dist/ui/ink/components/ui/header/Header.js.map +0 -1
  206. package/dist/ui/ink/components/ui/header/index.d.ts +0 -3
  207. package/dist/ui/ink/components/ui/header/index.d.ts.map +0 -1
  208. package/dist/ui/ink/components/ui/header/index.js +0 -2
  209. package/dist/ui/ink/components/ui/header/index.js.map +0 -1
  210. package/dist/ui/ink/components/ui/json-viewer/JSONViewer.d.ts +0 -14
  211. package/dist/ui/ink/components/ui/json-viewer/JSONViewer.d.ts.map +0 -1
  212. package/dist/ui/ink/components/ui/json-viewer/JSONViewer.js +0 -144
  213. package/dist/ui/ink/components/ui/json-viewer/JSONViewer.js.map +0 -1
  214. package/dist/ui/ink/components/ui/json-viewer/index.d.ts +0 -3
  215. package/dist/ui/ink/components/ui/json-viewer/index.d.ts.map +0 -1
  216. package/dist/ui/ink/components/ui/json-viewer/index.js +0 -2
  217. package/dist/ui/ink/components/ui/json-viewer/index.js.map +0 -1
  218. package/dist/ui/ink/components/ui/key-hint/KeyHint.d.ts +0 -14
  219. package/dist/ui/ink/components/ui/key-hint/KeyHint.d.ts.map +0 -1
  220. package/dist/ui/ink/components/ui/key-hint/KeyHint.js +0 -5
  221. package/dist/ui/ink/components/ui/key-hint/KeyHint.js.map +0 -1
  222. package/dist/ui/ink/components/ui/key-hint/index.d.ts +0 -3
  223. package/dist/ui/ink/components/ui/key-hint/index.d.ts.map +0 -1
  224. package/dist/ui/ink/components/ui/key-hint/index.js +0 -2
  225. package/dist/ui/ink/components/ui/key-hint/index.js.map +0 -1
  226. package/dist/ui/ink/components/ui/markdown/Markdown.d.ts +0 -11
  227. package/dist/ui/ink/components/ui/markdown/Markdown.d.ts.map +0 -1
  228. package/dist/ui/ink/components/ui/markdown/Markdown.js +0 -129
  229. package/dist/ui/ink/components/ui/markdown/Markdown.js.map +0 -1
  230. package/dist/ui/ink/components/ui/markdown/index.d.ts +0 -3
  231. package/dist/ui/ink/components/ui/markdown/index.d.ts.map +0 -1
  232. package/dist/ui/ink/components/ui/markdown/index.js +0 -2
  233. package/dist/ui/ink/components/ui/markdown/index.js.map +0 -1
  234. package/dist/ui/ink/components/ui/scroll-area/ScrollArea.d.ts +0 -21
  235. package/dist/ui/ink/components/ui/scroll-area/ScrollArea.d.ts.map +0 -1
  236. package/dist/ui/ink/components/ui/scroll-area/ScrollArea.js +0 -42
  237. package/dist/ui/ink/components/ui/scroll-area/ScrollArea.js.map +0 -1
  238. package/dist/ui/ink/components/ui/scroll-area/index.d.ts +0 -3
  239. package/dist/ui/ink/components/ui/scroll-area/index.d.ts.map +0 -1
  240. package/dist/ui/ink/components/ui/scroll-area/index.js +0 -2
  241. package/dist/ui/ink/components/ui/scroll-area/index.js.map +0 -1
  242. package/dist/ui/ink/components/ui/select/Select.d.ts +0 -19
  243. package/dist/ui/ink/components/ui/select/Select.d.ts.map +0 -1
  244. package/dist/ui/ink/components/ui/select/Select.js +0 -73
  245. package/dist/ui/ink/components/ui/select/Select.js.map +0 -1
  246. package/dist/ui/ink/components/ui/select/index.d.ts +0 -3
  247. package/dist/ui/ink/components/ui/select/index.d.ts.map +0 -1
  248. package/dist/ui/ink/components/ui/select/index.js +0 -2
  249. package/dist/ui/ink/components/ui/select/index.js.map +0 -1
  250. package/dist/ui/ink/components/ui/spinner/Spinner.d.ts +0 -14
  251. package/dist/ui/ink/components/ui/spinner/Spinner.d.ts.map +0 -1
  252. package/dist/ui/ink/components/ui/spinner/Spinner.js +0 -16
  253. package/dist/ui/ink/components/ui/spinner/Spinner.js.map +0 -1
  254. package/dist/ui/ink/components/ui/spinner/index.d.ts +0 -3
  255. package/dist/ui/ink/components/ui/spinner/index.d.ts.map +0 -1
  256. package/dist/ui/ink/components/ui/spinner/index.js +0 -2
  257. package/dist/ui/ink/components/ui/spinner/index.js.map +0 -1
  258. package/dist/ui/ink/components/ui/status-indicator/StatusIndicator.d.ts +0 -12
  259. package/dist/ui/ink/components/ui/status-indicator/StatusIndicator.d.ts.map +0 -1
  260. package/dist/ui/ink/components/ui/status-indicator/StatusIndicator.js +0 -39
  261. package/dist/ui/ink/components/ui/status-indicator/StatusIndicator.js.map +0 -1
  262. package/dist/ui/ink/components/ui/status-indicator/index.d.ts +0 -3
  263. package/dist/ui/ink/components/ui/status-indicator/index.d.ts.map +0 -1
  264. package/dist/ui/ink/components/ui/status-indicator/index.js +0 -2
  265. package/dist/ui/ink/components/ui/status-indicator/index.js.map +0 -1
  266. package/dist/ui/ink/components/ui/streaming-text/StreamingText.d.ts +0 -13
  267. package/dist/ui/ink/components/ui/streaming-text/StreamingText.d.ts.map +0 -1
  268. package/dist/ui/ink/components/ui/streaming-text/StreamingText.js +0 -22
  269. package/dist/ui/ink/components/ui/streaming-text/StreamingText.js.map +0 -1
  270. package/dist/ui/ink/components/ui/streaming-text/index.d.ts +0 -3
  271. package/dist/ui/ink/components/ui/streaming-text/index.d.ts.map +0 -1
  272. package/dist/ui/ink/components/ui/streaming-text/index.js +0 -2
  273. package/dist/ui/ink/components/ui/streaming-text/index.js.map +0 -1
  274. package/dist/ui/ink/components/ui/tabs/Tabs.d.ts +0 -20
  275. package/dist/ui/ink/components/ui/tabs/Tabs.d.ts.map +0 -1
  276. package/dist/ui/ink/components/ui/tabs/Tabs.js +0 -53
  277. package/dist/ui/ink/components/ui/tabs/Tabs.js.map +0 -1
  278. package/dist/ui/ink/components/ui/tabs/index.d.ts +0 -3
  279. package/dist/ui/ink/components/ui/tabs/index.d.ts.map +0 -1
  280. package/dist/ui/ink/components/ui/tabs/index.js +0 -2
  281. package/dist/ui/ink/components/ui/tabs/index.js.map +0 -1
  282. package/dist/ui/ink/components/ui/text-input/TextInput.d.ts +0 -22
  283. package/dist/ui/ink/components/ui/text-input/TextInput.d.ts.map +0 -1
  284. package/dist/ui/ink/components/ui/text-input/TextInput.js +0 -57
  285. package/dist/ui/ink/components/ui/text-input/TextInput.js.map +0 -1
  286. package/dist/ui/ink/components/ui/text-input/index.d.ts +0 -3
  287. package/dist/ui/ink/components/ui/text-input/index.d.ts.map +0 -1
  288. package/dist/ui/ink/components/ui/text-input/index.js +0 -2
  289. package/dist/ui/ink/components/ui/text-input/index.js.map +0 -1
  290. package/dist/ui/ink/components/ui/token-counter/TokenCounter.d.ts +0 -17
  291. package/dist/ui/ink/components/ui/token-counter/TokenCounter.d.ts.map +0 -1
  292. package/dist/ui/ink/components/ui/token-counter/TokenCounter.js +0 -38
  293. package/dist/ui/ink/components/ui/token-counter/TokenCounter.js.map +0 -1
  294. package/dist/ui/ink/components/ui/token-counter/index.d.ts +0 -3
  295. package/dist/ui/ink/components/ui/token-counter/index.d.ts.map +0 -1
  296. package/dist/ui/ink/components/ui/token-counter/index.js +0 -2
  297. package/dist/ui/ink/components/ui/token-counter/index.js.map +0 -1
  298. package/dist/ui/ink/components/ui/typewriter/Typewriter.d.ts +0 -14
  299. package/dist/ui/ink/components/ui/typewriter/Typewriter.d.ts.map +0 -1
  300. package/dist/ui/ink/components/ui/typewriter/Typewriter.js +0 -57
  301. package/dist/ui/ink/components/ui/typewriter/Typewriter.js.map +0 -1
  302. package/dist/ui/ink/components/ui/typewriter/index.d.ts +0 -3
  303. package/dist/ui/ink/components/ui/typewriter/index.d.ts.map +0 -1
  304. package/dist/ui/ink/components/ui/typewriter/index.js +0 -2
  305. package/dist/ui/ink/components/ui/typewriter/index.js.map +0 -1
  306. package/dist/ui/opentui-renderer.d.ts +0 -53
  307. package/dist/ui/opentui-renderer.d.ts.map +0 -1
  308. package/dist/ui/opentui-renderer.js +0 -463
  309. package/dist/ui/opentui-renderer.js.map +0 -1
  310. package/dist/utils/memoize.d.ts +0 -14
  311. package/dist/utils/memoize.d.ts.map +0 -1
  312. package/dist/utils/memoize.js +0 -51
  313. package/dist/utils/memoize.js.map +0 -1
  314. package/dist/utils/types.d.ts +0 -6
  315. package/dist/utils/types.d.ts.map +0 -1
  316. package/dist/utils/types.js +0 -2
  317. package/dist/utils/types.js.map +0 -1
  318. package/dist/utils.d.ts +0 -22
  319. package/dist/utils.d.ts.map +0 -1
  320. package/dist/utils.js +0 -81
  321. package/dist/utils.js.map +0 -1
package/README.md CHANGED
@@ -1,436 +1,436 @@
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
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