feat: add device sharing metadata application
This commit is contained in:
@@ -37,12 +37,12 @@ export const defaultSupervisorModelConcurrency = 1
|
||||
export const supervisorModelConcurrencySchema = z.number().int().min(1).max(4)
|
||||
export const supervisionTimeoutSecondsSchema = z.number().int().min(30).max(600)
|
||||
|
||||
export const builtInApplicationIds = ['magic-notes', 'knowledge', 'heartbeat', 'local-inference'] as const
|
||||
export const builtInApplicationIds = ['magic-notes', 'knowledge', 'heartbeat', 'local-inference', 'device-sharing'] as const
|
||||
export type BuiltInApplicationId = typeof builtInApplicationIds[number]
|
||||
export const editableApplicationIds = ['magic-notes', 'heartbeat', 'local-inference'] as const
|
||||
export type EditableApplicationId = typeof editableApplicationIds[number]
|
||||
export const defaultApplicationNavigation = {
|
||||
order: ['knowledge', 'heartbeat', 'magic-notes', 'local-inference'] as BuiltInApplicationId[],
|
||||
order: ['knowledge', 'heartbeat', 'magic-notes', 'local-inference', 'device-sharing'] as BuiltInApplicationId[],
|
||||
pinned: { 'magic-notes': true, heartbeat: true, 'local-inference': false }
|
||||
}
|
||||
export const applicationNavigationSchema = z.object({
|
||||
|
||||
@@ -1767,6 +1767,7 @@ export type KnowledgeSearchReference = {
|
||||
}
|
||||
|
||||
export type DesktopApi = {
|
||||
sharing: import('./device-sharing-contracts').DeviceSharingApi
|
||||
openRuntimeNativeClient: (input: import('./runtime-native-client-contracts').RuntimeNativeClientInput) => Promise<import('./runtime-native-client-contracts').RuntimeNativeClientResult>
|
||||
getRuntimeNativeClient: (input: import('./runtime-native-client-contracts').RuntimeNativeClientInput) => Promise<import('./runtime-native-client-contracts').RuntimeNativeClientService | null>
|
||||
stopRuntimeNativeClient: (input: import('./runtime-native-client-contracts').RuntimeNativeClientService) => Promise<void>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import { z } from 'zod'
|
||||
|
||||
export const sharingIdSchema = z.string().trim().min(1).max(200)
|
||||
export const sharingSettingsInputSchema = z.object({
|
||||
serverUrl: z.url().refine(value => {
|
||||
if (!URL.canParse(value)) return false
|
||||
const url = new URL(value)
|
||||
return ['http:', 'https:'].includes(url.protocol) && !url.username && !url.password && !url.search && !url.hash
|
||||
}, 'Use an HTTP(S) service URL without credentials, query or fragment'),
|
||||
name: z.string().trim().min(1).max(200)
|
||||
}).strict()
|
||||
export const sharingSettingsSchema = sharingSettingsInputSchema.extend({ deviceId: sharingIdSchema })
|
||||
export const sharingDeviceSchema = z.object({
|
||||
id: sharingIdSchema, name: z.string(), platform: z.string(), appVersion: z.string(),
|
||||
registeredAt: z.string(), updatedAt: z.string()
|
||||
})
|
||||
export const sharingPublicationDraftSchema = z.object({
|
||||
name: z.string().trim().min(1).max(200),
|
||||
kind: z.enum(['capability', 'knowledge']),
|
||||
description: z.string().trim().max(4000),
|
||||
sourceMode: z.enum(['device', 'server']),
|
||||
permissions: z.object({ search: z.boolean(), read: z.boolean(), download: z.boolean() }).strict()
|
||||
}).strict()
|
||||
export const sharingPublicationSchema = sharingPublicationDraftSchema.extend({
|
||||
id: sharingIdSchema, deviceId: sharingIdSchema,
|
||||
status: z.enum(['published', 'revoked']), createdAt: z.string(), updatedAt: z.string()
|
||||
})
|
||||
export type SharingSettings = z.infer<typeof sharingSettingsSchema>
|
||||
export type SharingSettingsInput = z.infer<typeof sharingSettingsInputSchema>
|
||||
export type SharingDevice = z.infer<typeof sharingDeviceSchema>
|
||||
export type SharingPublicationDraft = z.infer<typeof sharingPublicationDraftSchema>
|
||||
export type SharingPublication = z.infer<typeof sharingPublicationSchema>
|
||||
export type SharingCatalog = { devices: SharingDevice[]; publications: SharingPublication[] }
|
||||
export type DeviceSharingApi = {
|
||||
getSettings: () => Promise<SharingSettings>
|
||||
saveSettings: (input: SharingSettingsInput) => Promise<SharingSettings>
|
||||
registerDevice: () => Promise<SharingDevice>
|
||||
getCatalog: () => Promise<SharingCatalog>
|
||||
publish: (input: SharingPublicationDraft) => Promise<SharingPublication>
|
||||
revoke: (id: string) => Promise<SharingPublication>
|
||||
}
|
||||
@@ -1,4 +1,10 @@
|
||||
export const ipcChannels = {
|
||||
sharingSettingsGet: 'sharing:settings-get',
|
||||
sharingSettingsSave: 'sharing:settings-save',
|
||||
sharingRegister: 'sharing:register',
|
||||
sharingCatalog: 'sharing:catalog',
|
||||
sharingPublish: 'sharing:publish',
|
||||
sharingRevoke: 'sharing:revoke',
|
||||
localInferenceGet: 'local-inference:get',
|
||||
localInferenceAct: 'local-inference:act',
|
||||
localInferenceCancel: 'local-inference:cancel',
|
||||
|
||||
Reference in New Issue
Block a user