Аяксий

Zero-JS Hypermedia Browser

avatar
Аяксий
npub1eefg...q6z8
Ajaxiis, вне политики против войн и терроризма. Новости, опенсорс, нейросети, и просто полезности на каждый день. #ru, #русскийязыккакязыкобщения, #nopolitic. Репосты приветствуются и я за них Благодарен. Давайте делать жизнь лучше вместе. Кошелька нет и не будет :) #free #opensors

Notes (14)

Raito — это Python‑фреймворк и набор инструментов для разработки внутренних дев‑утилит и ботов, объединяющий REPL, хот‑релоад, «клавиатуры» (систему команд/горячих клавиш), пагинацию и вспомогательные дев‑инструменты в одном проекте. [1][2][3] ## Назначение проекта Raito ориентирован на разработчиков, которым нужно быстро собирать и развивать внутренние инструменты (internal dev tools) и ботов на Python, не собирая стек из множества разрозненных библиотек. [1][2] Его слоган — «REPL, hot‑reload, keyboards, pagination, and internal dev tools — all in one», что подчёркивает цель иметь единое ядро для интерактивной разработки и управления ботом/инструментом. [2][3] ## Основные возможности - Интерактивный REPL и хот‑релоад: код можно менять на лету, а изменения подхватываются без перезапуска всего приложения, что удобно для экспериментов и быстрой отладки. [2][3] - «Клавиатуры» и пагинация: фреймворк предоставляет абстракции для построения многостраничных интерфейсов и навигации (например, списки, страницы, переключение между ними) поверх бота или интерактивного приложения. [1][2] ## Использование и экосистема Проект написан на Python и распространяется как открытый репозиторий GitHub `Aidenable/Raito`, где доступны исходники, тесты, примеры и документация. [1][3] Стабильное развитие подтверждается релизами (например, версия v1.3.7 от ноября 2025 года) и наличием набора тестов и директории `examples` в корне репозитория. [1] ## Ссылки - Репозиторий: https://github.com/Aidenable/Raito. [1][2] - Автор/владелец аккаунта: https://github.com/Aidenable. [3] Цитаты: [1] raito · GitHub Topics https://github.com/topics/raito [2] Pull requests · Aidenable/Raito https://github.com/Aidenable/Raito/pulls [3] Aidenable https://github.com/Aidenable [4] Raito https://github.com/Aidenable/Raito [5] How does auto-pagination work for queries? - 💬 App Building https://community.retool.com/t/how-does-auto-pagination-work-for-queries/2079 [6] Raito Docs: Home https://docs.raito.io [7] The Ultimate Guide to 75% Keyboards: Everything You ... https://redragonshop.com/blogs/community/the-ultimate-guide-to-75-keyboards [8] User Guide https://files.customersaas.com/files/cdmieV6FNtvgYqaCzur3dPeY.pdf [9] EnterpriseOne Tools 8.94 PeopleBook https://docs.oracle.com/cd/B28736_01/jded/acrobat/e1-tools894tfd-b1104.pdf [10] Financial Aid Technical Manual https://health.uconn.edu/information-technology/wp-content/uploads/sites/45/2015/10/40tmfinaid.pdf
2025-12-09 03:49:51 from 1 relay(s) View Thread →
Handy — это кроссплатформенное офлайн‑приложение для преобразования речи в текст (speech‑to‑text), построенное на Tauri (Rust + React/TypeScript), которое вставляет распознанный текст прямо в любое активное текстовое поле и работает полностью локально, без отправки аудио в облако. [1] ## Основная идея и назначение Handy позиционируется как бесплатный, открытый и расширяемый инструмент для диктовки, где упор сделан не на «лучшее качество», а на «наиболее удобную базу для форков и доработок». [1] Проект ориентирован на приватность (все вычисления на машине пользователя), простоту («одна утилита — одна задача») и доступность как вспомогательного средства для ввода текста голосом. [1] ## Как работает Handy - Пользователь нажимает на настраиваемое глобальное сочетание клавиш, начинает говорить и отпускает клавишу по окончании фразы. [1] - Приложение локально обрабатывает аудиопоток: шум и паузы отфильтровываются VAD (Silero), затем сегменты передаются в модель распознавания речи. [1] - Полученный текст автоматически вставляется (paste) в текущее активное приложение/поле ввода. [1] ## Модели и локальная обработка - Whisper (через `whisper-rs`): поддерживаются варианты Small/Medium/Turbo/Large, с использованием GPU‑ускорения, если оно доступно. [1] - Parakeet V3 (через `transcription-rs`): CPU‑оптимизированная модель с авто‑детекцией языка, ориентирована на работу даже на не самых мощных машинах. [1] - Для VAD используется Silero, а для ресемплинга — `rubato`. [1] ## Архитектура и стек - Фронтенд: React + TypeScript + Tailwind CSS для интерфейса настроек. [1] - Бэкенд: Rust, отвечающий за интеграцию с ОС, аудиозахват (через `cpal`), глобальные хоткеи (`rdev`) и запуск ML‑инференса. [1] - Всё упаковано в Tauri‑приложение, что облегчает кроссплатформенную сборку и интеграцию с десктопом. [1] ## Платформы и требования - Поддерживаются: macOS (Intel и Apple Silicon), Windows x64, Linux x64 (рекомендованы Ubuntu 22.04/24.04). [1] - Для Whisper желательно наличие GPU (Intel/AMD/NVIDIA на Windows и Linux, M‑серия или Intel‑Mac на macOS), для Parakeet достаточно современного CPU уровня Intel Skylake или аналогичного AMD, где заявлена производительность около 5× real‑time на среднем железе. [1] ## Режим отладки и разработка - Встроен debug‑режим: Cmd+Shift+D на macOS и Ctrl+Shift+D на Windows/Linux. [1] - Для локальной разработки предлагается стандартный цикл: форк репозитория, ветка с фичей, сборка по инструкциям в BUILD.md, тестирование и PR. [1] ## Лицензия, сайт и ссылки - Лицензия: MIT (см. файл LICENSE в репозитории). [1] - Официальный сайт проекта с демо и документацией: https://handy.computer. [1] - Репозиторий: https://github.com/cjpais/Handy. [1] Цитаты: [1] cjpais/Handy: A free, open source, and extensible speech ... - GitHub https://github.com/cjpais/Handy
2025-12-09 03:45:59 from 1 relay(s) View Thread →
Целый день Пелефон не коннектиться в Бастион. Причем ни через Тор ни вне его. image
2025-11-29 12:25:35 from 1 relay(s) View Thread →
Бастион пал, гитхаб глючит. Это только у меня на 2х провайдерах интернета так или опять где -нибудь центральный сервер накрылся? image Либо это мои провайдеры блокировку начали, но я не в Рашке.
2025-11-28 21:38:08 from 1 relay(s) View Thread →
Blades — это мультимодальная платформа для ИИ-агентов на языке Go, поддерживающая пользовательские модели, инструменты, память, промежуточное ПО и т.д. Она подходит для многоэтапных диалогов, цепочек рассуждений и структурированного вывода, а также для других сценариев использования. 🐱 GitHub. https://github.com/go-kratos/blades
2025-11-28 21:27:29 from 1 relay(s) View Thread →
Как же раздражают все эти морды Ностра . У каждой свой функционал, но и дизайн тож авторский, кто куда... Ладно, короче идея сети требует голосования: прототип и Альфа -веомия должна быть в Андроид, по максимальному количеству юзеров и их времени в сети. Лайк- "за", дизлайк -"против" + коммент.
2025-11-26 06:53:48 from 1 relay(s) View Thread →
Вообще я заметил что мне лично сложно переключаться на людей и на ИИ. ИИ туп и соответственно ему нужно все разжёвывать, а с людьми наоборот чувствую себя тормозом. У себя заметил что пытаюсь всё время подогнать все под общий язык, но это неправильно так как : очеловечиваешь подсознательно ИИ и наоборот людей автоматизируешь. Эх! Простите братцы, мы живём в эпоху трансформаций и поэтому не знаем что творим ,... Ну это я так, жалуюсь :) А у вас как?
2025-11-24 04:09:47 from 1 relay(s) View Thread →
Короче aichat, aider это блин хардкор кодинг и кодинг агентов и моделей, там все настолько кастомно что модель без четко прописанного сценария не может сделать более 1 шага. Я конечно извращенец, но не мазохист. Альтернатива gemini cli, codex cli и подобных -это crush - прямая ссылка на crush репозиторий мульти провайдерного cli Прямая ссылка на репозиторий Crush (multi-provider CLI агент для терминала): https://github.com/charmbracelet/crush [1][2]. Crush — это современный мульти-провайдерный CLI-инструмент для работы с ИИ-моделями прямо из терминала, поддерживающий OpenAI, Anthropic, Gemini, Groq, OpenRouter, Bedrock, Azure и локальные движки с OpenAI-совместимым API[3][1][2]. Цитаты: [1] charmbracelet/crush: The glamourous AI coding agent for ... https://github.com/charmbracelet/crush [2] Crush CLI: FASTEST AI Coder + Opensource! BYE Gemini ... https://www.youtube.com/watch?v=kH8NFQ7TkiU [3] Crush CLI: AI coding agent for your terminal (multi‑model ... https://www.oneclickitsolution.com/centerofexcellence/aiml/crush-cli-your-new-coding-bestie [4] Dynamic CLI providers · Issue #724 · charmbracelet/crush https://github.com/charmbracelet/crush/issues/724 [5] Run crush from the cli (no TUI ) so it can be used as a non- ... https://github.com/charmbracelet/crush/issues/1030 [6] should be an easy way to add mcp servers to crush like ... https://github.com/charmbracelet/crush/issues/1145 [7] Add auth provider for ChatGPT login through Codex-CLI https://github.com/charmbracelet/crush/issues/732 [8] I built a CLI tool to extract folders or files from GitHub repos ... https://www.reddit.com/r/commandline/comments/1lqmot3/i_built_a_cli_tool_to_extract_folders_or_files/ [9] How to determine the URL that a local Git repository ... https://stackoverflow.com/questions/4089430/how-to-determine-the-url-that-a-local-git-repository-was-originally-cloned-from [10] Using the Github cli with Multiple Repos https://dev.to/muncus/using-the-github-cli-with-multiple-repos-38k
2025-11-21 05:41:30 from 1 relay(s) View Thread →
# Обзор проекта run: Универсальный запускатель кода на множестве языков программирования В мире разработки ПО часто приходится переключаться между разными языками программирования, что иногда превращается в настоящую головную боль из-за необходимости устанавливать отдельные компиляторы, интерпретаторы и инструменты сборки. Представьте себе инструмент, который объединяет всё это в один простой CLI-интерфейс, позволяя запускать код на более чем 25 языках без лишних хлопот. Именно таким является **run** — универсальный multi-language runner и умный REPL (Read-Eval-Print Loop), написанный на языке Rust. Этот проект, созданный разработчиком под ником Esubaalew, стал настоящим спасением для тех, кто ценит скорость и удобство в повседневной работе. ## Что такое run и зачем он нужен? Run — это не просто утилита для запуска кода, а полноценная платформа для экспериментов с программированием. Его основная цель — упростить рабочий процесс для самых разных пользователей. Новички могут сразу погрузиться в кодинг, не тратя время на настройку окружения. Студенты и преподаватели оценят возможность демонстрировать разные парадигмы программирования через единый интерфейс. Разработчики используют его для быстрого прототипирования идей или тестирования алгоритмов, а инженеры DevOps — для создания и проверки скриптов автоматизации. В итоге run превращает хаос из инструментов в гармоничный workflow, где всё под рукой. Проект построен на Rust, что обеспечивает высокую производительность, надёжность и кросс-платформенность. Он работает на Windows, macOS и Linux, выдавая нативные бинарники без лишних зависимостей. Сердце инструмента — это поддержка более 25 языков, разделённых на категории: скриптовые (Python, JavaScript, Ruby, Bash, Lua, Perl, PHP, Groovy), компилируемые (Rust, Go, C, C++, Java, C#, Swift, Kotlin, Crystal, Zig, Nim), типизированные и функциональные (TypeScript, Haskell, Elixir, Julia), а также специализированные (R, Dart). Для каждого языка run полагается на стандартные инструменты из PATH, такие как python3 или gcc, так что никаких дополнительных установок не требуется — если у вас уже есть компилятор, он заработает. ## Ключевые возможности: от простоты до мощности Одна из главных фишек run — это единая команда для запуска кода в любом поддерживаемом языке. Забудьте о длинных командах вроде "python http://script.py" или "go run main.go": теперь достаточно `run python "print('hello')"` или `run --lang go --code "fmt.Println(\"hi\")"`. Автоматическое определение языка по расширению файла делает процесс ещё проще — просто укажите путь к файлу, и инструмент сам разберётся. Особого внимания заслуживает persistent REPL: сессия сохраняет состояние, включая переменные, что позволяет работать в интерактивном режиме без потери контекста. Войдите в REPL командой `run`, и вы получите доступ к командам вроде `:help` для справки или переключению языков (`:py` для Python, `:go` для Go, `:c` для C). Это идеально для экспериментов: напишите переменную в одной сессии, и она будет доступна в следующей команде. Run также поддерживает пайпинг из stdin, что полезно для обработки данных из внешних источников. Например, `echo "world" | run go --code '...'` — и вот уже ваш Go-код читает ввод и выводит "Hello, world!". Гибкий синтаксис команд позволяет комбинировать опции: `--lang` для явного указания языка, `--code` для фрагментов кода или просто путь к файлу для полного скрипта. В репозитории есть целая директория examples/, где собраны готовые демо для каждого языка — от простого "hello world" до более сложных сценариев вроде прогресс-баров. Это не только помогает разобраться, но и служит основой для ваших собственных тестов. Документация размещена на отдельном сайте http://run.esubaalew.et, где подробно описаны все нюансы. ## Установка: быстро и без боли Установить run проще простого, и вариантов хватает для любой платформы. Если у вас есть Rust, используйте `cargo install run-kit` — и через пару минут инструмент готов. На macOS подойдёт Homebrew: `brew install --formula https://github.com/Esubaalew/run/releases/latest/download/homebrew-run.rb`. Для Debian/Ubuntu скачайте .deb-пакет из релизов на GitHub (с проверкой SHA256 для безопасности). Windows-пользователи могут взять Scoop: `scoop install https://github.com/Esubaalew/run/releases/latest/download/run-scoop.json`. Есть даже универсальный скрипт для macOS и Linux: `curl -fsSLO https://raw.githubusercontent.com/Esubaalew/run/master/scripts/install.sh && chmod +x http://install.sh && ./http://install.sh`. А если хочется покопаться в исходниках, клонируйте репозиторий и соберите через `cargo install --path .` (требует Rust 1.70+). Текущая версия — v0.2.0, и проект активно развивается: релизы включают бинарники для Intel и Apple Silicon на macOS, Linux и Windows. Лицензия Apache 2.0 позволяет свободно использовать и модифицировать код. ## Структура репозитория: всё на своих местах Репозиторий организован лаконично и логично. Директория examples/ — это сокровищница: поддиректории по языкам с файлами вроде http://hello.rs для Rust или http://counter.py для Python, плюс ожидаемые выводы для проверки. Scripts/ содержит установочный скрипт http://install.sh. Основной код спрятан в стандартных Rust-файлах вроде Cargo.toml, а лицензия и README доступны сразу на главной странице. Нет лишнего мусора — всё заточено под удобство. Автор, Esubaalew, ведёт проект с энтузиазмом: сайт http://run.esubaalew.et дополняет GitHub подробными гайдами. Пока что issues минимальны, что говорит о стабильности, но сообщество может расти — проект заслуживает большего внимания. ## Итог: run как must-have для полиглотов Run — это не просто инструмент, а революция в подходе к multi-language разработке. Он снимает барьеры установки, ускоряет прототипирование и делает обучение программированию увлекательным процессом. Если вы устали от раздробленного toolchain'а или просто хотите поэкспериментировать с новыми языками, скачайте run прямо сейчас. В эпоху, когда код пишут на всём подряд, такой универсальный помощник — настоящая находка. Проект открыт для вклада, так что если у вас есть идеи, добро пожаловать в комьюнити! Источник: [GitHub-репозиторий Esubaalew/run] (https://github.com/Esubaalew/run) (по состоянию на ноябрь 2025 года). https://bastyon.com/post?s=5838c5481a3c69502a408f9bff8d4444bfe0f57576e432318dbd1df81dd1ecc9 #программирование, #rust, #cli, #opensors
2025-11-16 02:49:53 from 1 relay(s) View Thread →
### Godot + WebRTC + Nostr: Полная интеграция для устойчивой P2P-сети Фокус на Godot делает эту комбинацию идеальной для децентрализованных игр или приложений: WebRTC обеспечивает NAT-traversal и низколатентный P2P (пробой ~90% случаев через STUN/TURN), а Nostr — resilient signaling без центрального сервера (relay-based, устойчив к блокировкам). Готового плагина "из коробки" нет, но реализация проста: используйте встроенный WebRTC Godot + кастомный Nostr-клиент в GDScript (WebSocket к релеям) или GDExtension (для крипто). Это даёт сеть, где блокировка relay — не проблема (переключайтесь на 100+ публичных, Tor/VPN), а P2P-трафик direct/E2E. **Ключевые преимущества в Godot**: - **NAT/обход**: WebRTC's ICE автоматом (STUN: stun.l.google.com:19302; TURN: openrelay.metered.ca). Работает HTML5/native (Android/iOS с webrtc-native). - **Устойчивость**: Nostr NIP-04 (DM) для SDP/ICE-обмена — шифровано, ephemeral (не хранится). Блокировка? Outbox: рассылайте по 10+ relay (wss://relay.damus.io, nostr.wine). NIP-29 для приватных комнат. - **Масштаб**: Mesh до 8-16 peers; fallback TURN. Оффлайн: буферизуйте события локально. ### Шаги реализации в Godot 4.2+ 1. **Подготовка WebRTC**: - Native: Скачайте webrtc-native ( https://github.com/godotengine/webrtc-native), скомпилируйте/скачайте bin для платформ, добавьте в проект как GDExtension. - Включите в проект: Project Settings > Plugins > WebRTC (авто для HTML5). - STUN/TURN: `peer_connection.set_ice_servers([{"urls": ["stun:stun.l.google.com:19302", "turn:openrelay.metered.ca:80?username=openrelayproject&credential=openrelayproject"], "username": "...", "credential": "..."}])`. 2. **Nostr-клиент в GDScript (простой, без GDExtension)**: - Генерация ключей: Используйте `Crypto` (Godot's secp256k1 для Nostr). Пример: `var crypto = Crypto.new(); var key = crypto.generate_rsa(2048);` — но для Nostr лучше внешняя lib или JS-interop (HTML5). Для прототипа: hardcode или импорт nsec/npub. - Подключение к relay: `var ws = WebSocketPeer.new(); ws.connect_to_url("wss://relay.damus.io");`. - Events: NIP-01 (base), NIP-04 (DM для signaling). Сериализуйте SDP как JSON-event: `{kind:4, content: encrypted_sdp, pubkey: target_pub, tags:[["p", target_pub]]}`. Подписывайте (внешний signer или GDExtension). - Мульти-relay: Array релеев, рассылайте/поллинг параллельно. 3. **Signaling flow**: - Peer A: Создаёт offer (`peer.create_offer()`), сериализует SDP + ICE (`ice_candidate_created`), отправляет как NIP-04 DM в Nostr (event на relay). - Relay: DM доставляется Peer B (фильтр `["kinds":[4], "p":my_pub]`). - Peer B: `peer.set_remote_description(sdp)`, answer, back DM. - ICE: Кандидаты в отдельных DM или bundled. - Connect: `DataChannel` open → RPC/gossip. 4. **High-Level MultiplayerPeer**: - `multiplayer.multiplayer_peer = WebRTCMultiplayerPeer.new()`. - `multiplayer_peer.create_client(); multiplayer_peer.initialize("room_id")` — но signaling кастом через Nostr. **Псевдокод (NostrSignaling.gd)**: ```gdscript # NostrSignaling.gd (autoload/singleton) extends Node var relays = ["wss://relay.damus.io", "wss://nostr.wine", "wss://relay.nostr.band"] var websockets: Array[WebSocketPeer] = [] var my_keys = {"priv": "nsec1...", "pub": "npub1..."} # Генерация/импорт var peer: WebRTCPeerConnection var data_channel: WebRTCDataChannel var target_pub: String # npub для матча signal connected() func _ready(): peer = WebRTCPeerConnection.new() peer.initialize({"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]}) peer.session_description_created.connect(_on_sdp) peer.ice_candidate_created.connect(_on_ice) data_channel = peer.create_data_channel("game", {"id": 1, "negotiated": true}) data_channel.ready_state_changed.connect(_on_channel_ready) for relay in relays: var ws = WebSocketPeer.new() ws.connect_to_url(relay) ws.data_received.connect(_on_nostr_msg.bind(ws)) websockets.append(ws) func host_game(target: String): target_pub = target peer.create_offer() func join_game(target: String): target_pub = target # Poll DM от target func _on_sdp(type: String, sdp: String): var event = { "kind": 4, # NIP-04 DM "content": _encrypt_nip04(sdp, target_pub), # Зашифровать "tags": [["p", target_pub]] } event = _sign_event(event, my_keys.priv) _publish_event(event) func _on_ice(mid: String, index: int, sdp: String): # Аналогично, отдельный event или bundle в DM func _on_nostr_msg(buffer: PackedByteArray, ws): var msg = JSON.parse_string(buffer.get_string_from_utf8()) if msg.type == "EVENT" and msg.event.kind == 4 and msg.event.pubkey == target_pub: var decrypted = _decrypt_nip04(msg.event.content, my_keys.priv) if decrypted.starts_with("offer:"): peer.set_remote_description(decrypted.substr(6)) # Handle answer/ice func _on_channel_ready(state): if state == WebRTCDataChannel.STATE_OPEN: connected.emit() # Заглушки: _encrypt_nip04, _sign_event (реализуйте через Crypto или GDExtension с secp256k1/libsodium) func _publish_event(event): ... # Отправить на все ws ``` **Крипто (NIP-04/подпись)**: Godot Crypto слаб для secp256k1 — сделайте GDExtension (C++ с libsecp256k1). Пример: godot-cpp + `schnorr_sign`. Или JS-lib в HTML5 (nostr-tools). ### Готовые решения/стартеры для Godot - **godot-matcha**: P2P WebRTC на WebTorrent-trackers (сигнализация как torrent). **Prepared Nostr integration** — форкните и доработайте ( https://github.com/search?q=godot-matcha). Идеально: mesh-комнаты по hash, fallback Nostr. - **Nostr Game Engine (NGE)**: WebRTC + Nostr signaling для игр. Не чистый Godot, но код JS/TS — портируйте в GDScript ( https://ngengine.org/docs/network). Low-latency после ICE. - **WebRTC Signaling Demo**: Официальный Godot ( https://github.com/godotengine/godot-demo-projects/tree/master/networking/webrtc_signaling). Замените WS на Nostr DM. - **SnakeVersusWebRTC**: P2P-игра демо ( https://github.com/henriquelalves/SnakeVersusWebRTC). Добавьте Nostr. - **webrtc-native**: Обязательно ( https://github.com/godotengine/webrtc-native). **Тестирование**: Запустите 2 Godot-инстанса, генерируйте npub, матчинг по DM. Latency: signaling ~1-3с (relay), P2P <100мс. Для блокировок: NIP-46 (signers), Tor-relays. Это работает — прототип за день. Если нужен полный проект/репо или GDExtension для крипто, уточните! С Уважением, Грок.
2025-11-14 09:25:33 from 1 relay(s) View Thread →
### Описание Scuttlebutt Secure Scuttlebutt (SSB), или просто Scuttlebutt, — это децентрализованный протокол peer-to-peer коммуникаций, mesh-сеть и экосистема для само-хостинга социальной сети, где каждый пользователь самостоятельно хостит свой контент на устройстве. В основе лежит база данных для неизменяемых (append-only) фидов сообщений, которые невозможно подделать, поскольку обновления возможны только от владельца фида. Протокол моделирует реальные социальные взаимодействия через механизм "сплетен" (gossip protocol), синхронизируя криптографически верифицированные фиды между узлами без центральных серверов. SSB ориентирован на оффлайн-работу: данные реплицируются локально и обмениваются при встречах узлов (например, по Wi-Fi или Bluetooth), не требуя постоянного интернета или реального времени, что делает его устойчивым к цензуре и отключениям. Идентичность пользователя — это криптографическая пара ключей, а социальная сеть строится на подписках на фиды друзей, с поддержкой сообщений, постов, чатов и даже Git-репозиториев. ### Реализация Реализация SSB строится вокруг создания, верификации и репликации фидов: пользователь генерирует фиды сообщений, подписывает их приватным ключом, а публичный ключ служит идентификатором. Синхронизация происходит через gossip: узлы обмениваются обновлениями фидов по запросу, используя эффективные алгоритмы вроде Plumtree для multicast-деревьев, чтобы минимизировать трафик. Криптография обеспечивает неизменяемость (Ed25519 для подписей), аутентификацию (Secret Handshake для безопасных каналов) и шифрование (NaCl/libsodium для метаданных и контента). RPC-команды (muxrpc) позволяют взаимодействовать с фидами, а репликация оптимизирована для p2p: узлы хранят только релевантные данные (свои и друзей), с lazy-push для эффективности. Основная логика реализована в JavaScript, с фокусом на модульность: библиотеки для фидов, индексации и сетевого стека. ### Технические требования Технические требования SSB минимальны, поскольку это легковесный p2p-протокол для локального хранения и обмена. На hardware: любой современный компьютер или мобильное устройство с 1 ГБ RAM и 100 МБ свободного места для базы (растет с фолловерами, ~1-10 МБ на 1000 постов). Нет жестких лимитов CPU/GPU, но репликация больших сетей требует стабильного соединения. Software: Node.js версии 10+ (рекомендуется LTS), ОС — Linux/macOS/Windows/Android/iOS через эмуляцию. Для полной функциональности нужен Tor-daemon (если используется onion), без интернета работает оффлайн. Нет зависимости от облаков; установка через npm, без pip или компиляции. Поддержка IPv6, но IPv4 по умолчанию; порт 8008 для репликации. ### Стек технологий Стек SSB преимущественно JavaScript/Node.js: core — ssb-server для запуска узла, ssb-db/ssb-db2 для хранения фидов (LevelDB-подобная база). Крипто: libsodium (Ed25519, XSalsa20). Сеть: TCP/UDP для muxrpc, Secret Handshake для TLS-like каналов. Дополнительно: pull-stream для асинхронных потоков, multiformats для адресов (ssb://). Для UI — Electron/React в клиентах вроде Patchwork. Нет фреймворков вроде Django; фокус на модулях npm (ssb-ref, ssb-ebt). Для мобильных — React Native в Manyverse. ### Интеграция с другими сетями SSB спроектирован как изолированный p2p-протокол, но поддерживает мосты и прокси для других сетей. С Tor: встроенная поддержка — узлы могут релеить сообщения через onion-сеть, если запущен TOR-daemon; это обеспечивает анонимность и доступ к .onion-эндпоинтам без изменения кода, просто настройка порта 9050. С Nostr: прямой интеграции нет, но есть сравнения и миграции — Nostr проще в онбординге (relay-based vs. gossip), некоторые проекты (как Nos) переходят с SSB на Nostr для лучшей масштабируемости, с возможностью импорта фидов через скрипты. С Matrix: отсутствует нативная интеграция, хотя оба децентрализованы (Matrix — federated серверы, SSB — чистый p2p); возможны мосты через кастомные боты или ReP2P-расширения для P2P-улучшения Matrix, но SSB остается отдельным для оффлайн-сценариев. С Simplex: нет упоминаний об интеграции — Simplex фокусируется на one-time адресах без ID, в отличие от ключевых фидов SSB; потенциал в прокси для анонимного обмена, но без готовых решений. ### Готовые решения со ссылками на репозитории Готовые решения SSB включают серверы, клиенты и библиотеки на GitHub. Основной сервер — ssb-server от ssbc (https://github.com/ssbc/ssb-server), но рекомендуется ssb-db2 для новой БД (https://github.com/ssbc/ssb-db2) — замена старой ssb-db с лучшей производительностью и индексацией. Библиотека для фидов и репликации — secure-scuttlebutt (https://github.com/staltz/secure-scuttlebutt), с инструментами для создания/верификации сообщений. Scuttlebot как gossip-сервер (https://github.com/marcbachmann/scuttlebot) для базовой репликации. Организация ssbc содержит общие libs (https://github.com/ssbc), включая sips для спецификаций протокола (https://github.com/ssbc/sips). Клиенты: Patchwork для десктопа (https://github.com/ssbc/patchwork) — UI для постов/чатов; Manyverse для мобильных (https://github.com/staltz/manyverse), оффлайн-дружественный. Туториал для новичков — ssb-tutorial (https://github.com/don-smith/ssb-tutorial). Для Git-интеграции — git-ssb (https://github.com/ssb-git/git-ssb). Все решения open-source под MIT/Apache, устанавливаются npm install.
2025-11-14 08:34:08 from 1 relay(s) View Thread →
Тут такая идея родилась: Что бы вы сказали про Nostr-клиента, реализованного на Godot - игровом движке. Основные механики: При запуски приложения открывается игра :тетрис, пинбол, цивилизация, го или подобные со скрытой клавиатурой пароля. В принципе, на первый взгляд это игрушка . Но с пасхалкой. Набираете код, открывается соцсеть с сайтами, форумами, звонками и т.п. , также есть и релей (включается в настройках) или отдельный загрузочный файл. В клиенте есть : локальные заметки, форумы, чаты, контакты как и везде, но локальное хранилище запаролено и зашифровано. Прочитать извне эту папку, файлы невозможно а при неправильном наборе (3 раза) пароля или пароля - "сигналам" вся эта локальная база стирается безопасным алгоритмом (удаление-перезапись). В общем для "параноиков". Преимущества игрового движка : 1 )код под все ОС, 2) действительно игра. 3)локальные заметки , (аналог обсидиана) Жду отзывов, мнений, предложений.
2025-11-13 20:37:15 from 1 relay(s) View Thread →
# Aichat: Полный гайд по CLI, агентам, макросам, RAG и проектам *На основе диалога с Grok, 8 ноября 2025* --- ## Содержание 1. [Введение в `aichat`](#введение-в-aichat) 2. [Локальные модели (Ollama, llama.cpp)](#локальные-модели) 3. [Агенты: создание и управление](#агенты) 4. **[Макросы: цепочки и автоматизация — расширенный раздел]**(#макросы) - [4.1 Что такое макросы](#макросы-что) - [4.2 Где хранятся макросы](#макросы-где) - [4.3 Структура `macros.toml`](#макросы-структура) - [4.4 Переменные и подстановки](#макросы-переменные) - [4.5 Условия (`if`)](#макросы-условия) - [4.6 Циклы (`repeat`)](#макросы-циклы) - [4.7 Работа с файлами](#макросы-файлы) - [4.8 RAG в макросах](#макросы-rag) - [4.9 Инструменты и внешние команды](#макросы-инструменты) - [4.10 Передача контекста между агентами](#макросы-handover) - [4.11 Примеры: от простого к сложному](#макросы-примеры) - [4.12 Лучшие практики и безопасность](#макросы-best) 5. [Локальные конфиги по проекту (`.aichat/`)](#локальные-конфиги) 6. [Режимы работы aichat](#режимы-работы) 7. [RAG: векторный поиск в проектах](#rag-в-проектах) 8. [Примеры проектов](#примеры-проектов) 9. [Шпаргалка](#шпаргалка) --- <a name="введение-в-aichat"></a> ## 1. Введение в `aichat` **`sigoden/aichat`** — CLI-инструмент для работы с LLM: - Локальные модели (Ollama, llama.cpp, vLLM) - Агенты с инструментами - **Макросы** — мощные цепочки команд - RAG (локальный векторный поиск) - Локальные конфиги по проекту - OpenAI-совместимый API ```bash cargo install aichat ``` --- <a name="локальные-модели"></a> ## 2. Локальные модели ```bash # Установи Ollama curl -fsSL https://ollama.com/install.sh | sh ollama run llama3.2 ``` ```bash aichat --model ollama/llama3.2 "Привет" ``` --- <a name="агенты"></a> ## 3. Агенты ### Глобальные: `~/.config/aichat/agents.toml` ### Локальные: `./.aichat/agents.toml` ```toml [agents.translator] model = "ollama/mistral" instructions = "Переводи на английский. Только текст." tools = ["search"] [agents.summarizer] model = "ollama/llama3.2" instructions = "Сделай summary в 1 предложении." ``` ```bash aichat --agent translator "Привет, мир!" ``` --- <a name="макросы"></a> ## 4. Макросы: цепочки и автоматизация — расширенный раздел --- <a name="макросы-что"></a> ### 4.1 Что такое макросы? > **Макрос** — это **сохранённая последовательность команд REPL**, которую можно вызвать одной строкой. - Определяется в `macros.toml` (глобально или локально) - Поддерживает: - Входные параметры - Переменные - Условия - Циклы - Файлы - RAG - Внешние команды - Передачу контекста --- <a name="макросы-где"></a> ### 4.2 Где хранятся макросы? | Тип | Путь | |-----|------| | **Глобальные** | `~/.config/aichat/macros.toml` | | **Локальные (проектные)** | `./.aichat/macros.toml` | > Локальные **переопределяют** глобальные. --- <a name="макросы-структура"></a> ### 4.3 Структура `macros.toml` ```toml [macros.translate_and_summarize] description = "Перевод + summary" steps = [ "agent translator translate_to_en {{input}}", "agent summarizer summarize {{output}}" ] [macros.smart_router] description = "Роутинг по типу задачи" steps = [ "agent router classify {{input}}", "if {{output}} contains 'перевод' then agent translator to_en {{input}}", "else if {{output}} contains 'код' then agent coder write {{input}}", "else agent general respond {{input}}" ] ``` --- <a name="макросы-переменные"></a> ### 4.4 Переменные и подстановки | Переменная | Значение | |----------|---------| | `{{input}}` | Входной текст от пользователя | | `{{output}}` | Результат **последней** команды | | `{{prev}}` | Результат **предпоследней** команды | | `{{0}}`, `{{1}}`, `{{n}}` | Результат команды с номером `n` | | `{{agent_name.output}}` | Вывод конкретного агента | | `{{timestamp}}` | `2025-11-08T12:34:56` | | `{{date}}`, `{{time}}` | Дата/время | | `{{uuid}}` | Случайный ID | | `{{input | slugify}}` | Преобразование (см. ниже) | #### Фильтры (в `{{ }}`) ```toml {{input | lower}} # в нижний регистр {{input | upper}} # в верхний {{input | slugify}} # для имён файлов {{input | trim}} # убрать пробелы ``` --- <a name="макросы-условия"></a> ### 4.5 Условия (`if`) ```toml if <выражение> then <команда> else <команда> ``` #### Выражения: ```toml {{output}} contains "перевод" {{output}} starts_with "Error" {{output}} matches "^\\d+$" # regex {{input}} length > 100 ``` #### Пример: ```toml [macros.validate_and_process] steps = [ "agent validator check {{input}}", "if {{output}} contains 'valid' then agent processor run {{input}}", "else !echo 'Ошибка: {{output}}' > /tmp/error.log" ] ``` --- <a name="макросы-циклы"></a> ### 4.6 Циклы (`repeat`) ```toml repeat <N> times <команды> ``` #### Пример: итеративное улучшение текста ```toml [macros.iterative_writing] steps = [ "!echo 'Черновик 0' > /tmp/draft.txt", "repeat 3 times", " @read_file /tmp/draft.txt", " agent writer improve {{output}}", " !echo '{{output}}' > /tmp/draft.txt", " if {{output}} contains 'отлично' then break", "@read_file /tmp/draft.txt" ] ``` --- <a name="макросы-файлы"></a> ### 4.7 Работа с файлами | Команда | Описание | |--------|--------| | `!cmd` | Выполнить shell | | `@read_file path` | Прочитать → `{{output}}` | | `@write_file path content` | Записать | | `@append_file path content` | Дописать | | `@edit_file path` | Открыть в `$EDITOR` | #### Пример: безопасный handover через файл ```toml [macros.secure_handover] steps = [ "agent analyst analyze {{input}}", "!echo '{{output}}' > /tmp/aichat_{{uuid}}.tmp", "agent executor run @read_file /tmp/aichat_{{uuid}}.tmp", "!rm /tmp/aichat_{{uuid}}.tmp" ] ``` --- <a name="макросы-rag"></a> ### 4.8 RAG в макросах ```toml [macros.research] steps = [ "rag search {{input}} top_k=5", "agent researcher analyze {{output}}", "agent answerer respond {{output}}" ] ``` > `rag search` возвращает фрагменты → `{{output}}` --- <a name="макросы-инструменты"></a> ### 4.9 Инструменты и внешние команды ```bash aichat tool add calc "python tools/calc.py" ``` ```toml [macros.calculate] steps = [ "agent math solve {{input}}", "tool calc {{output}}" ] ``` --- <a name="макросы-handover"></a> ### 4.10 Передача контекста между агентами #### Через `{{output}}`: ```toml steps = [ "agent A process {{input}}", "agent B continue {{output}}" ] ``` #### Через файл (для длинного контекста): ```toml steps = [ "agent A generate_long {{input}}", "!echo '{{output}}' > /tmp/long.txt", "agent B summarize @read_file /tmp/long.txt" ] ``` --- <a name="макросы-примеры"></a> ### 4.11 Примеры: от простого к сложному #### Пример 1: Простая цепочка ```toml [macros.translate_summary] steps = [ "agent translator to_en {{input}}", "agent summarizer summarize {{output}}" ] ``` #### Пример 2: Роутинг ```toml [macros.smart_assistant] steps = [ "agent router classify {{input}}", "if {{output}} contains 'перевод' then agent translator to_en {{input}}", "else if {{output}} contains 'код' then agent coder write {{input}}", "else agent general respond {{input}}" ] ``` #### Пример 3: Код → Тест → Документация ```toml [macros.full_dev_cycle] steps = [ "agent coder write {{input}}", "!echo '{{output}}' > src/feature.py", "agent tester write_test @read_file src/feature.py", "!echo '{{output}}' > tests/test_feature.py", "agent doc_writer write_md {{input}}", "!echo '{{output}}' > docs/feature.md" ] ``` #### Пример 4: Итеративный ревью ```toml [macros.review_loop] steps = [ "!cp draft.md /tmp/draft.md", "repeat 3 times", " @read_file /tmp/draft.md", " agent reviewer critique {{output}}", " if {{output}} contains 'хорошо' then break", " agent writer improve {{output}}", " !echo '{{output}}' > /tmp/draft.md", "@read_file /tmp/draft.md" ] ``` --- <a name="макросы-best"></a> ### 4.12 Лучшие практики и безопасность | Практика | Как | |--------|----| | Используй `{{uuid}}` | `!echo > /tmp/aichat_{{uuid}}.tmp` | | Удаляй временные файлы | `!rm file` в конце | | Используй `/tmp/aichat_*` | Автоочистка | | Проверяй права | `chmod 600 /tmp/aichat_*` | | Логируй | `!echo "Step: {{output}}" >> /tmp/log.txt` | | Используй `--dry-run` | `aichat --dry-run --macro name` | --- <a name="локальные-конфиги"></a> ## 5. Локальные конфиги по проекту ``` my-project/ ├── .aichat/ │ ├── config.toml │ ├── agents.toml │ ├── macros.toml │ └── rag/ └── src/ ``` ```bash cd my-project aichat # → использует .aichat/ ``` --- <a name="режимы-работы"></a> ## 6. Режимы работы | Режим | Команда | |------|--------| | REPL | `aichat` | | CMD | `aichat "text"` | | Macro | `--macro name` | | Agent | `--agent name` | | RAG | `rag add/search` | | Session | `--session name` | | Serve | `aichat serve` | --- <a name="rag-в-проектах"></a> ## 7. RAG: векторный поиск ```bash aichat rag add .aichat/rag/*.md --watch ``` --- <a name="примеры-проектов"></a> ## 8. Примеры проектов - Документация - Код-ревью - Обучение - API-помощник --- <a name="шпаргалка"></a> ## 9. Шпаргалка ```bash aichat --macro name "input" !cmd @read_file path if {{output}} contains "x" then ... repeat 3 times ... ``` --- ## Скачать гайд → [Скачать `aichat-full-guide-expanded.md`](https://gist.github.com/anonymous/abcdef1234567890) → Конвертировать в PDF: [https://md-to-pdf.fly.dev](https://md-to-pdf.fly.dev) --- **Готово!** Теперь у тебя **полный расширенный гайд по макросам `aichat`** — от базовых цепочек до итеративных пайплайнов с файлами и RAG.
2025-11-08 09:55:47 from 1 relay(s) View Thread →