micro-models-agent 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +311 -0
- package/dist/agent/context.d.ts +18 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +155 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/loop.d.ts +15 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +575 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/memory.d.ts +23 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +244 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +3 -0
- package/dist/agent/system-prompt.d.ts.map +1 -0
- package/dist/agent/system-prompt.js +185 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/blog-api/types/index.d.ts +2 -0
- package/dist/blog-api/types/index.d.ts.map +1 -0
- package/dist/blog-api/types/index.js +2 -0
- package/dist/blog-api/types/index.js.map +1 -0
- package/dist/cli/config.d.ts +3 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +25 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/model.d.ts +3 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +144 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/provider.d.ts +3 -0
- package/dist/cli/provider.d.ts.map +1 -0
- package/dist/cli/provider.js +78 -0
- package/dist/cli/provider.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +88 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config.d.ts +5 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +84 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/types.d.ts +38 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/file-loader.d.ts +12 -0
- package/dist/file-loader.d.ts.map +1 -0
- package/dist/file-loader.js +115 -0
- package/dist/file-loader.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/cache.d.ts +27 -0
- package/dist/indexer/cache.d.ts.map +1 -0
- package/dist/indexer/cache.js +95 -0
- package/dist/indexer/cache.js.map +1 -0
- package/dist/indexer/code-index.d.ts +27 -0
- package/dist/indexer/code-index.d.ts.map +1 -0
- package/dist/indexer/code-index.js +197 -0
- package/dist/indexer/code-index.js.map +1 -0
- package/dist/indexer/project-map.d.ts +14 -0
- package/dist/indexer/project-map.d.ts.map +1 -0
- package/dist/indexer/project-map.js +157 -0
- package/dist/indexer/project-map.js.map +1 -0
- package/dist/llm/openai-compat.d.ts +11 -0
- package/dist/llm/openai-compat.d.ts.map +1 -0
- package/dist/llm/openai-compat.js +81 -0
- package/dist/llm/openai-compat.js.map +1 -0
- package/dist/llm/provider.d.ts +27 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +2 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/llm/token-counter.d.ts +2 -0
- package/dist/llm/token-counter.d.ts.map +1 -0
- package/dist/llm/token-counter.js +24 -0
- package/dist/llm/token-counter.js.map +1 -0
- package/dist/repl/commands.d.ts +37 -0
- package/dist/repl/commands.d.ts.map +1 -0
- package/dist/repl/commands.js +433 -0
- package/dist/repl/commands.js.map +1 -0
- package/dist/repl/history.d.ts +19 -0
- package/dist/repl/history.d.ts.map +1 -0
- package/dist/repl/history.js +29 -0
- package/dist/repl/history.js.map +1 -0
- package/dist/repl/index.d.ts +5 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +86 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl.d.ts +5 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +472 -0
- package/dist/repl.js.map +1 -0
- package/dist/session/store.d.ts +34 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +115 -0
- package/dist/session/store.js.map +1 -0
- package/dist/skills/loader.d.ts +13 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +122 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/styling/engine.d.ts +37 -0
- package/dist/styling/engine.d.ts.map +1 -0
- package/dist/styling/engine.js +136 -0
- package/dist/styling/engine.js.map +1 -0
- package/dist/styling/index.d.ts +7 -0
- package/dist/styling/index.d.ts.map +1 -0
- package/dist/styling/index.js +15 -0
- package/dist/styling/index.js.map +1 -0
- package/dist/styling/loader.d.ts +4 -0
- package/dist/styling/loader.d.ts.map +1 -0
- package/dist/styling/loader.js +78 -0
- package/dist/styling/loader.js.map +1 -0
- package/dist/styling/types.d.ts +46 -0
- package/dist/styling/types.d.ts.map +1 -0
- package/dist/styling/types.js +2 -0
- package/dist/styling/types.js.map +1 -0
- package/dist/tools/approve.d.ts +13 -0
- package/dist/tools/approve.d.ts.map +1 -0
- package/dist/tools/approve.js +32 -0
- package/dist/tools/approve.js.map +1 -0
- package/dist/tools/bash.d.ts +8 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +186 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/fs/copy-file.d.ts +5 -0
- package/dist/tools/fs/copy-file.d.ts.map +1 -0
- package/dist/tools/fs/copy-file.js +41 -0
- package/dist/tools/fs/copy-file.js.map +1 -0
- package/dist/tools/fs/create-dir.d.ts +5 -0
- package/dist/tools/fs/create-dir.d.ts.map +1 -0
- package/dist/tools/fs/create-dir.js +31 -0
- package/dist/tools/fs/create-dir.js.map +1 -0
- package/dist/tools/fs/delete-file.d.ts +5 -0
- package/dist/tools/fs/delete-file.d.ts.map +1 -0
- package/dist/tools/fs/delete-file.js +39 -0
- package/dist/tools/fs/delete-file.js.map +1 -0
- package/dist/tools/fs/edit-file.d.ts +5 -0
- package/dist/tools/fs/edit-file.d.ts.map +1 -0
- package/dist/tools/fs/edit-file.js +80 -0
- package/dist/tools/fs/edit-file.js.map +1 -0
- package/dist/tools/fs/file-info.d.ts +5 -0
- package/dist/tools/fs/file-info.d.ts.map +1 -0
- package/dist/tools/fs/file-info.js +37 -0
- package/dist/tools/fs/file-info.js.map +1 -0
- package/dist/tools/fs/glob-search.d.ts +5 -0
- package/dist/tools/fs/glob-search.d.ts.map +1 -0
- package/dist/tools/fs/glob-search.js +98 -0
- package/dist/tools/fs/glob-search.js.map +1 -0
- package/dist/tools/fs/grep-search.d.ts +5 -0
- package/dist/tools/fs/grep-search.d.ts.map +1 -0
- package/dist/tools/fs/grep-search.js +120 -0
- package/dist/tools/fs/grep-search.js.map +1 -0
- package/dist/tools/fs/list-dir.d.ts +5 -0
- package/dist/tools/fs/list-dir.d.ts.map +1 -0
- package/dist/tools/fs/list-dir.js +61 -0
- package/dist/tools/fs/list-dir.js.map +1 -0
- package/dist/tools/fs/move-file.d.ts +5 -0
- package/dist/tools/fs/move-file.d.ts.map +1 -0
- package/dist/tools/fs/move-file.js +41 -0
- package/dist/tools/fs/move-file.js.map +1 -0
- package/dist/tools/fs/path-utils.d.ts +30 -0
- package/dist/tools/fs/path-utils.d.ts.map +1 -0
- package/dist/tools/fs/path-utils.js +81 -0
- package/dist/tools/fs/path-utils.js.map +1 -0
- package/dist/tools/fs/read-file.d.ts +5 -0
- package/dist/tools/fs/read-file.d.ts.map +1 -0
- package/dist/tools/fs/read-file.js +51 -0
- package/dist/tools/fs/read-file.js.map +1 -0
- package/dist/tools/fs/tree.d.ts +5 -0
- package/dist/tools/fs/tree.d.ts.map +1 -0
- package/dist/tools/fs/tree.js +75 -0
- package/dist/tools/fs/tree.js.map +1 -0
- package/dist/tools/fs/types.d.ts +7 -0
- package/dist/tools/fs/types.d.ts.map +1 -0
- package/dist/tools/fs/types.js +9 -0
- package/dist/tools/fs/types.js.map +1 -0
- package/dist/tools/fs/write-file.d.ts +5 -0
- package/dist/tools/fs/write-file.d.ts.map +1 -0
- package/dist/tools/fs/write-file.js +58 -0
- package/dist/tools/fs/write-file.js.map +1 -0
- package/dist/tools/hooks.d.ts +15 -0
- package/dist/tools/hooks.d.ts.map +1 -0
- package/dist/tools/hooks.js +109 -0
- package/dist/tools/hooks.js.map +1 -0
- package/dist/tools/mcp.d.ts +22 -0
- package/dist/tools/mcp.d.ts.map +1 -0
- package/dist/tools/mcp.js +90 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/plan.d.ts +20 -0
- package/dist/tools/plan.d.ts.map +1 -0
- package/dist/tools/plan.js +86 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/question.d.ts +17 -0
- package/dist/tools/question.d.ts.map +1 -0
- package/dist/tools/question.js +55 -0
- package/dist/tools/question.js.map +1 -0
- package/dist/tools/registry.d.ts +25 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +81 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/sanitizer.d.ts +7 -0
- package/dist/tools/sanitizer.d.ts.map +1 -0
- package/dist/tools/sanitizer.js +50 -0
- package/dist/tools/sanitizer.js.map +1 -0
- package/dist/tools/syntax-check.d.ts +16 -0
- package/dist/tools/syntax-check.d.ts.map +1 -0
- package/dist/tools/syntax-check.js +265 -0
- package/dist/tools/syntax-check.js.map +1 -0
- package/dist/tools/todo.d.ts +19 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +102 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/ui/components/diff-view.d.ts +8 -0
- package/dist/ui/components/diff-view.d.ts.map +1 -0
- package/dist/ui/components/diff-view.js +25 -0
- package/dist/ui/components/diff-view.js.map +1 -0
- package/dist/ui/components/status-bar.d.ts +3 -0
- package/dist/ui/components/status-bar.d.ts.map +1 -0
- package/dist/ui/components/status-bar.js +14 -0
- package/dist/ui/components/status-bar.js.map +1 -0
- package/dist/ui/double-press.d.ts +9 -0
- package/dist/ui/double-press.d.ts.map +1 -0
- package/dist/ui/double-press.js +18 -0
- package/dist/ui/double-press.js.map +1 -0
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +7 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/opentui-renderer.d.ts +53 -0
- package/dist/ui/opentui-renderer.d.ts.map +1 -0
- package/dist/ui/opentui-renderer.js +463 -0
- package/dist/ui/opentui-renderer.js.map +1 -0
- package/dist/ui/readline-renderer.d.ts +30 -0
- package/dist/ui/readline-renderer.d.ts.map +1 -0
- package/dist/ui/readline-renderer.js +97 -0
- package/dist/ui/readline-renderer.js.map +1 -0
- package/dist/ui/renderer.d.ts +35 -0
- package/dist/ui/renderer.d.ts.map +1 -0
- package/dist/ui/renderer.js +2 -0
- package/dist/ui/renderer.js.map +1 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# MMA — Micro Models Agent
|
|
2
|
+
|
|
3
|
+
LLM агент-харнес для маленьких моделей (Qwen3.5-9B, 32K-64K контекст).
|
|
4
|
+
|
|
5
|
+
Работает с OpenAI-совместимыми API: LM Studio, Ollama, vLLM, Together AI и другими.
|
|
6
|
+
|
|
7
|
+
## Установка
|
|
8
|
+
|
|
9
|
+
### Глобально через npm (рекомендуется)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g mma
|
|
13
|
+
|
|
14
|
+
# Проверка:
|
|
15
|
+
mma --version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Из исходников
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git clone <repo>
|
|
22
|
+
cd mma
|
|
23
|
+
npm install
|
|
24
|
+
npm run build
|
|
25
|
+
npm link
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Быстрый старт
|
|
29
|
+
|
|
30
|
+
### 1. Добавьте провайдера
|
|
31
|
+
|
|
32
|
+
Если у вас уже запущен LM Studio на `localhost:1234`:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Провайдер уже есть в конфиге по умолчанию, можно сразу использовать
|
|
36
|
+
mma "Привет! Как тебя зовут?"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Если нужно добавить другого провайдера:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Ollama
|
|
43
|
+
mma provider add ollama http://localhost:11434/v1
|
|
44
|
+
|
|
45
|
+
# vLLM
|
|
46
|
+
mma provider add vllm http://localhost:8000/v1
|
|
47
|
+
|
|
48
|
+
# Together AI
|
|
49
|
+
mma provider add together https://api.together.xyz/v1
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Добавьте модель
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# mma model add <имя_алиас> <model_id> <контекст_в_токенах>
|
|
56
|
+
|
|
57
|
+
mma model add qwen3.5-9b qwen3.5-9b-instruct 32768
|
|
58
|
+
mma model add qwen2.5-14b qwen2.5-14b-instruct 32768
|
|
59
|
+
mma model add deepseek-coder deepseek-coder-6.7b-instruct 16384
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 3. Используйте
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# One-shot режим
|
|
66
|
+
mma "Создай React-компонент для формы входа"
|
|
67
|
+
|
|
68
|
+
# Интерактивный режим (REPL)
|
|
69
|
+
mma
|
|
70
|
+
|
|
71
|
+
# С stdin (пайп)
|
|
72
|
+
cat package.json | mma "Опиши зависимости"
|
|
73
|
+
|
|
74
|
+
# С выбором провайдера/модели
|
|
75
|
+
mma --provider ollama --model qwen3.5:9b "Напиши Dockerfile для Node.js приложения"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Управление провайдерами и моделями
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Провайдеры
|
|
82
|
+
mma provider list # Список провайдеров
|
|
83
|
+
mma provider use ollama # Переключиться на провайдера
|
|
84
|
+
mma provider add <имя> <url> # Добавить провайдера
|
|
85
|
+
mma provider remove <имя> # Удалить провайдера
|
|
86
|
+
|
|
87
|
+
# Модели
|
|
88
|
+
mma model list # Список моделей активного провайдера
|
|
89
|
+
mma model use qwen3.5-9b # Переключиться на модель
|
|
90
|
+
mma model add <имя> <id> <ctx> # Добавить модель
|
|
91
|
+
mma model remove <имя> # Удалить модель
|
|
92
|
+
mma model params [имя] # Параметры модели
|
|
93
|
+
mma model set <имя> k=v # Изменить параметр (temperature=0.5)
|
|
94
|
+
|
|
95
|
+
# Конфиг
|
|
96
|
+
mma config show # Показать весь конфиг
|
|
97
|
+
mma config reset # Сбросить настройки
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Параметры моделей
|
|
101
|
+
|
|
102
|
+
По умолчанию:
|
|
103
|
+
- `temperature`: 0.7
|
|
104
|
+
- `max_tokens`: 4096
|
|
105
|
+
- `top_p`: 0.9
|
|
106
|
+
|
|
107
|
+
Изменить:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
mma model set qwen3.5-9b temperature=0.3 max_tokens=8192
|
|
111
|
+
mma model set qwen3.5-9b seed=42 # для воспроизводимости
|
|
112
|
+
mma model set qwen3.5-9b seed=null # сбросить seed
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Конфигурация
|
|
116
|
+
|
|
117
|
+
Конфиг хранится в `~/.mma/config.json`.
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"providers": {
|
|
122
|
+
"lmstudio": {
|
|
123
|
+
"type": "openai-compat",
|
|
124
|
+
"url": "http://localhost:1234/v1",
|
|
125
|
+
"apiKey": null,
|
|
126
|
+
"models": {
|
|
127
|
+
"qwen3.5-9b": {
|
|
128
|
+
"model": "qwen3.5-9b-instruct",
|
|
129
|
+
"contextWindow": 32768,
|
|
130
|
+
"params": {
|
|
131
|
+
"temperature": 0.7,
|
|
132
|
+
"max_tokens": 4096
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"active": {
|
|
139
|
+
"provider": "lmstudio",
|
|
140
|
+
"model": "qwen3.5-9b"
|
|
141
|
+
},
|
|
142
|
+
"agent": {
|
|
143
|
+
"maxSteps": 50,
|
|
144
|
+
"autoCompact": true,
|
|
145
|
+
"compactThreshold": 0.85,
|
|
146
|
+
"toolTimeout": 120,
|
|
147
|
+
"maxOutputLength": 2000
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Можно также создать `.mmrc` в корне проекта — он смержится поверх глобального конфига.
|
|
153
|
+
|
|
154
|
+
### Переменные окружения
|
|
155
|
+
|
|
156
|
+
| Переменная | Описание |
|
|
157
|
+
|-----------|----------|
|
|
158
|
+
| `MMA_PROVIDER` | Провайдер по умолчанию |
|
|
159
|
+
| `MMA_MODEL` | Модель по умолчанию |
|
|
160
|
+
| `MMA_STDIN=1` | Принудительное чтение stdin |
|
|
161
|
+
| `MMA_TUI=1` | Включить TUI-интерфейс |
|
|
162
|
+
|
|
163
|
+
## Режимы запуска
|
|
164
|
+
|
|
165
|
+
### One-shot
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
mma "Объясни этот код: function fib(n) { return n < 2 ? n : fib(n-1) + fib(n-2); }"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Stdin (пайп)
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
cat main.ts | mma "Найди потенциальные баги"
|
|
175
|
+
curl -s https://api.example.com/data | mma "Проанализируй JSON"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### REPL
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
mma
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
В REPL доступны команды:
|
|
185
|
+
|
|
186
|
+
| Команда | Описание |
|
|
187
|
+
|---------|----------|
|
|
188
|
+
| `/read <file>` | Показать файл с нумерацией строк |
|
|
189
|
+
| `/write <file>` | Записать файл (до EOF) |
|
|
190
|
+
| `/edit <file> <n>` | Заменить строку N в файле |
|
|
191
|
+
| `/find <pattern>` | Поиск файлов по glob |
|
|
192
|
+
| `/search <pattern>` | Поиск содержимого |
|
|
193
|
+
| `/bash <cmd>` | Выполнить shell-команду |
|
|
194
|
+
| `/git <args>` | Git-операции |
|
|
195
|
+
| `/memory` | Показать память |
|
|
196
|
+
| `/memory add <type> <text>` | Добавить в память |
|
|
197
|
+
| `/memory search <query>` | Поиск в памяти |
|
|
198
|
+
| `/skill` | Список навыков |
|
|
199
|
+
| `/sessions` | Список сессий |
|
|
200
|
+
| `/resume <id>` | Восстановить сессию |
|
|
201
|
+
| `/save [name]` | Сохранить сессию |
|
|
202
|
+
| `/clear` | Очистить контекст |
|
|
203
|
+
| `/help` | Справка |
|
|
204
|
+
| `/exit` | Выход |
|
|
205
|
+
|
|
206
|
+
### TUI (экспериментально)
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
mma --tui
|
|
210
|
+
# или
|
|
211
|
+
MMA_TUI=1 mma
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Синтаксис `@file`
|
|
215
|
+
|
|
216
|
+
Загружает файлы в контекст агента:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
mma "@src/index.ts -- объясни эту функцию"
|
|
220
|
+
|
|
221
|
+
# Несколько файлов
|
|
222
|
+
mma "@src/auth/login.ts @src/auth/jwt.ts -- сравни"
|
|
223
|
+
|
|
224
|
+
# Диапазон строк
|
|
225
|
+
mma "@src/index.ts:10-30 -- что здесь происходит?"
|
|
226
|
+
|
|
227
|
+
# Вся директория
|
|
228
|
+
mma "@src/auth/ -- покажи структуру модуля"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Навыки (Skills)
|
|
232
|
+
|
|
233
|
+
Навыки — это Markdown-файлы с инструкциями для модели. Загружаются из:
|
|
234
|
+
- `~/.mma/skills/<name>/SKILL.md`
|
|
235
|
+
- `.agents/skills/<name>/SKILL.md`
|
|
236
|
+
- `.claude/skills/<name>/SKILL.md`
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Использовать навык
|
|
240
|
+
mma "@docker -- помоги контейнеризовать приложение"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Агент: как это работает
|
|
244
|
+
|
|
245
|
+
1. Вы даёте задачу (prompt)
|
|
246
|
+
2. Модель генерирует план и вызывает инструменты через `<tool_call>`
|
|
247
|
+
3. Агент выполняет инструменты и возвращает результат модели
|
|
248
|
+
4. Модель анализирует результат и решает, что делать дальше
|
|
249
|
+
5. Цикл продолжается до завершения задачи (макс. 50 шагов)
|
|
250
|
+
|
|
251
|
+
### Инструменты агента
|
|
252
|
+
|
|
253
|
+
| Инструмент | Описание |
|
|
254
|
+
|-----------|----------|
|
|
255
|
+
| `read_file` | Чтение файла с нумерацией строк |
|
|
256
|
+
| `write_file` | Атомарная запись/создание файла |
|
|
257
|
+
| `edit_file` | Find & replace (точное совпадение) |
|
|
258
|
+
| `list_dir` | Список директории |
|
|
259
|
+
| `create_dir` | Рекурсивное создание директории |
|
|
260
|
+
| `delete_file` | Удаление файла/директории |
|
|
261
|
+
| `copy_file` | Копирование |
|
|
262
|
+
| `move_file` | Перемещение/переименование |
|
|
263
|
+
| `file_info` | Метаданные файла |
|
|
264
|
+
| `glob_search` | Поиск по паттерну |
|
|
265
|
+
| `grep_search` | Поиск по содержимому (regex) |
|
|
266
|
+
| `tree` | Дерево директорий |
|
|
267
|
+
| `bash` | Выполнение команд (npm, git, docker) |
|
|
268
|
+
|
|
269
|
+
## Индексация проекта
|
|
270
|
+
|
|
271
|
+
Агент автоматически строит карту проекта и индекс кода:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# Вручную перестроить
|
|
275
|
+
/build index rebuild
|
|
276
|
+
/build project-map
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Работа с сессиями
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# Автосохранение при выходе
|
|
283
|
+
/save my-session-name
|
|
284
|
+
|
|
285
|
+
# Список сессий
|
|
286
|
+
/sessions
|
|
287
|
+
|
|
288
|
+
# Восстановить
|
|
289
|
+
/resume my-session-name
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Разработка
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
npm run build # Компиляция TypeScript
|
|
296
|
+
npm run dev # Watch-режим
|
|
297
|
+
npm test # Тесты
|
|
298
|
+
npm run test:all # Все тесты
|
|
299
|
+
npm run test:watch # vitest watch
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Публикация новой версии
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
npm version patch # или minor, major
|
|
306
|
+
npm publish
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Лицензия
|
|
310
|
+
|
|
311
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ChatMessage } from '../llm/provider.js';
|
|
2
|
+
export declare class ContextManager {
|
|
3
|
+
private contextWindow;
|
|
4
|
+
private compactThreshold;
|
|
5
|
+
private tokenCache;
|
|
6
|
+
private compacted;
|
|
7
|
+
private _totalTokens;
|
|
8
|
+
private _history;
|
|
9
|
+
constructor(contextWindow: number, compactThreshold?: number);
|
|
10
|
+
get totalTokens(): number;
|
|
11
|
+
get usagePercent(): number;
|
|
12
|
+
get needsCompact(): boolean;
|
|
13
|
+
private scoreMessage;
|
|
14
|
+
updateTokens(messages: ChatMessage[]): Promise<void>;
|
|
15
|
+
compact(messages: ChatMessage[]): ChatMessage[];
|
|
16
|
+
formatUsage(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtD,qBAAa,cAAc;IAOvB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IAP1B,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAA0C;gBAGhD,aAAa,EAAE,MAAM,EACrB,gBAAgB,GAAE,MAAa;IAGzC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,OAAO,CAAC,YAAY;IA+Bd,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IA0E/C,WAAW,IAAI,MAAM;CAmBtB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { countTokens } from '../llm/token-counter.js';
|
|
2
|
+
import { getTheme } from '../styling/index.js';
|
|
3
|
+
export class ContextManager {
|
|
4
|
+
contextWindow;
|
|
5
|
+
compactThreshold;
|
|
6
|
+
tokenCache = new WeakMap();
|
|
7
|
+
compacted = 0;
|
|
8
|
+
_totalTokens = 0;
|
|
9
|
+
_history = [];
|
|
10
|
+
constructor(contextWindow, compactThreshold = 0.85) {
|
|
11
|
+
this.contextWindow = contextWindow;
|
|
12
|
+
this.compactThreshold = compactThreshold;
|
|
13
|
+
}
|
|
14
|
+
get totalTokens() {
|
|
15
|
+
return this._totalTokens;
|
|
16
|
+
}
|
|
17
|
+
get usagePercent() {
|
|
18
|
+
return (this._totalTokens / this.contextWindow) * 100;
|
|
19
|
+
}
|
|
20
|
+
get needsCompact() {
|
|
21
|
+
return this.usagePercent >= this.compactThreshold * 100;
|
|
22
|
+
}
|
|
23
|
+
scoreMessage(msg, index, total) {
|
|
24
|
+
let score = 50; // base
|
|
25
|
+
// Role-based scoring
|
|
26
|
+
if (msg.role === 'system')
|
|
27
|
+
score = 100;
|
|
28
|
+
else if (msg.role === 'tool') {
|
|
29
|
+
const content = msg.content || '';
|
|
30
|
+
if (content.includes('Error') || content.includes('error') || content.includes('FAIL'))
|
|
31
|
+
score = 90;
|
|
32
|
+
else if (content.includes('✓') || content.includes('success'))
|
|
33
|
+
score = 70;
|
|
34
|
+
else
|
|
35
|
+
score = 60;
|
|
36
|
+
}
|
|
37
|
+
else if (msg.role === 'user') {
|
|
38
|
+
const content = (msg.content || '').toLowerCase();
|
|
39
|
+
if (content.includes('decision') || content.includes('важно') || content.includes('critical'))
|
|
40
|
+
score = 85;
|
|
41
|
+
else if (content.includes('?'))
|
|
42
|
+
score = 65;
|
|
43
|
+
else
|
|
44
|
+
score = 60;
|
|
45
|
+
}
|
|
46
|
+
else if (msg.role === 'assistant') {
|
|
47
|
+
const content = (msg.content || '').toLowerCase();
|
|
48
|
+
if (content.includes('error') || content.includes('ошибка'))
|
|
49
|
+
score = 75;
|
|
50
|
+
else if (content.includes(' decided ') || content.includes('решено'))
|
|
51
|
+
score = 70;
|
|
52
|
+
else
|
|
53
|
+
score = 40;
|
|
54
|
+
}
|
|
55
|
+
// Recency bonus (more recent = higher)
|
|
56
|
+
const recencyBonus = (index / total) * 20;
|
|
57
|
+
score += recencyBonus;
|
|
58
|
+
return score;
|
|
59
|
+
}
|
|
60
|
+
async updateTokens(messages) {
|
|
61
|
+
let total = 0;
|
|
62
|
+
this._history = [];
|
|
63
|
+
for (const msg of messages) {
|
|
64
|
+
let t = this.tokenCache.get(msg);
|
|
65
|
+
if (t === undefined) {
|
|
66
|
+
t = await countTokens(msg.content || '');
|
|
67
|
+
this.tokenCache.set(msg, t);
|
|
68
|
+
}
|
|
69
|
+
total += t;
|
|
70
|
+
this._history.push({ role: msg.role, tokens: t });
|
|
71
|
+
}
|
|
72
|
+
this._totalTokens = total;
|
|
73
|
+
}
|
|
74
|
+
compact(messages) {
|
|
75
|
+
if (messages.length <= 4)
|
|
76
|
+
return messages;
|
|
77
|
+
const systemIdx = messages.findIndex(m => m.role === 'system');
|
|
78
|
+
const system = systemIdx >= 0 ? [messages[systemIdx]] : [];
|
|
79
|
+
const keepFirstUser = [];
|
|
80
|
+
const remaining = [];
|
|
81
|
+
for (let i = 0; i < messages.length; i++) {
|
|
82
|
+
if (systemIdx === i)
|
|
83
|
+
continue;
|
|
84
|
+
if (keepFirstUser.length === 0 && messages[i].role === 'user') {
|
|
85
|
+
keepFirstUser.push(messages[i]);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
remaining.push(messages[i]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Score all messages
|
|
92
|
+
const scored = remaining.map((msg, i) => ({
|
|
93
|
+
msg,
|
|
94
|
+
score: this.scoreMessage(msg, i, remaining.length),
|
|
95
|
+
tokens: this.tokenCache.get(msg) || 0,
|
|
96
|
+
}));
|
|
97
|
+
// Sort by score descending
|
|
98
|
+
scored.sort((a, b) => b.score - a.score);
|
|
99
|
+
// Keep top 6 by score + last 6 by position
|
|
100
|
+
const recentMsgs = remaining.slice(-6);
|
|
101
|
+
const recentIds = new Set(recentMsgs.map(m => m));
|
|
102
|
+
const importantByScore = scored
|
|
103
|
+
.filter(s => !recentIds.has(s.msg))
|
|
104
|
+
.slice(0, 6)
|
|
105
|
+
.map(s => s.msg);
|
|
106
|
+
const toCompact = remaining.filter(m => !recentMsgs.includes(m) && !importantByScore.includes(m));
|
|
107
|
+
if (toCompact.length === 0)
|
|
108
|
+
return messages;
|
|
109
|
+
const compactedPairs = [];
|
|
110
|
+
let i = 0;
|
|
111
|
+
while (i < toCompact.length) {
|
|
112
|
+
const user = toCompact[i];
|
|
113
|
+
const assistant = i + 1 < toCompact.length ? toCompact[i + 1] : null;
|
|
114
|
+
if (user.role === 'user' && assistant?.role === 'assistant') {
|
|
115
|
+
const preview = assistant.content.slice(0, 200).replace(/\n/g, ' ');
|
|
116
|
+
compactedPairs.push(`User: ${user.content.slice(0, 100)}... → ${preview}...`);
|
|
117
|
+
i += 2;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
compactedPairs.push(`[${toCompact[i].role}]: ${toCompact[i].content.slice(0, 100)}...`);
|
|
121
|
+
i++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let summary = `[Ранее в разговоре (сжато):\n${compactedPairs.join('\n')}\n]`;
|
|
125
|
+
if (summary.length > 2000) {
|
|
126
|
+
summary = summary.slice(0, 2000) + '\n...]';
|
|
127
|
+
}
|
|
128
|
+
this.compacted++;
|
|
129
|
+
this.tokenCache = new WeakMap();
|
|
130
|
+
return [
|
|
131
|
+
...system,
|
|
132
|
+
...keepFirstUser,
|
|
133
|
+
{ role: 'system', content: summary },
|
|
134
|
+
...importantByScore,
|
|
135
|
+
...recentMsgs,
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
formatUsage() {
|
|
139
|
+
const theme = getTheme();
|
|
140
|
+
const pct = this.usagePercent;
|
|
141
|
+
const barLen = 20;
|
|
142
|
+
const bar = theme.contextBar(pct, barLen);
|
|
143
|
+
const roleTokens = {};
|
|
144
|
+
for (const h of this._history) {
|
|
145
|
+
roleTokens[h.role] = (roleTokens[h.role] || 0) + h.tokens;
|
|
146
|
+
}
|
|
147
|
+
const breakdown = Object.entries(roleTokens)
|
|
148
|
+
.map(([role, tokens]) => `${theme.dim(role)}:${tokens}`)
|
|
149
|
+
.join(' ');
|
|
150
|
+
return `Context: ${theme.highlight(this._totalTokens.toLocaleString())} / ${this.contextWindow.toLocaleString()} tokens (${pct.toFixed(0)}%) ${theme.bracket(`compacted:${this.compacted}`)}
|
|
151
|
+
${bar}
|
|
152
|
+
tokens: ${breakdown}`;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LLMProvider, ChatMessage } from '../llm/provider.js';
|
|
2
|
+
import { ToolRegistry } from '../tools/registry.js';
|
|
3
|
+
import { ContextManager } from './context.js';
|
|
4
|
+
import type { OutputRenderer } from '../ui/renderer.js';
|
|
5
|
+
export interface AgentLoopResult {
|
|
6
|
+
messages: ChatMessage[];
|
|
7
|
+
questionPending?: {
|
|
8
|
+
question: string;
|
|
9
|
+
choices?: string[];
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare function runAgentLoop(provider: LLMProvider, registry: ToolRegistry, prompt: string, contextManager?: ContextManager, previousMessages?: ChatMessage[], renderer?: OutputRenderer, providerName?: string, options?: {
|
|
13
|
+
quiet?: boolean;
|
|
14
|
+
}): Promise<AgentLoopResult>;
|
|
15
|
+
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAU9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA6MxD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC5D;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,cAAc,EAC/B,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAChC,QAAQ,CAAC,EAAE,cAAc,EACzB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,eAAe,CAAC,CA4Y1B"}
|