{
  "generatedAt": "2026-06-01T11:28:25.911Z",
  "source": "scripts/build-extension-gallery.ts",
  "terminalScreenshots": [],
  "extensions": [
    {
      "id": "ask-user-question",
      "entrypoint": "./extensions/ask-user-question/index.ts",
      "ownerDirectory": "extensions/ask-user-question",
      "manifestPath": "extensions/ask-user-question/manifest.json",
      "description": "Позволяет агенту задать пользователю ограниченный UI-вопрос и получить structured answer.",
      "risk": "medium",
      "commands": [],
      "tools": [
        "ask",
        "askUserQuestion"
      ],
      "hooks": [],
      "example": "ask({ questions: [...] })",
      "result": "User selected: pass",
      "details": {
        "question": "Choose test result",
        "options": [
          "pass",
          "fail"
        ],
        "multi": false,
        "selectedOptions": [
          "pass"
        ]
      }
    },
    {
      "id": "ast-structural-edit",
      "entrypoint": "./extensions/ast-structural-edit/index.ts",
      "ownerDirectory": "extensions/ast-structural-edit",
      "manifestPath": "extensions/ast-structural-edit/manifest.json",
      "description": "Единая OMP-shaped AST поверхность: `ast_grep` ищет, `ast_edit` строит preview, `resolve` применяет или отклоняет pending preview.",
      "risk": "high",
      "commands": [],
      "tools": [
        "ast_grep",
        "ast_edit",
        "resolve",
        "ast_apply"
      ],
      "hooks": [],
      "example": "ast_edit preview + resolve apply",
      "result": "Preview ast_mpv4kqhy_57e66f03\n/var/folders/tg/gvm2_dy55n5_z9czl1txqvhr0000gn/T/pi-dev-extensions-gallery-aYxVm2/sample.ts: 1 replacements\n\nApplied ast_mpv4kqhy_57e66f03 to 1 files",
      "details": {
        "preview": {
          "previewId": "ast_mpv4kqhy_57e66f03",
          "files": [
            {
              "path": "/var/folders/tg/gvm2_dy55n5_z9czl1txqvhr0000gn/T/pi-dev-extensions-gallery-aYxVm2/sample.ts",
              "replacements": 1
            }
          ],
          "totalReplacements": 1,
          "stale": false
        },
        "resolve": {
          "action": "apply",
          "reason": "gallery smoke temp fixture",
          "sourceToolName": "resolve",
          "label": "ast_edit preview ast_mpv4kqhy_57e66f03",
          "extra": {
            "previewId": "ast_mpv4kqhy_57e66f03"
          },
          "sourceResultDetails": {
            "previewId": "ast_mpv4kqhy_57e66f03"
          },
          "filesApplied": 1
        }
      }
    },
    {
      "id": "devext-doctor",
      "entrypoint": "./extensions/devext-doctor/index.ts",
      "ownerDirectory": "extensions/devext-doctor",
      "manifestPath": "extensions/devext-doctor/manifest.json",
      "description": "Показывает краткий health/status установленного extension-пакета после install smoke.",
      "risk": "low",
      "commands": [
        "devext"
      ],
      "tools": [],
      "hooks": [],
      "example": "/devext doctor",
      "result": "miloc-pi doctor\ndefaultSurface: 5 active extension(s)\nactiveDefaults: ask-user-question, ast-structural-edit, devext-doctor, model-roles, todo-context\nactiveCompatWrappers: ask-user-question, ast-structural-edit, model-roles, todo-context\ndisabledCompatWrappers: tool-router, tools-ast-apply\ncompatWrappers: ask-user-question, ast-structural-edit, model-roles, todo-context, tool-router, tools-ast-apply\nompOwnedToImport: agents, browser, dynamic-loader, goal, plan, security-gate, tools-ast-edit, tools-ast-grep, tools-debug, tools-lsp\nredesignLater: live-terminal, loop\nsplitRequired: tools-dev-context\nfixtures: hello-tool\ndeleted: hello, hello-command, lifecycle-trace, session-state-demo\nauditEvents: 0\nevents: 3",
      "details": {
        "widget": "devext-doctor"
      }
    },
    {
      "id": "model-roles",
      "entrypoint": "./extensions/model-roles/index.ts",
      "ownerDirectory": "extensions/model-roles",
      "manifestPath": "extensions/model-roles/manifest.json",
      "description": "Открывает OMP-style temporary model selection и пишет role assignments в `modelRoles` settings.",
      "risk": "medium",
      "commands": [
        "models",
        "model-roles"
      ],
      "tools": [],
      "hooks": [],
      "example": "/models",
      "result": "temporary model selected\nmodel: test/fast\npersisted: false\nowner: OMP temporary model selector semantics\n\nmodels\nOnly showing models with configured API keys.\n\nModels: ALL CANONICAL TEST\n- test/fast - Test Fast\n- test/strong - Test Strong\n\ncommands:\n- /models\n- /models status\n- /models <query>\n- /models select [query]\n- /models assign <role> [query]\n- /models use <role>\n- role assignments are stored in OMP-native settings key `modelRoles`\n- /models cycle is disabled until the full OMP selector/carousel is ported\n- /model-roles status (legacy)",
      "details": {
        "widget": "models",
        "selectedModel": {
          "provider": "test",
          "id": "fast",
          "name": "Test Fast"
        }
      }
    },
    {
      "id": "todo-context",
      "entrypoint": "./extensions/todo-context/index.ts",
      "ownerDirectory": "extensions/todo-context",
      "manifestPath": "extensions/todo-context/manifest.json",
      "description": "Дает агенту OMP-style `todo_write` compatibility surface без shell, eval или filesystem permissions.",
      "risk": "medium",
      "commands": [
        "todo"
      ],
      "tools": [
        "todo_write"
      ],
      "hooks": [],
      "example": "todo_write init",
      "result": "Remaining items (2):\n  - Build gallery [in_progress] (Docs)\n  - Verify evidence [pending] (Docs)\nDocs:\n  - [in_progress] Build gallery\n  - [pending] Verify evidence",
      "details": {
        "phases": [
          {
            "name": "Docs",
            "tasks": [
              {
                "content": "Build gallery",
                "status": "in_progress"
              },
              {
                "content": "Verify evidence",
                "status": "pending"
              }
            ]
          }
        ],
        "storage": "session",
        "activeTask": "Build gallery"
      }
    }
  ]
}
