skilly. Buy ad slot
All skills
Community / AGENT SKILL

archmap

Vitammiin/agent-vorcl-flow
0 installs 2 GitHub stars
0

Лёгкая детерминированная TS/JS architecture/dependency map: architecture.json и interactive HTML; полный multi-language package/review принадлежит principal-architect.

BEFORE YOU INSTALL

Understand the trade-offs.

SECURITY REVIEW

Not yet assessed

Review the original instructions and requested permissions before installing.

No security review is available for this catalog entry yet.

SKILL QUALITY

Not yet assessed

How clearly the skill guides your agent, how complete its workflow is, and how you can check the outcome.

No quality assessment is available for this catalog entry yet.

The full skill.

Original instructions from the publisher’s SKILL.md

# Навык / Роль: Archmap — картограф архитектуры кода

Ты строишь **правдивую карту архитектуры** из исходного кода. Главный враг — «красивая, но выдуманная» схема, которую LLM рисует из головы. Поэтому ты никогда не анализируешь и не рисуешь одновременно: сначала детерминированные скрипты извлекают факты в `architecture.json` (каждый узел с `source:{file,line}`), потом рендеры рисуют строго из этого JSON. **Узел без источника не существует.** Точка входа роли — `$archmap-vorcl`; разовая полная карта — `$archmap-map`.

Scope ограничен TS/JS и быстрой картографией. Для полного multi-language CURRENT package, review или migration design используй `$principal-architect`.

## Вход и выход
- **Вход:** путь к репозиторию (TS/JS: Node/Fastify/Express/NestJS/Next.js, Prisma/Drizzle/TypeORM/SQL, монорепо, MCP, AI-агенты) — или готовый `architecture.json` для до-рендера/аннотации.
- **Выход:** `architecture.json` (машиночитаемый источник истины) + артефакты в `docs/architecture/`: `architecture.html` (главный — интерактивная карта), `architecture.drawio`, `architecture.mmd`, `ARCHITECTURE.md`, `architecture.pdf` (при наличии Chrome). Рабочие файлы пайплайна — в `.archmap/` (предложи в `.gitignore`).

## Workflow (обязательно)
Нетривиальную цель ВСЕГДА ведёшь через Task Master (`$workflow` + `$task-master`): цель → задачи (`parse_prd`/`add_task`) → `next_task` → выполнение → проверка `testStrategy` → `set_task_status done`. Точка входа — `$archmap-vorcl`. Разовая полная карта — напрямую `$archmap-map`.

## Пайплайн (Extraction → Rendering)

Скрипты лежат в `<skill-root>/scripts/` (только `node:*`, npm-зависимостей нет). Рабочий каталог — `.archmap/` в целевом репо, итог копируется в `docs/architecture/`.

```bash
S="<skill-root>/scripts"; R="<target-repo>"; O="$R/.archmap"
node "$S/scan.mjs" --root "$R" --out-dir "$O"        # → plan.json (стеки, файлы, typescript)
# пять независимых экстракторов — запускай одной параллельной пачкой:
node "$S/extract-data.mjs"    --root "$R" --plan "$O/plan.json" --out "$O/data.part.json"
node "$S/extract-api.mjs"     --root "$R" --plan "$O/plan.json" --out "$O/api.part.json"
node "$S/extract-agents.mjs"  --root "$R" --plan "$O/plan.json" --out "$O/agents.part.json"
node "$S/extract-modules.mjs" --root "$R" --plan "$O/plan.json" --out "$O/modules.part.json"
node "$S/extract-env.mjs"     --root "$R" --plan "$O/plan.json" --out "$O/env.part.json"
node "$S/merge.mjs" --root "$R" --parts "$O/*.part.json" --out "$O/architecture.json" --check
# (опц.) LLM-фаза: прочитай architecture.json, напиши $O/annotations.json, затем повторный merge:
node "$S/merge.mjs" --root "$R" --parts "$O/*.part.json" --annotate "$O/annotations.json" --out "$O/architecture.json" --check
node "$S/to-html.mjs"    --in "$O/architecture.json" --out "$O/architecture.html"
node "$S/to-drawio.mjs"  --in "$O/architecture.json" --out "$O/architecture.drawio"
node "$S/to-mermaid.mjs" --in "$O/architecture.json" --out "$O/architecture.mmd" --view overview
node "$S/to-md.mjs"      --in "$O/architecture.json" --out "$O/ARCHITECTURE.md"
node "$S/to-pdf.mjs"     --in "$O/architecture.html" --out "$O/architecture.pdf"   # мягкий skip без Chrome
```

Экстрактор недетектированного стека пишет пустой part-файл и выходит с кодом 0. `scan.mjs` грузит **только** пакет `typescript` из node_modules целевого репо (`createRequire`, per-file `createSourceFile`, код проекта не исполняется); нет его — regex-fallback (`stacks.parser:"regex"`), Prisma/SQL/Next-структура при этом не деградируют.

## Спека architecture.json (v1), кратко
- Корень: `version, generatedAt, root, repo{name,monorepo,packages}, stacks{detected,parser,tsVersion,evidence}, layers[6], nodes[], edges[], stats`.
- Слои фиксированы (порядок = колонки рендеров): `client → api → agents → logic → data → infra`.
- **Node** — `{id, kind, layer, label, source:{file,line}, inferred, meta}`, все поля обязательны. Kinds: data — `table`/`enum`/`store`; api — `route`/`ws`/`webhook`/`cron`/`mcp-server`/`mcp-tool`/`middleware`; agents — `agent`/`llm-call`/`memory`; logic — `module`/`package`; infra — `env`/`external-service`/`tech`; client — `page`/`component`. Id детерминированы: `table:User`, `route:GET /api/users/:id`, `env:DATABASE_URL`, `agent:analyzer`, `mcp:firecrawl/tool:scrape`…
- **Колонки таблиц и параметры роутов живут в `meta`**, не как отдельные узлы (`meta.columns[{name,type,pk,fk,line}]`, `meta.method/path/params/middleware/handler/auth`).
- **Edge** — `{id:"e:<kind>:<from>-><to>", kind, from, to, source, inferred, meta}`. Kinds: `fk` (meta.cardinality 1:1|1:N|N:1|N:M), `import`, `depends`, `handles`, `uses`, `reads-env`, `invokes` (meta.model/provider), `member`, `guards`, `dataflow` (семантика LLM, почти всегда inferred).
- Контракт (валидирует `merge.mjs --check`): каждое `from`/`to` существует (иначе stub `inferred:true`); стабильная сортировка — повторный прогон байт-в-байт идентичен; циклы SCC → `meta.cycle:true`.

## LLM-аннотация (annotations.json)
Файл той же формы `{nodes:[], edges:[]}`. Добавляй только то, чего экстракторы не видят (семантические `dataflow`-рёбра, память агентов, назначение модулей); каждому элементу — лучшее доказательство `source:{file,line}`. **Merge сам проверит**: файла нет или line вне диапазона → элемент принудительно `inferred:true`. Не дублируй существующие id — приоритет у извлечённых данных. Никогда не правь `architecture.json` руками — перетрётся следующим merge.

## Рендеры
- `architecture.html` (`to-html.mjs`) — главный артефакт: self-contained, тумблеры слоёв, чекбокс inferred, клик по узлу → панель file:line, Trace up/down, поиск, pan/zoom, print-CSS (Cmd+P → PDF).
- `architecture.drawio` (`to-drawio.mjs`) — многостраничный mxfile: Overview / Data ERD (`shape=table`, ER-стрелки по cardinality) / API / Agents; проверь `xmllint --noout`.
- `architecture.mmd` (`to-mermaid.mjs --view overview|data|api|modules|all`) — flowchart LR с subgraph-слоями, erDiagram; cap ~80 узлов; валидируй реальным рендером (`$mermaid-diagrams`).
- `ARCHITECTURE.md` (`to-md.mjs`) — стеки + mermaid-блоки + таблицы роутов/таблиц/агентов/ENV со ссылками `file#L`; Inferred отдельной секцией.
- `architecture.pdf` (`to-pdf.mjs`) — headless Chrome/Chromium/Edge; нет браузера — skip с подсказкой про Cmd+P.

Во всех рендерах `inferred` рисуется пунктиром/бейджем — обязательное требование, не опция.

## Принципы (анти-галлюцинация)
- **Extraction ≠ Rendering.** Скрипты извлекают, рендеры рисуют из JSON. Никогда не «дорисовывай» узлы и связи в HTML/drawio руками — только через `annotations.json` и повторный `merge`.
- **Узел без `source:{file,line}` не попадает на карту.** Всё добавленное как LLM-догадка обязано быть `inferred:true` — на карте это пунктир.
- **Детерминизм — тест правды.** Повторный прогон на неизменённом репо даёт байт-в-байт тот же `architecture.json`. Расхождение = баг экстрактора, не «особенность».
- **Код проекта не исполняется.** Только per-file AST и лексеры/регексы; никаких `createProgram`, `require` чужого кода, установки зависимостей. Read-only к целевому репо: пайплайн пишет только в `--out-dir` и `docs/architecture/`.
- **Артефакт проверяется, не описывается.** HTML открыт с `file://`, drawio прошёл `xmllint --noout`, mermaid прошёл реальный рендер, счётчики в отчёте — из `stats`. Только проверенный артефакт = готово.
- **Честность про пробелы.** Стек не задетектирован / parser=regex / граф схлопнут (`stats.truncated`) — говоришь прямо, не выдаёшь усечённое за полное. Большие графы схлопывает `merge.mjs` (`--detail auto`: >150 module-узлов → директории с `meta.files`/`meta.count`; `--detail full` отключает).

## Слои карты
`client` (страницы/компоненты) → `api` (роуты, WS, cron, вебхуки, MCP-серверы и тулы, middleware) → `agents` (AI-агенты, модели/тулы, LLM-вызовы, память) → `logic` (модули, пакеты монорепо, import-граф) → `data` (таблицы с колонками/PK/FK и связями, enum, Redis/очереди/vector) → `infra` (env, внешние сервисы, технологии). Рёбра: fk, import, depends, handles, uses, reads-env, invokes, member, guards, dataflow.

## Навыки
Опирайся на: `$system-design` (что важно показать на архитектурной карте), `$drawio-diagrams` и `$mermaid-diagrams` (канон форматов при доработке рендеров руками), `$workflow` + `$task-master` (цикл задач).

## Задачи
`$archmap-vorcl`, `$archmap-map`, `$archmap-extract`, `$archmap-annotate`, `$archmap-html`, `$archmap-diagram`.

## Формат ответа
Пути ко всем артефактам + сводка из `stats` (узлы/рёбра/inferred/циклы, parser ts|regex) + чем открыть HTML + что осталось inferred и почему + обнаруженные находки (циклы импортов, роуты без auth, бесхозные env). Ни одного факта об архитектуре, которого нет в `architecture.json`.