{"_id":"@aist-ai/code","_rev":"4-7e082a968dcaad49a27cecc7c8b9de0a","name":"@aist-ai/code","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@aist-ai/code","version":"0.1.0","_id":"@aist-ai/code@0.1.0","maintainers":[{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"}],"bin":{"aist-code":"dist/index.js"},"dist":{"shasum":"22cc9fc868b12350e2de3ba49c086daadd27b8f3","tarball":"https://registry.npmjs.org/@aist-ai/code/-/code-0.1.0.tgz","fileCount":2,"integrity":"sha512-sPfKFI8DcvzrELmaJ2aQR2touKR8N4ll7VyaVsuNE622ZtAnif1OTJYH8+x9FWJL3Cb/+Qw0x0JgDzlnxfAP+A==","signatures":[{"sig":"MEYCIQDp0h8BE9OPePbIpHvq6RpY472RLjKS4GsBC4ud47USIwIhAPdo5DHO3otXJSFMMLwhKgXa0DoaoxOGgsysZKJZjss/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96988},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"42bd1d3e8fb109e00a4fc1edadf6cb195429bc46","scripts":{"dev":"tsup --watch","test":"tsx --test tests/*.test.ts","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"},"_npmVersion":"10.9.8","description":"Исполнитель тулов aist-code-bridge на машине пользователя","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.0.0","@aist/code-protocol":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/code_0.1.0_1784853457446_0.8172262537788413","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aist-ai/code","version":"0.1.1","_id":"@aist-ai/code@0.1.1","maintainers":[{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"}],"bin":{"aist-code":"dist/index.js"},"dist":{"shasum":"cfdc7f20d6f4507329cb1f455d63701795888fc5","tarball":"https://registry.npmjs.org/@aist-ai/code/-/code-0.1.1.tgz","fileCount":2,"integrity":"sha512-xqOeGKs1bONt7AlaK2uSXXfOMCORUTNMqgE4Mcvklf3MwNl4jIiDlIvfCuGnY91Wx6NLcba/mUW1ytwE3sTfkw==","signatures":[{"sig":"MEUCIQDN/60aS4Z/QyE9SuCtvYeukIY9kJKGSrTdC/QLtW2SYAIgEhydpPnX72VE/AQ/NhiuJVzysZrO0FMYszlFULJb31w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97011},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"92acc4ff568432968d75617d14ec220ca2b4c95a","scripts":{"dev":"tsup --watch","test":"tsx --test tests/*.test.ts","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"},"_npmVersion":"10.9.8","description":"Исполнитель тулов aist-code-bridge на машине пользователя","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.0.0","@aist/code-protocol":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/code_0.1.1_1784854696812_0.7172400791339257","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aist-ai/code","version":"0.2.0","_id":"@aist-ai/code@0.2.0","maintainers":[{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"}],"bin":{"aist-code":"dist/index.js"},"dist":{"shasum":"c4a7310cfab124396c4a799b64f4ecd56c44f5f1","tarball":"https://registry.npmjs.org/@aist-ai/code/-/code-0.2.0.tgz","fileCount":3,"integrity":"sha512-DEKRPRBLPbKk1Sur9ZMjRocNtQTfFqQ8BAdHmtKJH6W/JY2yODgQmbVNDt46WJs28A4W+MWsFFofEOoIQ6Wyfw==","signatures":[{"sig":"MEUCIFKfBWaxy4GXHDQIngIKlQ4/RcTZuKccSmf/TodDsu5RAiEAzHfKFFuuaQNLLdRIbdzylCnE4kUZc7T8LveQgqEGoms=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111531},"main":"./dist/index.js","type":"module","engines":{"node":">=22"},"gitHead":"5cc767f7c482bfe6d848b0df5229b7ac6dabf4a8","scripts":{"dev":"tsup --watch","test":"tsx --test tests/*.test.ts","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"},"_npmVersion":"10.9.8","description":"Исполнитель тулов aist-code-bridge на машине пользователя","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.3.5","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.0.0","@aist/code-protocol":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/code_0.2.0_1784893903637_0.6034590211043027","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aist-ai/code","version":"0.2.1","description":"Исполнитель тулов aist-code-bridge на машине пользователя","type":"module","bin":{"aist-code":"dist/index.js"},"main":"./dist/index.js","scripts":{"build":"tsup","dev":"tsup --watch","type-check":"tsc --noEmit","test":"tsx --test tests/*.test.ts"},"dependencies":{"ws":"^8.18.0","zod":"^4.3.6"},"devDependencies":{"@aist/code-protocol":"0.1.0","@types/node":"^22.0.0","@types/ws":"^8.5.13","tsup":"^8.3.5","tsx":"^4.19.2","typescript":"^5.7.2"},"engines":{"node":">=22"},"_id":"@aist-ai/code@0.2.1","gitHead":"66d5cd09e2ca2cc16101c9fd57ef1ae8ad341944","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-DmJ4wyBVN49dYnnIOZOYXfjoyeYPGE/wvu1pVO53x/gIqvTFJyY/N1S2zhcY2RDHuqAmbuJ7/g2v2a9z/6Zk+w==","shasum":"c0f38d0d5c0ec0a2f9f17a70bf9e113b4ba7dbf8","tarball":"https://registry.npmjs.org/@aist-ai/code/-/code-0.2.1.tgz","fileCount":3,"unpackedSize":112959,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDoCv4UEbSLh49Yq/ZKKuPK9HwbaZ60sjuWIYq5DGi+CwIgGXkGbkLhRJ96lZCUSpgpk+G0YxLE0Trvv3CctH9m+dQ="}]},"_npmUser":{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"},"directories":{},"maintainers":[{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/code_0.2.1_1786706451835_0.22778238864048284"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-24T00:37:37.321Z","modified":"2026-08-14T11:20:52.360Z","0.1.0":"2026-07-24T00:37:37.594Z","0.1.1":"2026-07-24T00:58:16.971Z","0.2.0":"2026-07-24T11:51:43.780Z","0.2.1":"2026-08-14T11:20:52.139Z"},"description":"Исполнитель тулов aist-code-bridge на машине пользователя","maintainers":[{"name":"bashkirsky-kot","email":"silentwasd@gmail.com"}],"readme":"# @aist-ai/code\n\nCLI-агент Aist, который даёт ассистенту в веб-интерфейсе доступ к репозиторию **на вашей машине**. Вы ставите пакет, привязываете устройство к аккаунту и выбираете рабочие папки — дальше ассистент из чата может читать файлы, искать по коду, смотреть git-diff и (если вы разрешили) редактировать файлы и запускать команды.\n\nЕсть и второй клиент — **`aist-code-daemon`**: то же самое, но значком в системном трее, без Node и без терминала, с нативным выбором папки, когда «добавить проект» нажимают в браузере (`packages/daemon` в репозитории `aist-code-bridge`). CLI остаётся правильным выбором там, где графики нет: серверы, SSH, CI. Привязка и список папок у них общие — можно пользоваться обоими, но не одновременно: устройство одно, соединение одно.\n\nКлючевой принцип: **содержимое репозитория никуда не выгружается**. Тулы исполняются локально, наружу уходят только их результаты — ровно то, что ассистент запросил в рамках разрешённого вами режима.\n\n```\nбраузер ──► чат Aist ──► бридж ──wss──► @aist/code (ваша машина)\n```\n\n## Установка\n\nНужен **Node.js ≥ 22**.\n\n```bash\nnpm install -g @aist-ai/code\n```\n\nКоманда ставит бинарь `aist-code`.\n\n## Быстрый старт\n\n```bash\n# 1. Привязать устройство к аккаунту (device code flow)\naist-code login\n\n# 2. Добавить рабочую папку (по умолчанию — текущую)\naist-code add .\n\n# 3. Держать соединение и исполнять вызовы из чата\naist-code start\n```\n\n`login` покажет короткий код и ссылку — откройте её в браузере, где вы вошли в Aist, и подтвердите привязку. Токен устройства сохранится в `~/.config/aist/code/credentials.json` с правами `0600`.\n\nПосле `start` в терминале живёт компактный лог событий: подключение к бриджу, добавление папок и каждый вызов тула с итогом.\n\n```\n◆ @aist-ai/code 0.2.0\n  бридж  wss://llm-code-dev.aistcorp.com/bridge/v1\n  папки  /home/user/my-project\n\n11:32:08 ● подключено  device=dev_01HX connection=conn_9f2a\n11:32:09 → read_file    src/index.ts\n11:32:09 ✔ read_file    src/index.ts  1.2 KB · 34 ms\n11:32:12 → run_command  npm test\n11:32:20 ✔ run_command  npm test  7.8 KB · 8 s\n```\n\n## Команды\n\n| Команда | Назначение |\n|---|---|\n| `aist-code login` | Привязать устройство к аккаунту, сохранить токен |\n| `aist-code start` | Держать соединение с бриджем и исполнять вызовы во всех папках реестра |\n| `aist-code add [<путь>]` | Добавить папку в реестр (по умолчанию текущую) |\n| `aist-code remove <путь>` | Убрать папку из реестра |\n| `aist-code ls` | Показать папки реестра |\n| `aist-code status` | Показать привязку, права на файл токена и состояние workspace |\n| `aist-code logout` | Удалить локальный токен устройства |\n\n### Флаги `start`\n\n| Флаг | Что делает |\n|---|---|\n| `--dir <путь>` | Добавить папку в реестр перед запуском |\n| `--bridge-url <url>` | Переопределить адрес бриджа |\n| `--debug` | Сырой построчный лог (ISO-время + JSON) вместо компактного вывода |\n| `--verbose` | Добавить диагностические сообщения |\n\nПо умолчанию вывод — компактный и цветной. Цвет отключается переменной `NO_COLOR` или при выводе не в терминал.\n\n## Режимы доступа и безопасность\n\nЧто именно позволено ассистенту, определяет **режим доступа**, выбранный в веб-интерфейсе:\n\n- **read** — только чтение: список файлов, чтение, поиск, `git status` / `git diff`.\n- **edit** — read + запись и редактирование файлов.\n- **full** — edit + запуск произвольных команд (`run_command`).\n\nПроверки дублируются: сервер решает, что разрешено *просить*, а CLI повторно решает, что будет *исполнено* — клиент никогда не доверяет серверу в вопросе, что запускать на вашей машине.\n\nПоверх любого режима действуют жёсткие ограничения:\n\n- Всё замкнуто на выбранные папки: путь проверяется по `realpath`, выход за workspace невозможен, симлинки наружу не проходят.\n- **Deny-list**: `.env`, приватные ключи, `credentials` и подобные файлы не читаются никогда, ни в одном режиме.\n- Секреты, случайно попавшие в результат тула, редактируются перед отправкой.\n\nПривязка `login` авторизует **только машину**. Папки добавляются отдельно и только явно — из чата расширить реестр нельзя.\n\n## Файлы\n\n| Путь | Что это |\n|---|---|\n| `~/.config/aist/code/credentials.json` | Токен устройства и адреса (права `0600`) |\n| `~/.config/aist/code/workspaces.json` | Реестр рабочих папок |\n\n`aist-code logout` удаляет токен; папки при этом остаются в реестре.\n\n## Ссылки\n\n- Протокол бриджа и модель безопасности: `docs/protocols/BRIDGE.md` в репозитории `aist-code-bridge`.\n- Проблемы и вопросы — issue-трекер проекта.\n","readmeFilename":"README.md"}