# miloc-pi

Локальный Pi package для agentic development extensions. Source of truth для default-загрузки extensions: `package.json#pi.extensions`.

## Package surface

Сейчас по умолчанию зарегистрированы 5 extension entrypoints: `ask-user-question`, `ast-structural-edit`, `devext-doctor`, `model-roles` и `todo-context`. Все остальные локальные дубли OMP-owned capabilities и test fixtures убраны из default surface, пока они не будут портированы из OMP, оформлены как thin wrappers или явно оставлены как Miloc-specific extensions.

Полная русскоязычная документация по каждому extension находится в [docs/extensions/](docs/extensions/). Ownership/status matrix находится в [docs/extension-ownership-matrix.md](docs/extension-ownership-matrix.md). HTML smoke gallery генерируется отдельно в [docs/extension-gallery/](docs/extension-gallery/), чтобы не затирать эти файлы.

## Install

```bash
npm install --ignore-scripts
npm run check
pi install -l /Users/ravius/projects/miloc-pi
```

После install smoke для текущего reduced default surface: `/devext doctor`. `helloTool` оставлен только как isolated test fixture, но больше не входит в default package surface. Старые representative tool smoke для `goalSet`, `goal`, `planMode`, `/plan`, `loopControl`, `toolRouter`, `runAgent` и `task` больше не доказывают default package surface; эти tools проверяются только как legacy/local code до OMP-based замены.

## Active Extensions

| Extension | Decision | Risk | Commands | Tools | Hooks | Summary | Entrypoint |
|---|---|---|---|---|---|---|---|
| ask-user-question | compat-wrapper | medium | none | `ask`, `askUserQuestion` | none | Активный OMP-compatible human-in-the-loop tool; `askUserQuestion` оставлен как legacy alias. | ./extensions/ask-user-question/index.ts |
| ast-structural-edit | compat-wrapper | high | none | `ast_grep`, `ast_edit`, `resolve`, `ast_apply` | none | Активный OMP-shaped AST wrapper: `ast_grep` ищет, `ast_edit` строит preview, `resolve` применяет или отклоняет его. | ./extensions/ast-structural-edit/index.ts |
| devext-doctor | keep | low | `devext` | none | none | Показывает краткий health/status установленного extension-пакета после install smoke. | ./extensions/devext-doctor/index.ts |
| model-roles | compat-wrapper | medium | `models`, `model-roles` | none | none | Активный OMP-style model selector wrapper: `/models` открывает temporary selection, `/models status` показывает список, `/models assign` пишет `modelRoles`. | ./extensions/model-roles/index.ts |
| todo-context | compat-wrapper | medium | `todo` | `todo_write` | none | Активный OMP-style todo wrapper: `todo_write` меняет session-backed phases, `/todo` показывает и редактирует тот же список. | ./extensions/todo-context/index.ts |

## Disabled By Default

| Extension | Decision | Reason |
|---|---|---|
| hello-tool | fixture-only | Isolated registration/TypeBox smoke fixture; не входит в default package surface. |
| goal | OMP-port-backlog | Локальный hidden-context goal отключен; `goal`/`goalSet` fail-closed до порта OMP `GoalRuntime`. |
| plan | OMP-port-backlog | Локальный write-blocking mode engine отключен; `/plan`/`planMode` fail-closed до порта OMP plan mode. |
| loop | disabled | Local auto-follow-up engine удален; `/loop`/`loopControl` report-only/fail-closed до порта OMP loop mode. |
| tools-ast-grep | OMP-port-backlog | Должен стать частью OMP AST protocol: `ast_grep`, `ast_edit`, hidden `resolve`. |
| tools-ast-edit | OMP-port-backlog | Текущая preview-only версия больше не primary; нужен OMP-compatible boundary. |
| tools-ast-apply | compat-wrapper | Регистрирует OMP-compatible `resolve` для AST preview finalization; `ast_apply` оставлен legacy alias. |
| tools-lsp | OMP-port-backlog | Regex/file-scan helper удален; `lsp` fail-closed до порта OMP LSP stack. |
| agents | OMP-port-backlog | Локальный synthetic execution отключен; `task`/`runAgent` fail-closed до порта OMP `TaskTool`. |
| tool-router | compat-wrapper | `/tools` теперь inspect-first, explicit preset switch идет через `setActiveTools`; остается disabled до runtime proof. |
| security-gate | disabled | Локальный blocking hook отключен; `/security-audit` report-only до порта OMP approval policy. |
| tools-dev-context | disabled | Mixed shell/eval/job/checkpoint bundle fail-closed; конкретные pieces надо портировать отдельно как OMP-backed plugins. |
| dynamic-loader | disabled | `apply`/`rollback` fail-closed; read-only catalog до порта OMP plugin manager/marketplace. |
| browser | disabled | Mock driver удален; local tool fail-closed до порта OMP `BrowserTool`. |
| live-terminal | disabled | Lifecycle observer удален; `/live` report-only до порта OMP bash/job/PTY streaming. |
| tools-debug | disabled | Local Node subprocess wrapper удален; `debug` fail-closed до порта OMP DAP debug tool. |

## Cleanup Decisions

| Extension | Decision | Reason |
|---|---|---|
| hello | delete | command-only SDK smoke; дублирует проверку загрузки пакета и не решает рабочую задачу miloc-pi. |
| hello-command | delete | учебный slash-command пример; отдельный command demo не нужен после переноса smoke-проверки в isolated tests. |
| lifecycle-trace | delete | observer пересекается с прежней `live-terminal` идеей и не проверяет ожидаемый process-log behavior. |
| session-state-demo | delete | demo кода для appendEntry/getEntries; regression ценность покрывается реальными `goal`/`loop` custom entries. |
