Troubleshooting
Частые проблемы при разработке расширений и их решения.
PrimeVue без стилей
Симптом: кнопки/карточки рендерятся, но без темы PrimeVue — «голый» HTML.
Причина: PrimeVue или его CSS попали в bundle extension вместо host shim, либо импортирован CSS в extension.
Решение:
- Импортируйте компоненты через
primevueилиprimevue/component— не копируйте source PrimeVue - Не импортируйте
primevue/resources/...CSS в extension - Проверьте размер bundle — должен быть ~10–20 KB, не 80+ KB
- Убедитесь, что
ahExtensionFrontendViteConfigиспользуется вvite.config.ts
См. Host-модули, Стили.
Template.artifactType: value is not an accepted option
Симптом: ошибка при создании Template с типом extension (notes-doc, registry-test-doc).
Причина: поле artifactType в Keystone list Template было hardcoded select (document/table/bpmn).
Решение: в core backend Template.artifactType — text field; extension types регистрируются через app.artifactTypes. Перезапустите backend после обновления schema.
Проверьте, что key в app.artifactTypes совпадает со значением в Template.
AI: generation works, finalize/save fails (auth)
Симптом: агент генерирует контент, но сохранение ArtifactVersion падает с authorization error.
Причина: finalize от service token требует author.connect.id, не только session user id.
Решение: убедитесь, что backend актуален (ArtifactVersion validateInput принимает service token). Перезапустите backend и ai-agent-service.
Пустой createTools — агент не редактирует
Симптом: AI session стартует, но нет tools для правки текста.
Причина: driver не реализует createTools, и fallback не срабатывает.
Решение: для plain-text artifacts:
buildSessionContentдолжен возвращать{ text: string }- Либо оставьте
createTools() { return {} }— host добавит plain-text tools - Либо реализуйте explicit tools как в
project-notes/text-driver.ts
См. Artifact drivers.
Failed to resolve import "primevue/..."
Симптом: сборка extension падает на subpath import.
Причина: prefix не в HOST_SUBPATH_PREFIXES.
Решение:
- Проверьте, что prefix есть в
packages/extension-build/src/host-subpath-shim-plugin.ts - Если новый пакет — добавьте prefix + host registration (PR)
pnpm extension-build:build
Extension не появляется в UI
Чеклист:
- [ ]
pnpm build:extensions && pnpm install:extensions - [ ] Файл
apps/backend/data/extensions/<slug>/.install-completeсуществует - [ ]
manifest.jsonв data dir содержитfrontendentry path - [ ] Keys в manifest
extendsRegistriesсовпадают с.register()keys - [ ] Backend запущен — frontend получает список extensions через API
- [ ] Console browser — ошибки dynamic import
/extensions/.../frontend/index.js
Duplicate Vue / "inject() can only be used..."
Причина: Vue забандлен в extension вместо host singleton.
Решение: проверьте external/shim config; не добавляйте vue в dependencies extension (только peer + dev for types).
Conflict: registry key already claimed
Симптом: resolveExtensionsForLoad error — key занят другим extension.
Решение: используйте уникальный key (prefix extension id: my-ext-sidebar). Проверьте extendsRegistries на дубликаты между extensions.
Backend migration failed
Симптом: extension не загружается, ошибка Kysely migration.
Решение:
- Проверьте SQL в
up()— schemaext.*, valid FK references - Лог backend при bootstrap
- Для dev: drop table
ext.my_tableи re-run (осторожно с data)
Bundle слишком большой
bash
pnpm build:extensions
# inspect packages/extensions/my-ext/dist/frontend/index.jsЕсли > 50 KB — вероятно bundling host libs. Audit imports: Зависимости.
Cannot POST /api/... (404 HTML) на демо или под-пути
Симптом: LDAP login, комментарии или другой extension API возвращает Cannot POST /api/... вместо JSON.
Причина: frontend extension вызывает fetch('/api/...') или window.location.href = '/dashboard' без учёта BASE_URL (например /demo на демо-стенде).
Решение:
- Auth:
getProviderLoginUrlиз@artiroute/host/auth - GraphQL / REST / файлы:
@artiroute/host/api(getGraphqlUrl,fetchGraphql,getExtensionApiUrl,withAppBase) - Пересоберите extension:
pnpm build:extensions, переустановите на инстансе - Убедитесь, что хост зарегистрировал
@artiroute/host/api(актуальный frontend)
Проверка: pnpm lint:extensions-api — скрипт ищет хардкод '/api/ в packages/extensions/**/frontend.
Где искать help
- Быстрый старт
- Reference: project-notes, registry-test
- Builder:
packages/extension-build/README.md - SDK types:
packages/extension-sdk/src/extension/index.ts