Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/wacky-teeth-kneel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@xpert-ai/plugin-sdk': patch
'@xpert-ai/contracts': patch
'@xpert-ai/xpert-ui': patch
---

Publish a browser-safe collaboration client entry at `@xpert-ai/plugin-sdk/collaboration-client`.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ import { TestBed } from '@angular/core/testing'
import { of, Subject } from 'rxjs'
import { ToastrService, ViewExtensionApiService } from '@cloud/app/@core'
import { environment } from '@cloud/environments/environment'
import { XpertExtensionViewManifest } from '@xpert-ai/contracts'
import {
XPERT_REMOTE_COMPONENT_INVOKE_CLIENT_COMMAND_MESSAGE_TYPE,
XpertExtensionViewManifest
} from '@xpert-ai/contracts'
import { RemoteComponentRendererComponent } from './remote-component-renderer.component'
import { ViewClientCommandRegistry } from '../view-client-command-registry.service'
import { ViewHostEventBus } from '../view-host-event-bus.service'
Expand Down Expand Up @@ -418,7 +421,7 @@ describe('RemoteComponentRendererComponent', () => {
channel: 'xpertai.remote_component',
protocolVersion: 1,
instanceId: component.instanceId(),
type: 'invokeClientCommand',
type: XPERT_REMOTE_COMPONENT_INVOKE_CLIENT_COMMAND_MESSAGE_TYPE,
requestId: 'request-1',
commandKey: 'assistant.chat.send_message',
payload: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
} from '@angular/core'
import { firstValueFrom } from 'rxjs'
import {
XPERT_REMOTE_COMPONENT_INVOKE_CLIENT_COMMAND_MESSAGE_TYPE,
XpertExtensionViewManifest,
XpertViewActionDefinition,
XpertViewHostEventSubscription,
Expand Down Expand Up @@ -253,7 +254,7 @@ export class RemoteComponentRendererComponent {
case 'executeFileAction':
void this.handleRequest(message, 'fileActionResult', () => this.handleFileActionRequest(message))
return
case 'invokeClientCommand':
case XPERT_REMOTE_COMPONENT_INVOKE_CLIENT_COMMAND_MESSAGE_TYPE:
void this.handleRequest(message, 'clientCommandResult', () => this.handleClientCommandRequest(message))
return
default:
Expand Down
1 change: 1 addition & 0 deletions apps/cloud/src/app/features/assistant/pdfjs-dist.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare module 'pdfjs-dist/build/pdf.worker.entry'
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,29 @@ export type WorkbenchOpenFile = {
size?: number
url: string
previewUrl?: string
evidence?: WorkbenchOpenFileEvidence
}

export type WorkbenchOpenFileEvidenceBox = {
x: number
y: number
width: number
height: number
}

export type WorkbenchOpenFileEvidence = {
observationId?: string
attributeCode?: string
displayValue?: string
text?: string
method?: string
region?: string
confidence?: number
locator?: {
sourceType?: string
page?: number
box?: WorkbenchOpenFileEvidenceBox
}
}

type WorkbenchFileOpenCommandOptions = {
Expand Down Expand Up @@ -56,6 +79,7 @@ function toWorkbenchOpenFile(payload: unknown): WorkbenchOpenFile | null {
return null
}

const evidence = toWorkbenchOpenFileEvidence(payload.evidence)
return {
id: getString(payload.id) ?? getString(payload.fileAssetId) ?? getString(payload.fileId),
fileId: getString(payload.fileId) ?? getString(payload.fileAssetId),
Expand All @@ -65,8 +89,62 @@ function toWorkbenchOpenFile(payload: unknown): WorkbenchOpenFile | null {
mimeType: getString(payload.mimeType) ?? getString(payload.mimetype),
size: typeof payload.size === 'number' && Number.isFinite(payload.size) ? payload.size : undefined,
url,
previewUrl: getString(payload.previewUrl) ?? url
previewUrl: getString(payload.previewUrl) ?? url,
...(evidence ? { evidence } : {})
}
}

function toWorkbenchOpenFileEvidence(value: unknown): WorkbenchOpenFileEvidence | undefined {
if (!isRecord(value)) {
return undefined
}

const locator = toWorkbenchOpenFileEvidenceLocator(value.locator)
const confidence = getFiniteNumber(value.confidence)
const evidence: WorkbenchOpenFileEvidence = {
...(getString(value.observationId) ? { observationId: getString(value.observationId) } : {}),
...(getString(value.attributeCode) ? { attributeCode: getString(value.attributeCode) } : {}),
...(getString(value.displayValue) ? { displayValue: getString(value.displayValue) } : {}),
...(getString(value.text) ? { text: getString(value.text) } : {}),
...(getString(value.method) ? { method: getString(value.method) } : {}),
...(getString(value.region) ? { region: getString(value.region) } : {}),
...(confidence !== undefined ? { confidence } : {}),
...(locator ? { locator } : {})
}

return Object.values(evidence).some((item) => item !== undefined) ? evidence : undefined
}

function toWorkbenchOpenFileEvidenceLocator(value: unknown): WorkbenchOpenFileEvidence['locator'] | undefined {
if (!isRecord(value)) {
return undefined
}

const page = getPositiveInteger(value.page)
const box = toWorkbenchOpenFileEvidenceBox(value.box)
const locator: NonNullable<WorkbenchOpenFileEvidence['locator']> = {
...(getString(value.sourceType) ? { sourceType: getString(value.sourceType) } : {}),
...(page !== undefined ? { page } : {}),
...(box ? { box } : {})
}

return Object.values(locator).some((item) => item !== undefined) ? locator : undefined
}

function toWorkbenchOpenFileEvidenceBox(value: unknown): WorkbenchOpenFileEvidenceBox | undefined {
if (!isRecord(value)) {
return undefined
}

const x = getFiniteNumber(value.x)
const y = getFiniteNumber(value.y)
const width = getFiniteNumber(value.width)
const height = getFiniteNumber(value.height)
if (x === undefined || y === undefined || width === undefined || height === undefined) {
return undefined
}

return { x, y, width, height }
}

function isRecord(value: unknown): value is Record<string, unknown> {
Expand All @@ -76,3 +154,11 @@ function isRecord(value: unknown): value is Record<string, unknown> {
function getString(value: unknown): string | undefined {
return typeof value === 'string' && value.trim() ? value.trim() : undefined
}

function getFiniteNumber(value: unknown): number | undefined {
return typeof value === 'number' && Number.isFinite(value) ? value : undefined
}

function getPositiveInteger(value: unknown): number | undefined {
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined
}
Loading
Loading