micro-models-agent 0.6.4 → 0.7.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.
- package/README.md +286 -436
- package/dist/main.js +11744 -0
- package/dist/skills/builtin/git.md +36 -0
- package/dist/skills/builtin/typescript.md +35 -0
- package/package.json +41 -47
- package/dist/agent/context.d.ts +0 -73
- package/dist/agent/context.d.ts.map +0 -1
- package/dist/agent/context.js +0 -262
- package/dist/agent/context.js.map +0 -1
- package/dist/agent/error-escalation.d.ts +0 -19
- package/dist/agent/error-escalation.d.ts.map +0 -1
- package/dist/agent/error-escalation.js +0 -168
- package/dist/agent/error-escalation.js.map +0 -1
- package/dist/agent/loop.d.ts +0 -46
- package/dist/agent/loop.d.ts.map +0 -1
- package/dist/agent/loop.js +0 -1043
- package/dist/agent/loop.js.map +0 -1
- package/dist/agent/memory.d.ts +0 -40
- package/dist/agent/memory.d.ts.map +0 -1
- package/dist/agent/memory.js +0 -231
- package/dist/agent/memory.js.map +0 -1
- package/dist/agent/modes/applier.d.ts +0 -43
- package/dist/agent/modes/applier.d.ts.map +0 -1
- package/dist/agent/modes/applier.js +0 -30
- package/dist/agent/modes/applier.js.map +0 -1
- package/dist/agent/modes/registry.d.ts +0 -35
- package/dist/agent/modes/registry.d.ts.map +0 -1
- package/dist/agent/modes/registry.js +0 -169
- package/dist/agent/modes/registry.js.map +0 -1
- package/dist/agent/modes/types.d.ts +0 -61
- package/dist/agent/modes/types.d.ts.map +0 -1
- package/dist/agent/modes/types.js +0 -13
- package/dist/agent/modes/types.js.map +0 -1
- package/dist/agent/react-loop.d.ts +0 -65
- package/dist/agent/react-loop.d.ts.map +0 -1
- package/dist/agent/react-loop.js +0 -101
- package/dist/agent/react-loop.js.map +0 -1
- package/dist/agent/system-prompt.d.ts +0 -26
- package/dist/agent/system-prompt.d.ts.map +0 -1
- package/dist/agent/system-prompt.js +0 -478
- package/dist/agent/system-prompt.js.map +0 -1
- package/dist/agent/tool-executor.d.ts +0 -36
- package/dist/agent/tool-executor.d.ts.map +0 -1
- package/dist/agent/tool-executor.js +0 -346
- package/dist/agent/tool-executor.js.map +0 -1
- package/dist/agent/user-profile.d.ts +0 -26
- package/dist/agent/user-profile.d.ts.map +0 -1
- package/dist/agent/user-profile.js +0 -169
- package/dist/agent/user-profile.js.map +0 -1
- package/dist/agent/write-enforcer.d.ts +0 -7
- package/dist/agent/write-enforcer.d.ts.map +0 -1
- package/dist/agent/write-enforcer.js +0 -8
- package/dist/agent/write-enforcer.js.map +0 -1
- package/dist/cli/config.d.ts +0 -13
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js +0 -82
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/model.d.ts +0 -13
- package/dist/cli/model.d.ts.map +0 -1
- package/dist/cli/model.js +0 -170
- package/dist/cli/model.js.map +0 -1
- package/dist/cli/provider.d.ts +0 -12
- package/dist/cli/provider.d.ts.map +0 -1
- package/dist/cli/provider.js +0 -90
- package/dist/cli/provider.js.map +0 -1
- package/dist/cli/update.d.ts +0 -12
- package/dist/cli/update.d.ts.map +0 -1
- package/dist/cli/update.js +0 -69
- package/dist/cli/update.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -310
- package/dist/cli.js.map +0 -1
- package/dist/config/config.d.ts +0 -59
- package/dist/config/config.d.ts.map +0 -1
- package/dist/config/config.js +0 -232
- package/dist/config/config.js.map +0 -1
- package/dist/config/types.d.ts +0 -122
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -13
- package/dist/config/types.js.map +0 -1
- package/dist/file-loader.d.ts +0 -20
- package/dist/file-loader.d.ts.map +0 -1
- package/dist/file-loader.js +0 -121
- package/dist/file-loader.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
- package/dist/indexer/cache.d.ts +0 -34
- package/dist/indexer/cache.d.ts.map +0 -1
- package/dist/indexer/cache.js +0 -221
- package/dist/indexer/cache.js.map +0 -1
- package/dist/indexer/code-index.d.ts +0 -27
- package/dist/indexer/code-index.d.ts.map +0 -1
- package/dist/indexer/code-index.js +0 -219
- package/dist/indexer/code-index.js.map +0 -1
- package/dist/indexer/project-map.d.ts +0 -23
- package/dist/indexer/project-map.d.ts.map +0 -1
- package/dist/indexer/project-map.js +0 -264
- package/dist/indexer/project-map.js.map +0 -1
- package/dist/llm/lmstudio-native.d.ts +0 -10
- package/dist/llm/lmstudio-native.d.ts.map +0 -1
- package/dist/llm/lmstudio-native.js +0 -179
- package/dist/llm/lmstudio-native.js.map +0 -1
- package/dist/llm/openai-compat.d.ts +0 -11
- package/dist/llm/openai-compat.d.ts.map +0 -1
- package/dist/llm/openai-compat.js +0 -161
- package/dist/llm/openai-compat.js.map +0 -1
- package/dist/llm/provider.d.ts +0 -46
- package/dist/llm/provider.d.ts.map +0 -1
- package/dist/llm/provider.js +0 -13
- package/dist/llm/provider.js.map +0 -1
- package/dist/llm/token-counter.d.ts +0 -15
- package/dist/llm/token-counter.d.ts.map +0 -1
- package/dist/llm/token-counter.js +0 -51
- package/dist/llm/token-counter.js.map +0 -1
- package/dist/logger.d.ts +0 -24
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -156
- package/dist/logger.js.map +0 -1
- package/dist/plugins/adapters/hooks-adapter.d.ts +0 -12
- package/dist/plugins/adapters/hooks-adapter.d.ts.map +0 -1
- package/dist/plugins/adapters/hooks-adapter.js +0 -23
- package/dist/plugins/adapters/hooks-adapter.js.map +0 -1
- package/dist/plugins/builtin/lint-on-write/index.d.ts +0 -12
- package/dist/plugins/builtin/lint-on-write/index.d.ts.map +0 -1
- package/dist/plugins/builtin/lint-on-write/index.js +0 -98
- package/dist/plugins/builtin/lint-on-write/index.js.map +0 -1
- package/dist/plugins/builtin/lint-on-write/index.ts +0 -97
- package/dist/plugins/builtin/lint-on-write/manifest.json +0 -13
- package/dist/plugins/builtin/notify/index.d.ts +0 -11
- package/dist/plugins/builtin/notify/index.d.ts.map +0 -1
- package/dist/plugins/builtin/notify/index.js +0 -102
- package/dist/plugins/builtin/notify/index.js.map +0 -1
- package/dist/plugins/builtin/notify/index.ts +0 -105
- package/dist/plugins/builtin/notify/manifest.json +0 -16
- package/dist/plugins/loader.d.ts +0 -18
- package/dist/plugins/loader.d.ts.map +0 -1
- package/dist/plugins/loader.js +0 -182
- package/dist/plugins/loader.js.map +0 -1
- package/dist/plugins/manager.d.ts +0 -55
- package/dist/plugins/manager.d.ts.map +0 -1
- package/dist/plugins/manager.js +0 -190
- package/dist/plugins/manager.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -76
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -8
- package/dist/plugins/types.js.map +0 -1
- package/dist/repl/commands.d.ts +0 -63
- package/dist/repl/commands.d.ts.map +0 -1
- package/dist/repl/commands.js +0 -1070
- package/dist/repl/commands.js.map +0 -1
- package/dist/repl/history.d.ts +0 -32
- package/dist/repl/history.d.ts.map +0 -1
- package/dist/repl/history.js +0 -40
- package/dist/repl/history.js.map +0 -1
- package/dist/repl/index.d.ts +0 -14
- package/dist/repl/index.d.ts.map +0 -1
- package/dist/repl/index.js +0 -235
- package/dist/repl/index.js.map +0 -1
- package/dist/session/store.d.ts +0 -46
- package/dist/session/store.d.ts.map +0 -1
- package/dist/session/store.js +0 -154
- package/dist/session/store.js.map +0 -1
- package/dist/setup-wizard.d.ts +0 -3
- package/dist/setup-wizard.d.ts.map +0 -1
- package/dist/setup-wizard.js +0 -410
- package/dist/setup-wizard.js.map +0 -1
- package/dist/skills/builtin/agent-test/SKILL.md +0 -68
- package/dist/skills/builtin/cli-expert/SKILL.md +0 -848
- package/dist/skills/builtin/code-review/SKILL.md +0 -424
- package/dist/skills/builtin/git-expert/SKILL.md +0 -522
- package/dist/skills/builtin/grill-me/SKILL.md +0 -46
- package/dist/skills/builtin/jest-testing-expert/SKILL.md +0 -957
- package/dist/skills/builtin/nodejs-expert/SKILL.md +0 -192
- package/dist/skills/builtin/systematic-debugging/SKILL.md +0 -296
- package/dist/skills/builtin/test-driven-development/SKILL.md +0 -371
- package/dist/skills/builtin/typescript-expert/SKILL.md +0 -429
- package/dist/skills/builtin/web-scraping/SKILL.md +0 -422
- package/dist/skills/loader.d.ts +0 -49
- package/dist/skills/loader.d.ts.map +0 -1
- package/dist/skills/loader.js +0 -401
- package/dist/skills/loader.js.map +0 -1
- package/dist/styling/engine.d.ts +0 -39
- package/dist/styling/engine.d.ts.map +0 -1
- package/dist/styling/engine.js +0 -122
- package/dist/styling/engine.js.map +0 -1
- package/dist/styling/index.d.ts +0 -15
- package/dist/styling/index.d.ts.map +0 -1
- package/dist/styling/index.js +0 -40
- package/dist/styling/index.js.map +0 -1
- package/dist/styling/loader.d.ts +0 -9
- package/dist/styling/loader.d.ts.map +0 -1
- package/dist/styling/loader.js +0 -169
- package/dist/styling/loader.js.map +0 -1
- package/dist/styling/types.d.ts +0 -64
- package/dist/styling/types.d.ts.map +0 -1
- package/dist/styling/types.js +0 -12
- package/dist/styling/types.js.map +0 -1
- package/dist/subagent/chat.d.ts +0 -19
- package/dist/subagent/chat.d.ts.map +0 -1
- package/dist/subagent/chat.js +0 -279
- package/dist/subagent/chat.js.map +0 -1
- package/dist/subagent/context.d.ts +0 -9
- package/dist/subagent/context.d.ts.map +0 -1
- package/dist/subagent/context.js +0 -75
- package/dist/subagent/context.js.map +0 -1
- package/dist/subagent/definition.d.ts +0 -7
- package/dist/subagent/definition.d.ts.map +0 -1
- package/dist/subagent/definition.js +0 -26
- package/dist/subagent/definition.js.map +0 -1
- package/dist/subagent/errors.d.ts +0 -24
- package/dist/subagent/errors.d.ts.map +0 -1
- package/dist/subagent/errors.js +0 -85
- package/dist/subagent/errors.js.map +0 -1
- package/dist/subagent/validation.d.ts +0 -17
- package/dist/subagent/validation.d.ts.map +0 -1
- package/dist/subagent/validation.js +0 -83
- package/dist/subagent/validation.js.map +0 -1
- package/dist/tools/adapters/bash-to-fs.d.ts +0 -20
- package/dist/tools/adapters/bash-to-fs.d.ts.map +0 -1
- package/dist/tools/adapters/bash-to-fs.js +0 -74
- package/dist/tools/adapters/bash-to-fs.js.map +0 -1
- package/dist/tools/adapters/content-sanitizer.d.ts +0 -13
- package/dist/tools/adapters/content-sanitizer.d.ts.map +0 -1
- package/dist/tools/adapters/content-sanitizer.js +0 -73
- package/dist/tools/adapters/content-sanitizer.js.map +0 -1
- package/dist/tools/adapters/grounding-fixer.d.ts +0 -15
- package/dist/tools/adapters/grounding-fixer.d.ts.map +0 -1
- package/dist/tools/adapters/grounding-fixer.js +0 -57
- package/dist/tools/adapters/grounding-fixer.js.map +0 -1
- package/dist/tools/adapters/index.d.ts +0 -6
- package/dist/tools/adapters/index.d.ts.map +0 -1
- package/dist/tools/adapters/index.js +0 -5
- package/dist/tools/adapters/index.js.map +0 -1
- package/dist/tools/adapters/pipeline.d.ts +0 -34
- package/dist/tools/adapters/pipeline.d.ts.map +0 -1
- package/dist/tools/adapters/pipeline.js +0 -58
- package/dist/tools/adapters/pipeline.js.map +0 -1
- package/dist/tools/adapters/types.d.ts +0 -46
- package/dist/tools/adapters/types.d.ts.map +0 -1
- package/dist/tools/adapters/types.js +0 -2
- package/dist/tools/adapters/types.js.map +0 -1
- package/dist/tools/approve.d.ts +0 -27
- package/dist/tools/approve.d.ts.map +0 -1
- package/dist/tools/approve.js +0 -45
- package/dist/tools/approve.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -25
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -292
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/fs/copy-file.d.ts +0 -13
- package/dist/tools/fs/copy-file.d.ts.map +0 -1
- package/dist/tools/fs/copy-file.js +0 -54
- package/dist/tools/fs/copy-file.js.map +0 -1
- package/dist/tools/fs/create-dir.d.ts +0 -13
- package/dist/tools/fs/create-dir.d.ts.map +0 -1
- package/dist/tools/fs/create-dir.js +0 -44
- package/dist/tools/fs/create-dir.js.map +0 -1
- package/dist/tools/fs/delete-file.d.ts +0 -13
- package/dist/tools/fs/delete-file.d.ts.map +0 -1
- package/dist/tools/fs/delete-file.js +0 -52
- package/dist/tools/fs/delete-file.js.map +0 -1
- package/dist/tools/fs/edit-file.d.ts +0 -15
- package/dist/tools/fs/edit-file.d.ts.map +0 -1
- package/dist/tools/fs/edit-file.js +0 -95
- package/dist/tools/fs/edit-file.js.map +0 -1
- package/dist/tools/fs/file-info.d.ts +0 -13
- package/dist/tools/fs/file-info.d.ts.map +0 -1
- package/dist/tools/fs/file-info.js +0 -50
- package/dist/tools/fs/file-info.js.map +0 -1
- package/dist/tools/fs/glob-search.d.ts +0 -13
- package/dist/tools/fs/glob-search.d.ts.map +0 -1
- package/dist/tools/fs/glob-search.js +0 -112
- package/dist/tools/fs/glob-search.js.map +0 -1
- package/dist/tools/fs/grep-search.d.ts +0 -14
- package/dist/tools/fs/grep-search.d.ts.map +0 -1
- package/dist/tools/fs/grep-search.js +0 -135
- package/dist/tools/fs/grep-search.js.map +0 -1
- package/dist/tools/fs/list-dir.d.ts +0 -13
- package/dist/tools/fs/list-dir.d.ts.map +0 -1
- package/dist/tools/fs/list-dir.js +0 -74
- package/dist/tools/fs/list-dir.js.map +0 -1
- package/dist/tools/fs/move-file.d.ts +0 -13
- package/dist/tools/fs/move-file.d.ts.map +0 -1
- package/dist/tools/fs/move-file.js +0 -54
- package/dist/tools/fs/move-file.js.map +0 -1
- package/dist/tools/fs/path-utils.d.ts +0 -51
- package/dist/tools/fs/path-utils.d.ts.map +0 -1
- package/dist/tools/fs/path-utils.js +0 -103
- package/dist/tools/fs/path-utils.js.map +0 -1
- package/dist/tools/fs/read-file.d.ts +0 -13
- package/dist/tools/fs/read-file.d.ts.map +0 -1
- package/dist/tools/fs/read-file.js +0 -64
- package/dist/tools/fs/read-file.js.map +0 -1
- package/dist/tools/fs/tree.d.ts +0 -13
- package/dist/tools/fs/tree.d.ts.map +0 -1
- package/dist/tools/fs/tree.js +0 -89
- package/dist/tools/fs/tree.js.map +0 -1
- package/dist/tools/fs/types.d.ts +0 -14
- package/dist/tools/fs/types.d.ts.map +0 -1
- package/dist/tools/fs/types.js +0 -11
- package/dist/tools/fs/types.js.map +0 -1
- package/dist/tools/fs/write-file.d.ts +0 -14
- package/dist/tools/fs/write-file.d.ts.map +0 -1
- package/dist/tools/fs/write-file.js +0 -83
- package/dist/tools/fs/write-file.js.map +0 -1
- package/dist/tools/hooks.d.ts +0 -44
- package/dist/tools/hooks.d.ts.map +0 -1
- package/dist/tools/hooks.js +0 -217
- package/dist/tools/hooks.js.map +0 -1
- package/dist/tools/id-gen.d.ts +0 -4
- package/dist/tools/id-gen.d.ts.map +0 -1
- package/dist/tools/id-gen.js +0 -12
- package/dist/tools/id-gen.js.map +0 -1
- package/dist/tools/mcp.d.ts +0 -36
- package/dist/tools/mcp.d.ts.map +0 -1
- package/dist/tools/mcp.js +0 -93
- package/dist/tools/mcp.js.map +0 -1
- package/dist/tools/native/approve.d.ts +0 -11
- package/dist/tools/native/approve.d.ts.map +0 -1
- package/dist/tools/native/approve.js +0 -39
- package/dist/tools/native/approve.js.map +0 -1
- package/dist/tools/native/plan.d.ts +0 -10
- package/dist/tools/native/plan.d.ts.map +0 -1
- package/dist/tools/native/plan.js +0 -115
- package/dist/tools/native/plan.js.map +0 -1
- package/dist/tools/native/project-map.d.ts +0 -15
- package/dist/tools/native/project-map.d.ts.map +0 -1
- package/dist/tools/native/project-map.js +0 -203
- package/dist/tools/native/project-map.js.map +0 -1
- package/dist/tools/native/question.d.ts +0 -11
- package/dist/tools/native/question.d.ts.map +0 -1
- package/dist/tools/native/question.js +0 -41
- package/dist/tools/native/question.js.map +0 -1
- package/dist/tools/native/scaffold.d.ts +0 -5
- package/dist/tools/native/scaffold.d.ts.map +0 -1
- package/dist/tools/native/scaffold.js +0 -246
- package/dist/tools/native/scaffold.js.map +0 -1
- package/dist/tools/native/theme.d.ts +0 -10
- package/dist/tools/native/theme.d.ts.map +0 -1
- package/dist/tools/native/theme.js +0 -101
- package/dist/tools/native/theme.js.map +0 -1
- package/dist/tools/native/todo.d.ts +0 -10
- package/dist/tools/native/todo.d.ts.map +0 -1
- package/dist/tools/native/todo.js +0 -58
- package/dist/tools/native/todo.js.map +0 -1
- package/dist/tools/native/user-profile.d.ts +0 -10
- package/dist/tools/native/user-profile.d.ts.map +0 -1
- package/dist/tools/native/user-profile.js +0 -58
- package/dist/tools/native/user-profile.js.map +0 -1
- package/dist/tools/parse-tool-call.d.ts +0 -11
- package/dist/tools/parse-tool-call.d.ts.map +0 -1
- package/dist/tools/parse-tool-call.js +0 -87
- package/dist/tools/parse-tool-call.js.map +0 -1
- package/dist/tools/plan.d.ts +0 -40
- package/dist/tools/plan.d.ts.map +0 -1
- package/dist/tools/plan.js +0 -143
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/question.d.ts +0 -33
- package/dist/tools/question.d.ts.map +0 -1
- package/dist/tools/question.js +0 -62
- package/dist/tools/question.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -37
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -97
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/sanitizer.d.ts +0 -30
- package/dist/tools/sanitizer.d.ts.map +0 -1
- package/dist/tools/sanitizer.js +0 -77
- package/dist/tools/sanitizer.js.map +0 -1
- package/dist/tools/subagent.d.ts +0 -39
- package/dist/tools/subagent.d.ts.map +0 -1
- package/dist/tools/subagent.js +0 -225
- package/dist/tools/subagent.js.map +0 -1
- package/dist/tools/syntax-check.d.ts +0 -32
- package/dist/tools/syntax-check.d.ts.map +0 -1
- package/dist/tools/syntax-check.js +0 -272
- package/dist/tools/syntax-check.js.map +0 -1
- package/dist/tools/todo.d.ts +0 -28
- package/dist/tools/todo.d.ts.map +0 -1
- package/dist/tools/todo.js +0 -125
- package/dist/tools/todo.js.map +0 -1
- package/dist/tools/types.d.ts +0 -51
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -2
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/web-browse.d.ts +0 -5
- package/dist/tools/web-browse.d.ts.map +0 -1
- package/dist/tools/web-browse.js +0 -757
- package/dist/tools/web-browse.js.map +0 -1
- package/dist/tools/web-fetch.d.ts +0 -19
- package/dist/tools/web-fetch.d.ts.map +0 -1
- package/dist/tools/web-fetch.js +0 -90
- package/dist/tools/web-fetch.js.map +0 -1
- package/dist/tools/web-search.d.ts +0 -19
- package/dist/tools/web-search.d.ts.map +0 -1
- package/dist/tools/web-search.js +0 -97
- package/dist/tools/web-search.js.map +0 -1
- package/dist/ui/components/status-bar.d.ts +0 -11
- package/dist/ui/components/status-bar.d.ts.map +0 -1
- package/dist/ui/components/status-bar.js +0 -20
- package/dist/ui/components/status-bar.js.map +0 -1
- package/dist/ui/index.d.ts +0 -8
- package/dist/ui/index.d.ts.map +0 -1
- package/dist/ui/index.js +0 -9
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/ink/components/App.d.ts +0 -98
- package/dist/ui/ink/components/App.d.ts.map +0 -1
- package/dist/ui/ink/components/App.js +0 -212
- package/dist/ui/ink/components/App.js.map +0 -1
- package/dist/ui/ink/components/Conversation.d.ts +0 -20
- package/dist/ui/ink/components/Conversation.d.ts.map +0 -1
- package/dist/ui/ink/components/Conversation.js +0 -15
- package/dist/ui/ink/components/Conversation.js.map +0 -1
- package/dist/ui/ink/components/MessageBlock.d.ts +0 -27
- package/dist/ui/ink/components/MessageBlock.d.ts.map +0 -1
- package/dist/ui/ink/components/MessageBlock.js +0 -41
- package/dist/ui/ink/components/MessageBlock.js.map +0 -1
- package/dist/ui/ink/components/PromptInput.d.ts +0 -25
- package/dist/ui/ink/components/PromptInput.d.ts.map +0 -1
- package/dist/ui/ink/components/PromptInput.js +0 -167
- package/dist/ui/ink/components/PromptInput.js.map +0 -1
- package/dist/ui/ink/components/SelectInput.d.ts +0 -9
- package/dist/ui/ink/components/SelectInput.d.ts.map +0 -1
- package/dist/ui/ink/components/SelectInput.js +0 -30
- package/dist/ui/ink/components/SelectInput.js.map +0 -1
- package/dist/ui/ink/components/StatusBar.d.ts +0 -14
- package/dist/ui/ink/components/StatusBar.d.ts.map +0 -1
- package/dist/ui/ink/components/StatusBar.js +0 -20
- package/dist/ui/ink/components/StatusBar.js.map +0 -1
- package/dist/ui/ink/components/StreamBlock.d.ts +0 -8
- package/dist/ui/ink/components/StreamBlock.d.ts.map +0 -1
- package/dist/ui/ink/components/StreamBlock.js +0 -15
- package/dist/ui/ink/components/StreamBlock.js.map +0 -1
- package/dist/ui/ink/components/Tags.d.ts +0 -26
- package/dist/ui/ink/components/Tags.d.ts.map +0 -1
- package/dist/ui/ink/components/Tags.js +0 -37
- package/dist/ui/ink/components/Tags.js.map +0 -1
- package/dist/ui/ink/components/ToolCallBlock.d.ts +0 -31
- package/dist/ui/ink/components/ToolCallBlock.d.ts.map +0 -1
- package/dist/ui/ink/components/ToolCallBlock.js +0 -17
- package/dist/ui/ink/components/ToolCallBlock.js.map +0 -1
- package/dist/ui/ink/renderer.d.ts +0 -69
- package/dist/ui/ink/renderer.d.ts.map +0 -1
- package/dist/ui/ink/renderer.js +0 -142
- package/dist/ui/ink/renderer.js.map +0 -1
- package/dist/ui/ink/theme.d.ts +0 -28
- package/dist/ui/ink/theme.d.ts.map +0 -1
- package/dist/ui/ink/theme.js +0 -45
- package/dist/ui/ink/theme.js.map +0 -1
- package/dist/ui/md-formatter.d.ts +0 -16
- package/dist/ui/md-formatter.d.ts.map +0 -1
- package/dist/ui/md-formatter.js +0 -448
- package/dist/ui/md-formatter.js.map +0 -1
- package/dist/ui/readline-renderer.d.ts +0 -45
- package/dist/ui/readline-renderer.d.ts.map +0 -1
- package/dist/ui/readline-renderer.js +0 -181
- package/dist/ui/readline-renderer.js.map +0 -1
- package/dist/ui/renderer.d.ts +0 -66
- package/dist/ui/renderer.d.ts.map +0 -1
- package/dist/ui/renderer.js +0 -16
- package/dist/ui/renderer.js.map +0 -1
- package/dist/ui/subagent-renderer.d.ts +0 -58
- package/dist/ui/subagent-renderer.d.ts.map +0 -1
- package/dist/ui/subagent-renderer.js +0 -100
- package/dist/ui/subagent-renderer.js.map +0 -1
- package/dist/updater.d.ts +0 -15
- package/dist/updater.d.ts.map +0 -1
- package/dist/updater.js +0 -166
- package/dist/updater.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,436 +1,286 @@
|
|
|
1
|
-
# MMA — Micro Models Agent
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
- **
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
##
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
mma
|
|
115
|
-
|
|
116
|
-
#
|
|
117
|
-
mma
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
mma
|
|
143
|
-
|
|
144
|
-
#
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
|
241
|
-
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
-
|
|
282
|
-
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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
|
+
[](https://www.npmjs.com/package/micro-models-agent)
|
|
4
|
+
[](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.**
|