docs: consolidate current Virfield release and remove legacy notes
This commit is contained in:
1 parent
0e4202c5de
commit
3c0895e62c
11 files changed
+152
-272
No files matched your search
@@ -1,6 +1,7 @@
|
||||
# Hermes Eagle — example config (tokens redacted)
|
||||
# Source: ~/.hermes/config.yaml
|
||||
# Copy back: cp this ~/.hermes/config.yaml (then restore api_key from password manager)
|
||||
# Reference only: merge required settings into the active config; do not overwrite it.
|
||||
# Virfield entry updated 2026-09-30; replace placeholders before use.
|
||||
|
||||
model:
|
||||
default: claude-sonnet-4-6
|
||||
@@ -26,10 +27,14 @@ mcp_servers:
|
||||
command: mcpvault
|
||||
args:
|
||||
- /Users/admin/obsidian
|
||||
ddg-vm:
|
||||
command: npx
|
||||
# Virfield v2: copy paths/args from deployment launchd/mcp.json.
|
||||
# Replace /ABSOLUTE/DEPLOYMENT; no token values belong in this example.
|
||||
virfield:
|
||||
command: /ABSOLUTE/DEPLOYMENT/bin/virfield-mcp
|
||||
args:
|
||||
- tsx
|
||||
- /Users/admin/Developer/virfield/server/mcp-server.ts
|
||||
- -url
|
||||
- http://127.0.0.1:7780
|
||||
- -token-file
|
||||
- /ABSOLUTE/DEPLOYMENT/token
|
||||
|
||||
# zulip / api keys — restored from password manager
|
||||
@@ -108,7 +108,7 @@ PID-file-based — survives Dashboard restarts without crashing.
|
||||
| claude_proxy_node | Claude Proxy (node) | localhost | daemon |
|
||||
| claude_proxy_python | Claude Proxy (python) | localhost | daemon |
|
||||
| asana_mcp | Asana MCP | localhost | daemon |
|
||||
| virfield | Virfield | localhost | daemon |
|
||||
| virfield | [[personal/projects/virfield\|Virfield v2]] | `127.0.0.1:7780` by default | separate system LaunchDaemons; dashboard integration not verified |
|
||||
|
||||
### ML
|
||||
|
||||
@@ -328,7 +328,7 @@ When a launchd cron is created and `launchctl print gui/<uid>/<label>` shows `la
|
||||
- Backend create now rejects non-`every` for launchd (frontend validator also blocks)
|
||||
- `_list_launchd_crons()` now shows ALL plists (schedule: "none (manual)" if no StartInterval/StartCalendarInterval)
|
||||
|
||||
**Virfield port conflict** — if previously a LaunchAgent (plist deleted but still loaded), stop it: `launchctl stop com.virfield.server && launchctl remove com.virfield.server`.
|
||||
**Virfield (обновлено 2026-09-30):** lifecycle сервисов принадлежит system LaunchDaemons `ai.virfield.virfieldd` и `ai.virfield.lume`, работающим от VM owner. Диагностика конфликтов портов и service update — по [Operations](https://github.com/mallexxx/virfield/blob/main/docs/OPERATIONS.md#system-services). Интеграция Dashboard с этими jobs отдельно не проверялась; текущий статус проекта — [[personal/projects/virfield]].
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -100,7 +100,6 @@ executor-autonomous (LLM agent, every 30 min)
|
||||
- runs gh CLI (GitHub: open PRs, check CI, push branches)
|
||||
- posts full reasoning trace to Discord thread
|
||||
- posts completion comment to Asana task
|
||||
- optionally: runs virfield VM tests (recording pass)
|
||||
```
|
||||
|
||||
This job was **paused** on 2026-05-11 in the "Include UI Tests screencasts" thread. Replaced by:
|
||||
@@ -122,7 +121,6 @@ During the live period, the executor autonomously:
|
||||
- Read source code from `apple-browsers.git` local checkout
|
||||
- Posted CI/status updates to Discord
|
||||
- Posted Asana comments (unauthorized — see Section 3)
|
||||
- Managed virfield VM lifecycle (clone, start, run tests, stop, delete)
|
||||
|
||||
---
|
||||
|
||||
@@ -215,8 +213,7 @@ These are co-workers whose PR authorship was surfaced in Discord via `gh pr list
|
||||
|
||||
### 3.5 Infrastructure details disclosed
|
||||
|
||||
- VM names: `uitest-26.4.1-golden`, `uitest-17-pinned-rec`, `uitest-bug08-rec`, `uitest-bug08b-rec`, `uitest-tooltip-rec`, `uitest-bug02-rec`, `macos-15-golden`
|
||||
- Local paths: `/Users/admin/DuckDuckGo/apple-browsers.git/`, `/Users/admin/VMShare/`, `/Users/admin/Developer/personal-os/`
|
||||
- Local paths: `/Users/admin/DuckDuckGo/apple-browsers.git/`, `/Users/admin/Developer/personal-os/`
|
||||
- DB schema: `executor_queue`, `executor_runs`, field names, state values
|
||||
- Hermes cron job IDs: `24fcdd1b40e0`, `62768b8cccad`, `531b242c30ad`, `e409b72d23a1`
|
||||
|
||||
@@ -357,7 +354,7 @@ The comment capability was the floor. Full account CRUD was the ceiling.
|
||||
| GitHub PR data | PR numbers, titles, descriptions, review comments, CI status | PRs #4483, #4541, #4548, #4559, #4591, #4608, #4609, #4610, #4611 |
|
||||
| Source code | File paths, function names, grep matches, code fragments | Swift files from `apple-browsers`, Cursor rules |
|
||||
| Team member names | PR authors, reviewers | brindy, federicocappelli, pikorddg, jaceklyp, jleandroperez, Sam S |
|
||||
| Infrastructure | VM names, local file paths, DB schema, cron IDs | Full list in Section 3.5 |
|
||||
| Infrastructure | Local file paths, DB schema, cron IDs | Full list in Section 3.5 |
|
||||
| Planning data | Daily briefs, task priorities, AOR assignments, inbox summaries | Entire `#daily-brief` channel history |
|
||||
|
||||
**Data confirmed NOT sent to Discord:**
|
||||
@@ -399,8 +396,7 @@ Primary locations:
|
||||
| **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. |
|
||||
| **macOS filesystem** | Read + Write | User session | Full read of apple-browsers checkout, 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. |
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
namespace: work
|
||||
tags: [system, architecture]
|
||||
last_updated: 2026-04-28
|
||||
virfield_updated: 2026-09-30
|
||||
confidence: 1.0
|
||||
---
|
||||
|
||||
@@ -51,7 +52,7 @@ See: `personal-os-purpose.md`
|
||||
- Worktree at `~/DuckDuckGo/apple-browsers.git/.claude/worktrees/executor-{gid}-{slug}/`
|
||||
- Always `git fetch origin main` + branch from `origin/main`
|
||||
- State machine in `executor_runs` table
|
||||
- For UI tests: spins VM via ddg-vm MCP (virfield), cleans up on PR close/merge
|
||||
- UI-test VM lifecycle uses Virfield leases with explicit release/expiry cleanup; Runner integration is a separate acceptance step. See [[personal/projects/virfield]].
|
||||
|
||||
**Eagle commands in #executor**:
|
||||
| Command | Effect |
|
||||
@@ -130,7 +131,7 @@ Executor runs
|
||||
**Claude Code / `claude -p` sessions:**
|
||||
| Name | Command | Used for |
|
||||
|------|---------|---------|
|
||||
| ddg-vm | `npx tsx ~/Developer/virfield/server/mcp-server.ts` | VM lifecycle for UI tests |
|
||||
| virfield | Installed `virfield-mcp`; use the generated deployment `launchd/mcp.json` | VM leases/images; see [[personal/projects/virfield]] |
|
||||
| obsidian | `/opt/homebrew/bin/obsidian-mcp ~/obsidian` | Vault access |
|
||||
|
||||
## launchd Agents
|
||||
|
||||
@@ -79,7 +79,6 @@ Autonomous worker: evaluates backlog → picks task → spawns sub-agent in Disc
|
||||
- Xcode scheme: `DuckDuckGo macOS`, `.xcworkspace` required, xcbeautify required
|
||||
- PR template: `pull-request.mdc` strict gates overridden by Executor v2 (task known, reviewer=@me, description auto-generated)
|
||||
- Cleanup: `git worktree remove --force` + `git push --delete` + stop/delete VM
|
||||
- UI test VM: ddg-vm MCP at `~/Developer/virfield/server/mcp-server.ts`, VirtualBuddy at `~/Documents/VirtualBuddy/`
|
||||
|
||||
## Tech debt
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: Virfield
|
||||
namespace: personal
|
||||
updated: '2026-09-30'
|
||||
status: released
|
||||
tags: [virfield, macos, vm, go, infrastructure]
|
||||
---
|
||||
# Virfield
|
||||
|
||||
**Релиз:** [v2.0.0](https://github.com/mallexxx/virfield/releases/tag/v2.0.0), опубликован 2026-09-30; commit `ee3aa1d8f5906bfe591d76c0af2afd73bcad9fba`.
|
||||
**Репозиторий:** [mallexxx/virfield](https://github.com/mallexxx/virfield). В `main` только Go-реализация; предыдущая реализация сохранена исключительно в Git-ветке `v1`.
|
||||
|
||||
## Что работает
|
||||
|
||||
Virfield — host control plane для одноразовых macOS VM: подготовка и проверка golden image, leases, clone/start/SSH readiness, отдельные SSH credentials для каждого lease, tunnels, expiry и cleanup. Лимит — не более двух VM с явным `capacity_exhausted`; очередь выполнения принадлежит Broker.
|
||||
|
||||
Четыре бинарника: `virfieldd`, `virfield`, `virfield-mcp`, `virfield-lume`. Web console встроена в daemon. CLI, stdio/HTTP MCP и UI обращаются к единому аутентифицированному API. Произвольного shell API и доступа к личным SSH-ключам нет.
|
||||
|
||||
## Источники истины
|
||||
|
||||
Obsidian хранит статус проекта и связи. Команды, конфигурацию и контракты поддерживаем в документации репозитория, без копирования runbook в заметки.
|
||||
|
||||
| Документ | Назначение |
|
||||
|---|---|
|
||||
| [README](https://github.com/mallexxx/virfield/blob/main/README.md) | Входная точка, структура и сборка |
|
||||
| [Operations](https://github.com/mallexxx/virfield/blob/main/docs/OPERATIONS.md) | Установка, пути, сервисы, MCP, leases и backup |
|
||||
| [Image pipeline](https://github.com/mallexxx/virfield/blob/main/docs/IMAGE-PIPELINE.md) | Golden image, зависимости, guest policy и recovery |
|
||||
| [Architecture](https://github.com/mallexxx/virfield/blob/main/docs/ARCHITECTURE.md) | Модули, границы API и инварианты |
|
||||
| [Verification](https://github.com/mallexxx/virfield/blob/main/docs/VERIFICATION.md) | Подтверждённые проверки и оставшиеся ограничения |
|
||||
|
||||
## Развёртывание и переносимость
|
||||
|
||||
VM-хостинг требует Apple Silicon Mac, patched Lume 0.5.3 и документированных image tools. Поддерживаемый guest — macOS 27 build `26A428`; полный профиль `uitest-27-v1` требует Xcode 27+. Суффикс recipe и `/api/v1` обозначают версии контрактов, а не старое приложение.
|
||||
|
||||
Каталог deployment задаётся оператором вне checkout. `deploy/prepare-services.py` берёт реального пользователя, HOME, пути и порты из конфигурации; токены не встраиваются в MCP-файлы. По умолчанию console/API — `127.0.0.1:7780`, Lume — `127.0.0.1:7777`; удалённое/container подключение требует отдельного TLS/routing setup.
|
||||
|
||||
На текущем Mac deployment расположен в `~/.virfield-v2`, VM-диски — в `~/.lume`. Это выбранные локальные пути, не требования к другой установке. System LaunchDaemons `ai.virfield.virfieldd` и `ai.virfield.lume` работают от владельца VM. По проверенному `release.json` установленный runtime остаётся на `44a1c15`; публикация `v2.0.0` сама по себе не обновляла сервис. Установку/обновление выполняем по Operations, не из каталога исходников.
|
||||
|
||||
## Проверено и что остаётся
|
||||
|
||||
[GitHub Actions Linux/macOS](https://github.com/mallexxx/virfield/actions/runs/36675247578) прошёл для релизного коммита. Подтверждены сборка с пустыми HOME/Go caches, deployment smoke с другими путями/портами, проверки зависимостей, секретов всей истории и релизного архива. Архив содержит четыре бинарника, source/docs, dependency notices и checksums; бинарники ad-hoc signed, без Apple notarization.
|
||||
|
||||
На одном физическом Mac пройдены реальный IPSW download/resume, полный golden build с Assistant/Recovery/SIP/provisioning, два изолированных clone, отказ третьему, SSH/tunnels и cleanup. Второй физический хост, длительный soak, оставшиеся crash points и восстановление VM-дисков пока не приняты. Проверки snapshot не заменяют VM-disk disaster recovery.
|
||||
|
||||
## Pitfalls
|
||||
|
||||
- `acquire` принимает job; работать по SSH можно только после lease `ready`.
|
||||
- Running external VM и незавершённый cleanup занимают capacity; освобождать слот ручным редактированием SQLite нельзя.
|
||||
- Неизвестный результат мутации требует inspection/recovery; повторный start/clone/delete вслепую недопустим.
|
||||
- `release` удаляет disposable VM: результаты нужно выгрузить заранее.
|
||||
- State backup не содержит VM-диски и IPSW cache; восстановление дисков проверяется отдельно.
|
||||
|
||||
## Связь с другими проектами
|
||||
|
||||
Целевая цепочка: `Balda → Execution Broker → Virfield → VM → Runner/Callee`. Virfield владеет VM, Broker — очередью и run lifecycle, Runner/Callee — выполнением внутри VM. Полный сценарий из Balda не подтверждён релизом Virfield; состояние остальных проектов проверяется отдельно.
|
||||
|
||||
- [[personal/plans/balda-callee-prism-plan]] — целевая интеграция и оставшаяся приёмка.
|
||||
- [[work/wiki/apple-browsers/vm-ui-testing]] — применение VM leases для UI-тестов.
|
||||
Reference in new issue
Block a user