Merge branch 'origin/main' into main

This commit is contained in:
2026-05-20 20:11:27 +06:00
10 changed files with 220 additions and 28 deletions
View File
+1
View File
@@ -0,0 +1 @@
{}
+3
View File
@@ -0,0 +1,3 @@
views:
- type: table
name: Table
+1 -1
View File
@@ -12,7 +12,7 @@ tags:
- media
created: '2026-05-20'
updated: '2026-05-20'
status: planned
status: deployed
---
# *arr Stack на Тайге — Setup & Config
@@ -381,21 +381,21 @@ Primary locations:
### Q6: Canonical credential and tool inventory
| Service | Access type | Credential | Status |
|---|---|---|---|
| **Asana** | Read + Write | `ASANA_API_KEY` in `~/.config/personal-os/env` | **Still in file. Verify + revoke.** |
| **Asana MCP (×2)** | Read + Write | Same PAT, via Anthropic-hosted MCP | **Remove both connectors from Claude.ai.** |
| **GitHub** | Read + Write (push, PR, CI) | `gh` CLI (keychain or SSH) | **Verify + rotate.** |
| **Discord** | Read + Write | `DISCORD_BOT_TOKEN` in `~/.hermes/.env` | Active. Full server access. |
| **Anthropic/Claude API** | Execute (LLM) | `CLAUDE_CODE_OAUTH_TOKEN` in `~/.hermes/.env` | Active. Primary executor engine. |
| **OpenRouter** | Execute (LLM fallback) | `OPENROUTER_API_KEY` in `~/.hermes/.env` | Active. |
| **Telegram** | Write | `TELEGRAM_BOT_TOKEN` in `~/.hermes/.env` | Active. Not used by executor. |
| **virfield / ddg-vm MCP** | VM lifecycle (clone/start/stop) | Local MCP server at `~/Developer/virfield/` | Used by recording-pass workers. |
| **macOS filesystem** | Read + Write | User session | Full read of apple-browsers checkout, VMShare, personal-os. Write to logs, worktrees, prompts. |
| **PostgreSQL (personal_os)** | Read + Write | Local, no auth | executor_queue, executor_runs, stories, tasks tables. |
| **Zulip** | Read + Write | `ZULIP_API_KEY` in `~/.hermes/.env` | Active. Post-migration platform. |
| **Obsidian vault** | Read + Write | Local MCP server | Full vault access. |
| **Hermes cron system** | Read + Write | Local process | Agent read/modified jobs.json, paused/deleted cron jobs. |
| Service | Access type | Credential | Status |
| ---------------------------- | ------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Asana** | Read + Write | `ASANA_API_KEY` in `~/.config/personal-os/env` | **Still in file. Verify + revoke.** |
| **Asana MCP (×2)** | Read + Write | Same PAT, via Anthropic-hosted MCP | **Remove both connectors from Claude.ai.** |
| **GitHub** | Read + Write (push, PR, CI) | `gh` CLI (keychain or SSH) | **Verify + rotate.** |
| **Discord** | Read + Write | `DISCORD_BOT_TOKEN` in `~/.hermes/.env` | Active. Full server access. |
| **Anthropic/Claude API** | Execute (LLM) | `CLAUDE_CODE_OAUTH_TOKEN` in `~/.hermes/.env` | Active. Primary executor engine. |
| **OpenRouter** | Execute (LLM fallback) | `OPENROUTER_API_KEY` in `~/.hermes/.env` | Active. |
| **Telegram** | Write | `TELEGRAM_BOT_TOKEN` in `~/.hermes/.env` | Active. Not used by executor. |
| **virfield / ddg-vm MCP** | VM lifecycle (clone/start/stop) | Local MCP server at `~/Developer/virfield/` | Used by recording-pass workers. |
| **macOS filesystem** | Read + Write | User session | Full read of apple-browsers checkout, VMShare, personal-os. Write to logs, worktrees, prompts. |
| **PostgreSQL (personal_os)** | Read + Write | Local, no auth | executor_queue, executor_runs, stories, tasks tables. |
| **Zulip** | Read + Write | `ZULIP_API_KEY` in `~/.hermes/.env` | Active. Post-migration platform. |
| **Obsidian vault** | Read + Write | Local MCP server | Full vault access. |
| **Hermes cron system** | Read + Write | Local process | Agent read/modified jobs.json, paused/deleted cron jobs. |
**Services confirmed NOT accessible at the time:**
- Email (IMAP/SMTP) — not configured
+100 -5
View File
@@ -15,6 +15,75 @@ tags:
> **Cross-platform (reflect-skip):** `~/Developer/reflect-skip/` — Skip Fuse, iOS + Android
> Gitea: `git.mallexxx.duckdns.org/git_admin/reflect-app`
## F-Droid Internal Repo
| Параметр | Значение |
|---|---|
| **URL** | `https://reflect.qentra.top` |
| CF Tunnel | mbp black (same as zulip.qentra.top), hostname reflect → localhost:8766 |
| CF Token (Zone:DNS) | `cfat_iKrPBaTAqlL8Zo7Ss4EHaiGqRGxBK4RDVX78jhgD51fdd7a1` |
| Сервер | `python3 ~/Developer/reflect-skip/scripts/fdroid-server.py` (LaunchAgent: com.reflect.fdroid-server) |
| Workspace | `~/Developer/reflect-skip/fdroid-workspace/` — подписанный репо, генерируется `fdroid update` |
### Как устроен деплой
Репо генерируется через **fdroidserver** (`pip3 install fdroidserver`), а не вручную.
HTTP-сервер (`fdroid-server.py`) раздаёт содержимое `fdroid-workspace/repo/` — там лежат подписанные `index-v1.jar`, `entry.jar`, `index-v2.json`.
Ключевые файлы workspace:
```
fdroid-workspace/
├── config.yml ← repo_url, keystore, имя репо
├── keystore.p12 ← подписывающий ключ (не коммитить)
└── repo/ ← раздаётся HTTP-сервером
├── index-v1.jar ← подписанный JAR (Droid-ify требует его)
├── entry.jar ← новый формат entry point
├── index-v2.json
└── reflect-app-debug.apk
```
### Сборка и публикация APK
```bash
cd ~/Developer/reflect-skip
# Полная сборка (Xcode + Gradle) + публикация
bash scripts/build-and-publish.sh
# Быстрая (только Gradle, если Swift не менялся)
bash scripts/build-and-publish.sh --quick
```
`build-and-publish.sh` вызывает `generate-index.sh`, который:
1. Копирует APK в `fdroid-workspace/repo/`
2. Запускает `fdroid update -c` (JAVA_HOME=/opt/homebrew/opt/openjdk@21)
3. Генерирует подписанные JAR и JSON индексы
### Первоначальная настройка (один раз)
```bash
cd ~/Developer/reflect-skip/fdroid-workspace
# Удалить старый keystore если есть, создать новый
keytool -genkey -v \
-keystore keystore.p12 -storetype PKCS12 \
-alias fdroid -storepass reflect123 -keypass reflect123 \
-keyalg RSA -keysize 2048 -validity 10000 \
-dname "CN=Reflect App, O=Dev, C=US"
# Сгенерировать репо
ANDROID_HOME=~/Library/Android/sdk \
JAVA_HOME=/opt/homebrew/opt/openjdk@21 \
PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH" \
fdroid update -c
```
### Добавить репо в Droid-ify
Settings → Repositories → **+** → `https://reflect.qentra.top`
> ⚠️ URL без `/repo` — сервер уже раздаёт содержимое `fdroid-workspace/repo/` напрямую с корня.
---
## Статус (2026-05-19)
@@ -52,6 +121,17 @@ tags:
---
## Android Signing
**Keystore:** `~/.android/signing/nolvu-release.jks` (вне репо, не в git)
**Fingerprint (SHA-256):** `9A:17:73:F0:A7:4E:8C:7B:2E:AA:D5:0F:AD:FC:71:84:92:D1:88:FB:04:2F:32:56:63:12:ED:3E:28:3E:2B:F7`
**keystore.properties:** `Android/app/keystore.properties` (в .gitignore, абсолютный путь к keystore)
- storeFile: `/Users/admin/.android/signing/nolvu-release.jks`
- keyAlias: `nolvu` / пароли: `nolvu2026`
> При переезде на новую машину — скопировать `~/.android/signing/nolvu-release.jks` и пересоздать `Android/app/keystore.properties` с правильным путём.
> Fingerprint при этом останется тем же — пользователям переподключать репо не нужно.
## Android / Skip Fuse — сборка
### Требования
@@ -270,13 +350,28 @@ Documents/UserProfile/
## Локальный AI прокси
```bash
cd ~/Developer/reflect-app # iOS проект
python3 proxy_server.py --backend claude-code # OAuth через Hermes
# или
python3 proxy_server.py --backend ollama --ollama-model qwen2.5:7b
cd ~/Developer/reflect-skip
PROXY_TOKEN=<token> PROXY_BACKEND=claude-code PROXY_PORT=8765 python3 proxy_server.py
```
В Settings приложения: AI Backend → Локальный сервер → URL сервера.
### Публичный endpoint (ai.qentra.top)
| Параметр | Значение |
|---|---|
| **URL** | `https://ai.qentra.top` |
| CF Tunnel | Кракен, тот же connector, маршрут `ai.qentra.top → localhost:8765` |
| **Proxy Token** | `bab835a69b4073c32a283472658d8815bfae59d8` |
| Заголовок | `X-Proxy-Token: <token>` |
| Backend | `claude-code` (OAuth через `~/.claude/.credentials.json`) |
| Запуск | `PROXY_TOKEN=<token> PROXY_BACKEND=claude-code PROXY_PORT=8765 python3 proxy_server.py` |
**Защита:** `GET /health` публичный. `POST /v1/messages` без токена → 401.
**DevSetupView (debug):** при первом запуске debug-сборки — экран ввода URL + токена.
Сохраняет в UserDefaults, переключает backend на `localProxy`, флаг `dev_setup_done = true`.
В релизной сборке (`#if DEBUG`) экран не показывается.
В Settings: AI Backend → Локальный сервер → URL + Токен.
---
@@ -0,0 +1,93 @@
---
created: '2026-05-20'
updated: '2026-05-20'
tags:
- project
- landing
- marketing
- nolvu
status: live
---
# Nolvu Landing Page
> Waitlist лендинг для AI-приложения рефлексии (Nolvu).
> Связанные: [[overview]], [[marketing-strategy]], [[marketing-hooks]]
---
## Текущий статус
**URL:** https://nolvu.qentra.top
**Репо:** https://git.mallexxx.duckdns.org/git_admin/nolvu-landing
**Локально:** `~/Developer/nolvu-landing/`
| Компонент | Статус |
|---|---|
| Лендинг (HTML) | ✅ Live |
| HTTPS (CF Origin Cert + Full Strict) | ✅ Работает |
| Email waitlist форма | ✅ Работает |
| Подписчики | `/var/www/nolvu/subscribers.txt` на VPS |
| Email-уведомления (Gmail) | ⏳ Нужен App Password |
| Gitea репо | ✅ `git_admin/nolvu-landing` |
---
## Инфраструктура
**VPS:** `91.207.28.205` (nginx 1.22.1)
- `/var/www/nolvu/` — статика
- systemd: `nolvu-subscribe.service` → Python HTTP сервер на порту 8765
- nginx: `/etc/nginx/sites-available/nolvu`
- SSL: CF Origin Certificate (`/etc/ssl/nolvu-origin.pem`)
**Cloudflare:** qentra.top → Proxied, SSL mode = Full (strict)
---
## Деплой изменений
```bash
# Локально
cd ~/Developer/nolvu-landing
# ... правки ...
git add -A && git commit -m "описание" && git push
# На VPS
scp index.html root@91.207.28.205:/var/www/nolvu/index.html
# subscribe.py после правок:
scp subscribe.py root@91.207.28.205:/var/www/nolvu/subscribe.py
ssh root@91.207.28.205 'systemctl restart nolvu-subscribe'
```
---
## Email-уведомления (настроить)
В `/etc/systemd/system/nolvu-subscribe.service` прописать Gmail App Password:
```
Environment=GMAIL_USER=mallexxx@gmail.com
Environment=GMAIL_PASS=<16-char app password>
```
Затем: `systemctl daemon-reload && systemctl restart nolvu-subscribe`
Получить App Password: myaccount.google.com → Security → 2FA → App passwords
---
## Бэклог улучшений
### 🔴 Срочно
- [ ] Gmail App Password → уведомления на mallexxx@gmail.com
### 🟠 Следующее
- [ ] **Rotating диалоги** — несколько пар вопрос/ответ с анимированной сменой каждые ~5 сек
- Источники для подбора: тред `personal/Психолог` в Zulip + `marketing-hooks.md`
- Принцип: не личное, но узнаваемое. «У меня всё замечательно! Помогите.»-тон
- Примерно 5–7 кейсов: усталость, петли, ADHD, откладывание, отношения
- [ ] Добавить раздел «Что это» — 3 коротких тезиса (не AI-психолог, а зеркало)
- [ ] Нейминг: проверить nolvu.ai → зарегистрировать когда решим
### 🟡 Позже
- [ ] OG-теги для расшаривания в соцсетях
- [ ] Счётчик подписчиков (публичный) для social proof
- [ ] Переехать на nolvu.ai когда домен будет куплен
@@ -82,7 +82,7 @@
### Анкета A — Имя
```
Как тебя называть?
Как к тебе обращаться?
[текстовое поле — необязательно] [→ Пропустить]
```
+1 -1
View File
@@ -13,7 +13,7 @@ related:
- '[[personal/psychology/observations/2026-W20]]'
- '[[personal/psychology/prompts]]'
---
# Психологический профиль — Александр
# Психологический профиль — Алексей
> Живой документ. Обновляется еженедельным агентом + при значимых изменениях.
> Связан с: [[father-profile]], [[user-profile]], [[ai-psychologist-research]]
+5 -5
View File
@@ -1,13 +1,13 @@
## Inbox Triage — 2026-05-20 (since 2026-05-19T19:38)
## Inbox Triage — 2026-05-20 (since 2026-05-20T16:38:22)
### New / Changed — Action Required
*(nothing requiring immediate action)*
_(nothing requiring immediate response)_
### New / Changed — Monitoring
- **[Desktop Browser Feature Owner Survey [anonymous, 5 minute timebox]](https://app.asana.com/0/0/1214940335721015)** — new assignment (inbox) · due May 26 · 5 min survey, anonymous. No reply needed, just complete before deadline.
- **New task (self-captured)** — [Address Universal Input (UTI) issues](https://app.asana.com/0/0/1214965000075517) — created by Alex M, assigned to Alex M at 16:48 — section: inbox, no project yet. Needs triage / project assignment.
### Nothing new
### Nothing new (external signals)
No new human comments on open tasks, no @mentions since last run (19:38 Almaty).
No new comments from others, no external task assignments, no @mentions since last run.