Разработчикам
Solution Packs
Как подключать продуктовые роли и сценарии декларативно, не добавляя product-specific код в Kanyman Core.
Обновлено: 11 августа 2026
Что хранит manifest (сокращённый пример)
jsonKanyman docs
{
"schema": "kanyman.solution-pack.v1",
"id": "example.support",
"version": "1.0.0",
"core_contract": "kanyman.external-integrations.v1",
"roles": [{ "key": "support", "title": "Support" }],
"scenarios": [{
"key": "support.diagnostics",
"version": "1.0.0",
"entry_role": "support",
"allowed_capabilities": ["project.get_diagnostics"]
}],
"required_capabilities": [{
"name": "project.get_diagnostics",
"version": "1.0.0",
"kind": "read",
"side_effect": "none"
}]
}- Manifest содержит роли, сценарии, policies, требования к знаниям, UI labels и acceptance fixtures.
- Credentials, приватные ключи, токены и прямой доступ к базе продукта в manifest запрещены.
- Capability указывается по стабильному имени и точной версии; текущий контракт принимает read и draft.
- DISP и VerifyBox используют тот же schema contract, что и любой третий продукт.
Установка и совместимость
- 1Создайте и активируйте внешнюю интеграцию.
- 2Добавьте и протестируйте capabilities, которые требует выбранный pack.
- 3Установите pack на интеграцию. Kanyman сохранит неизменяемый snapshot manifest и digest.
- 4Если capability отсутствует, неактивна или имеет другую policy/version, установка получает статус blocked.
- 5После изменения capabilities запустите повторную проверку и активируйте pack.
- 6Pack можно отключить без удаления истории; rollback переключает указатель только на ранее установленный immutable snapshot.
- 7В runtime модель выбирает точные pack, scenario и specialist role, а сервер повторно проверяет выбор и пропускает только capabilities текущего шага сценария.
- 8Blocked или disabled pack работает fail-closed: его capabilities не передаются агенту до успешной повторной проверки и активации.
httpKanyman docs
GET /api/projects/{project_id}/external-integrations/{integration_id}/connectors/{connector_id}/versions/{version}/manifest
Authorization: Bearer <Kanyman access token>
{
"schema": "kanyman.connector-contract.v1",
"digest_scope": "manifest_without_lifecycle_status",
"digest": "<sha256 canonical contract>",
"manifest": {
"schema": "kanyman.connector-manifest.v1",
"id": "example.support-api",
"version": "1.0.0",
"status": "planned",
"capabilities": ["...full input/output schemas..."]
}
}Scenario Library и постоянное состояние
jsonKanyman docs
{
"schema": "kanyman.solution-scenario.v1",
"pack_id": "example.support",
"pack_version": "1.0.0",
"scenario_key": "support.diagnostics",
"scenario_version": "1.0.0",
"status": "active",
"entry_step": "identify_issue",
"steps": [{
"key": "identify_issue",
"kind": "question",
"role_keys": ["support"],
"allowed_capabilities": ["project.get_diagnostics"],
"answer_options": [{
"key": "resolved",
"next_step": "completed"
}]
}]
}- Определение сценария хранится отдельно от immutable pack manifest и связывается по точным pack/scenario versions.
- Поддерживаются статусы draft, review, active, paused и archived; runtime исполняет только active.
- В кабинете owner/admin может проверить JSON на сервере, сохранить immutable draft, отправить его на review и отдельно активировать; draft и review не влияют на runtime и могут быть отменены в архив без потери истории.
- Активная tenant-scoped версия переопределяет code default без релиза Core, а при её отсутствии runtime использует поставляемое с pack определение.
- Каждый run сохраняет immutable definition snapshot и SHA-256 digest, текущий step, role и control version.
- В журнал попадают только безопасные ключи шагов/ответов и product/tariff signals — текст пользователя, токены и PII туда не копируются.
- Следующий step и role вычисляет сервер из snapshot; модель не может передать произвольное направление перехода.
- Переход фиксируется в одной транзакции с разрешённым ответом. Retry не создаёт повторный переход.
- Disable, несовместимость или смена версии pack отменяет активный run fail-closed и сохраняет событие cancelled.
API кабинета
textKanyman docs
GET /api/projects/{project_id}/solution-packs/catalog
GET /api/projects/{project_id}/solution-packs
POST /api/projects/{project_id}/solution-packs/install
POST /api/projects/{project_id}/solution-packs/{installation_id}/refresh
POST /api/projects/{project_id}/solution-packs/{installation_id}/activate
POST /api/projects/{project_id}/solution-packs/{installation_id}/disable
POST /api/projects/{project_id}/solution-packs/{installation_id}/rollback
GET /api/projects/{project_id}/solution-packs/{installation_id}/scenarios
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/{scenario_key}/preview
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/{scenario_key}/drafts
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/submit
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/activate
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/archive