@iola_adm/iola-cli 0.1.78 → 0.1.80

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 (3) hide show
  1. package/README.md +4 -6
  2. package/package.json +1 -1
  3. package/src/cli.js +2 -10
package/README.md CHANGED
@@ -151,17 +151,16 @@ iola version --check
151
151
 
152
152
  ## Возможности
153
153
 
154
+ - интеграция с публичным MCP-сервером Йошкар-Олы;
154
155
  - поиск и выгрузка открытых данных;
155
156
  - локальная SQLite-БД, история, сессии и FTS-поиск;
156
157
  - AI-профили для Ollama, OpenAI, OpenRouter и Codex CLI;
157
158
  - локальный tool-agent для слабых моделей с минимальными tools `search_data`, `get_card`, `export_report`, `file_read`, `browser_open`;
158
159
  - ленивые skills, toolsets, permissions, memory, hooks и готовые agents;
159
160
  - subagents, skill bundles, layered settings, usage/budget accounting и trajectory export;
160
- - полноценный локальный MCP server по stdio/http: tools, resources и prompts;
161
- - MCP-мост для локальной модели: встроенный `iola-local` доступен как `mcp:iola-local:TOOL`;
162
- - вопросы по открытым данным сначала идут в публичный remote MCP `https://apiiola.yasg.ru/mcp`
163
- через `layer_suggest`, `layer_query`, `layer_get` и `layer_answer_context`, а локальная БД/API
164
- остаются fallback;
161
+ - локальный MCP-сервер по stdio/http для подключения iola-cli к другим AI-клиентам;
162
+ - ответы по открытым данным берутся из публичного MCP `https://apiiola.yasg.ru/mcp`;
163
+ - локальная БД и прямой API используются как резерв, если публичный MCP временно недоступен;
165
164
  - дополнительные stdio MCP-серверы можно добавить в `~/.iola/config.json` в раздел `mcp.servers`;
166
165
  - браузерный runtime через Playwright: чтение страниц, скриншоты, PDF, клики, ввод и eval;
167
166
  - управляемые локальные файловые операции с режимами `locked`, `read-only`, `workspace-write`, `full-access`;
@@ -173,4 +172,3 @@ iola version --check
173
172
  - расширенный `iola onboard` с установкой 7-Zip, браузерного runtime, Ollama, Codex CLI и настройкой выбранных компонентов;
174
173
  - cron-задачи, локальный daemon, web dashboard и RPC для автоматизаций;
175
174
  - контекстные файлы `IOLA.md` и `.iola/context.md`;
176
- - интеграция с публичным MCP-сервером Йошкар-Олы.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.78",
3
+ "version": "0.1.80",
4
4
  "description": "CLI и AI-агент городского округа Йошкар-Ола.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/adm-iola/iola-cli#readme",
package/src/cli.js CHANGED
@@ -774,7 +774,7 @@ async function startAgentReadline() {
774
774
  }
775
775
 
776
776
  async function startAgentRawInput() {
777
- const state = { history: [], buffer: "", selected: 0, slashOffset: 0, slashOpen: false, running: false, renderedInputLines: 0, renderedLines: 0, cursorRowsBelow: 0, rawMode: true, pendingOutput: "", aiStatus: null };
777
+ const state = { history: [], buffer: "", selected: 0, slashOffset: 0, slashOpen: false, running: false, renderedInputLines: 0, renderedLines: 0, rawMode: true, pendingOutput: "", aiStatus: null };
778
778
  const wasRaw = input.isRaw;
779
779
  activateRawInput(input);
780
780
 
@@ -1328,32 +1328,24 @@ function renderAgentInput(state) {
1328
1328
  }
1329
1329
  }
1330
1330
 
1331
- const renderedLines = [...inputLines, "", ...menuLines, cwdLine];
1331
+ const renderedLines = [cwdLine, ...menuLines, ...inputLines];
1332
1332
  output.write(renderedLines.join("\n"));
1333
- if (output.isTTY) {
1334
- state.cursorRowsBelow = 2 + menuLines.length;
1335
- output.write(`\x1b[${state.cursorRowsBelow}A`);
1336
- }
1337
1333
  if (output.isTTY) {
1338
1334
  const cursorColumn = visibleLength(inputLines[inputLines.length - 1]);
1339
1335
  output.write(`\x1b[${cursorColumn + 1}G`);
1340
1336
  }
1341
1337
  state.renderedInputLines = inputLines.length;
1342
1338
  state.renderedLines = renderedLines.length;
1343
- if (!output.isTTY) state.cursorRowsBelow = 0;
1344
1339
  }
1345
1340
 
1346
1341
  function clearAgentInputArea(state = null) {
1347
1342
  if (!output.isTTY) return;
1348
1343
  const renderedLines = Math.max(1, Number(state?.renderedLines || state?.renderedInputLines || 1));
1349
- const cursorRowsBelow = Math.max(0, Number(state?.cursorRowsBelow || 0));
1350
- if (cursorRowsBelow > 0) output.write(`\x1b[${cursorRowsBelow}B`);
1351
1344
  if (renderedLines > 1) output.write(`\x1b[${renderedLines - 1}A`);
1352
1345
  output.write("\r\x1b[0J");
1353
1346
  if (state) {
1354
1347
  state.renderedInputLines = 0;
1355
1348
  state.renderedLines = 0;
1356
- state.cursorRowsBelow = 0;
1357
1349
  }
1358
1350
  }
1359
1351