Skip to content

Итерируемые реестры

Хост: artiroute frontend + ai-agent-service.

Каждый реестр — Map записей. Хост перебирает .entries() (с учётом order) и рендерит UI или подключает AI-логику.

Каталог

Registry IDPayload (SDK type)ConsumerПример key
app.sidebar{ label, icon, to, order? }AppSidebar.vueproject-notes
app.routesExtensionRouteItembootstrap.ts, routerproject-notes
app.widgetsExtensionWidgetItemWidgetRenderer.vue, project workspaceproject-notes
app.dashboardWidgetsExtensionDashboardWidgetItemDashboardWidgetRenderer.vueregistry-test-dashboard
app.projectTabsExtensionTabItemProjectWorkspaceScreen.vueregistry-test-tab
app.settingsTabsExtensionSettingsTabItemSettingsScreen.vueregistry-test-settings
app.artifactTypesArtifactTypeDefinitionartifact editor, templatesnotes-doc
app.formBuilderNodeTypesFormNodeTypeDefinitionBPMN / dynamic form designer & rendererregistry-test-note
app.dialogsprogrammatic dialog entriesglobal dialog hostregistry-test-dialog
ai.artifactTypesArtifactTypeGenerationai-agent-service generationnotes-doc
ai.artifactDriversArtifactDriverai-agent-service tools/sessionnotes-doc
ai.fileExtractorsFileTextExtractorai-agent-service file RAG indexingmy-pdf
app.aiTaskKindsExtensionAiTaskKindItemSettingsAiPanel.vuetranscription
ai.taskKindsExtensionAiTaskKindItemai-agent-service license / host APItranscription
backend.artifactTypesArtifactTypeBackendbackend artifact import/exportnotes-doc

app.sidebar

Пункт бокового меню:

ts
getExtensionRegistry('app.sidebar').register(
  'project-notes',
  {
    label: 'Project Notes',
    icon: 'pi pi-book',
    to: '/ext/project-notes',
  },
  50
);

to должен соответствовать route, зарегистрированному в app.routes.

app.routes

Маршрут SPA:

ts
getExtensionRegistry<ExtensionRouteItem>('app.routes').register(
  'project-notes',
  {
    path: '/ext/project-notes',
    name: 'ext:project-notes',
    component: ProjectNotesPage,
    layout: 'default',
    meta: { title: 'Project Notes' },
  },
  50
);

Рекомендуется префикс /ext/ и name: 'ext:…' для изоляции от core routes.

app.widgets

Виджет project workspace:

ts
getExtensionRegistry<ExtensionWidgetItem>('app.widgets').register(
  'project-notes',
  {
    id: 'project-notes',
    title: 'Project Notes',
    icon: 'pi-book',
    defaultWidth: 2,
    order: 60,
    component: ProjectNotesWidget,
    resolveProps: (ctx) => ({
      projectId: ctx.projectId,
      user: ctx.user,
    }),
  },
  60
);

Layout виджетов сохраняется в UserPreferences.widgetLayout.

app.dashboardWidgets

Виджет главного дашборда — аналогично app.widgets, но контекст DashboardWidgetContext. Layout: UserPreferences.dashboardLayout.

app.projectTabs

Дополнительная вкладка в project workspace (рядом с widgets/phases).

app.settingsTabs

Вкладка на экране Settings.

app.artifactTypes

Новый тип артефакта:

ts
getExtensionRegistry('app.artifactTypes').register(
  'notes-doc',
  {
    name: 'notes-doc',
    label: 'Notes',
    labelKey: 'artifactType.document',
    editorComponent: NotesDocEditor,
    configuratorComponent: NotesDocEditor,
    serializeToText: (content) => {
      /* … */
    },
    createDefaultTemplate: () => ({ text: '' }),
  },
  50
);

Тип notes-doc должен быть допустим в Template (artifactType — text field в Keystone).

app.formBuilderNodeTypes

Кастомные поля для конструктора форм (BPMN и др.):

ts
import type { FormNodeTypeDefinition } from '@artiroute/extension-sdk/host';

getExtensionRegistry<FormNodeTypeDefinition>('app.formBuilderNodeTypes').register(
  'my-ext-color-picker',
  {
    type: 'my-ext-color-picker',
    category: 'field',
    labelKey: 'myExt.formBuilder.colorPicker',
    icon: 'pi pi-palette',
    isValueNode: true,
    rendererComponent: ColorPickerField,
    defaultValue: () => null,
  },
  50,
);

Ключ рекомендуется в формате {extensionId}-{type}. Layout-контейнеры (row, tabs, subForm) регистрирует только host.

Параллельно регистрируйте AI-реестры с тем же key.

app.dialogs

Программные диалоги — запись с open(ctx) callback.

ai.artifactTypes

Метаданные для LLM-генерации: schema, describeGeneration, parseGenerationResult и т.д. См. AI.

ai.artifactDrivers

Runtime driver: session content, tools, validate, finalize. См. Artifact drivers.

ai.fileExtractors

Извлечение текста из файлов проекта для RAG. См. File extractors.

User preferences

PreferenceНазначение
widgetLayoutСетка виджетов project workspace
dashboardLayoutПорядок и grid виджетов дashboard (UserPreferences v2)

AI workspace для командных материалов и знаний