Масштаб без границ.
Быстро масштабируйте приложения в любой среде. Люди и агенты работают вместе в реальном времени с криптографически подтверждёнными правами.
Растите в любой среде.
Облако, собственные серверы или edge. Наращивайте ресурсы и нагрузку, сохраняя одну модель исполнения.
const app = maxq.app("workspace"); await app.deploy({ environments: ["cloud", "on-prem", "edge"], scale: "elastic",});Люди и агенты. Вместе.
Одно рабочее пространство для множества участников. Люди и агенты одновременно работают с общим состоянием и получают изменения в реальном времени.
const room = await maxq.room("workspace");await room.join([person, ...agents]); room.sync.onChange(render);await room.sync.apply(signedChange);Права с подписью.
Криптографически подписанные разрешения определяют, кому доступны данные и действия. Перед выполнением запроса проверяются подпись, ресурс, действие, срок и отзыв разрешения.
const access = await maxq.capability.issue({ subject: actor.publicKey, resource: room.ref, rights: ["read", "write"],}, ownerKey); await room.sync.apply(change, { capability: access,});Sync engine
Только то, что изменилось.
Sync engine передаёт изменения выбранных объектов и полей. Подписчик получает точечные обновления своей выборки вместо повторной загрузки всех данных.
const tasks = room.sync.watch({ collection: "tasks", where: { projectId }, fields: ["id", "status"], capability: taskRead,}); tasks.onPatch((patch) => view.apply(patch));Продолжайте после разрыва.
Локальные изменения остаются в очереди. После подключения синхронизация продолжается с сохранённого курсора и догружает пропущенные операции.
const cursor = await room.sync.checkpoint();room.sync.disconnect(); await room.sync.commit(change, { offline: "queue", capability: sessionAccess,}); await room.sync.connect({ after: cursor, capability: sessionAccess,});Разные правки. Один результат.
Человек меняет название, агент назначает исполнителя. Независимые изменения полей объединяются в одно состояние, которое получают все участники.
await Promise.all([ room.sync.patch(taskId, { title: "Ready" }, { capability: personAccess, }), room.sync.patch(taskId, { assignee: "agent" }, { capability: agentAccess, }),]); const task = await room.sync.read(taskId, { capability: personAccess,});Криптографические права
Доступ к конкретному объекту.
Разрешение связывает ключ участника, ресурс и допустимые действия. Право чтения не даёт права записи, а знание адреса объекта само по себе не открывает доступ.
const readOnly = await maxq.capability.issue({ subject: analyst.publicKey, resource: task.ref, rights: ["read"],}, ownerKey); await task.read({ capability: readOnly });const canWrite = await task.permits("write", readOnly);Передавайте меньше прав.
Делегируйте агенту доступ к задаче, а инструменту — только нужное действие. Каждый следующий участник получает подмножество прав и срок действия в пределах исходного разрешения.
const reader = await access.delegate({ subject: agent.publicKey, resource: task.ref, rights: ["read"], expiresAt: deadline,}, personKey); const toolAccess = await reader.delegate({ subject: tool.publicKey, rights: ["read"],}, agentKey);Доступ можно отозвать.
Отзыв или истечение срока прекращают действие разрешения. Новые запросы блокируются, а связанная подписка закрывается без удаления ранее полученных данных.
const feed = room.sync.watch({ collection: "tasks", capability: agentAccess,}); await agentAccess.revoke({ signedBy: ownerKey });await feed.closed;Скачать MaxQ Engine
Проверяем сборки…